[U-Boot] Build failures with older toolchain

Premi, Sanjeev
2010-11-30T18:23:35Z

> From: Dirk Behme [mailto:dirk.behme at googlemail.com]
> Sent: Tuesday, November 30, 2010 10:15 PM
> To: Premi, Sanjeev
> Cc: u-boot at lists.denx.de
> Subject: Re: [U-Boot] Build failures with older toolchain
>
> On 30.11.2010 15:25, Premi, Sanjeev wrote:
> >> -----Original Message-----
> >> From: u-boot-bounces at lists.denx.de
> >> [mailto:u-boot-bounces at lists.denx.de] On Behalf Of Premi, Sanjeev
> >> Sent: Monday, November 29, 2010 8:38 PM
> >> To: Wolfgang Denk
> >> Cc: u-boot at lists.denx.de
> >> Subject: Re: [U-Boot] Build failures with older toolchain
> >>
> >
> > [snip]...[snip]
> >
> >>>>
> >>>> I am process of downloading the 2009q3 version from
> >>> codesourcery
> >>>> Albert mentioned he is using it. Are you on the same
> >> version as
> >>>> well?
> >>>
> >>> No, I'm using ELDk 4.2
> >>
> >> [sp] Okay, so I downloaded both 2009-q3 and 2010.09-50
> versions of the
> >> Codesourcery Lite edition.
> >>
> >> There is no difference in the observations between
> >> 2009q3 and 2010q1.
> >>
> > [sp] I have been able to narrow down the problem to one
> variable defined
> > in board/ti/evm.c - omap3_evm_version - declared as:
> > static u8 omap3_evm_version;
> >
> > Any attempt to assign value this variable in
> omap3_evm_get_revision()
> > leads to the linker error I noted with Codesourcery
> 2010q1-202.
> >
> > With 2009q1-203, definition of variable itself is
> sufficient to cause
> > the linker error.
>
> Maybe CCing Codesourcery's mailing list
>
> http://www.codesourcery.com/archives/arm-gnu-discuss/maillist.html
>
> could help, too? At least it's worth a try?

I was thinking of same - only after we understand if there isn't
something we are, possibly, missing in changes to linker scripts.

>
> Dirk
>
> > I have pasted a patch below that constructs the
> testcase I have created
> > to explain these observations:
> > 1) When macros both _EXCLUDE_ME_1 and _EXCLUDE_ME_2
> are undefined, the
> > problem is - as described.
> >
> > 2) When only macro _EXCLUDE_ME_1 is defined, the
> compilation succeeds
> > with Codesourcery 2010q1-202; but fails with 2009q1-203.
> >
> > 3) When both macros _EXCLUDE_ME_1 and _EXCLUDE_ME_2
> are defined, the
> > compilation succeeds with both codesourcery versions.
> >
> > OMAP3EVM is obviously not the only file using
> statics. I see their usage
> > in many files including OMAP3Beagle as well - one
> reason I did not even
> > suspect this to be problem.
> >
> > I haven't yet been able to conclude the cause of
> failure - but appears
> > to be related to handling of static variables across
> compiler versions.
> > Still need to investigate further on this...
> >
> > Board revision needs to be detected early during
> initialization. How is
> > this handled for other boards? (I am currently trying
> to browse non-omap
> > boards for pointers). Any quick suggestions would be helpful.
> >
> > [patch]
> > diff --git a/board/ti/evm/evm.c b/board/ti/evm/evm.c
> > index 09d14f7..e766355 100644
> > --- a/board/ti/evm/evm.c
> > +++ b/board/ti/evm/evm.c
> > @@ -37,15 +37,30 @@
> > #include<asm/mach-types.h>
> > #include "evm.h"
> >
> > +/* #define _EXCLUDE_ME_1 */ /* Uncomment - works
> with 2010q1 only */
> > +/* #define _EXCLUDE_ME_2 */ /* Uncomment - works
> with 2009q3 as well */
> > +
> > +#if !defined(_EXCLUDE_ME_2)
> > static u8 omap3_evm_version;
> > +#endif
> >
> > u8 get_omap3_evm_rev(void)
> > {
> > +#ifdef _EXCLUDE_ME_2
> > + return OMAP3EVM_BOARD_GEN_1; /* Debugging: Don't use
> the variable */
> > +#else
> > return omap3_evm_version;
> > +#endif
> > +
> > }
> >
> > static void omap3_evm_get_revision(void)
> > {
> > +#ifdef _EXCLUDE_ME_COMPLETELY_
> > + /*
> > + * Original code in the function is being removed
> completely to reduce
> > + * scope of the debug exercise.
> > + */
> > #if defined(CONFIG_CMD_NET)
> > /*
> > * Board revision can be ascertained only by identifying
> > @@ -80,6 +95,20 @@ static void omap3_evm_get_revision(void)
> > omap3_evm_version = OMAP3EVM_BOARD_GEN_2;
> > #endif
> > #endif /* CONFIG_CMD_NET */
> > +
> > +#else
> > + /*
> > + * Dummy implementation of function just for testing
> > + */
> > +
> > +#if !defined(_EXCLUDE_ME_1)&& !defined(_EXCLUDE_ME_2)
> > + /*
> > + * Dummy assignment just for testing
> > + */
> > + omap3_evm_version = OMAP3EVM_BOARD_GEN_2;
> > +#endif
> > +
> > +#endif /* _EXCLUDE_ME_COMPLETELY_ */
> > }
> >
> > #ifdef CONFIG_USB_OMAP3
> > [/patch]
> >
> > [snip]
> > Removed my observations for Codesourcery 2010.09-50.
> > Did not get chance to look at them so far...
> > [/snip]
> >
> > Best regards,
> > Sanjeev
> > _______________________________________________
> > U-Boot mailing list
> > U-Boot at lists.denx.de
> > http://lists.denx.de/mailman/listinfo/u-boot
> >
>
>