1 /*#######################################################################
2 # RDOS operating system
3 # Copyright (C) 1988-2006, Leif Ekblad
5 # This library is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU Lesser General Public License as published
7 # by the Free Software Foundation; either version 2.1 of the License, or
8 # (at your option) any later version.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 # The author of this program may be contacted at leif@rdos.net
22 # GCC startupcode for RDOS
24 ##########################################################################*/
51 /*##########################################################################
55 # Purpose....: GCC startup-code
57 ##########################################################################*/
62 call get_impure_data_size
64 UserGate allocate_app_mem_nr
74 movl $(4 * KEY_ENTRIES),%eax
76 UserGate allocate_app_mem_nr
85 movl $(4 * KEY_ENTRIES),%eax
87 UserGate allocate_app_mem_nr
88 movl %edx,_key_ref_arr
94 movl $(4 * KEY_ENTRIES),%eax
96 UserGate allocate_app_mem_nr
97 movl %edx,_key_dtor_arr
103 UserGate create_user_section_nr
104 movw %bx,_key_section
110 UserGate allocate_app_mem_nr
113 UserGate get_cmd_line_nr
178 /*##########################################################################
182 # Purpose....: GCC exit-code
184 ##########################################################################*/
192 UserGate unload_exe_nr
194 /*##########################################################################
200 ##########################################################################*/
210 /*##########################################################################
212 # Name : __rdos_thread_key_create
214 # Purpose....: Emulate GCC pthread_key_create
218 # Returns....: Key index
220 ##########################################################################*/
222 .global __rdos_thread_key_create
224 __rdos_thread_key_create:
232 UserGate enter_user_section_nr
234 movl _key_ref_arr,%ebx
235 movl KEY_ENTRIES,%ecx
250 subl _key_ref_arr,%ebx
251 addl _key_dtor_arr,%ebx
254 subl _key_dtor_arr,%ebx
258 mov _key_section, %bx
259 UserGate leave_user_section_nr
266 /*##########################################################################
268 # Name : __rdos_thread_key_delete
270 # Purpose....: Emulate GCC pthread_key_delete
274 # Returns....: result
276 ##########################################################################*/
278 .global __rdos_thread_key_delete
280 __rdos_thread_key_delete:
287 UserGate enter_user_section_nr
293 cmpl $(4 * KEY_ENTRIES),%ebx
296 addl _key_ref_arr,%ebx
302 subl _key_ref_arr,%ebx
314 mov _key_section, %bx
315 UserGate leave_user_section_nr
321 /*##########################################################################
323 # Name : __rdos_thread_getspecific
325 # Purpose....: Emulate GCC pthread_getspecific
331 ##########################################################################*/
333 .global __rdos_thread_getspecific
335 __rdos_thread_getspecific:
345 cmpl $(4 * KEY_ENTRIES),%ebx
363 /*##########################################################################
365 # Name : __rdos_thread_setspecific
367 # Purpose....: Emulate GCC pthread_setspecific
372 ##########################################################################*/
374 .global __rdos_thread_setspecific
376 __rdos_thread_setspecific:
387 cmpl $(4 * KEY_ENTRIES),%ebx