
-----Original Message----- From: Dirk Behme [mailto:dirk.behme@googlemail.com] Sent: Tuesday, November 30, 2010 10:15 PM To: Premi, Sanjeev Cc: u-boot@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@lists.denx.de [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Premi, Sanjeev Sent: Monday, November 29, 2010 8:38 PM To: Wolfgang Denk Cc: u-boot@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@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot