Erwin,

On Sonntag, 21. Oktober 2007, Erwin Authried wrote:
> in elf2flt.ld, the ctor table starts with the nr. of entries in the
> table "LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)", and ends with
> 0.
Yes. 

> The newer compilers just have the ctor entries, and 0xffffffff as 
> the end marker (if I remember correctly). The end marker isn't
> required in the ld script because it comes from the library.

OK.
> Because of the elf2flt.ld entries, you will see multiple definitions 
> of the  __CTOR_LIST__, __DTOR_LIST__ entries. It's possible that this
> doesn't cause any harm, but it's rather confusing, at least. The main 
> problem with the 3.4 was the fact that the library for calling the 
> ctors/dtors is compiled without -msingle-pic-base, causing a crash.

This is my linker script:

>               . = ALIGN(4) ;
>               __CTOR_LIST__ = .;
>               LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
> SINGLE_LINK:  /* gcc uses crtbegin.o to find the start of
> SINGLE_LINK:     the constructors, so we make sure it is
> SINGLE_LINK:     first.  Because this is a wildcard, it
> SINGLE_LINK:     doesn't matter if the user does not
> SINGLE_LINK:     actually link against crtbegin.o; the
> SINGLE_LINK:     linker won't look for a file to match a
> SINGLE_LINK:     wildcard.  The wildcard also means that it
> SINGLE_LINK:     doesn't matter which directory crtbegin.o
> SINGLE_LINK:     is in.  */
> SINGLE_LINK:  KEEP (*crtbegin*.o(.ctors))
> SINGLE_LINK:  /* We don't want to include the .ctor section from
> SINGLE_LINK:     from the crtend.o file until after the sorted ctors.
> SINGLE_LINK:     The .ctor section from the crtend file contains the
> SINGLE_LINK:     end of ctors marker and it must be last */
> SINGLE_LINK:  KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
> SINGLE_LINK:  KEEP (*(SORT(.ctors.*)))
>               KEEP (*(.ctors))
>               LONG(0)
>               __CTOR_END__ = .;
>               __DTOR_LIST__ = .;
>               LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
> SINGLE_LINK:  KEEP (*crtbegin*.o(.dtors))
> SINGLE_LINK:  KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
> SINGLE_LINK:  KEEP (*(SORT(.dtors.*)))
>               KEEP (*(.dtors))
>               LONG(0)
>               __DTOR_END__ = .;

Can you show me how to modify this for gcc 4.0.x?

And many thanks for your explanations!

regards
Wolfgang
-- 
Das Leben kann nur rückwärts verstanden,
muß aber vorwärts gelebt werden.
_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

Reply via email to