Browse Source

rename crt0.S to crt1.S and clean up so it actually works :)

Mike Frysinger 20 years ago
parent
commit
379712737e
1 changed files with 24 additions and 62 deletions
  1. 24 62
      libc/sysdeps/linux/x86_64/crt1.S

+ 24 - 62
libc/sysdeps/linux/x86_64/crt0.S → libc/sysdeps/linux/x86_64/crt1.S

@@ -1,5 +1,5 @@
 /* Startup code compliant to the ELF x86-64 ABI.
-   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 2001.
 
@@ -59,24 +59,25 @@
 #include <features.h>
 
 .text
-	.global	_start
-	.type	_start,%function
-#if defined L_crt0 || defined L_Scrt0 || ! defined __UCLIBC_CTOR_DTOR__
-	.type	__uClibc_main,%function
+.global	_start
+.type   _start,@function
+#if defined(__UCLIBC_CTOR_DTOR__)
+.type	_init,@function
+.type	_fini,@function
 #else
-	.weak	_init
-	.weak	_fini
-	.type	__uClibc_start_main,%function
+.weak	_init
+.weak	_fini
 #endif
+.type	__uClibc_main,@function
 /* Stick in a dummy reference to main(), so that if an application
  * is linking when the main() function is in a static library (.a)
  * we can be sure that main() actually gets linked in */
-	.type	main,%function
+.type	main,@function
 
 _start:
 	/* Clear the frame pointer.  The ABI suggests this be done, to mark
 	   the outermost frame obviously.  */
-	xorq %rbp, %rbp
+	xorl %ebp, %ebp
 
 	/* Extract the arguments as encoded on the stack and set up
 	   the arguments for __libc_start_main (int (*main) (int, char **, char **),
@@ -92,8 +93,6 @@ _start:
 	rtld_fini:	%r9
 	stack_end:	stack.	*/
 
-#if 0
-	/* glibc */
 	movq %rdx, %r9   /* Address of the shared library termination function. */
 	popq %rsi        /* Pop the argument count. */
 	movq %rsp, %rdx  /* argv starts just at the current stack top. */
@@ -101,16 +100,7 @@ _start:
 	addq $8, %rbx
 	shl  $0x3, %rbx  /* envp *= 8 */
 	addq %rdx, %rbx  /* envp += argv */
-#else
-	/* uclibc */
-	movq %rdx, %r9   /* Address of the shared library termination function. */
-	popq %rdi        /* Pop the argument count. */
-	movq %rsp, %rsi  /* argv starts just at the current stack top. */
-	movq %rdi, %rdx  /* now we calc envp ... envp = argc */
-	addq $8, %rdx
-	shl  $0x3, %rdx  /* envp *= 8 */
-	addq %rsi, %rdx  /* envp += argv */
-#endif
+
 	/* Align the stack to a 16 byte boundary to follow the ABI. */
 	andq $~15, %rsp
 
@@ -120,53 +110,25 @@ _start:
 	   which grow downwards).  */
 	pushq %rsp
 
+	/* Give address for main() */
+	movq $main, %rdi
+
+	/* setup init/fini address */
+	movq $_init, %rcx
+	movq $_fini, %r8
+
 /**************
  * START TODO */
-#if defined L_Scrt0 || defined L_Scrt1
+#if defined(L_Scrt1)
 	call .L0
 .L0:
 	popq %rbx
 	addq $_GLOBAL_OFFSET_TABLE_+[.-.L0],%rbx
-#endif
-
-#if (defined L_crt1 || defined L_Scrt1) && defined __UCLIBC_CTOR_DTOR__
-	/* Push .init and .fini arguments to __uClibc_start_main() on the stack */
-#ifdef L_Scrt1
-	pushl _fini@GOT(%rip)
-	pushl _init@GOT(%rip)
-#else
-	pushl $_fini
-	pushl $_init
-#endif
 
-	/* Push envp, argc, and argc arguments to __uClibc_start_main() on the stack */
-#if 0
-	pushq %rdx /* Environment pointer */
-	pushq %rsi /* Argument pointer */
-	pushq %rdi /* And the argument count */
-#endif
-
-	/* Ok, now run uClibc's main() -- shouldn't return */
-#ifdef L_Scrt1
-	call *__uClibc_start_main@GOT(%rip)
-#else
-	call __uClibc_start_main
-#endif
-#else
-
-	/* Push envp, argc, and argc arguments to __uClibc_start_main() on the stack */
-#if 0
-	pushq %rdx /* Environment pointer */
-	pushq %rsi /* Argument pointer */
-	pushq %rdi /* And the argument count */
-#endif
-
-#ifdef L_Scrt0
 	call *__uClibc_main@GOT(%rip)
 #else
 	call __uClibc_main
 #endif
-#endif
 /* END TODO *
  ************/
 
@@ -174,9 +136,9 @@ _start:
 .size _start,.-_start
 
 /* Define a symbol for the first piece of initialized data.  */
-	.data
-	.globl __data_start
+.data
+.globl __data_start
 __data_start:
-	.long 0
-	.weak data_start
+.long 0
+.weak data_start
 	data_start = __data_start