diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-12-21 18:53:25 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-12-21 18:53:25 +0000 |
commit | e361ccd9992504d1b1b1f496f182dbfa0fdca643 (patch) | |
tree | b18cc75f9f61e7ffe06bcabe2a29e520af246db4 /sysdeps/arm/elf/start.S | |
parent | 7e791f32c88ea7f6800c6e58cc96b0fab09aa9a9 (diff) | |
download | glibc-e361ccd9992504d1b1b1f496f182dbfa0fdca643.tar.gz glibc-e361ccd9992504d1b1b1f496f182dbfa0fdca643.tar.xz glibc-e361ccd9992504d1b1b1f496f182dbfa0fdca643.zip |
Update.
2002-12-20 Art Haas <ahaas@airmail.net> * sysdeps/gnu/siglist.c: Convert GCC extension initializer syntax to C99. 2002-12-21 Philip Blundell <philb@gnu.org> * sysdeps/arm/elf/start.S (_start): Optimise a little. Push stack top as seventh arg to __libc_start_main. Reported by paulnash@wildseed.com. * sysdeps/unix/sysv/linux/arm/clone.S: Small optimisation. * sysdeps/unix/sysv/linux/arm/sigcontextinfo.h: Elide compatibility cruft when new enough kernel is assumed.
Diffstat (limited to 'sysdeps/arm/elf/start.S')
-rw-r--r-- | sysdeps/arm/elf/start.S | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/sysdeps/arm/elf/start.S b/sysdeps/arm/elf/start.S index 90a62f6d9a..13d4229b3b 100644 --- a/sysdeps/arm/elf/start.S +++ b/sysdeps/arm/elf/start.S @@ -45,26 +45,34 @@ .globl _start .type _start,#function _start: + /* Fetch address of fini */ + ldr ip, =__libc_csu_fini + /* Clear the frame pointer since this is the outermost frame. */ mov fp, #0 /* Pop argc off the stack and save a pointer to argv */ - ldmfd sp!, {a2} + ldr a2, [sp], #4 mov a3, sp - /* Push the last arguments to main() onto the stack */ - stmfd sp!, {a1} - ldr a1, =__libc_csu_fini - stmfd sp!, {a1} + /* Push stack limit */ + str a3, [sp, #-4]! + + /* Push rtld_fini */ + str a1, [sp, #-4]! - /* Set up the other arguments for main() that go in registers */ + /* Set up the other arguments in registers */ ldr a1, =main ldr a4, =__libc_csu_init - /* __libc_start_main (main, argc, argv, init, fini, rtld_fini) */ + /* Push fini */ + str ip, [sp, #-4]! + + /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */ /* Let the libc call main and exit with its return code. */ bl __libc_start_main + /* should never get here....*/ bl abort |