[U-Boot-Users] sc520 problems with objcopy

I've been porting to an sc520 based board and I've had several compiler and linker issues which I think I have solved. The problem now is that objcopy never finishes and uses all available memory. I have to kill the process otherwise it starts to try and use all virtual memory as well.
I did a system call trace, and from it you can see that it gets to a point where it is calling brk() and from this it never seems to end.
Has anyone else had this problem? Is it a problem caused by linker/compiler settings? Any clues would be appreciated!
root@gentoo u-boot-1.1.1 # make ... SNIP ... UNDEF_SYM=`objdump -x lib_generic/libgeneric.a board/sc520_dsb/libsc520_dsb.a cpu/i386/libi386.a lib_i386/libi386.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/sk98lin/libsk98lin.a post/libpost.a post/cpu/libcpu.a common/libcommon.a |sed -n -e 's/.*(__u_boot_cmd_.*)/-u\1/p'|sort|uniq`;\ ld -Bstatic -T /samba/development/40_Magellan_Standard_Software/MAL/boot/u-boot-1.1.1/board/sc520_dsb/u-boot.lds -Ttext 0x387c0000 $UNDEF_SYM cpu/i386/start.o cpu/i386/start16.o cpu/i386/reset.o \ --start-group lib_generic/libgeneric.a board/sc520_dsb/libsc520_dsb.a cpu/i386/libi386.a lib_i386/libi386.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a net/libnet.a disk/libdisk.artc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/sk98lin/libsk98lin.a post/libpost.a post/cpu/libcpu.a common/libcommon.a --no-warn-mismatch -L /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4 -lgcc --end-group \ -Map u-boot.map -o u-boot objcopy --gap-fill=0xff -O srec u-boot u-boot.srec
... I press CTRL+C at this point to interrupt, otherwise all my memory gets used.
make: *** [u-boot.srec] Interrupt
root@gentoo u-boot-1.1.1 # objcopy --version GNU objcopy 2.14.90.0.8 20040114
root@gentoo u-boot-1.1.1 # ll u-boot -rwxrwxr-x 1 root root 594727 Oct 6 12:04 u-boot
... I perform a system call trace here to see what is happening during objcopy
root@gentoo u-boot-1.1.1 # strace objcopy --gap-fill=0xff -O srec u-boot u-boot.srec execve("/usr/bin/objcopy", ["objcopy", "--gap-fill=0xff", "-O", "srec", "u-boot", "u-boot.srec"], [/* 52 vars */]) = 0 uname({sys="Linux", node="gentoo", ...}) = 0 brk(0) = 0x808b000 open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory) mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=76539, ...}) = 0 mmap2(NULL, 76539, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40015000 close(3) = 0 open("/usr/lib/libbfd-2.14.90.0.8.so", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200\370"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=618708, ...}) = 0 mmap2(NULL, 634196, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40028000 mmap2(0x400b8000, 28672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x8f) = 0x400b8000 mmap2(0x400bf000, 15700, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x400bf000 close(3) = 0 open("/lib/libdl.so.2", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\34\0\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=10964, ...}) = 0 mmap2(NULL, 8624, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x400c3000 mmap2(0x400c5000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x2) = 0x400c5000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200Y\1"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1174424, ...}) = 0 mmap2(NULL, 1104676, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x400c6000 mmap2(0x401ce000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x107) = 0x401ce000 mmap2(0x401d2000, 6948, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x401d2000 close(3) = 0 munmap(0x40015000, 76539) = 0 open("/dev/urandom", O_RDONLY) = 3 read(3, "\316\324\316\262", 4) = 4 close(3) = 0 brk(0) = 0x808b000 brk(0x80ac000) = 0x80ac000 brk(0) = 0x80ac000 brk(0) = 0x80ac000 stat64("u-boot", {st_mode=S_IFREG|0775, st_size=594727, ...}) = 0 stat64("u-boot", {st_mode=S_IFREG|0775, st_size=594727, ...}) = 0 open("u-boot", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0775, st_size=594727, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000 _llseek(3, 0, [0], SEEK_SET) = 0 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\2\0\3\0\1\0\0\0\0\0|84"..., 4096) = 4096 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 4096, [4096], SEEK_SET) = 0 _llseek(3, 557056, [557056], SEEK_SET) = 0 read(3, "entoo Linux 3.3.4-r1, ssp-3.3.2-"..., 4096) = 4096 _llseek(3, 561152, [561152], SEEK_SET) = 0 _llseek(3, 0, [0], SEEK_SET) = 0 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\2\0\3\0\1\0\0\0\0\0|84"..., 4096) = 4096 stat64("u-boot.srec", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0 open("u-boot.srec", O_RDWR|O_CREAT|O_TRUNC, 0666) = 4 _llseek(3, 557056, [557056], SEEK_SET) = 0 read(3, "entoo Linux 3.3.4-r1, ssp-3.3.2-"..., 4096) = 4096 read(3, "\0\0\0\0\0\0\361\377=\5\0\0 \360\376\377\0\0\0\0\0\0\361"..., 16384) = 16384 read(3, "\n\0\0\0\22\0\1\0\3;\0\0\324\214|8\372\0\0\0\22\0\1\0\v"..., 4096) = 4096 brk(0) = 0x80ac000 brk(0x80db000) = 0x80db000 read(3, "urge_tx_ring\0rx_next\0rx_ring\0tx_"..., 12288) = 12288 read(3, "\0__u_boot_cmd_cp\0strspn\0NetSendP"..., 4096) = 807 _llseek(3, 8192, [8192], SEEK_SET) = 0 read(3, "\270\30\0\0\0\216\340\216\330\216\350\216\300\216\320\275"..., 81920) = 81920 read(3, "\311\351\t\371\377\377\215e\364[^_\311\303U\211\345WVS"..., 4096) = 4096 brk(0) = 0x80db000 brk(0x8103000) = 0x8103000 _llseek(3, 94208, [94208], SEEK_SET) = 0 read(3, "Redirect to \0*** ERROR: `serveri"..., 16384) = 16384 read(3, "h() routine too large (%d) %p - "..., 4096) = 4096 _llseek(3, 114688, [114688], SEEK_SET) = 0 read(3, "\0\0|8\0\0\2008\313\232}8\0\0@\0\223\f\0\0\224\f@\0\314"..., 4096) = 4096 _llseek(3, 4096, [4096], SEEK_SET) = 0 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096 _llseek(3, 118784, [118784], SEEK_SET) = 0 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096 _llseek(3, 122880, [122880], SEEK_SET) = 0 read(3, "\272\374\377f\270\313\360\r\200f\357\270\0\337\216\330"..., 4096) = 4096 _llseek(3, 126976, [126976], SEEK_SET) = 0 _llseek(3, 126976, [126976], SEEK_SET) = 0 read(3, "\1\0\0\0\0\0\260\3\\3\0\0\1\0\0\0d\0\0\0\0\0|8\22\0\0"..., 8192) = 8192 read(3, "\275\1\0\0\0\0\0\0D\0`\1\301\1\0\0\0\0\0\0D\0a\1\304\1"..., 4096) = 4096 read(3, "!\0I\23/\v\0\0\t\17\0\v\vI\23\0\0\n\25\1\1\23'\f\0\0\v"..., 28672) = 28672 read(3, "8\n\0\0\16\26\0\3\10:\v;\vI\23\0\0\17\23\1\1\23\3\16\v"..., 4096) = 4096 mmap2(NULL, 286720, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x401d4000 read(3, "Tu\7\0\0\0214\10\0\0\f\n\v1\6\307*\0\0\v!F\4\0\0\2#\0\6"..., 278528) = 278528 read(3, "\207\2\0\0\3#\264\4\5\327O\0\0\2@\207\2\0\0\3#\200\5\005"..., 4096) = 4096 munmap(0x401d4000, 286720) = 0 read(3, "\34V\325)I,V2V\10\36r\253p\234\200\342\343\272\236\3\t"..., 45056) = 45056 read(3, "\270b7;\270\3\274\1c/\3\v\267\3uc\3\f9da\3u9\3\f9:\3\346"..., 4096) = 4096 _llseek(3, 503808, [503808], SEEK_SET) = 0 read(3, "A\16\10\205\2B\r\5 \0\0\0\270\f\0\0\341=|8\227\0\0\0A\16"..., 16384) = 16384 read(3, "\2B\r\5F\203\5\206\4\207\3].\10\0\0\34\0\0\0\264M\0\0\324"..., 4096) = 4096 read(3, "\0__u_boot_cmd_chpart\0\0\0\0\0\256\1\0\0\2\0\331"..., 4096) = 4096 read(3, "\0\0flash_info\0\0\0\0\0p\0\0\0\2\0#>\3\0\207\17\0\0\217"..., 4096) = 4096 read(3, "\0\0p\0\0\0\206\0\0\0\0\0\0\0\0\0\0\0\301\0\0\0\315\0\0"..., 4096) = 4096 read(3, "ArpWaitPacketMAC\0NetOurHostName\0"..., 16384) = 16384 read(3, "pos\0data_in\0rtime_decompress\0com"..., 4096) = 4096 read(3, "entoo Linux 3.3.4-r1, ssp-3.3.2-"..., 4096) = 4096 brk(0) = 0x8103000 brk(0x8125000) = 0x8125000 brk(0) = 0x8125000 brk(0x8147000) = 0x8147000 brk(0) = 0x8147000 ... never ends ...
regards,
Aras Vaichas

Aras Vaichas wrote:
I've been porting to an sc520 based board and I've had several compiler and linker issues which I think I have solved. The problem now is that objcopy never finishes and uses all available memory. I have to kill the process otherwise it starts to try and use all virtual memory as well.
Looking at past posts, it looks like the sc520 port is in bad shape. I tried compiling sc520_spunk and sc520_cdp and they are missing so many files and have some so many linker problems (due to missing files and broken linker script) It looks like some PCI stuff must have disappeared along the way somewhere too ...
objcopy --gap-fill=0xff -O srec u-boot u-boot.srec
I removed the --gap-fill=0xff and I was able to create an srec file. I think objcopy was spending all its time filling in 0xff ... I don't know if it works yet, but at least I was able to complete a make.
Perhaps the sc520_xxxx ports should be marked as "incomplete" or "broken"?
regards,
Aras
participants (1)
-
Aras Vaichas