aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/arm
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-12-21 18:53:25 +0000
committerUlrich Drepper <drepper@redhat.com>2002-12-21 18:53:25 +0000
commite361ccd9992504d1b1b1f496f182dbfa0fdca643 (patch)
treeb18cc75f9f61e7ffe06bcabe2a29e520af246db4 /sysdeps/arm
parent7e791f32c88ea7f6800c6e58cc96b0fab09aa9a9 (diff)
downloadglibc-e361ccd9992504d1b1b1f496f182dbfa0fdca643.tar
glibc-e361ccd9992504d1b1b1f496f182dbfa0fdca643.tar.gz
glibc-e361ccd9992504d1b1b1f496f182dbfa0fdca643.tar.bz2
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')
-rw-r--r--sysdeps/arm/elf/start.S22
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