Strip broke for me in 2.15...

David Daney ddaney@avtrex.com
Thu May 27 16:15:00 GMT 2004


Nick Clifton wrote:

> Hi David,
>
>> The file is already stripped, however running strip-2.15 on it again, 
>> screws up the alignment.
>
>
> Why would you run strip on an already stripped file ?


Normally I would not do this.  The reason I did it in this case was that 
it was the smallest test case I could come up with in short order.

>
> Anyway, the problem is a difference in the page size between the 
> toolchain that was used to create the original binary file and the 
> mipsisa32el-linux toolchain that you are using.  Most MIPS ELF 
> toolchains use a page size of 0x1000.  (This is reflected in the 
> alignment of the two LOAD segments in the original xilleon-remote 
> binary). 

> The mipsisa32el-linux toolchain however uses a page size of 0x10000, 
> (ie 16 times the other page size).  So when strip (or objcopy or the 
> linker or any other program that uses the BFD library and processes 
> the xilleon-remote binary) attempts to build a new program header 
> table from the input file it discovers that although the original 
> input segments are aligned to a 0x1000 byte boundary they are not 
> aligned to a 0x10000 byte boundary.  Hence the code concludes that 
> these segments are not supposed to be aligned, and so resets their 
> alignment down to the maximum alignment of any of the sections that 
> they contain.
>
> The reason for the difference is that the IRIX5 OS uses a page size of 
> 0x1000 whereas Linux and the SVR4 MIPS ABI both mandate a page size of 
> 0x10000.
>
> So...this is not really a bug, it is a feature.  I have a couple of 
> suggestions for a workaround, but neither of them are simple:  If you 
> can arrange for the original xilleon-remote binary to be created by a 
> MIPS ELF toolchain with a page size of 0x10000 then the problem should 
> disappear.  If you can build a toolchain that is targeted at both 
> mipsisa32el-linux and mips-elf then you could use a command line like 
> this to perform the strip: 


I am running an extremely hacked up conglomeration of gcc-3.3.1 and  now 
several intermixed versions of binutils.  I guess that this shows what 
can happen if you don't know what you are doing.

I think the real solution is to configure everything as mipsel-linux and 
not inter-mix versions.  This is what I have been working towards.

Thanks for your help.

>
>
>   strip --input-target=elf32-littlemips 
> --output-target=elf32-littlemips xilleon-remote -o 
> xilleon-remote.stripped
>
> Cheers
>   Nick
>
> PS.  In case you are interested the patch to the 2.15 sources that 
> caused this change in behaviour was this one:
>
> bfd/ChangeLog
> 2004-01-05  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
>
>     * elf32-mips.c (ELF_MAXPAGESIZE): Redefine for traditional
>     targets to support pages of up to 64kB.
>     (elf32_bed): Redefine to get a separate backend data structure for
>     traditional targets.
>     * elf64-mips.c (ELF_MAXPAGESIZE): Redefine for traditional
>     targets to support pages of up to 64kB.
>     (elf64_bed): Redefine to get a separate backend data structure for
>     traditional targets.
>     * elfn32-mips.c (ELF_MAXPAGESIZE): Redefine for traditional
>     targets to support pages of up to 64kB.
>     (elf32_bed): Redefine to get a separate backend data structure for
>     traditional targets.





More information about the Binutils mailing list