diff options
Diffstat (limited to 'newlib/libc/sys/rdos/crt0.S')
-rw-r--r-- | newlib/libc/sys/rdos/crt0.S | 406 |
1 files changed, 0 insertions, 406 deletions
diff --git a/newlib/libc/sys/rdos/crt0.S b/newlib/libc/sys/rdos/crt0.S deleted file mode 100644 index efc3b1633..000000000 --- a/newlib/libc/sys/rdos/crt0.S +++ /dev/null @@ -1,406 +0,0 @@ -/*####################################################################### -# RDOS operating system -# Copyright (C) 1988-2006, Leif Ekblad -# -# This library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# The author of this program may be contacted at leif@rdos.net -# -# crt0.S -# GCC startupcode for RDOS -# -##########################################################################*/ - -#include "user.def" - - KEY_ENTRIES = 256 - - .macro UserGate nr - .byte 0x9A - .long \nr - .word 2 - .endm - - .data - .align 8 - -_key_section: - .word 0 - -_key_ref_arr: - .long 0 - -_key_dtor_arr: - .long 0 - - .text - .align 4 - -/*########################################################################## -# -# Name : _start -# -# Purpose....: GCC startup-code -# -##########################################################################*/ - - .global _start - -_start: - call get_impure_data_size - movl %eax,%ecx - UserGate allocate_app_mem_nr - - xorl %eax,%eax - .byte 0x64 - movl %edx,(%eax) - movl %edx,%edi - rep - stosb - pushl %edx - - movl $(4 * KEY_ENTRIES),%eax - movl %eax,%ecx - UserGate allocate_app_mem_nr - movl $4,%eax - .byte 0x64 - movl %edx,(%eax) - movl %edx,%edi - xorl %eax,%eax - rep - stosb - - movl $(4 * KEY_ENTRIES),%eax - movl %eax,%ecx - UserGate allocate_app_mem_nr - movl %edx,_key_ref_arr - movl %edx,%edi - xorl %eax,%eax - rep - stosb - - movl $(4 * KEY_ENTRIES),%eax - movl %eax,%ecx - UserGate allocate_app_mem_nr - movl %edx,_key_dtor_arr - movl %edx,%edi - xorl %eax,%eax - rep - stosb - - UserGate create_user_section_nr - movw %bx,_key_section - - call __init_rdos - add $4, %esp - - movl $0x1000,%eax - UserGate allocate_app_mem_nr - - pushl %edx - UserGate get_cmd_line_nr - - xorl %ecx,%ecx - xorb %ah,%ah - -arg_loop: - movl %edi,(%edx) - addl $4,%edx - movb (%edi),%al - orb %al,%al - je arg_done - -arg_scan: - movb (%edi),%al - orb %al,%al - je next_arg - - cmpb $0x22,%al - jne arg_no_quote - - xorb $1,%ah - jmp arg_scan_next - -arg_no_quote: - orb %ah,%ah - jnz arg_scan_next - - cmpb $0x20,%al - je next_arg - - cmpb $0x8,%al - je next_arg - -arg_scan_next: - incl %edi - jmp arg_scan - -next_arg: - incl %ecx - -to_next_arg: - orb %al,%al - je arg_done - - xorb %al,%al - movb %al,(%edi) - incl %edi - movb (%edi),%al - cmpb $0x20,%al - je to_next_arg - - cmpb $0x8,%al - je to_next_arg - - jmp arg_loop - -arg_done: - int $3 - pushl %ecx - call main - add $8, %esp - - pushl %eax - call exit - -/*########################################################################## -# -# Name : _exit -# -# Purpose....: GCC exit-code -# -##########################################################################*/ - - .global _exit - -_exit: - pushl %ebp - movl %esp,%ebp - movl 8(%ebp),%eax - UserGate unload_exe_nr - -/*########################################################################## -# -# Name : __getreent -# -# Purpose....: ? -# -##########################################################################*/ - - .global __getreent - -__getreent: - xorl %eax,%eax - .byte 0x64 - movl (%eax),%eax - ret - -/*########################################################################## -# -# Name : __rdos_thread_key_create -# -# Purpose....: Emulate GCC pthread_key_create -# -# Parameters.: dtor -# -# Returns....: Key index -# -##########################################################################*/ - - .global __rdos_thread_key_create - -__rdos_thread_key_create: - int $3 - pushl %ebp - movl %esp,%ebp - pushl %ebx - pushl %ecx - - mov _key_section,%bx - UserGate enter_user_section_nr - - movl _key_ref_arr,%ebx - movl KEY_ENTRIES,%ecx - -rtkc_scan_loop: - movl (%ebx), %eax - orl %eax, %eax - jz rtkc_entry_found - - add $4, %ebx - loop rtkc_scan_loop - - movl $-1, %eax - jmp rtkc_leave - -rtkc_entry_found: - movb $255,3(%ebx) - subl _key_ref_arr,%ebx - addl _key_dtor_arr,%ebx - movl 8(%ebp),%eax - movl %eax,(%ebx) - subl _key_dtor_arr,%ebx - movl %ebx,%eax - -rtkc_leave: - mov _key_section, %bx - UserGate leave_user_section_nr - - popl %ecx - popl %ebx - leave - ret - -/*########################################################################## -# -# Name : __rdos_thread_key_delete -# -# Purpose....: Emulate GCC pthread_key_delete -# -# Parameters.: index -# -# Returns....: result -# -##########################################################################*/ - - .global __rdos_thread_key_delete - -__rdos_thread_key_delete: - int $3 - pushl %ebp - movl %esp,%ebp - pushl %ebx - - mov _key_section,%bx - UserGate enter_user_section_nr - - movl 8(%ebp),%ebx - testb $3,%bl - jnz rtkd_fail - - cmpl $(4 * KEY_ENTRIES),%ebx - jae rtkd_fail - - addl _key_ref_arr,%ebx - movb $0,3(%ebx) - mov (%ebx),%eax - orl %eax,%eax - jz rtkd_ok - - subl _key_ref_arr,%ebx - movl $0,(%ebx) - jmp rtkd_ok - -rtkd_fail: - movl $1,%eax - jmp rtkd_leave - -rtkd_ok: - xorl %eax,%eax - -rtkd_leave: - mov _key_section, %bx - UserGate leave_user_section_nr - - popl %ebx - leave - ret - -/*########################################################################## -# -# Name : __rdos_thread_getspecific -# -# Purpose....: Emulate GCC pthread_getspecific -# -# Parameters.: index -# -# Returns....: value -# -##########################################################################*/ - - .global __rdos_thread_getspecific - -__rdos_thread_getspecific: - int $3 - pushl %ebp - movl %esp,%ebp - pushl %ebx - - movl 8(%ebp),%ebx - testb $3,%bl - jnz rtg_fail - - cmpl $(4 * KEY_ENTRIES),%ebx - jae rtg_fail - - movl $4,%eax - .byte 0x64 - movl (%eax),%eax - addl %eax,%ebx - movl (%ebx),%eax - jmp rtg_done - -rtg_fail: - xorl %eax,%eax - -rtg_done: - popl %ebx - leave - ret - -/*########################################################################## -# -# Name : __rdos_thread_setspecific -# -# Purpose....: Emulate GCC pthread_setspecific -# -# Parameters.: index -# value -# -##########################################################################*/ - - .global __rdos_thread_setspecific - -__rdos_thread_setspecific: - int $3 - pushl %ebp - movl %esp,%ebp - pushl %ebx - pushl %ecx - - movl 8(%ebp),%ebx - testb $3,%bl - jnz rts_fail - - cmpl $(4 * KEY_ENTRIES),%ebx - jae rts_fail - - movl $4,%eax - .byte 0x64 - movl (%eax),%eax - addl %eax,%ebx - - movl 12(%ebp),%eax - movl %eax,(%ebx) - xorl %eax,%eax - jmp rts_done - -rts_fail: - movl $1,%eax - -rts_done: - popl %ebx - leave - ret |