From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vignesh R Date: Tue, 5 Jul 2016 15:47:12 +0530 Subject: [U-Boot] [PATCH] SPL: tiny-printf: avoid any BSS usage In-Reply-To: <1467590206-17955-1-git-send-email-andre.przywara@arm.com> References: <1467590206-17955-1-git-send-email-andre.przywara@arm.com> Message-ID: <577B8928.7060300@ti.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Monday 04 July 2016 05:26 AM, Andre Przywara 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. > Please note that this is quite a hack (which may need to be extended to > other source files) and more sustainable solutions are warmly welcomed. > > Signed-off-by: Andre Przywara > --- There is atleast one place where I encountered same issue: drivers/i2c/i2c-uclass-compact.c: static int cur_busnum; I could verify that the below macro helps in that case as well. > > lib/tiny-printf.c | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-) > > diff --git a/lib/tiny-printf.c b/lib/tiny-printf.c > index 451f4f7..bc2995b 100644 > --- a/lib/tiny-printf.c > +++ b/lib/tiny-printf.c > @@ -13,11 +13,18 @@ > #include > #include > > -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. > + */ > +#define NO_BSS __attribute__((section(".data"))) > + > +static char *bf NO_BSS; > +static char zs NO_BSS; > > /* Current position in sprintf() output string */ > -static char *outstr; > +static char *outstr NO_BSS; > > static void out(char c) > { > -- Regards Vignesh