diff --git a/.gitattributes b/.gitattributes index 70e096f09e..bbb16768f7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7706,10 +7706,8 @@ rtl/linux/fpmake.inc svneol=native#text/plain rtl/linux/gpm.pp svneol=native#text/plain rtl/linux/i386/bsyscall.inc svneol=native#text/plain rtl/linux/i386/cprt0.as svneol=native#text/plain -rtl/linux/i386/cprt21.as svneol=native#text/plain rtl/linux/i386/dllprt0.as svneol=native#text/plain rtl/linux/i386/gprt0.as svneol=native#text/plain -rtl/linux/i386/gprt21.as svneol=native#text/plain rtl/linux/i386/prt0.as svneol=native#text/plain rtl/linux/i386/si_c.inc svneol=native#text/plain rtl/linux/i386/si_c21.inc svneol=native#text/plain diff --git a/rtl/android/arm/cprt0.as b/rtl/android/arm/cprt0.as index 6f4d1f71c0..d2bfa2977c 100644 --- a/rtl/android/arm/cprt0.as +++ b/rtl/android/arm/cprt0.as @@ -67,7 +67,8 @@ _start: str sp,[ip] /* Fetch address of fini */ - ldr ip, =_fini + /*fixme: ldr ip, =_fini */ + mov ip, #0 /* argc already loaded to a2*/ @@ -82,15 +83,17 @@ _start: /* Set up the other arguments in registers */ ldr a1, =PASCALMAIN - ldr a4, =_init + /* fixme: init ldr a4, =_init */ + mov a4, #0 /* Push fini */ str ip, [sp, #-4]! - /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */ + /* check that this is the correct function! */ + /* __libc_init (main, argc, argv, init, fini, rtld_fini, stack_end) */ /* Let the libc call main and exit with its return code. */ - bl __libc_start_main + bl __libc_init /* should never get here....*/ bl abort diff --git a/rtl/linux/i386/cprt0.as b/rtl/linux/i386/cprt0.as index 77b1115002..4838b5ca05 100644 --- a/rtl/linux/i386/cprt0.as +++ b/rtl/linux/i386/cprt0.as @@ -47,21 +47,15 @@ _start: movl %ecx,operatingsystem_parameter_argc /* Move the argument counter */ movl %ebx,operatingsystem_parameter_argv /* Move the argument pointer */ - movl %eax,__environ /* libc environ */ + /* no libc __environ */ pushl %eax pushl %ebx pushl %ecx call __libc_init /* init libc */ - movzwl __fpu_control,%eax - pushl %eax - call __setfpucw - popl %eax - pushl $_fini - call atexit - popl %eax - call _init + pushl $0 /* the onexit() function is always nil with bionic */ + call __cxa_finalize popl %eax popl %eax diff --git a/rtl/linux/i386/cprt21.as b/rtl/linux/i386/cprt21.as deleted file mode 100644 index 67a3555192..0000000000 --- a/rtl/linux/i386/cprt21.as +++ /dev/null @@ -1,126 +0,0 @@ -# -# This file is part of the Free Pascal run time library. -# Copyright (c) 1999-2000 by Michael Van Canneyt and Peter Vreman -# members of the Free Pascal development team. -# -# See the file COPYING.FPC, included in this distribution, -# for details about the copyright. -# -# This program 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. -# -#**********************************************************************} -# -# Linux ELF startup code for Free Pascal -# -# Stack layout at program start: -# -# nil -# envn -# .... -# .... ENVIRONMENT VARIABLES -# env1 -# env0 -# nil -# argn -# .... -# .... COMMAND LINE OPTIONS -# arg1 -# arg0 -# argc <--- esp -# - - .file "prt1.as" - .text - .globl _start - .type _start,@function -_start: - /* First locate the start of the environment variables */ - - popl %esi - movl %eax,%edi - - movl %esp,%ebx /* Points to the arguments */ - movl %esi,%eax - incl %eax - shll $2,%eax - addl %esp,%eax - andl $0xfffffff8,%esp /* Align stack */ - - movl %eax,operatingsystem_parameter_envp /* Move the environment pointer */ - movl %esi,operatingsystem_parameter_argc /* Move the argument counter */ - movl %ebx,operatingsystem_parameter_argv /* Move the argument pointer */ - - xorl %ebp,%ebp - pushl %edi - pushl %esp - pushl %edx - pushl $_fini_dummy - pushl $_init_dummy - pushl %ebx - pushl %esi - pushl $main - call __libc_start_main - hlt - -/* fake main routine which will be run from libc */ -main: - /* save return address */ - popl %eax - movl %eax,___fpc_ret - movl %ebx,___fpc_ret_ebx - movl %ebp,___fpc_ret_ebp - pushl %eax - - /* Save initial stackpointer */ - movl %esp,__stkptr - - /* start the program */ - xorl %ebp,%ebp - call PASCALMAIN - hlt - - .globl _haltproc - .type _haltproc,@function -_haltproc: - movzwl operatingsystem_result,%eax - - movl ___fpc_ret,%edx /* return to libc */ - movl ___fpc_ret_ebp,%ebp - movl ___fpc_ret_ebx,%ebx - push %edx -_init_dummy: -_fini_dummy: - ret - -.data - .align 4 - -___fpc_ret: /* return address to libc */ - .long 0 -___fpc_ret_ebx: - .long 0 -___fpc_ret_ebp: - .long 0 - -.bss - .type __stkptr,@object - .size __stkptr,4 - .global __stkptr -__stkptr: - .skip 4 - - .type operatingsystem_parameters,@object - .size operatingsystem_parameters,12 -operatingsystem_parameters: - .skip 3*4 - - .global operatingsystem_parameter_envp - .global operatingsystem_parameter_argc - .global operatingsystem_parameter_argv - .set operatingsystem_parameter_envp,operatingsystem_parameters+0 - .set operatingsystem_parameter_argc,operatingsystem_parameters+4 - .set operatingsystem_parameter_argv,operatingsystem_parameters+8 - -.section .note.GNU-stack,"",%progbits diff --git a/rtl/linux/i386/gprt21.as b/rtl/linux/i386/gprt21.as deleted file mode 100644 index 4744d8be17..0000000000 --- a/rtl/linux/i386/gprt21.as +++ /dev/null @@ -1,139 +0,0 @@ -# -# This file is part of the Free Pascal run time library. -# Copyright (c) 1999-2000 by Michael Van Canneyt and Peter Vreman -# members of the Free Pascal development team. -# -# See the file COPYING.FPC, included in this distribution, -# for details about the copyright. -# -# This program 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. -# -#**********************************************************************} -# -# Linux ELF startup code for Free Pascal -# - - .file "prt1.as" - .text - .globl _start - .type _start,@function -_start: - /* First locate the start of the environment variables */ - popl %esi - movl %eax,%edi - - movl %esp,%ebx /* Points to the arguments */ - movl %esi,%eax - incl %eax - shll $2,%eax - addl %esp,%eax - andl $0xfffffff8,%esp /* Align stack */ - - movl %eax,operatingsystem_parameter_envp /* Move the environment pointer */ - movl %esi,operatingsystem_parameter_argc /* Move the argument counter */ - movl %ebx,operatingsystem_parameter_argv /* Move the argument pointer */ - - movl %edi,%eax - xorl %ebp,%ebp - pushl %eax - pushl %esp - pushl %edx - pushl $_fini_dummy - pushl $_init_dummy - pushl %ebx - pushl %esi - pushl $cmain - call __libc_start_main - hlt - -/* fake main routine which will be run from libc */ -cmain: - /* save return address */ - popl %eax - movl %eax,___fpc_ret - movl %ebx,___fpc_ret_ebx - movl %esi,___fpc_ret_esi - movl %edi,___fpc_ret_edi - pushl %eax - - call __gmon_start__ - - /* Save initial stackpointer */ - movl %esp,__stkptr - - /* start the program */ - call PASCALMAIN - hlt - - .globl _haltproc - .type _haltproc,@function -_haltproc: - movzwl operatingsystem_result,%eax - - movl ___fpc_ret,%edx /* return to libc */ - movl ___fpc_ret_ebx,%ebx - movl ___fpc_ret_esi,%esi - movl ___fpc_ret_edi,%edi - push %edx -_init_dummy: -_fini_dummy: - ret - - .globl __gmon_start__ - .type __gmon_start__,@function -__gmon_start__: - pushl %ebp - movl __monstarted,%eax - leal 0x1(%eax),%edx - movl %esp,%ebp - movl %edx,__monstarted - testl %eax,%eax - jnz .Lnomonstart - pushl $etext /* Initialize gmon */ - pushl $_start - call monstartup - addl $8,%esp - pushl $_mcleanup - call atexit - addl $4,%esp -.Lnomonstart: - movl %ebp,%esp - popl %ebp - ret - -.data - .align 4 - -___fpc_ret: /* return address to libc */ - .long 0 -___fpc_ret_ebx: - .long 0 -___fpc_ret_esi: - .long 0 -___fpc_ret_edi: - .long 0 - -.bss - .lcomm __monstarted,4 - - .type __stkptr,@object - .size __stkptr,4 - .global __stkptr -__stkptr: - .skip 4 - - .type operatingsystem_parameters,@object - .size operatingsystem_parameters,12 -operatingsystem_parameters: - .skip 3*4 - - .global operatingsystem_parameter_envp - .global operatingsystem_parameter_argc - .global operatingsystem_parameter_argv - .set operatingsystem_parameter_envp,operatingsystem_parameters+0 - .set operatingsystem_parameter_argc,operatingsystem_parameters+4 - .set operatingsystem_parameter_argv,operatingsystem_parameters+8 - -.section .note.GNU-stack,"",%progbits