Browse Source

re-apply the changes of r22045 to correct files after recent revert

git-svn-id: branches/targetandroid@22048 -
tom_at_work 13 years ago
parent
commit
75e57faba1
5 changed files with 304 additions and 4 deletions
  1. 3 0
      .gitattributes
  2. 7 4
      rtl/android/arm/cprt0.as
  3. 103 0
      rtl/android/i386/cprt0.as
  4. 79 0
      rtl/android/i386/dllprt0.as
  5. 112 0
      rtl/android/i386/prt0.as

+ 3 - 0
.gitattributes

@@ -7222,6 +7222,9 @@ rtl/android/Makefile.fpc svneol=native#text/plain
 rtl/android/arm/cprt0.as svneol=native#text/plain
 rtl/android/arm/cprt0.as svneol=native#text/plain
 rtl/android/arm/dllprt0.as svneol=native#text/plain
 rtl/android/arm/dllprt0.as svneol=native#text/plain
 rtl/android/arm/prt0.as svneol=native#text/plain
 rtl/android/arm/prt0.as svneol=native#text/plain
+rtl/android/i386/cprt0.as svneol=native#text/plain
+rtl/android/i386/dllprt0.as svneol=native#text/plain
+rtl/android/i386/prt0.as svneol=native#text/plain
 rtl/android/jvm/Makefile svneol=native#text/plain
 rtl/android/jvm/Makefile svneol=native#text/plain
 rtl/android/jvm/Makefile.fpc svneol=native#text/plain
 rtl/android/jvm/Makefile.fpc svneol=native#text/plain
 rtl/android/jvm/androidr14.inc svneol=native#text/plain
 rtl/android/jvm/androidr14.inc svneol=native#text/plain

+ 7 - 4
rtl/android/arm/cprt0.as

@@ -67,7 +67,8 @@ _start:
         str sp,[ip]
         str sp,[ip]
 
 
         /* Fetch address of fini */
         /* Fetch address of fini */
-        ldr ip, =_fini
+        /*fixme: ldr ip, =_fini */
+        mov ip, #0
 
 
         /* argc already loaded to a2*/
         /* argc already loaded to a2*/
 
 
@@ -82,15 +83,17 @@ _start:
 
 
         /* Set up the other arguments in registers */
         /* Set up the other arguments in registers */
         ldr a1, =PASCALMAIN
         ldr a1, =PASCALMAIN
-        ldr a4, =_init
+        /* fixme: init ldr a4, =_init */
+        mov a4, #0
 
 
         /* Push fini */
         /* Push fini */
         str ip, [sp, #-4]!
         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.  */
         /* Let the libc call main and exit with its return code.  */
-        bl __libc_start_main
+        bl __libc_init
 
 
         /* should never get here....*/
         /* should never get here....*/
         bl abort
         bl abort

+ 103 - 0
rtl/android/i386/cprt0.as

@@ -0,0 +1,103 @@
+#
+#   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   "cprt0.as"
+        .text
+        .globl  _start
+        .type   _start,@function
+_start:
+        /* First locate the start of the environment variables */
+        popl    %ecx                    /* Get argc in ecx */
+        movl    %esp,%ebx               /* Esp now points to the arguments */
+        leal    4(%esp,%ecx,4),%eax     /* The start of the environment is: esp+4*eax+8 */
+        andl    $0xfffffff8,%esp        /* Align stack */
+
+        movl    %eax,operatingsystem_parameter_envp    /* Move the environment pointer */
+        movl    %ecx,operatingsystem_parameter_argc    /* Move the argument counter    */
+        movl    %ebx,operatingsystem_parameter_argv    /* Move the argument pointer    */
+
+        /* no libc __environ */
+
+        pushl   %eax
+        pushl   %ebx
+        pushl   %ecx
+
+        call    __libc_init             /* init libc */
+        pushl   $0                      /* the onexit() function is always nil with bionic */
+        call    __cxa_finalize
+
+        popl    %eax
+        popl    %eax
+
+        /* Save initial stackpointer */
+        movl    %esp,__stkptr
+
+        xorl    %ebp,%ebp
+        call    PASCALMAIN              /* start the program */
+
+        .globl _haltproc
+        .type _haltproc,@function
+_haltproc:
+_haltproc2:             # GAS <= 2.15 bug: generates larger jump if a label is exported
+        movzwl  operatingsystem_result,%ebx
+        pushl   %ebx
+        call    exit
+        xorl    %eax,%eax
+        incl    %eax                    /* eax=1, exit call */
+        popl    %ebx
+        int     $0x80
+        jmp     _haltproc2
+
+.data
+
+.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

+ 79 - 0
rtl/android/i386/dllprt0.as

@@ -0,0 +1,79 @@
+#
+#   This file is part of the Free Pascal run time library.
+#   Copyright (c) 2001 by Peter Vreman
+#
+#   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 shared library startup code for Free Pascal
+#
+
+        .file   "dllprt0.as"
+        .text
+        .globl  _startlib
+        .type   _startlib,@function
+_startlib:
+        .globl  FPC_SHARED_LIB_START
+        .type   FPC_SHARED_LIB_START,@function
+FPC_SHARED_LIB_START:
+        pushl   %ebp
+        movl    %esp,%ebp
+
+        movl    8(%ebp),%eax
+        movl    12(%ebp),%ecx
+        movl    16(%ebp),%edx
+
+        movl    %edx,operatingsystem_parameter_envp    /* Move the environment pointer */
+        movl    %eax,operatingsystem_parameter_argc    /* Move the argument counter    */
+        movl    %ecx,operatingsystem_parameter_argv    /* Move the argument pointer    */
+
+        movb    $1,operatingsystem_islibrary
+
+        /* Save initial stackpointer */
+        movl    %esp,__stkptr
+
+        call    PASCALMAIN
+
+        leave
+        ret
+
+        .globl  _haltproc
+        .type   _haltproc,@function
+_haltproc:
+_haltproc2:             # GAS <= 2.15 bug: generates larger jump if a label is exported
+        .globl  FPC_SHARED_LIB_EXIT
+        .type   FPC_SHARED_LIB_EXIT,@function
+FPC_SHARED_LIB_EXIT:
+	call	lib_exit
+        xorl    %eax,%eax
+        incl    %eax                    /* eax=1, exit call */
+        movzwl  operatingsystem_result,%ebx
+        int     $0x80
+        jmp     _haltproc2
+
+.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

+ 112 - 0
rtl/android/i386/prt0.as

@@ -0,0 +1,112 @@
+#
+#   This file is part of the Free Pascal run time library.
+#   Copyright (c) 1999-2004 by Michael Van Canneyt, Peter Vreman,
+#   & Daniel Mantione, 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
+#
+# The code in this file is the default startup code, it is used unless
+# libc is linked in, profiling is enabled or you are compiling a shared
+# library.
+#
+#
+# Stack layout at program start:
+#
+#         nil
+#         envn
+#         ....
+#         ....           ENVIRONMENT VARIABLES
+#         env1
+#         env0
+#         nil
+#         argn
+#         ....
+#         ....           COMMAND LINE OPTIONS
+#         arg1
+#         arg0
+#         argc <--- esp
+#
+
+        .file   "prt0.as"
+        .text
+        .globl  _start
+        .type   _start,@function
+_start:
+        /* First locate the start of the environment variables */
+        popl    %ecx                    /* Get argc in ecx */
+        movl    %esp,%ebx               /* Esp now points to the arguments */
+        leal    4(%esp,%ecx,4),%eax     /* The start of the environment is: esp+4*eax+4 */
+        andl    $0xfffffff8,%esp        /* Align stack */
+
+        leal    operatingsystem_parameters,%edi
+        stosl   /* Move the environment pointer */
+        xchg    %ecx,%eax
+        stosl   /* Move the argument counter    */
+        xchg    %ebx,%eax
+        stosl   /* Move the argument pointer    */
+
+
+        fninit                           /* initialize fpu */
+        fwait
+        fldcw   ___fpucw
+
+#        /* Initialize gs for thread local storage */
+#        movw    %ds,%ax
+#        movw    %ax,%gs
+
+        /* Save initial stackpointer */
+        movl    %esp,__stkptr
+
+        xorl    %ebp,%ebp
+        call    PASCALMAIN
+
+        .globl  _haltproc
+        .type   _haltproc,@function
+_haltproc:
+_haltproc2:             # GAS <= 2.15 bug: generates larger jump if a label is exported
+        movl    $252,%eax                /* exit_group */
+        movzwl  operatingsystem_result,%ebx
+        int     $0x80
+        movl    $1,%eax                /* exit */
+        movzwl  operatingsystem_result,%ebx
+        int     $0x80
+        jmp     _haltproc2
+
+.data
+        .type   __fpucw,@object
+        .size   __fpucw,4
+        .global __fpucw
+___fpucw:
+        .long   0x1332
+
+.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 .threadvar,"aw",@nobits
+        .comm   ___fpc_threadvar_offset,4
+.section .note.GNU-stack,"",%progbits