[uClinux-dev] GOT size limit reached
lists at endian.se
Tue Aug 30 05:16:29 EDT 2005
I am working for a customer that is implementing a C++ application on
a Coldfire 5272 target; and this application has reached the GOT size
limit. I am sure that this is the problem, because when examining the
disassembly from a previous release (without the GOT size error) and
grepping for "movel %a5(" you can see that it is very close to the
32k limit. One solution would of course be to skip XIP but this will
bring other problems; so I am currently trying to expand the GOT
table size. My strategy is :
1. Update the linker to accept relocations in the 0-64k range
(instead of 0-32k).
2. Change the crt0.S startup code to set a5 to .data + 32768 instead
3. Update elf2flt to rearrange the GOT table to accomodate for the
fact that the movel %a5() instruction uses a signed offset instead of
a signed (this will have the side-effect that the GOT table size will
be 32k + min( 32k, real size of relocations) but that is a small
problem compared to the other one).
All this should be controlled by a new compiler/linker switch;
something like -mgot-64k or -mxgot.
So, my question is, has anyone done something like this before? Is
there anything I am missing in the strategy above?
Endian Technologies AB
http://endian.se for contact information
More information about the uClinux-dev