about summary refs log tree commit diff
path: root/sysdeps/arm/elf/start.S
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/elf/start.S
parent7e791f32c88ea7f6800c6e58cc96b0fab09aa9a9 (diff)
downloadglibc-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.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