[U-Boot] [U-Boot, RFC] SPL: replace ctype implementation with tiny version

Andre Przywara andre.przywara at arm.com
Mon Jun 5 15:15:46 UTC 2017


Hi,

On 05/06/17 16:01, Tom Rini wrote:
> On Fri, Jan 20, 2017 at 10:33:28PM +0000, Andre Przywara wrote:
> 
>> The ctype implementation (isdigit() & friends) works with an array of
>> 256 Bytes - one for each character. This is pretty big in SPL terms,
>> so let's replace this "bloated" implementation with a tiny version
>> using C statements. This only implements the functions that the SPL
>> requires and confines this change only to an actual SPL build.
>> Saves about 200 Bytes from the SPL code size.
>>
>> Signed-off-by: Andre Przywara <andre.przywara at arm.com>
>> Acked-by: Andrew F. Davis <afd at ti.com>
>> ---
>> Hi,
>>
>> some people voiced concerns about running out of SPL code space when
>> adding new features. In this particular case this was an issue when
>> looking at the SPL FIT extension series[1].
>> This patch here on top of this series saves more space than the SPL FIT
>> series consumed, so I trade this as a bait to people wrestling with this
>> problem ;-)
>>
>> Cheers,
>> Andre.
>>
>> [1] http://lists.denx.de/pipermail/u-boot/2017-January/278772.html
>>
>>  include/linux/tiny_ctype.h | 12 ++++++++++++
>>  lib/Makefile               |  2 ++
>>  lib/strto.c                |  4 ++++
>>  3 files changed, 18 insertions(+)
>>  create mode 100644 include/linux/tiny_ctype.h
> 
> So, cycling back.  I think this is a good idea, but breaks on say
> socfpga_de0_nano_soc currently:
> arm:  +   socfpga_de0_nano_soc
> +(socfpga_de0_nano_soc) lib/built-in.o: In function `_vprintf':
> +(socfpga_de0_nano_soc) lib/tiny-printf.c:315: undefined reference to `_ctype'
> +(socfpga_de0_nano_soc) make[2]: *** [spl/u-boot-spl] Error 1
> +(socfpga_de0_nano_soc) make[1]: *** [spl/u-boot-spl] Error 2
> +(socfpga_de0_nano_soc) make: *** [sub-make] Error 2

Yeah, I found this version broken too for some buildman targets.
So I came up with some fixes, and IIRC at least this compiled cleanly.
Unfortunately some boards *regressed* in terms of size, apparently
because the ctype functions are now inlined and if a board calls them
several times we end up with multiple copies, offsetting the code size
savings, which were quite substantial for many boards, otherwise.
I tried one more fix, which improved the situation, but still left
boards with bigger code sizes.
At this point I gave up, but I can post what I had so far for others to
pick up.

Cheers,
Andre.


More information about the U-Boot mailing list