ソースを参照

__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 年 前
コミット
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
+