On Thursday 26 February 2009 08:36:13 Carmelo AMOROSO wrote:
> Rob Landley wrote:
> > If I enable CTOR/DTOR support, I get undefined _init and _fini.  I don't
> > remember which .o file those two are in, but it's linking in the same
> > group as all the other targets and those work, sh4 doesn't.
> >
> > # gcc -v thread-hello2.c -lpthread
> > ...
> > /usr/bin/../lib/crt1.o: In function `_start':
> > (.text+0x24): undefined reference to `_init'
> > /usr/bin/../lib/crt1.o: In function `_start':
> > (.text+0x28): undefined reference to `_fini'
> > collect2: ld returned 1 exit status
> >
> > When I disassemble crti.o on i686, I see definitions of _init and _fini,
> > but when I disassemble crti.o on sh4, the functions are called .init and
> > .fini:
> >
> > / # objdump -d /usr/lib/crti.o
> >
> > /usr/lib/crti.o:     file format elf32-sh-linux
> >
> > Disassembly of section .init:
> >
> > 00000000 <.init>:
> >    0:       c6 2f           mov.l   r12,@-r15
> >    2:       e6 2f           mov.l   r14,@-r15
> >    4:       22 4f           sts.l   pr,@-r15
> >    6:       f3 6e           mov     r15,r14
> >    8:       00 a0           bra     0xc
> >    a:       09 00           nop
> > Disassembly of section .fini:
> >
> > 00000000 <.fini>:
> >    0:       c6 2f           mov.l   r12,@-r15
> >    2:       e6 2f           mov.l   r14,@-r15
> >    4:       22 4f           sts.l   pr,@-r15
> >    6:       f3 6e           mov     r15,r14
> >    8:       00 a0           bra     0xc
> >    a:       09 00           nop
> >
> > I looked at uClibc/libc/sysdeps/linux/sh/crti.S  and tried removing the
> > "hidden" directives for both those, but it didn't help.
> >
> > Any clues?
> >
> > Rob
>
> Rob,
> it seems like the assembler mixed section name with symbol name.
> May you try, to rename the symbold _init/_fini to something different
> and recompile he crti.S only ? just to see if something change.
>
> Anyway, I tried with my toolchain and I got the correct results as below
> (both with  cross-compiler on x86 host and on real sh4 box)
>
> [amoro...@ctn003831~/uClibc-work/SVN/uClibc-0.9.30]sh4-linux-uclibc-objdump
> -dzS lib/crti.o
>
> lib/crti.o:     file format elf32-sh-linux
>
>
> Disassembly of section .init:
>
> 00000000 <_init>:
>    0: c6 2f           mov.l   r12,@-r15
>    2: e6 2f           mov.l   r14,@-r15
>    4: 22 4f           sts.l   pr,@-r15
>    6: f3 6e           mov     r15,r14
>    8: 00 a0           bra     c <_init+0xc>
>    a: 09 00           nop
>
> Disassembly of section .fini:
>
> 00000000 <_fini>:
>    0: c6 2f           mov.l   r12,@-r15
>    2: e6 2f           mov.l   r14,@-r15
>    4: 22 4f           sts.l   pr,@-r15
>    6: f3 6e           mov     r15,r14
>    8: 00 a0           bra     c <_fini+0xc>
>    a: 09 00           nop
>
> As you can see, the _init and _fini symbols are correctly defined
> in their relative .init and .fini section.
>
> Just for comparisons, which gcc/binutils version are you using ?
> in my case:

GCC 4.1.2 and Binutils 2.17, but I'm thinking of bumping to gcc 4.2.x.  
(That's still gplv2.)

> gcc is based on 4.2.4
> binutils is  2.18.50.0.8
> sh4-linux-uclibc-as -v GNU assembler version 2.18.50.0.8
> (sh4-linux-uclibc) using BFD version (Linux/GNU Binutils)
> 2.18.50.0.8.20080709
>
> Never seen similar problem before (also with older toolchains)

I tried the attached patch, and the uClibc build did this:

  AS lib/crti.o
crti.S: Assembler messages:
crti.S:23: Error: unrecognized symbol type "eeekfunction"
make: *** [lib/crti.o] Error 1
make: *** Waiting for unfinished jobs....
make: *** wait: No child processes.  Stop.

Alas, I have no idea what I'm doing with sh4 assembly.

I'll try 4.2 and see if this (and the arm eabi issue I'm having) just 
magically go away...

Thanks,

Rob
Index: libc/sysdeps/linux/sh/crti.S
===================================================================
--- a/libc/sysdeps/linux/sh/crti.S	(revision 25468)
+++ a/libc/sysdeps/linux/sh/crti.S	(working copy)
@@ -4,9 +4,9 @@
 	.section .init
 	.hidden  _init
 	.align 1
-	.global	_init
-	.type	_init, @function
-_init:
+	.global	_eeekinit
+	.type	_eeekinit, @function
+_eeekinit:
 	mov.l	r12,@-r15
 	mov.l	r14,@-r15
 	sts.l	pr,@-r15
@@ -19,9 +19,9 @@
 	.section .fini
 	.hidden  _fini
 	.align 1
-	.global	_fini
-	.type	_fini, @function
-_fini:
+	.global	_eeekfini
+	.type	_eeekfini, @eeekfunction
+_eeekfini:
 	mov.l	r12,@-r15
 	mov.l	r14,@-r15
 	sts.l	pr,@-r15
_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to