aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-12-21 18:36:32 +0000
committerUlrich Drepper <drepper@redhat.com>2002-12-21 18:36:32 +0000
commita16ce997aa0b6778b9689a49f28dff0da4b7599a (patch)
treefc3e3470f4776b91ba10dc32d7658185440f3189
parent9526f1fb77719a87251e78fc3431fa11a6497d30 (diff)
downloadglibc-a16ce997aa0b6778b9689a49f28dff0da4b7599a.tar
glibc-a16ce997aa0b6778b9689a49f28dff0da4b7599a.tar.gz
glibc-a16ce997aa0b6778b9689a49f28dff0da4b7599a.tar.bz2
glibc-a16ce997aa0b6778b9689a49f28dff0da4b7599a.zip
(_start): Optimise a little. Push stack top as seventh arg to
__libc_start_main.
-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