[ECOS] Re: Gary, could you give me some suggestions?
Wed May 14 10:17:00 GMT 2008
__CTOR_LIST__ and __CTOR_END__ are not used under EABI. That's what
__init_array_start and __init_array_end replace respectively.
If you are using the CodeSourcery toolchain, there's a bug in the linker
that's waiting to be fixed. ld -r is used to combine the .o's, and it
reorders the __init_array sections incorrectly. There is an easy workaround
though, you need to add '-T /dev/null' to the 'ld -r' step so it doesn't use
the default linker script.
The reason that malloc() etc is probably failing is because the init steps
aren't running in the right order.
> -----Original Message-----
> From: Fisher ZHU [mailto:firstname.lastname@example.org]
> Sent: 14 May 2008 10:28
> To: Chris Zimman
> Cc: eCos Discussion
> Subject: Re: [ECOS] Re: Gary, could you give me some suggestions?
> Dear Chris,
> Thanks for your valuable help.
> Yesterday, I made a little progress.
> What have been done are listed below:
> 1) modify target.ld by replacing .ctors with .init_array as below,
> __CTOR_LIST__ = ABSOLUTE(.) ;
> __CTOR_END__= ABSOLUTE(.) ;
> 2) add libc.a into GROUP(..) in target.ld and remove -nostdlib linker
> 3) make.
> After done, the info of redboot.elf was dumped to check the
> constructor list, and __CTOR_LIST and __CTOR_END have different
> The above work removed the malloc() error encountered during flash
> initialization, then after these work, no malloc() error occurs , but
> redboot will fell in the state of waiting for BOOTP feedback after
> ethernet controller initialization.
> You mentioned that hal_misc.c needs to be modified.
> Would you like to describe your work more detailedly or send me the
> related modified files in your work package?
> Thanks a lot.
> On 5/13/08, Chris Zimman <email@example.com> wrote:
> > > > I use arm-none-eabi-ld --verbose and arm-elf-ld --verbose to
> > > the detailed link script for comparison, and I also read the arm.ld
> > > redboot in \src\hal\arm\arch\current\src.
> > > > I found after compiling with arm eabi tool chain, there is no
> > > ARM.exidex and ARM.extab in the generated target.ld. I edited
> > > and then make again. I get a redboot.elf. However, after I dumped
> > > info of redboot.elf generated by arm-eabi. I found that
> > > ,__CTOR_END__, __DTOR_LIST__, and __DTOR_END__ have the same
> > > It means that the constructors and destructors of redboot don't be
> > > compiled correctly.
> > > >
> > > > could you give me more suggestions? I am a newbie in embedded
> > There are a few things here if you're trying to get it to work with
> > (1) Constructors are in a new section called .init_array -- they get
> > in the opposite order that they are done under arm-elf, so you would
> need to
> > modify arm/arch/hal_misc.c as well as arm/arch/arm.ld
> > (2) You need to provide .ARM.extab and .ARM.exidx as they are
> required by
> > EABI. They need to be added in arm/arch/arm.ld
> > I have a working port of eCos w/ ARM EABI support that I've given to
> > eCosCentric. I believe they are adding this to eCosPro (someone from
> > eCosCentric please correct me if I'm wrong here).
> > --Chris
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
More information about the Ecos-discuss