[U-Boot] u-boot.lds i686-pc-linux-gnu-ld section .start16 overlapssection .text

Lance Zhang Lance.Zhang at taihootech.com
Thu Dec 4 09:07:29 CET 2008


Vignesh, Thank you very much.

>Try to change the boundary limits for the sections to prevent
conflicts,
>this is due to the new addition of the driver code.
I am not familiar with the liker script.
Can I simplely modify the following codes in u-boot.lds
	. = 0xff00;
 	.start16 : AT (0x05ffff00) { *(.start16); }
 
 	. = 0xfff0;
 	.reset : AT (0x05fffff0) { *(.reset); }

To 
	. = 0xff00;
 	.start16 : AT (0x06ffff00) { *(.start16); }
 
 	. = 0xfff0;
 	.reset : AT (0x06fffff0) { *(.reset); }

The compilation is Ok, but the file size is 26M, it is very large.

Can you told me how to change the lds file. Thanks very much

The errors outputted by ld
i686-pc-linux-gnu-ld:
 section .start16 [05ffff00 -> 05ffffba] overlaps section .text
[05fe0000 -> 06011b85]
i686-pc-linux-gnu-ld:
 section .reset [05fffff0 -> 05ffffff] overlaps section .text [05fe0000
-> 06011b85]
make: *** [u-boot] Error 1

The lds contents:
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
 OUTPUT_ARCH(i386)
 ENTRY(_start)
 
 SECTIONS
 {
 	/* here is where we are in flash: last 128k */
 	. = 0x05fe0000;
 
 	.text  : { *(.text); }
 
 	. = ALIGN(4);
 	.rodata : { *(.rodata) *(.rodata.str1.1) *(.rodata.str1.32) }
 
 
 	/* define its reloation address as off in RAM at 1M below 64M
line,  but use 
 	 * AT () to make its load address right here, after previous
 	 */
 	. = 0x2000;

 	_i386boot_romdata_dest = ABSOLUTE(.);
 	.data : AT ( LOADADDR(.rodata) + SIZEOF(.rodata) ) { *(.data) }
 	_i386boot_romdata_start = LOADADDR(.data);
 
 	__u_boot_cmd_start = .;
 	.u_boot_cmd : AT ( LOADADDR (.data ) + SIZEOF (.data) ) {
*(.u_boot_cmd) }
 	__u_boot_cmd_end = .;

  	.got : AT ( LOADADDR(.u_boot_cmd) + SIZEOF(.u_boot_cmd) ) {
*(.got) }
 	_i386boot_romdata_size = SIZEOF(.data) + SIZEOF(.got) + SIZEOF
(.u_boot_cmd);
 
 	. = 0x8000;
 	_i386boot_bss_start = ABSOLUTE(.);
 	.bss : { *(.bss) }
 	_i386boot_bss_size = SIZEOF(.bss);
 
 	/* 16bit realmode trampoline code */
 	.realmode 0x7c0 : AT ( LOADADDR(.got) + SIZEOF(.got) ) {
*(.realmode) }
 
 	_i386boot_realmode = LOADADDR(.realmode);
 	_i386boot_realmode_size = SIZEOF(.realmode);
 
 	/* 16bit BIOS emulation code (just enough to boot Linux) */
 	.bios 0 : AT ( LOADADDR(.realmode) + SIZEOF(.realmode) ) {
*(.bios) }
 
 	_i386boot_bios = LOADADDR(.bios);
 	_i386boot_bios_size = SIZEOF(.bios);
 
 
 	/* The load addresses below assumes that the flash
 	 * will be mapped so that 0x3fe0000 == 0xffff0000
 	 * at reset time
 	 *
 	 * The fe00 and ff00 offsets of the start32 and start16
 	 * segments are arbitrary, the just have to be mapped
 	 * at reset and the code have to fit.
 	 * The fff0 offset of reset is important, however.
 	 */
 
 	. = 0xfffffe00;
 	.start32 : AT (0x05fffe00) { *(.start32); }
 
 	. = 0xff00;
 	.start16 : AT (0x05ffff00) { *(.start16); }
 
 	. = 0xfff0;
 	.reset : AT (0x05fffff0) { *(.reset); }
 	_i386boot_end = (LOADADDR(.reset) + SIZEOF(.reset) );
 }



More information about the U-Boot mailing list