diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-12-21 18:36:32 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-12-21 18:36:32 +0000 |
commit | a16ce997aa0b6778b9689a49f28dff0da4b7599a (patch) | |
tree | fc3e3470f4776b91ba10dc32d7658185440f3189 | |
parent | 9526f1fb77719a87251e78fc3431fa11a6497d30 (diff) | |
download | glibc-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.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 |