From: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
To: dan@debian.org
Cc: jsun@mvista.com, linux-mips@linux-mips.org, binutils@sources.redhat.com
Subject: Re: Huge dynamically linked program does not run on mips-linux
Date: Thu, 30 Oct 2003 21:54:53 +0900 (JST) [thread overview]
Message-ID: <20031030.215453.78703232.nemoto@toshiba-tops.co.jp> (raw)
In-Reply-To: <20031029181516.GA14443@nevyn.them.org>
[-- Attachment #1: Type: Text/Plain, Size: 8124 bytes --]
>>>>> On Wed, 29 Oct 2003 13:15:17 -0500, Daniel Jacobowitz <dan@debian.org> said:
dan> Atsushi-san's program would not even link with a binutils that
dan> didn't support multiple GOTs; I guess that something is going
dan> wrong with that support.
Yes, I guess too.
dan> I don't suppose you could provide a testcase?
I wrote a short script to generate a testcase. Running attached awk
script create src0.c, src1.c, ..., src3.c.
$ mips-linux-gcc -c src[0-4].c
$ mips-linux-gcc -o bigapp src[0-4].o
This bigapp program compiled with binutils-2.14, gcc-3.3.2, uClibc
0.9.21 is corrupted.
Here is some outputs from readelf:
$ mips-linux-readelf -S bigapp
There are 31 section headers, starting at offset 0x36ad78:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .interp PROGBITS 004000f4 0000f4 00000d 00 A 0 0 1
[ 2] .reginfo MIPS_REGINFO 00400104 000104 000018 18 A 0 0 4
[ 3] .dynamic DYNAMIC 0040011c 00011c 0000d8 08 A 6 0 4
[ 4] .hash HASH 004001f4 0001f4 028784 04 A 5 0 4
[ 5] .dynsym DYNSYM 00428978 028978 061c40 10 A 6 1 4
[ 6] .dynstr STRTAB 0048a5b8 08a5b8 041da5 00 A 0 0 1
[ 7] .init PROGBITS 004cc370 0cc370 0000ac 00 AX 0 0 4
[ 8] .text PROGBITS 004cc420 0cc420 1b7d60 00 AX 0 0 16
[ 9] .fini PROGBITS 00684180 284180 00005c 00 AX 0 0 4
[10] .rodata PROGBITS 006841e0 2841e0 000010 00 A 0 0 16
[11] .data PROGBITS 10000000 285000 000010 00 WA 0 0 16
[12] .rld_map PROGBITS 10000010 285010 000004 00 WA 0 0 4
[13] .eh_frame PROGBITS 10000014 285014 000004 00 A 0 0 4
[14] .ctors PROGBITS 10000018 285018 000008 00 WA 0 0 4
[15] .dtors PROGBITS 10000020 285020 000008 00 WA 0 0 4
[16] .jcr PROGBITS 10000028 285028 000004 00 WA 0 0 4
[17] .got PROGBITS 10000030 285030 02245c 04 WAp 0 0 16
[18] .sbss NOBITS 1002248c 2a7490 000000 00 WAp 0 0 1
[19] .bss NOBITS 10022490 2a7490 000020 00 WA 0 0 16
[20] .comment PROGBITS 00000000 2a7490 0000a2 00 0 0 1
[21] .debug_aranges MIPS_DWARF 00000000 2a7538 000020 00 0 0 8
[22] .debug_info MIPS_DWARF 00000000 2a7558 000069 00 0 0 1
[23] .debug_abbrev MIPS_DWARF 00000000 2a75c1 000014 00 0 0 1
[24] .debug_line MIPS_DWARF 00000000 2a75d5 000044 00 0 0 1
[25] .pdr PROGBITS 00000000 2a761c 0c3660 00 0 0 4
[26] .rel.dyn REL 004cc360 0cc360 000010 08 A 5 0 16
[27] .mdebug.abi32 PROGBITS 00000000 36ac7c 000000 00 0 0 1
[28] .shstrtab STRTAB 00000000 36ac7c 0000fb 00 0 0 1
[29] .symtab SYMTAB 00000000 36b250 0620a0 10 30 45 4
[30] .strtab STRTAB 00000000 3cd2f0 041ee7 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
$ mips-linux-readelf -r bigapp
Relocation section '.rel.dyn' at offset 0xcc360 contains 2 entries:
Offset Info Type Sym.Value Sym. Name
00000000 00000000 R_MIPS_NONE
1001f4f0 00314703 R_MIPS_REL32 004cc490 getpid
$ mips-linux-readelf -x 17 bigapp | grep 1001f4f0
0x1001f4f0 004cc490 005ea570 00655ba0 0062c9e0 .L...^.p.e[..b..
$ mips-linux-readelf -s bigapp | grep getpid
12615: 004cc490 0 FUNC GLOBAL DEFAULT UND getpid
4109: 004cc490 0 FUNC GLOBAL DEFAULT UND getpid
Strangely the bigapp works correct if I compiled it with glibc 2.2.5.
Here is some outputs from readelf on bigapp.glibc:
$ mips-linux-readelf -S bigapp.glibc
There are 36 section headers, starting at offset 0x378644:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .interp PROGBITS 00400114 000114 00000d 00 A 0 0 1
[ 2] .note.ABI-tag NOTE 00400130 000130 000020 00 A 0 0 16
[ 3] .reginfo MIPS_REGINFO 00400150 000150 000018 18 A 0 0 4
[ 4] .dynamic DYNAMIC 00400168 000168 0000f0 08 A 7 0 4
[ 5] .hash HASH 00400258 000258 028764 04 A 6 0 4
[ 6] .dynsym DYNSYM 004289bc 0289bc 061bc0 10 A 7 1 4
[ 7] .dynstr STRTAB 0048a57c 08a57c 041d6d 00 A 0 0 1
[ 8] .gnu.version VERSYM 004cc2ea 0cc2ea 00c378 02 A 6 0 2
[ 9] .gnu.version_r VERNEED 004d8664 0d8664 000020 00 A 7 1 4
[10] .init PROGBITS 004d86a0 0d86a0 0000ac 00 AX 0 0 4
[11] .text PROGBITS 004d8750 0d8750 1b7d40 00 AX 0 0 16
[12] .fini PROGBITS 00690490 290490 00005c 00 AX 0 0 4
[13] .rodata PROGBITS 006904f0 2904f0 000020 00 A 0 0 16
[14] .data PROGBITS 10000000 291000 000020 00 WA 0 0 16
[15] .rld_map PROGBITS 10000020 291020 000004 00 WA 0 0 4
[16] .eh_frame PROGBITS 10000024 291024 000004 00 A 0 0 4
[17] .ctors PROGBITS 10000028 291028 000008 00 WA 0 0 4
[18] .dtors PROGBITS 10000030 291030 000008 00 WA 0 0 4
[19] .jcr PROGBITS 10000038 291038 000004 00 WA 0 0 4
[20] .got PROGBITS 10000040 291040 022460 04 WAp 0 0 16
[21] .sbss NOBITS 100224a0 2b34a0 000000 00 WAp 0 0 1
[22] .bss NOBITS 100224a0 2b34a0 000020 00 WA 0 0 16
[23] .comment PROGBITS 00000000 2b34a0 0000b4 00 0 0 1
[24] .debug_aranges MIPS_DWARF 00000000 2b3558 000058 00 0 0 8
[25] .debug_pubnames MIPS_DWARF 00000000 2b35b0 000025 00 0 0 1
[26] .debug_info MIPS_DWARF 00000000 2b35d5 000c55 00 0 0 1
[27] .debug_abbrev MIPS_DWARF 00000000 2b422a 00012b 00 0 0 1
[28] .debug_line MIPS_DWARF 00000000 2b4355 00028e 00 0 0 1
[29] .debug_str MIPS_DWARF 00000000 2b45e3 000960 01 MS 0 0 1
[30] .pdr PROGBITS 00000000 2b4f44 0c35c0 00 0 0 4
[31] .mdebug.abi32 PROGBITS 00000000 378504 000000 00 0 0 1
[32] .rel.dyn REL 004d8690 0d8690 000010 08 A 6 0 16
[33] .shstrtab STRTAB 00000000 378504 000140 00 0 0 1
[34] .symtab SYMTAB 00000000 378be4 062200 10 35 59 4
[35] .strtab STRTAB 00000000 3dade4 04204e 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
$ mips-linux-readelf -r bigapp.glibc
Relocation section '.rel.dyn' at offset 0xd8690 contains 2 entries:
Offset Info Type Sym.Value Sym. Name
00000000 00000000 R_MIPS_NONE
1001c3c0 00340403 R_MIPS_REL32 00000000 getpid
$ mips-linux-readelf -x 20 bigapp.glibc | grep 1001c3c0
0x1001c3c0 00000000 0060d3e0 0063cd10 00608f70 .....`...c...`.p
$ mips-linux-readelf -s bigapp.glibc | grep getpid
13316: 00000000 0 FUNC GLOBAL DEFAULT UND getpid@GLIBC_2.0 (2)
2943: 00000000 0 FUNC GLOBAL DEFAULT UND getpid@@GLIBC_2.0
Is there other informations I can provide?
---
Atsushi Nemoto
[-- Attachment #2: mkbigapp --]
[-- Type: Text/Plain, Size: 688 bytes --]
#!/bin/awk -f
BEGIN {
nfile = 5;
nfunc = 5000;
for (j = 0; j < nfile; j++) {
fname = "src" j ".c";
printf("/* %s */\n", fname) > fname;
for (i = 0; i < nfunc; i++) {
printf("void func%d_%d(void) {}\n", j, i, i) >> fname;
}
printf("int func%d(void) {\n", j) >> fname;
for (i = 0; i < nfunc; i++) {
printf("func%d_%d();\n", j, i) >> fname;
}
printf("return getpid();\n") >> fname;
printf("}\n") >> fname;
if (j == 0) {
printf("int main(int argc, char **argv) {\n") > fname;
for (i = 0; i < nfile; i++) {
printf("printf(\"%%d\\n\", func%d());\n", i) >> fname;
}
printf("return 0;\n") >> fname;
printf("}\n") >> fname;
}
close(fname);
}
}
next prev parent reply other threads:[~2003-10-30 12:52 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-22 8:11 Huge dynamically linked program does not run on mips-linux Atsushi Nemoto
2003-10-29 7:32 ` Atsushi Nemoto
2003-10-29 18:14 ` Jun Sun
2003-10-29 18:15 ` Daniel Jacobowitz
2003-10-30 1:53 ` Thiemo Seufer
2003-10-30 2:25 ` Eric Christopher
2003-11-04 5:21 ` Atsushi Nemoto
2003-11-04 8:05 ` Eric Christopher
2003-11-04 11:02 ` Atsushi Nemoto
2003-11-04 17:53 ` Eric Christopher
2003-11-06 16:54 ` Atsushi Nemoto
2003-12-01 5:07 ` Atsushi Nemoto
2003-11-07 16:40 ` Thiemo Seufer
2003-11-07 20:51 ` Eric Christopher
2003-10-30 12:54 ` Atsushi Nemoto [this message]
2003-11-04 16:17 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20031030.215453.78703232.nemoto@toshiba-tops.co.jp \
--to=anemo@mba.ocn.ne.jp \
--cc=binutils@sources.redhat.com \
--cc=dan@debian.org \
--cc=jsun@mvista.com \
--cc=linux-mips@linux-mips.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.