Browse Source

__data_start needs to be added to all crt0.S files that don't currently
have it. It is used by the boehm gc, amoung other things.

Eric Andersen 20 years ago
parent
commit
cd411309b5

+ 19 - 10
libc/sysdeps/linux/arm/crt0.S

@@ -18,7 +18,7 @@
 	NULL
         env[0...N]      environment variables (pointers)
         NULL
-	
+
    When we are done here, we want
 	a1=argc
 	a2=argv[0]
@@ -76,7 +76,7 @@ _start:
 	/* Copy argv pointer into r1 -- which its final resting place */
 	mov     r1, sp
 
-	/* Skip to the end of argv and put a pointer to whatever 
+	/* Skip to the end of argv and put a pointer to whatever
 	   we find there (hopefully the environment) in r2 */
 	add     r2, r1, r0, lsl #2
 	add     r2, r2, #4
@@ -114,16 +114,25 @@ _start:
 */
 	.section ".note.ABI-tag", "a"
 	.align 4
-	.long 1f - 0f            
-	.long 3f - 2f            
-	.long  1                 
-0:	.asciz "GNU"             
-1:	.align 4                
-2:	.long 0          
-	.long 2,0,0 
-3:	.align 4                 
+	.long 1f - 0f
+	.long 3f - 2f
+	.long  1
+0:	.asciz "GNU"
+1:	.align 4
+2:	.long 0
+	.long 2,0,0
+3:	.align 4
 
 #if defined L_gcrt1 && defined __UCLIBC_PROFILING__
 # include "./gmon-start.S"
 #endif
 
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
+

+ 6 - 6
libc/sysdeps/linux/cris/crt0.S

@@ -61,12 +61,12 @@ _start:
 0:
 	ba 0b
 	nop
-	
-	;; Define a symbol for the first piece of initialized data.
-	.data
-	.globl	__data_start
 
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
 __data_start:
-	.long	0
-	.weak	data_start
+	.long 0
+	.weak data_start
 	data_start = __data_start
+

+ 9 - 0
libc/sysdeps/linux/e1/crt0.S

@@ -6,3 +6,12 @@
 .global __start
 __start:
 	call L1, 0, __uClibc_start
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
+

+ 11 - 2
libc/sysdeps/linux/frv/crt0.S

@@ -57,7 +57,7 @@ _start:
 	setlo	#gprello(.Lcall), gr5
 	sub.p	gr4, gr5, gr4
 	/* gr4 now holds the _gp address.  */
-	
+
 	mov	gr16, gr8
 	sethi.p #gprelhi(__ROFIXUP_LIST__), gr9
 	sethi	#gprelhi(__ROFIXUP_END__), gr10
@@ -99,7 +99,7 @@ _start:
 #else
 	mov.p	gr17, gr15
 	call	__uClibc_main
-#endif	
+#endif
 
 	/* Crash if somehow `exit' returns anyways.  */
 	jmpl	@(gr0,gr0)
@@ -108,3 +108,12 @@ _start:
 #if defined L_gcrt1 && defined __UCLIBC_PROFILING__
 # include "./gmon-start.S"
 #endif
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
+

+ 10 - 1
libc/sysdeps/linux/h8300/crt0.S

@@ -37,7 +37,7 @@ _start: /* put here so that references to _start work with elf-PIC */
 	mov.l	@(4,sp),er1	/* argv */
 	mov.l	@(8,sp),er2	/* envp */
 	jsr	@___uClibc_main
-	
+
 	/* If that didn't kill us, ... */
 __exit:
 	mov.l	er0,er1
@@ -58,3 +58,12 @@ empty_func:
 	.set atexit,empty_func
 #endif
 
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
+

+ 8 - 4
libc/sysdeps/linux/i386/crt0.S

@@ -92,7 +92,7 @@ _start:
 	pushl $_init
 #endif
 
-	/* Push envp, argc, and argc arguments to __uClibc_start_main() on the stack */ 
+	/* Push envp, argc, and argc arguments to __uClibc_start_main() on the stack */
 	pushl %eax	/* Environment pointer */
 	pushl %ebx	/* Argument pointer */
 	pushl %ecx	/* And the argument count */
@@ -104,7 +104,7 @@ _start:
 	call __uClibc_start_main
 #endif
 #else
-	/* Push envp, argc, and argc arguments to __uClibc_start_main() on the stack */ 
+	/* Push envp, argc, and argc arguments to __uClibc_start_main() on the stack */
 	pushl %eax	/* Environment pointer */
 	pushl %ebx	/* Argument pointer */
 	pushl %ecx	/* And the argument count */
@@ -120,10 +120,14 @@ _start:
 	hlt
 .size _start,.-_start
 
-	.section ".data"
-	.globl  __data_start
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
 __data_start:
 	.long 0
+	.weak data_start
+	data_start = __data_start
 
 #if defined L_gcrt1 && defined __UCLIBC_PROFILING__
 # include "./gmon-start.S"

+ 15 - 6
libc/sysdeps/linux/i960/crt0.S

@@ -1,5 +1,5 @@
 #
-# clone.S, part of the i960 support for the uClibc library.
+# crt0.S, part of the i960 support for the uClibc library.
 #
 # Copyright (C) 2002 by Okiok Data Ltd.  http://www.okiok.com/
 #
@@ -19,7 +19,7 @@
 #
 
 /*
- *        
+ *
  * The behavior in this file is tightly coupled with how the linux kernel sets things up
  * on the stack before calling us.
  *
@@ -28,7 +28,7 @@
  *
  * ^
  * |                        <- sp somewhere around here, after being aligned.
- * |        
+ * |
  * |envp    -> envp[0]
  * |argv    -> argv[0]
  * |argc                    <- g13
@@ -37,13 +37,22 @@
  * create_flat_tables_stack_grows_up in fs/binfmt_flat.c
  *
  * I believe having to use this register could probably be avoided.
- *        
+ *
  */
-        
+
         .globl  start
 start:
         mov     g13, r3
         ldt     (r3), g0
         callx   ___uClibc_main
-        
+
 /* We might want to add some instruction so that it crashes if main returns */
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
+

+ 9 - 0
libc/sysdeps/linux/m68k/crt0.S

@@ -61,3 +61,12 @@ empty_func:
 	.set atexit,empty_func
 #endif
 
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
+

+ 11 - 2
libc/sysdeps/linux/microblaze/crt0.S

@@ -8,7 +8,7 @@
  * This file is subject to the terms and conditions of the GNU Lesser
  * General Public License.  See the file COPYING.LIB in the main
  * directory of this archive for more details.
- * 
+ *
  * Written by Miles Bader <miles@gnu.org>
  */
 
@@ -19,7 +19,7 @@
 */
 
 	.text
-C_ENTRY(_start):	
+C_ENTRY(_start):
 	lw	r5, r0, r1		// Arg 0: argc
 
 	addi	r6, r1, 4		// Arg 1: argv
@@ -45,3 +45,12 @@ C_ENTRY(_start):
    we can be sure that `main' actually gets linked in.  */
 L_dummy_main_reference:
 	.long	C_SYMBOL_NAME(main)
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
+

+ 8 - 3
libc/sysdeps/linux/mips/crt0.S

@@ -23,7 +23,7 @@
  * we can be sure that main() actually gets linked in */
 	.type	main,%function
 
-__start:              
+__start:
 #ifdef __PIC__
         .set noreorder
         bltzal zero,0f
@@ -43,7 +43,7 @@ __start:
 			    /* multiple of 8 for longlong/double support */
 	la   v0, _fini
 	sw   v0, 16(sp)	    /* stack has 5th argument, address of _fini */
-	
+
 	/* Ok, now run uClibc's main() -- shouldn't return */
 	jal  __uClibc_start_main
 
@@ -53,6 +53,11 @@ __start:
 hlt:
 	b   hlt
 
-	.section ".data"
+/* Define a symbol for the first piece of initialized data.  */
+	.data
 	.globl __data_start
 __data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
+

+ 6 - 3
libc/sysdeps/linux/powerpc/crt0.S

@@ -79,12 +79,15 @@ _start:
 #endif
 .size _start,.-_start
 
-	.section ".data"
-	.globl  __data_start
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
 __data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
 
 #if defined L_gcrt1 && defined __UCLIBC_PROFILING__
 # include "./gmon-start.S"
 #endif
 
-

+ 13 - 4
libc/sysdeps/linux/sh/crt0.S

@@ -70,7 +70,7 @@ _start:
 	jmp @r0
 	nop
 
-_start_end:	
+_start_end:
 	.align	2
 
 L_main:
@@ -101,7 +101,7 @@ L_main:
 	mov.l L_abort, r0
 	jmp @r0
 	nop
-_start_end:	
+_start_end:
 	.align	2
 
 L_main:
@@ -124,9 +124,18 @@ L_fini:
 
 #endif
 
-L_abort: 
-      .long   abort   
+L_abort:
+      .long   abort
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
 
 #if defined L_gcrt1 && defined __UCLIBC_PROFILING__
 # include "./gmon-start.S"
 #endif
+

+ 9 - 1
libc/sysdeps/linux/sh64/crt0.S

@@ -43,7 +43,7 @@
 
 	.section .text64,"xa"
 	.align 2	/* 2^2 = 4 */
-	
+
 _start:
 	/* Clear the frame pointer since this is the outermost frame.  */
 ###	mov #0, r14	# qqq
@@ -76,3 +76,11 @@ __main:
 	ptabs/l	r18,tr0
 	blink	tr0,r63
 
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
+

+ 11 - 2
libc/sysdeps/linux/v850/crt0.S

@@ -7,7 +7,7 @@
  * This file is subject to the terms and conditions of the GNU Lesser
  * General Public License.  See the file COPYING.LIB in the main
  * directory of this archive for more details.
- * 
+ *
  * Written by Miles Bader <miles@gnu.org>
  */
 
@@ -18,7 +18,7 @@
 */
 
 	.text
-C_ENTRY(start):	
+C_ENTRY(start):
 	ld.w	0[sp], r6		// Arg 0: argc
 
 	addi	4, sp, r7		// Arg 1: argv
@@ -46,3 +46,12 @@ C_ENTRY(start):
    we can be sure that `main' actually gets linked in.  */
 L_dummy_main_reference:
 	.long	C_SYMBOL_NAME(main)
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
+