]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/services/objloader/v2_0/include/objelf.h
unified MX27, MX25, MX37 trees
[karo-tx-redboot.git] / packages / services / objloader / v2_0 / include / objelf.h
1 #ifndef __OBJELF_H__
2 #define __OBJELF_H__
3
4 /* =================================================================
5  *
6  *      objelf.h
7  *
8  * ================================================================= 
9  * ####ECOSGPLCOPYRIGHTBEGIN####
10  * -------------------------------------------
11  * This file is part of eCos, the Embedded Configurable Operating
12  * System.
13  * Copyright (C) 2005 eCosCentric Ltd.
14  * 
15  * eCos is free software; you can redistribute it and/or modify it
16  * under the terms of the GNU General Public License as published by
17  * the Free Software Foundation; either version 2 or (at your option)
18  * any later version.
19  * 
20  * eCos is distributed in the hope that it will be useful, but
21  * WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23  * General Public License for more details.
24  * 
25  * You should have received a copy of the GNU General Public License
26  * along with eCos; if not, write to the Free Software Foundation,
27  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
28  * 
29  * As a special exception, if other files instantiate templates or
30  * use macros or inline functions from this file, or you compile this
31  * file and link it with other works to produce a work based on this
32  * file, this file does not by itself cause the resulting work to be
33  * covered by the GNU General Public License. However the source code
34  * for this file must still be made available in accordance with
35  * section (3) of the GNU General Public License.
36  * 
37  * This exception does not invalidate any other reasons why a work
38  * based on this file might be covered by the GNU General Public
39  * License.
40  *
41  * -------------------------------------------
42  * ####ECOSGPLCOPYRIGHTEND####
43  * =================================================================
44  * #####DESCRIPTIONBEGIN####
45  * 
46  *  Author(s):    Anthony Tonizzo (atonizzo@gmail.com)
47  *  Contributors: nickg@ecoscentric.com
48  *  Date:         2005-05-13
49  *  Purpose:      
50  *  Description:  
51  *               
52  * ####DESCRIPTIONEND####
53  * 
54  * =================================================================
55  */
56
57 //==============================================================================
58
59 #include <pkgconf/system.h>
60 #include <pkgconf/objloader.h>
61 #include <cyg/hal/hal_tables.h>
62
63 //==============================================================================
64
65 extern char *cyg_ldr_last_error;
66
67 //==============================================================================
68
69 #define CYG_LDR_MODE_FILESYSTEM              0
70 #define CYG_LDR_MODE_FTP                     1
71 #define CYG_LDR_MODE_TFTP                    2
72 #define CYG_LDR_MODE_MEMORY                  3
73 #define CYG_LDR_MODE_HTTP                    4
74
75 //==============================================================================
76
77 typedef struct ELF_OBJECT
78 {
79     CYG_ADDRWORD  ptr;
80     cyg_uint32    mode;
81
82     size_t    (*read)(struct ELF_OBJECT*, size_t, size_t, void*);
83     cyg_int32 (*seek)(struct ELF_OBJECT*, cyg_uint32);
84     cyg_int32 (*close)(struct ELF_OBJECT*);
85
86     // This is the absolute address in memory where the library resides.
87     Elf32_Ehdr*   p_elfhdr;
88
89     // Start of the section header.
90     Elf32_Shdr*   p_sechdr;
91
92     cyg_int32     hdrndx_symtab;
93     cyg_int32     hdrndx_strtab;
94
95     cyg_uint32    **sections;
96
97 } ELF_OBJECT, *PELF_OBJECT;
98
99
100 //==============================================================================
101 // Debug functions.
102
103 #if CYGPKG_SERVICES_OBJLOADER_DEBUG_LEVEL != 0
104 #define ELFDEBUG(a) diag_printf(a)
105 #else
106 #define ELFDEBUG(a)
107 #endif
108
109 #if CYGPKG_SERVICES_OBJLOADER_DEBUG_LEVEL > 0
110 void       cyg_ldr_print_section_data(PELF_OBJECT);
111 void       cyg_ldr_print_symbol_names(PELF_OBJECT);
112 void       cyg_ldr_print_rel_names(PELF_OBJECT);
113 #endif
114
115 //==============================================================================
116 // Internal functions
117
118 cyg_uint32 *cyg_ldr_load_elf_section(PELF_OBJECT, cyg_uint32);
119 void        cyg_ldr_delete_elf_section(PELF_OBJECT, cyg_uint32);
120 cyg_uint32 *cyg_ldr_section_address(PELF_OBJECT, cyg_uint32);
121 void*       cyg_ldr_scan_file(PELF_OBJECT);
122 cyg_int32   cyg_ldr_relocate_section(PELF_OBJECT, cyg_uint32);
123 void*       cyg_ldr_find_symbol(void*, char*);
124 void*       cyg_ldr_symbol_address(PELF_OBJECT, cyg_uint32);
125 void*       cyg_ldr_external_address(PELF_OBJECT, cyg_uint32);
126
127 //==============================================================================
128 // User interface.
129
130 PELF_OBJECT cyg_ldr_open_library(CYG_ADDRWORD, cyg_int32);
131 void        cyg_ldr_close_library(void*);
132 char*       cyg_ldr_error(void);
133 void*       cyg_ldr_get_symbol(void*, char*);
134
135 //==============================================================================
136
137 void *cyg_ldr_malloc(size_t) CYGBLD_ATTRIB_WEAK;
138 void cyg_ldr_free(void *) CYGBLD_ATTRIB_WEAK;
139
140 //==============================================================================
141
142 struct cyg_ldr_table_entry
143 {
144     char   *symbol_name;
145     void   *handler;
146 } CYG_HAL_TABLE_TYPE;
147
148 typedef struct cyg_ldr_table_entry cyg_ldr_table_entry;
149
150 #define CYG_LDR_TABLE_ENTRY(__name, __symbol_name, __handler)                \
151                 cyg_ldr_table_entry __name CYG_HAL_TABLE_ENTRY(ldr_table) =  \
152                                                  { __symbol_name, __handler } 
153
154 //==============================================================================
155
156 #define CYG_LDR_TABLE_KAPI_ALARM()                                            \
157 CYG_LDR_TABLE_ENTRY(cyg_alarm_create_entry,                                   \
158                      "cyg_alarm_create", cyg_alarm_create);                   \
159 CYG_LDR_TABLE_ENTRY(cyg_alarm_delete_entry,                                   \
160                      "cyg_alarm_delete", cyg_alarm_delete);                   \
161 CYG_LDR_TABLE_ENTRY(cyg_alarm_initialize_entry,                               \
162                      "cyg_alarm_initialize", cyg_alarm_initialize);           \
163 CYG_LDR_TABLE_ENTRY(cyg_alarm_get_times_entry,                                \
164                      "cyg_alarm_get_times", cyg_alarm_get_times);             \
165 CYG_LDR_TABLE_ENTRY(cyg_alarm_enable_entry,                                   \
166                      "cyg_alarm_enable", cyg_alarm_enable);                   \
167 CYG_LDR_TABLE_ENTRY(cyg_alarm_disable_entry,                                  \
168                      "cyg_alarm_disable", cyg_alarm_disable);
169
170 #define CYG_LDR_TABLE_KAPI_CLOCK()                                            \
171 CYG_LDR_TABLE_ENTRY(cyg_clock_create_entry,                                   \
172                      "cyg_clock_create", cyg_clock_create);                   \
173 CYG_LDR_TABLE_ENTRY(cyg_clock_delete_entry,                                   \
174                      "cyg_clock_delete", cyg_clock_delete);                   \
175 CYG_LDR_TABLE_ENTRY(cyg_clock_to_counter_entry,                               \
176                      "cyg_clock_to_counter", cyg_clock_to_counter);           \
177 CYG_LDR_TABLE_ENTRY(cyg_clock_set_resolution_entry,                           \
178                      "cyg_clock_set_resolution", cyg_clock_set_resolution);   \
179 CYG_LDR_TABLE_ENTRY(cyg_clock_get_resolution_entry,                           \
180                      "cyg_clock_get_resolution",cyg_clock_get_resolution);    \
181 CYG_LDR_TABLE_ENTRY(cyg_real_time_clock_entry,                                \
182                      "cyg_real_time_clock", cyg_real_time_clock);             \
183 CYG_LDR_TABLE_ENTRY(cyg_current_time_entry,                                   \
184                      "cyg_current_time", cyg_current_time);
185
186 #define CYG_LDR_TABLE_KAPI_COND()                                             \
187 CYG_LDR_TABLE_ENTRY(cyg_cond_init_entry,                                      \
188                      "cyg_cond_init", cyg_cond_init);                         \
189 CYG_LDR_TABLE_ENTRY(cyg_cond_destroy_entry,                                   \
190                      "cyg_cond_destroy", cyg_cond_destroy);                   \
191 CYG_LDR_TABLE_ENTRY(cyg_cond_wait_entry,                                      \
192                      "cyg_cond_wait", cyg_cond_wait);                         \
193 CYG_LDR_TABLE_ENTRY(cyg_cond_signal_entry,                                    \
194                      "cyg_cond_signal", cyg_cond_signal);                     \
195 CYG_LDR_TABLE_ENTRY(cyg_cond_broadcast_entry,                                 \
196                      "cyg_cond_broadcast", cyg_cond_broadcast);               \
197 CYG_LDR_TABLE_ENTRY(cyg_cond_timed_wait_entry,                                \
198                      "cyg_cond_timed_wait", cyg_cond_timed_wait);
199
200 #define CYG_LDR_TABLE_KAPI_COUNTER()                                          \
201 CYG_LDR_TABLE_ENTRY(cyg_counter_create_entry,                                 \
202                      "cyg_counter_create", cyg_counter_create);               \
203 CYG_LDR_TABLE_ENTRY(cyg_counter_delete_entry,                                 \
204                      "cyg_counter_delete", cyg_counter_delete);               \
205 CYG_LDR_TABLE_ENTRY(cyg_counter_current_value_entry,                          \
206                      "cyg_counter_current_value", cyg_counter_current_value); \
207 CYG_LDR_TABLE_ENTRY(cyg_counter_set_value_entry,                              \
208                      "cyg_counter_set_value", cyg_counter_set_value);         \
209 CYG_LDR_TABLE_ENTRY(cyg_counter_tick_entry,                                   \
210                      "cyg_counter_tick", cyg_counter_tick);                   \
211 CYG_LDR_TABLE_ENTRY(cyg_counter_multi_tick_entry,                             \
212                      "cyg_counter_multi_tick", cyg_counter_multi_tick);
213
214 #define CYG_LDR_TABLE_KAPI_EXCEPTIONS()                                       \
215 CYG_LDR_TABLE_ENTRY(cyg_exception_set_handler_entry,                          \
216                      "cyg_exception_set_handler", cyg_exception_set_handler); \
217 CYG_LDR_TABLE_ENTRY(cyg_exception_clear_handler_entry,                        \
218                      "cyg_exception_clear_handler",                           \
219                      cyg_exception_clear_handler);                            \
220 CYG_LDR_TABLE_ENTRY(cyg_exception_call_handler_entry,                         \
221                      "cyg_exception_call_handler",                            \
222                      cyg_exception_call_handler);
223
224 #define CYG_LDR_TABLE_KAPI_FLAG()                                             \
225 CYG_LDR_TABLE_ENTRY(cyg_flag_init_entry,                                      \
226                      "cyg_flag_init", cyg_flag_init);                         \
227 CYG_LDR_TABLE_ENTRY(cyg_flag_destroy_entry,                                   \
228                      "cyg_flag_destroy", cyg_flag_destroy);                   \
229 CYG_LDR_TABLE_ENTRY(cyg_flag_setbits_entry,                                   \
230                      "cyg_flag_setbits", cyg_flag_setbits);                   \
231 CYG_LDR_TABLE_ENTRY(cyg_flag_maskbits_entry,                                  \
232                      "cyg_flag_maskbits", cyg_flag_maskbits);                 \
233 CYG_LDR_TABLE_ENTRY(cyg_flag_wait_entry,                                      \
234                      "cyg_flag_wait", cyg_flag_wait);                         \
235 CYG_LDR_TABLE_ENTRY(cyg_flag_timed_wait_entry,                                \
236                      "cyg_flag_timed_wait", cyg_flag_timed_wait);             \
237 CYG_LDR_TABLE_ENTRY(cyg_flag_poll_entry,                                      \
238                      "cyg_flag_poll", cyg_flag_poll);                         \
239 CYG_LDR_TABLE_ENTRY(cyg_flag_peek_entry,                                      \
240                      "cyg_flag_peek", cyg_flag_peek);                         \
241 CYG_LDR_TABLE_ENTRY(cyg_flag_waiting_entry,                                   \
242                      "cyg_flag_waiting", cyg_flag_waiting);                   
243
244 #define CYG_LDR_TABLE_KAPI_INTERRUPTS()                                       \
245 CYG_LDR_TABLE_ENTRY(cyg_interrupt_create_entry,                               \
246                      "cyg_interrupt_create", cyg_interrupt_create);           \
247 CYG_LDR_TABLE_ENTRY(cyg_interrupt_delete_entry,                               \
248                      "cyg_interrupt_delete", cyg_interrupt_delete);           \
249 CYG_LDR_TABLE_ENTRY(cyg_interrupt_attach_entry,                               \
250                      "cyg_interrupt_attach", cyg_interrupt_attach);           \
251 CYG_LDR_TABLE_ENTRY(cyg_interrupt_detach_entry,                               \
252                      "cyg_interrupt_detach", cyg_interrupt_detach);           \
253 CYG_LDR_TABLE_ENTRY(cyg_interrupt_get_vsr_entry,                              \
254                      "cyg_interrupt_get_vsr", cyg_interrupt_get_vsr);         \
255 CYG_LDR_TABLE_ENTRY(cyg_interrupt_set_vsr_entry,                              \
256                      "cyg_interrupt_set_vsr", cyg_interrupt_set_vsr);         \
257 CYG_LDR_TABLE_ENTRY(cyg_interrupt_disable_entry,                              \
258                      "cyg_interrupt_disable", cyg_interrupt_disable);         \
259 CYG_LDR_TABLE_ENTRY(cyg_interrupt_enable_entry,                               \
260                      "cyg_interrupt_enable", cyg_interrupt_enable);           \
261 CYG_LDR_TABLE_ENTRY(cyg_interrupt_mask_entry,                                 \
262                      "cyg_interrupt_mask", cyg_interrupt_mask);               \
263 CYG_LDR_TABLE_ENTRY(cyg_interrupt_mask_intunsafe_entry,                       \
264                      "cyg_interrupt_mask_intunsafe",                          \
265                      cyg_interrupt_mask_intunsafe);                           \
266 CYG_LDR_TABLE_ENTRY(cyg_interrupt_unmask_entry,                               \
267                      "cyg_interrupt_unmask", cyg_interrupt_unmask);           \
268 CYG_LDR_TABLE_ENTRY(cyg_interrupt_unmask_intunsafe_entry,                     \
269                      "cyg_interrupt_unmask_intunsafe",                        \
270                      cyg_interrupt_unmask_intunsafe);                         \
271 CYG_LDR_TABLE_ENTRY(cyg_interrupt_acknowledge_entry,                          \
272                      "cyg_interrupt_acknowledge",                             \
273                      cyg_interrupt_acknowledge);                              \
274 CYG_LDR_TABLE_ENTRY(cyg_interrupt_configure_entry,                            \
275                      "cyg_interrupt_configure", cyg_interrupt_configure);     \
276 CYG_LDR_TABLE_ENTRY(cyg_interrupt_set_cpu_entry,                              \
277                      "cyg_interrupt_set_cpu", cyg_interrupt_set_cpu);         \
278 CYG_LDR_TABLE_ENTRY(cyg_interrupt_get_cpu_entry,                              \
279                      "cyg_interrupt_get_cpu", cyg_interrupt_get_cpu);
280
281 #define CYG_LDR_TABLE_KAPI_MBOX()                                             \
282 CYG_LDR_TABLE_ENTRY(cyg_mbox_create_entry,                                    \
283                      "cyg_mbox_create", cyg_mbox_create);                     \
284 CYG_LDR_TABLE_ENTRY(cyg_mbox_delete_entry,                                    \
285                      "cyg_mbox_delete", cyg_mbox_delete);                     \
286 CYG_LDR_TABLE_ENTRY(cyg_mbox_get_entry,                                       \
287                      "cyg_mbox_get", cyg_mbox_get);                           \
288 CYG_LDR_TABLE_ENTRY(cyg_mbox_timed_get_entry,                                 \
289                      "cyg_mbox_timed_get", cyg_mbox_timed_get);               \
290 CYG_LDR_TABLE_ENTRY(cyg_mbox_tryget_entry,                                    \
291                      "cyg_mbox_tryget", cyg_mbox_tryget);                     \
292 CYG_LDR_TABLE_ENTRY(cyg_mbox_peek_item_entry,                                 \
293                      "cyg_mbox_peek_item", cyg_mbox_peek_item);               \
294 CYG_LDR_TABLE_ENTRY(cyg_mbox_put_entry,                                       \
295                      "cyg_mbox_put", cyg_mbox_put);                           \
296 CYG_LDR_TABLE_ENTRY(cyg_mbox_timed_put_entry,                                 \
297                      "cyg_mbox_timed_put", cyg_mbox_timed_put);               \
298 CYG_LDR_TABLE_ENTRY(cyg_mbox_tryput_entry,                                    \
299                      "cyg_mbox_tryput", cyg_mbox_tryput);                     \
300 CYG_LDR_TABLE_ENTRY(cyg_mbox_peek_entry,                                      \
301                      "cyg_mbox_peek", cyg_mbox_peek);                         \
302 CYG_LDR_TABLE_ENTRY(cyg_mbox_waiting_to_get_entry,                            \
303                      "cyg_mbox_waiting_to_get",                               \
304                      cyg_mbox_waiting_to_get);                                \
305 CYG_LDR_TABLE_ENTRY(cyg_mbox_waiting_to_put_entry,                            \
306                      "cyg_mbox_waiting_to_put",                               \
307                      cyg_mbox_waiting_to_put);
308
309 #define CYG_LDR_TABLE_KAPI_MEMPOOL_FIX()                                      \
310 CYG_LDR_TABLE_ENTRY(cyg_mempool_fix_create_entry,                             \
311                      "cyg_mempool_fix_create", cyg_mempool_fix_create);       \
312 CYG_LDR_TABLE_ENTRY(cyg_mempool_fix_delete_entry,                             \
313                      "cyg_mempool_fix_delete", cyg_mempool_fix_delete);       \
314 CYG_LDR_TABLE_ENTRY(cyg_mempool_fix_alloc_entry,                              \
315                      "cyg_mempool_fix_alloc", cyg_mempool_fix_alloc);         \
316 CYG_LDR_TABLE_ENTRY(cyg_mempool_fix_timed_alloc_entry,                        \
317                      "cyg_mempool_fix_timed_alloc",                           \
318                      cyg_mempool_fix_timed_alloc);                            \
319 CYG_LDR_TABLE_ENTRY(cyg_mempool_fix_try_alloc_entry,                          \
320                      "cyg_mempool_fix_try_alloc",                             \
321                      cyg_mempool_fix_try_alloc);                              \
322 CYG_LDR_TABLE_ENTRY(cyg_mempool_fix_free_entry,                               \
323                      "cyg_mempool_fix_free", cyg_mempool_fix_free);           \
324 CYG_LDR_TABLE_ENTRY(cyg_mempool_fix_waiting_entry,                            \
325                      "cyg_mempool_fix_waiting", cyg_mempool_fix_waiting);     \
326 CYG_LDR_TABLE_ENTRY(cyg_mempool_fix_get_info_entry,                           \
327                      "cyg_mempool_fix_get_info", cyg_mempool_fix_get_info);
328
329 #define CYG_LDR_TABLE_KAPI_MEMPOOL_VAR()                                      \
330 CYG_LDR_TABLE_ENTRY(cyg_mempool_var_create_entry,                             \
331                      "cyg_mempool_var_create", cyg_mempool_var_create);       \
332 CYG_LDR_TABLE_ENTRY(cyg_mempool_var_delete_entry,                             \
333                      "cyg_mempool_var_delete", cyg_mempool_var_delete);       \
334 CYG_LDR_TABLE_ENTRY(cyg_mempool_var_alloc_entry,                              \
335                      "cyg_mempool_var_alloc", cyg_mempool_var_alloc);         \
336 CYG_LDR_TABLE_ENTRY(cyg_mempool_var_timed_alloc_entry,                        \
337                      "cyg_mempool_var_timed_alloc",                           \
338                      cyg_mempool_var_timed_alloc);                            \
339 CYG_LDR_TABLE_ENTRY(cyg_mempool_var_try_alloc_entry,                          \
340                      "cyg_mempool_var_try_alloc",                             \
341                      cyg_mempool_var_try_alloc);                              \
342 CYG_LDR_TABLE_ENTRY(cyg_mempool_var_free_entry,                               \
343                      "cyg_mempool_var_free", cyg_mempool_var_free);           \
344 CYG_LDR_TABLE_ENTRY(cyg_mempool_var_waiting_entry,                            \
345                      "cyg_mempool_var_waiting", cyg_mempool_var_waiting);     \
346 CYG_LDR_TABLE_ENTRY(cyg_mempool_var_get_info_entry,                           \
347                      "cyg_mempool_var_get_info", cyg_mempool_var_get_info);
348
349 #define CYG_LDR_TABLE_KAPI_MUTEX()                                            \
350 CYG_LDR_TABLE_ENTRY(cyg_mutex_init_entry,                                     \
351                      "cyg_mutex_init", cyg_mutex_init);                       \
352 CYG_LDR_TABLE_ENTRY(cyg_mutex_destroy_entry,                                  \
353                      "cyg_mutex_destroy", cyg_mutex_destroy);                 \
354 CYG_LDR_TABLE_ENTRY(cyg_mutex_trylock_entry,                                  \
355                      "cyg_mutex_trylock", cyg_mutex_trylock);                 \
356 CYG_LDR_TABLE_ENTRY(cyg_mutex_unlock_entry,                                   \
357                      "cyg_mutex_unlock", cyg_mutex_unlock);                   \
358 CYG_LDR_TABLE_ENTRY(cyg_mutex_release_entry,                                  \
359                      "cyg_mutex_release", cyg_mutex_release);                 \
360 CYG_LDR_TABLE_ENTRY(cyg_mutex_set_ceiling_entry,                              \
361                      "cyg_mutex_set_ceiling", cyg_mutex_set_ceiling);         \
362 CYG_LDR_TABLE_ENTRY(cyg_mutex_set_protocol_entry,                             \
363                      "cyg_mutex_set_protocol", cyg_mutex_set_protocol);
364
365 #define CYG_LDR_TABLE_KAPI_SCHEDULER()                                        \
366 CYG_LDR_TABLE_ENTRY(cyg_scheduler_start_entry,                                \
367                      "cyg_scheduler_start", cyg_scheduler_start);             \
368 CYG_LDR_TABLE_ENTRY(cyg_scheduler_lock_entry,                                 \
369                      "cyg_scheduler_lock", cyg_scheduler_lock);               \
370 CYG_LDR_TABLE_ENTRY(cyg_scheduler_safe_lock_entry,                            \
371                      "cyg_scheduler_safe_lock", cyg_scheduler_safe_lock);     \
372 CYG_LDR_TABLE_ENTRY(cyg_scheduler_unlock_entry,                               \
373                      "cyg_scheduler_unlock", cyg_scheduler_unlock);           \
374 CYG_LDR_TABLE_ENTRY(cyg_scheduler_read_lock_entry,                            \
375                      "cyg_scheduler_read_lock", cyg_scheduler_read_lock);     \
376
377 #define CYG_LDR_TABLE_KAPI_SEMAPHORE()                                        \
378 CYG_LDR_TABLE_ENTRY(cyg_semaphore_init_entry,                                 \
379                      "cyg_semaphore_init", cyg_semaphore_init);               \
380 CYG_LDR_TABLE_ENTRY(cyg_semaphore_destroy_entry,                              \
381                      "cyg_semaphore_destroy", cyg_semaphore_destroy);         \
382 CYG_LDR_TABLE_ENTRY(cyg_semaphore_wait_entry,                                 \
383                      "cyg_semaphore_wait", cyg_semaphore_wait);               \
384 CYG_LDR_TABLE_ENTRY(cyg_semaphore_timed_wait_entry,                           \
385                      "cyg_semaphore_timed_wait", cyg_semaphore_timed_wait);   \
386 CYG_LDR_TABLE_ENTRY(cyg_semaphore_try_wait_entry,                             \
387                      "cyg_semaphore_trywait", cyg_semaphore_trywait);         \
388 CYG_LDR_TABLE_ENTRY(cyg_semaphore_post_entry,                                 \
389                      "cyg_semaphore_post", cyg_semaphore_post);               \
390 CYG_LDR_TABLE_ENTRY(cyg_semaphore_peek_entry,                                 \
391                      "cyg_semaphore_peek", cyg_semaphore_peek);
392
393 #define CYG_LDR_TABLE_KAPI_THREAD()                                           \
394 CYG_LDR_TABLE_ENTRY(cyg_thread_create_entry,                                  \
395                      "cyg_thread_create", cyg_thread_create);                 \
396 CYG_LDR_TABLE_ENTRY(cyg_thread_exit_entry,                                    \
397                      "cyg_thread_exit", cyg_thread_exit);                     \
398 CYG_LDR_TABLE_ENTRY(cyg_thread_delete_entry,                                  \
399                      "cyg_thread_delete", cyg_thread_delete);                 \
400 CYG_LDR_TABLE_ENTRY(cyg_thread_suspend_entry,                                 \
401                      "cyg_thread_suspend", cyg_thread_suspend);               \
402 CYG_LDR_TABLE_ENTRY(cyg_thread_resume_entry,                                  \
403                      "cyg_thread_resume", cyg_thread_resume);                 \
404 CYG_LDR_TABLE_ENTRY(cyg_thread_kill_entry,                                    \
405                      "cyg_thread_kill", cyg_thread_kill);                     \
406 CYG_LDR_TABLE_ENTRY(cyg_thread_release_entry,                                 \
407                      "cyg_thread_release", cyg_thread_release);               \
408 CYG_LDR_TABLE_ENTRY(cyg_thread_yield_entry,                                   \
409                      "cyg_thread_yield", cyg_thread_yield);                   \
410 CYG_LDR_TABLE_ENTRY(cyg_thread_self_entry,                                    \
411                      "cyg_thread_self", cyg_thread_self);                     \
412 CYG_LDR_TABLE_ENTRY(cyg_thread_idle_thread_entry,                             \
413                      "cyg_thread_idle_thread", cyg_thread_idle_thread);       \
414 CYG_LDR_TABLE_ENTRY(cyg_thread_set_priority_entry,                            \
415                      "cyg_thread_set_priority", cyg_thread_set_priority);     \
416 CYG_LDR_TABLE_ENTRY(cyg_thread_get_priority_entry,                            \
417                      "cyg_thread_get_priority", cyg_thread_get_priority);     \
418 CYG_LDR_TABLE_ENTRY(cyg_thread_get_current_priority_entry,                    \
419                      "cyg_thread_get_current_priority",                       \
420                      cyg_thread_get_current_priority);                        \
421 CYG_LDR_TABLE_ENTRY(cyg_thread_delay_entry,                                   \
422                      "cyg_thread_delay", cyg_thread_delay);                   \
423 CYG_LDR_TABLE_ENTRY(cyg_thread_get_stack_base_entry,                          \
424                      "cyg_thread_get_stack_base", cyg_thread_get_stack_base); \
425 CYG_LDR_TABLE_ENTRY(cyg_thread_get_stack_size_entry,                          \
426                      "cyg_thread_get_stack_size", cyg_thread_get_stack_size); \
427 CYG_LDR_TABLE_ENTRY(cyg_thread_new_data_index_entry,                          \
428                      "cyg_thread_new_data_index", cyg_thread_new_data_index); \
429 CYG_LDR_TABLE_ENTRY(cyg_thread_free_data_index_entry,                         \
430                      "cyg_thread_free_data_index",                            \
431                      cyg_thread_free_data_index);                             \
432 CYG_LDR_TABLE_ENTRY(cyg_thread_get_data_entry,                                \
433                      "cyg_thread_get_data", cyg_thread_get_data);             \
434 CYG_LDR_TABLE_ENTRY(cyg_thread_get_data_ptr_entry,                            \
435                      "cyg_thread_get_data_ptr", cyg_thread_get_data_ptr);     \
436 CYG_LDR_TABLE_ENTRY(cyg_thread_set_data_entry,                                \
437                      "cyg_thread_set_data", cyg_thread_set_data);             
438
439 #define CYG_LDR_TABLE_STRING()                                               \
440 CYG_LDR_TABLE_ENTRY(memchr_entry,  "memchr",  memchr);                       \
441 CYG_LDR_TABLE_ENTRY(memcmp_entry,  "memcmp",  memcmp);                       \
442 CYG_LDR_TABLE_ENTRY(memcpy_entry,  "memcpy",  memcpy);                       \
443 CYG_LDR_TABLE_ENTRY(memmove_entry, "memmove", memmove);                      \
444 CYG_LDR_TABLE_ENTRY(memset_entry,  "memset",  memset);                       \
445 CYG_LDR_TABLE_ENTRY(strcpy_entry,  "strcpy",  strcpy);                       \
446 CYG_LDR_TABLE_ENTRY(strncpy_entry, "strncpy", strncpy);                      \
447 CYG_LDR_TABLE_ENTRY(strcat_entry,  "strcat",  strcat);                       \
448 CYG_LDR_TABLE_ENTRY(strncat_entry, "strncat", strncat);                      \
449 CYG_LDR_TABLE_ENTRY(strchr_entry,  "strchr",  strchr);                       \
450 CYG_LDR_TABLE_ENTRY(strrchr_entry, "strrchr", strrchr);                      \
451 CYG_LDR_TABLE_ENTRY(strcoll_entry, "strcoll", strcoll);                      \
452 CYG_LDR_TABLE_ENTRY(strlen_entry,  "strlen",  strlen);                       \
453 CYG_LDR_TABLE_ENTRY(strcmp_entry,  "strcmp",  strcmp);                       \
454 CYG_LDR_TABLE_ENTRY(strncmp_entry, "strncmp", strncmp);                      \
455 CYG_LDR_TABLE_ENTRY(strcspn_entry, "strcspn", strcspn);                      \
456 CYG_LDR_TABLE_ENTRY(strerror_entry, "strerror", strerror);                   \
457 CYG_LDR_TABLE_ENTRY(strpbrk_entry, "strpbrk", strpbrk);                      \
458 CYG_LDR_TABLE_ENTRY(strspn_entry,  "strspn",  strspn);                       \
459 CYG_LDR_TABLE_ENTRY(strstr_entry,  "strstr",  strstr);                       \
460 CYG_LDR_TABLE_ENTRY(strtok_entry,  "strtok",  strtok);                       \
461 CYG_LDR_TABLE_ENTRY(strxfrm_entry, "strxfrm", strxfrm); 
462
463 #define CYG_LDR_TABLE_STDIO()                                                \
464 CYG_LDR_TABLE_ENTRY(clearerr_entry,  "clearerr",  clearerr);                 \
465 CYG_LDR_TABLE_ENTRY(fclose_entry,  "fclose",  fclose);                       \
466 CYG_LDR_TABLE_ENTRY(feof_entry,    "feof",    feof);                         \
467 CYG_LDR_TABLE_ENTRY(ferror_entry,  "ferror",  ferror);                       \
468 CYG_LDR_TABLE_ENTRY(fflush_entry,  "fflush",  fflush);                       \
469 CYG_LDR_TABLE_ENTRY(fgetc_entry,   "fgetc",   fgetc);                        \
470 CYG_LDR_TABLE_ENTRY(fgetpos_entry, "fgetpos", fgetpos);                      \
471 CYG_LDR_TABLE_ENTRY(fgets_entry,   "fgets",   fgets);                        \
472 CYG_LDR_TABLE_ENTRY(fopen_entry,   "fopen",   fopen);                        \
473 CYG_LDR_TABLE_ENTRY(fprintf_entry, "fprintf", fprintf);                      \
474 CYG_LDR_TABLE_ENTRY(fputc_entry,   "fputc",   fputc);                        \
475 CYG_LDR_TABLE_ENTRY(fputs_entry,   "fputs",   fputs);                        \
476 CYG_LDR_TABLE_ENTRY(fread_entry,   "fread",   fread);                        \
477 CYG_LDR_TABLE_ENTRY(freopen_entry, "freopen", freopen);                      \
478 CYG_LDR_TABLE_ENTRY(fscanf_entry,  "fscanf",  fscanf);                       \
479 CYG_LDR_TABLE_ENTRY(fseek_entry,   "fseek",   fseek);                        \
480 CYG_LDR_TABLE_ENTRY(fsetpos_entry, "fsetpos", fsetpos);                      \
481 CYG_LDR_TABLE_ENTRY(ftell_entry,   "ftell",   ftell);                        \
482 CYG_LDR_TABLE_ENTRY(fwrite_entry,  "fwrite",  fwrite);                       \
483 CYG_LDR_TABLE_ENTRY(perror_entry,  "perror",  perror);                       \
484 CYG_LDR_TABLE_ENTRY(printf_entry,  "printf",  printf);                       \
485 CYG_LDR_TABLE_ENTRY(putc_entry,    "putc",    putc);                         \
486 CYG_LDR_TABLE_ENTRY(putchar_entry, "putchar", putchar);                      \
487 CYG_LDR_TABLE_ENTRY(puts_entry,    "puts",    puts);                         \
488 CYG_LDR_TABLE_ENTRY(remove_entry,  "remove",  remove);                       \
489 CYG_LDR_TABLE_ENTRY(rename_entry,  "rename",  rename);                       \
490 CYG_LDR_TABLE_ENTRY(rewind_entry,  "rewind",  rewind);                       \
491 CYG_LDR_TABLE_ENTRY(scanf_entry,   "scanf",   scanf);                        \
492 CYG_LDR_TABLE_ENTRY(setbuf_entry,  "setbuf",  setbuf);                       \
493 CYG_LDR_TABLE_ENTRY(setvbuf_entry, "setvbuf", setvbuf);                      \
494 CYG_LDR_TABLE_ENTRY(sprintf_entry, "sprintf", sprintf);                      \
495 CYG_LDR_TABLE_ENTRY(sscanf_entry,  "sscanf",  sscanf);                       \
496 CYG_LDR_TABLE_ENTRY(tmpfile_entry, "tmpfile", tmpfile);                      \
497 CYG_LDR_TABLE_ENTRY(tmpnam_entry,  "tmpnam",  tmpnam);                       \
498 CYG_LDR_TABLE_ENTRY(ungetc_entry,  "ungetc",  ungetc);
499
500 #define CYG_LDR_TABLE_INFRA_DIAG()                                            \
501 CYG_LDR_TABLE_ENTRY(diag_init_entry, "diag_init", diag_init);                 \
502 CYG_LDR_TABLE_ENTRY(diag_write_char_entry,                                    \
503                      "diag_write_char", diag_write_char);                     \
504 CYG_LDR_TABLE_ENTRY(diag_write_string_entry,                                  \
505                      "diag_write_string", diag_write_string);                 \
506 CYG_LDR_TABLE_ENTRY(diag_write_dec_entry,                                     \
507                      "diag_write_dec", diag_write_dec);                       \
508 CYG_LDR_TABLE_ENTRY(diag_write_hex_entry,                                     \
509                      "diag_write_hex", diag_write_hex);                       \
510 CYG_LDR_TABLE_ENTRY(diag_dump_buf_entry,                                      \
511                      "diag_dump_buf", diag_dump_buf);                         \
512 CYG_LDR_TABLE_ENTRY(diag_dump_buf_32bit_entry,                                \
513                      "diag_dump_buf_32bit", diag_dump_buf_32bit);             \
514 CYG_LDR_TABLE_ENTRY(diag_dump_buf_16bit_entry,                                \
515                      "diag_dump_buf_16bit", diag_dump_buf_16bit);             \
516 CYG_LDR_TABLE_ENTRY(diag_vdump_buf_with_offset_entry,                         \
517                      "diag_vdump_buf_with_offset",                            \
518                      diag_vdump_buf_with_offset);                             \
519 CYG_LDR_TABLE_ENTRY(diag_dump_buf_with_offset_entry,                          \
520                      "diag_dump_buf_with_offset",                             \
521                      diag_dump_buf_with_offset);                              \
522 CYG_LDR_TABLE_ENTRY(diag_dump_buf_with_offset_32bit_entry,                    \
523                      "diag_dump_buf_with_offset_32bit",                       \
524                      diag_dump_buf_with_offset_32bit);                        \
525 CYG_LDR_TABLE_ENTRY(diag_dump_buf_with_offset_16bit_entry,                    \
526                      "diag_dump_buf_with_offset_16bit",                       \
527                      diag_dump_buf_with_offset_16bit);                        \
528 CYG_LDR_TABLE_ENTRY(diag_printf_entry, "diag_printf", diag_printf);           \
529 CYG_LDR_TABLE_ENTRY(diag_init_putc_entry, "diag_init_putc", diag_init_putc);  \
530 CYG_LDR_TABLE_ENTRY(diag_sprintf_entry, "diag_sprintf", diag_sprintf);        \
531 CYG_LDR_TABLE_ENTRY(diag_snprintf_entry, "diag_snprintf", diag_snprintf);     \
532 CYG_LDR_TABLE_ENTRY(diag_vsprintf_entry, "diag_vsprintf", diag_vsprintf);     \
533 CYG_LDR_TABLE_ENTRY(diag_vprintf_entry, "diag_vprintf", diag_vprintf);
534
535 //==============================================================================
536 #endif