Hi

cc: Mailing List

On 07/11/2013 07:33 PM, Michael Trimarchi wrote:
> Hi Michael
> 
> On 07/11/2013 07:01 PM, Michael Cashwell wrote:
>> Greetings,
>>
>> I've been absent for a while and couldn't find a way to search the list 
>> archives so I apologize if this has already been discussed…
>>
>> I've been fighting the SPL binary growing too large on OMAP4 (using custom 
>> configs and features). It's annoying that too large just fails to run with 
>> no build or runtime notice. But that's a different issue.
>>
>> My main issue is that in looking through the map for SPL I've repeatedly 
>> found code that I don't need and have a pretty good handle on that. My issue 
>> is that code that is compiled but eliminated because it's not called leaves 
>> behind all of its anonymous strings ("like this"). In my latest build I have 
>> the following sections that are all anonymous strings:
>>
>> 0x4030b638      0x232 arch/arm/cpu/armv7/omap-common/libomap-common.o
>> 0x4030b8b5       0x19 arch/arm/cpu/armv7/omap4/libomap4.o
>> 0x4030b9ad       0xbe common/spl/libspl.o
>> 0x4030ba6b       0x57 drivers/gpio/libgpio.o
>> 0x4030bac2      0x44c drivers/i2c/libi2c.o
>> 0x4030bf0e      0x302 drivers/mmc/libmmc.o
>> 0x4030c27e       0x15 drivers/serial/libserial.o
>> 0x4030c293      0x145 drivers/spi/libspi.o
>> 0x4030c4d8       0x53 lib/libgeneric.o
>>
>> with more than half being unreferenced. This is a big deal when you only 
>> have about 25K of SRAM for code and data.
>>
> 
> I don't give an answer but some suggestions:
> 
> - using a raw partition to boot and remove the vfat support in first stage 
> boot
> - safety you can add 2Kb more to CONFIG_SPL_MAX_SIZE (tested on serial boot 
> too)
> - do some tests on different toolchains
> 
> Try to move all in the second stage when it's possible
> 
> Michael
> 

Michael

>> In searching the web it seems that dead code and data are removed using 
>> --gc-sections, -ffunction-sections and -fdata-sections which u-boot is using 
>> correctly.
>>
>> But it seems that gcc puts all anonymous strings into the same section 
>> (.rodata or .rodata.str1.1 if string merging is on) which prevents them from 
>> participating in the stripping process.
>>
>> Interestingly, it puts its own __func__ strings into separate sections and 
>> they are eliminated if the function go away. It just doesn't do this for 
>> plain "" strings.  Grrr.
>>
>> I was shocked to find gcc posts asking about this more than 13 years ago 
>> with barely any traction at all. Given that embarrassing history I'm not 
>> hopefully that the gcc folks will ever address this.
>>
>> Is there a work around I haven't thought of? I'm thinking along the lines of 
>> disabling all printfs in SPL in the hope that will take the strings away 
>> (since many are some sort of debug / progress message).
>>
>> Any thoughts or guidance would be appreciated.
>>
>> -Mike
>>
>> _______________________________________________
>> U-Boot mailing list
>> [email protected]
>> http://lists.denx.de/mailman/listinfo/u-boot
>>
> 

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to