[U-Boot] [PATCH v2] SPL: tiny-printf: avoid any BSS usage

Marek Vasut marex at denx.de
Sat Jul 9 17:16:31 CEST 2016


On 07/09/2016 04:38 PM, Simon Glass wrote:
> On 8 July 2016 at 08:18, Andre Przywara <andre.przywara at arm.com> wrote:
>> As printf calls may be executed quite early, we should avoid using any
>> BSS stored variables, since some boards put BSS in DRAM, which may not
>> have been initialised yet.
>> Explicitly mark those "static global" variables as belonging to the
>> .data section, to keep tiny-printf clear of any BSS usage.
>>
>> Signed-off-by: Andre Przywara <andre.przywara at arm.com>
>
> Reviewed-by: Simon Glass <sjg at chromium.org>
>
> Another approach would be to put these vars in a struct, declare it as
> a local variable and pass it around. But this works OK too.

This might in fact be even better.

>> ---
>> Changes v1 .. v2:
>> - remove NO_BSS macro, use __attribute__ ... directly instead
>>
>>  lib/tiny-printf.c | 11 ++++++++---
>>  1 file changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/lib/tiny-printf.c b/lib/tiny-printf.c
>> index 451f4f7..b334f05 100644
>> --- a/lib/tiny-printf.c
>> +++ b/lib/tiny-printf.c
>> @@ -13,11 +13,16 @@
>>  #include <stdarg.h>
>>  #include <serial.h>
>>
>> -static char *bf;
>> -static char zs;
>> +/*
>> + * This code in here may execute before the DRAM is initialised, so
>> + * we should make sure that it doesn't touch BSS, which some boards
>> + * put in DRAM.
>> + */
>> +static char *bf __attribute__ ((section(".data")));
>> +static char zs __attribute__ ((section(".data")));
>>
>>  /* Current position in sprintf() output string */
>> -static char *outstr;
>> +static char *outstr __attribute__ ((section(".data")));
>>
>>  static void out(char c)
>>  {
>> --
>> 2.8.2
>>


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list