Re: [arm-gnu] Linker problems with arm-none-eabi 3.4.4
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [arm-gnu] Linker problems with arm-none-eabi 3.4.4



> Next, I get a linker error for "no memory region specified for loadable
> section '.ARM.extab' (strange, since I didn't get this with v 3.4.3).
>
> Looking at the example linker files, I can add sections to my .lds file
> that will give 0-byte allocations for sections that might be required by
> the linker.  I think the sections would look like this:
>
>   .ARM.extab 0 : { *(.ARM.extab) }
>   .ARM.exidx 0 : { *(.ARM.exidx) }
>
> Once I add these, I get some unresolved reference problems (undefined
> reference to '__exidx_end' ).
>
> Since I don't fully understand these errors, I'm not exactly sure where to
> look next for more information.  I looked around for some change notes that
> might describe the linker differences between 3.4.3 and 3.4.4;
> unfortunately I didnt really find anything.

These are all part of the C++ unwinding mechanisms. They may get pulled in 
even if your application does not use C++ because some parts of the runtime 
library need to be exception safe for use with C++ code.

The __exidx_{start,end} symbols are required so that the runtime library can 
locate the .ARM.exidx section. They are defined in the default linker script 
as follows:

   __exidx_start = .;
  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
   __exidx_end = .;

You can display the default linker script by running
arm-none-eabi-ld --verbose

Paul