public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot-Users] Advice about a problem compiling with alternative toolchain
@ 2004-12-14 16:22 Andrew Reusch
  2004-12-14 16:43 ` Wolfgang Denk
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Reusch @ 2004-12-14 16:22 UTC (permalink / raw)
  To: u-boot

Hi,

    I've been experimenting with the u-boot bootloader and have found it 
to be an eminently useful utility for development on a powerpc based 
embedded device. Much thanks to the developers who have put so much 
effort into this project.

     The question of posing while related to the compilation of u-boot 
doesn't really involve a problem or issue with u-boot but I thought that 
I might be able to get some good input on this list. Apologies in 
advance if this is not the proper place for this topic.

    Anyway, I've been using a uclibc toolchain to build the userland 
applications, busybox, openssl, etc.. I thought it would be possible and 
convenient to use the same cross compiler for u-boot. I figured it would 
be possible without much difficulty because u-boot doesn't use the 
standard C library. And so it was fairly painless to compile a working 
version of u-boot. I was using a 2.95 version of gcc and 2.14.90.0.7 
version of binutils. ld crashed because of silly bug in ldlang.c that 
was easy to fix.

    So, I now wanted to try and compile the bootloader using a version 
of gcc greater or equal to 3.3. Maybe this is a bad idea but I was 
curious. Anyway the compilation seemed to go fine but producing the 
srec, "objcopy --gap-fill=0xff -O srec u-boot u-boot.srec", resulted in 
the objcopy application being stuck in a long loop and eating up a 
significant amount of system memory. Apparently it had caculated that 
one of the gaps had a size close to max int which shouldn't be possible. 
I don't think the problem isn't with objcopy itself but instead that the 
output of the compiler is different than what should be expected. I know 
an easy solution would be to use the ELDK in place of the current 
toolchain but I'm more interested in understanding what is going wrong.  

    Hence, the reason for my email. If I wanted to discover the root of 
my problem are there any good resources for information? Potentially a 
specification for the format expected by object copy. Or maybe some 
advice on problems to expect when using a new version of gcc and/or 
binutils to cross compile for a different architecture. Also any general 
comments or information anyone would be willing to impart would be 
useful. Essentially I'm just trying to learn. Thank you for your time.

regards,
Andrew

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot-Users] Advice about a problem compiling with alternative toolchain
  2004-12-14 16:22 [U-Boot-Users] Advice about a problem compiling with alternative toolchain Andrew Reusch
@ 2004-12-14 16:43 ` Wolfgang Denk
  2004-12-14 19:04   ` Andrew Reusch
  0 siblings, 1 reply; 8+ messages in thread
From: Wolfgang Denk @ 2004-12-14 16:43 UTC (permalink / raw)
  To: u-boot

In message <41BF1344.7020103@wiline.com> you wrote:
> 
>     So, I now wanted to try and compile the bootloader using a version 
> of gcc greater or equal to 3.3. Maybe this is a bad idea but I was 

It is not a bad idea - it should work fine.  ELDK  release  3.1  uses
GC-3.3.3, and this works fine.

> curious. Anyway the compilation seemed to go fine but producing the 
> srec, "objcopy --gap-fill=0xff -O srec u-boot u-boot.srec", resulted in 
> the objcopy application being stuck in a long loop and eating up a 
> significant amount of system memory. Apparently it had caculated that

I've seen this before. It happened for the ERIC  board.  The  problem
was  that  the  TEXT_BASE  definition  for  the ERIC board was set to
0xFFFE0000 while the resultant code  and  data  size  of  U-Boot  was
bigger  than  the 0x20000 bytes. This confused the linker and objcopy
because the memory address of the last  portion  of  the  image  goes
beyond the 0xFFFFFFFF value causing an overflow of a 32-bit variable.

The easiest way to solve the problem for this particular board was to
change the TEXT_BASE definition to a lower  value,  for  instance  to
0xFFFC0000.

> output of the compiler is different than what should be expected. I know 
> an easy solution would be to use the ELDK in place of the current 
> toolchain but I'm more interested in understanding what is going wrong.  

Check if it's really a toolchain problem, or just a  misconfiguration
for your board.

For  example,  try  if  you  can   build   other   (standard)   board
configurations using your toolchain.

Best regards,

Wolfgang Denk

-- 
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
The people of Gideon have always believed that life is  sacred.  That
the  love  of  life  is  the  greatest  gift  ... We are incapable of
destroying or interfering with the creation of that which we love  so
deeply -- life in every form from fetus to developed being.
	-- Hodin of Gideon, "The Mark of Gideon", stardate 5423.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot-Users] Advice about a problem compiling with alternative toolchain
  2004-12-14 16:43 ` Wolfgang Denk
@ 2004-12-14 19:04   ` Andrew Reusch
  2004-12-14 19:24     ` Wolfgang Denk
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Reusch @ 2004-12-14 19:04 UTC (permalink / raw)
  To: u-boot

Wolfgang Denk wrote:

>In message <41BF1344.7020103@wiline.com> you wrote:
>  
>
>>    So, I now wanted to try and compile the bootloader using a version 
>>of gcc greater or equal to 3.3. Maybe this is a bad idea but I was 
>>    
>>
>
>It is not a bad idea - it should work fine.  ELDK  release  3.1  uses
>GC-3.3.3, and this works fine.
>
>  
>
>>curious. Anyway the compilation seemed to go fine but producing the 
>>srec, "objcopy --gap-fill=0xff -O srec u-boot u-boot.srec", resulted in 
>>the objcopy application being stuck in a long loop and eating up a 
>>significant amount of system memory. Apparently it had caculated that
>>    
>>
>
>I've seen this before. It happened for the ERIC  board.  The  problem
>was  that  the  TEXT_BASE  definition  for  the ERIC board was set to
>0xFFFE0000 while the resultant code  and  data  size  of  U-Boot  was
>bigger  than  the 0x20000 bytes. This confused the linker and objcopy
>because the memory address of the last  portion  of  the  image  goes
>beyond the 0xFFFFFFFF value causing an overflow of a 32-bit variable.
>
>The easiest way to solve the problem for this particular board was to
>change the TEXT_BASE definition to a lower  value,  for  instance  to
>0xFFFC0000.
>
>  
>
I'm compiling using the settings for the a3000 (make A3000_config). The 
board I'm using is similar, there were some slight modifications to make 
it work.  But, I'm running into the same issue when I use the "vanilla" 
1.1.1 release of u-boot.

Changing the TEXT_BASE allowed me to compile but I had to set it to a 
very low address. Initially it was set to 0xFFF00000, I was able to 
compile when I changed it to 0xF00000. The resulting u-boot.bin was over 
15MB in size which can't be right.

>>output of the compiler is different than what should be expected. I know 
>>an easy solution would be to use the ELDK in place of the current 
>>toolchain but I'm more interested in understanding what is going wrong.  
>>    
>>
>
>Check if it's really a toolchain problem, or just a  misconfiguration
>for your board.
>
>For  example,  try  if  you  can   build   other   (standard)   board
>configurations using your toolchain.
>  
>

I was able to build the other boards without a problem such as the 
MPC8540ADS and Sandpoint8245. I wonder what particular about the a3000 
settings is causing the problems. I'll try out version 3.1 of the ELDK 
and see what happens.

I really appreciate your helpful and informative response, Thank you.

>Best regards,
>
>Wolfgang Denk
>
>  
>
regards,
Andrew

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot-Users] Advice about a problem compiling with alternative toolchain
  2004-12-14 19:04   ` Andrew Reusch
@ 2004-12-14 19:24     ` Wolfgang Denk
  2004-12-14 19:44       ` Andrew Reusch
  0 siblings, 1 reply; 8+ messages in thread
From: Wolfgang Denk @ 2004-12-14 19:24 UTC (permalink / raw)
  To: u-boot

In message <41BF392A.908@wiline.com> you wrote:
> 

[33 lines of unrelated quote deleted]

Please quote only those parts of the  message  you  really  need  for
reference.

> I'm compiling using the settings for the a3000 (make A3000_config). The 

The A3000 board builds fine without any  errors;  and  the  resulting
images has a reasonable size:

	-> MAKEALL A3000
	Configuring for A3000 board...
	   text    data     bss     dec     hex filename
	 119432    7648   25616  152696   25478 u-boot
	-> ls -lh u-boot.bin
	-rwxr-xr-x    1 wd       users        127K Dec 14 20:19 u-boot.bin

> board I'm using is similar, there were some slight modifications to make 

Then double-check your "slight" modifications.

> it work.  But, I'm running into the same issue when I use the "vanilla" 
> 1.1.1 release of u-boot.

Except for a harmless warning (by GCC-3.3.3) U-Boot-1.1.1 builds just
fine, too:

	-> MAKEALL A3000
	Configuring for A3000 board...
	cmd_bootm.c: In function `do_bootm':
	cmd_bootm.c:329: warning: dereferencing type-punned pointer will break strict-aliasing rules
	   text    data     bss     dec     hex filename
	 119296    7648   25616  152560   253f0 u-boot
	-> ls -lh u-boot.bin
	-rwxr-xr-x    1 wd       users        127K Dec 14 20:22 u-boot.bin

> Changing the TEXT_BASE allowed me to compile but I had to set it to a 
> very low address. Initially it was set to 0xFFF00000, I was able to 
> compile when I changed it to 0xF00000. The resulting u-boot.bin was over 
> 15MB in size which can't be right.

Indeed. Check your "slight" modifications.

Best regards,

Wolfgang Denk

-- 
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Time is fluid ... like a river with currents, eddies, backwash.
	-- Spock, "The City on the Edge of Forever", stardate 3134.0

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot-Users] Advice about a problem compiling with alternative toolchain
  2004-12-14 19:24     ` Wolfgang Denk
@ 2004-12-14 19:44       ` Andrew Reusch
  2004-12-15 15:47         ` Andrew Reusch
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Reusch @ 2004-12-14 19:44 UTC (permalink / raw)
  To: u-boot

Wolfgang Denk wrote:

>Except for a harmless warning (by GCC-3.3.3) U-Boot-1.1.1 builds just
>fine, too:
>  
>
Thanks that is good to know. I'm fairly certain now that the problem is 
with the cross compiler I built.

>>Changing the TEXT_BASE allowed me to compile but I had to set it to a 
>>very low address. Initially it was set to 0xFFF00000, I was able to 
>>compile when I changed it to 0xF00000. The resulting u-boot.bin was over 
>>15MB in size which can't be right.
>>    
>>
>
>Indeed. Check your "slight" modifications.
>  
>
Will do. Well when I said "slight" I didn't make any guarantees about 
correct. Truly the root cause of my problems is myself.

Thanks again,
Andrew

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot-Users] Advice about a problem compiling with alternative toolchain
  2004-12-14 19:44       ` Andrew Reusch
@ 2004-12-15 15:47         ` Andrew Reusch
  2004-12-15 18:29           ` Andrew Reusch
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Reusch @ 2004-12-15 15:47 UTC (permalink / raw)
  To: u-boot

Just to follow up. I was able to get the toolchain I built, gcc-3.3.3 
and binutil 2.14.90.0.6, to compile u-boot.bin by modifying linker 
script, board/a3000/u-boot.lds.

--- u-boot.lds  2003-06-27 17:31:56.000000000 -0400
+++ u-boot.lds.bak      2004-12-15 10:39:49.000000000 -0500
@@ -70,6 +70,7 @@
     . = ALIGN(16);
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }


Apparently, the toolchain I built wasn't handling the .rodata.str1.4 
section correctly, it wasn't being subsumed into the .text section. 
Instead it was at some low address. This caused the objcopy command to 
try and pad a large number of bytes. I'm still curious as to why the 
toolchain in ELDK-3.1 was able to build the u-boot.bin file without this 
change in the linker script. Whose responsibility is it to properly 
handle the reallocation of the ".rodata.str1.4" section? Is that a 
proper question?

regards,
Andrew

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot-Users] Advice about a problem compiling with alternative toolchain
  2004-12-15 15:47         ` Andrew Reusch
@ 2004-12-15 18:29           ` Andrew Reusch
  2004-12-15 18:39             ` Wolfgang Denk
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Reusch @ 2004-12-15 18:29 UTC (permalink / raw)
  To: u-boot

Andrew Reusch wrote:

> Apparently, the toolchain I built wasn't handling the .rodata.str1.4 
> section correctly, it wasn't being subsumed into the .text section. 
> Instead it was at some low address.

What I said was wrong.  Is it correct to say that the ".rodata.str1.4" 
section is realigned or relocated to be part of the ".data" sections by 
the linker?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot-Users] Advice about a problem compiling with alternative toolchain
  2004-12-15 18:29           ` Andrew Reusch
@ 2004-12-15 18:39             ` Wolfgang Denk
  0 siblings, 0 replies; 8+ messages in thread
From: Wolfgang Denk @ 2004-12-15 18:39 UTC (permalink / raw)
  To: u-boot

In message <41C08298.1070502@wiline.com> you wrote:
> 
> What I said was wrong.  Is it correct to say that the ".rodata.str1.4" 
> section is realigned or relocated to be part of the ".data" sections by 
> the linker?

I'd expect to see it as part of  the  ".rodata"  section,  which  the
linker script adds together with ".data" etc.

Best regards,

Wolfgang Denk

-- 
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
There are three things I always forget. Names, faces -  the  third  I
can't remember.                                         - Italo Svevo

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2004-12-15 18:39 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-12-14 16:22 [U-Boot-Users] Advice about a problem compiling with alternative toolchain Andrew Reusch
2004-12-14 16:43 ` Wolfgang Denk
2004-12-14 19:04   ` Andrew Reusch
2004-12-14 19:24     ` Wolfgang Denk
2004-12-14 19:44       ` Andrew Reusch
2004-12-15 15:47         ` Andrew Reusch
2004-12-15 18:29           ` Andrew Reusch
2004-12-15 18:39             ` Wolfgang Denk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox