From mboxrd@z Thu Jan 1 00:00:00 1970 From: Timur Tabi Date: Fri, 20 Jun 2008 09:47:01 -0500 Subject: [U-Boot-Users] Non-static global variables cause relocation to fail In-Reply-To: <485B250F.6090600@gmail.com> References: <20080619204505.48ABD248D2@gemini.denx.de> <485AC5C5.5080709@freescale.com> <485B250F.6090600@gmail.com> Message-ID: <485BC2E5.8040101@freescale.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Jerry Van Baren wrote: > That isn't a variable, that is the first line of a struct declaration. I didn't include this part (although since the code compiles, it should be obvious that it exists): } e; So I'm defining a global variable called 'e'. Perhaps the short name is part of the problem. > You cut some pretty important information: what the struct is, the > actual variable in question, and whether it is initialized. As Wolfgang pointed out, my assumption that this is a generic problem is flawed, and it's most likely a problem with my specific implementation. > I'm guessing from the name "eeprom" that you have a non-zero initializer > on it??? No, no initializer. > Does it make a difference if it is uninitialized, initialized > to {0}, or initialized to non-zero values? I don't know, I haven't considered it. I did notice this code in fsl_i2c.c: #ifdef CFG_SPD_BUS_NUM static unsigned int i2c_bus_num __attribute__ ((section ("data"))) = CFG_SPD_BUS_NUM; #else static unsigned int i2c_bus_num __attribute__ ((section ("data"))) = 0; #endif I wrote this code, but I don't remember why I added the "__attribute__ ((section ("data")))". I guess I should have commented it, but I wonder if it applies to my current problem. > Does it make a difference if it is packed or not (my guess: much less > likely than initialization to cause works/broken). It needs to be packed, otherwise the code won't work. Sadly, someone defined a 4-byte integer at address 0x72 in the EEPROM. When I post the full patch, I'll revisit this problem. Sorry for all the noise. -- Timur Tabi Linux kernel developer at Freescale