1 |
Hey :) |
2 |
|
3 |
just asking before i open a bug: i'm having a reproducible scanelf crash |
4 |
while building perl: |
5 |
|
6 |
(gdb) r -v -qyRAF '%T %p' |
7 |
var/tmp/portage/dev-lang/perl-5.8.8-r6/work/perl-5.8.8/ext/SDBM_File/sdbm/libsdbm.a |
8 |
Starting program: /tools/gentoo/mduft/toolsbase-2010.0/usr/bin/scanelf |
9 |
-v -qyRAF '%T %p' |
10 |
var/tmp/portage/dev-lang/perl-5.8.8-r6/work/perl-5.8.8/ext/SDBM_File/sdbm/libsdbm.a |
11 |
warning: Temporarily disabling breakpoints for unloaded shared library |
12 |
"/usr/lib/ld.so.1" |
13 |
|
14 |
Program received signal SIGSEGV, Segmentation fault. |
15 |
0x00013148 in readelf_buffer (filename=0x46408 |
16 |
"var/tmp/portage/dev-lang/perl-5.8.8-r6/work/perl-5.8.8/ext/SDBM_File/sdbm/libsdbm.a:sdbm.o", |
17 |
buffer=0xff3a01ce "\177ELF\001\002\001", |
18 |
buffer_len=7152) at paxelf.c:528 |
19 |
528 READELF_HEADER(32) |
20 |
(gdb) bt |
21 |
#0 0x00013148 in readelf_buffer (filename=0x46408 |
22 |
"var/tmp/portage/dev-lang/perl-5.8.8-r6/work/perl-5.8.8/ext/SDBM_File/sdbm/libsdbm.a:sdbm.o", |
23 |
buffer=0xff3a01ce "\177ELF\001\002\001", |
24 |
buffer_len=7152) at paxelf.c:528 |
25 |
#1 0x0002db94 in scanelf_archive (filename=0xffbfedbd |
26 |
"var/tmp/portage/dev-lang/perl-5.8.8-r6/work/perl-5.8.8/ext/SDBM_File/sdbm/libsdbm.a", |
27 |
fd=6, len=11926) at scanelf.c:1339 |
28 |
#2 0x0002de18 in scanelf_file (filename=0xffbfedbd |
29 |
"var/tmp/portage/dev-lang/perl-5.8.8-r6/work/perl-5.8.8/ext/SDBM_File/sdbm/libsdbm.a", |
30 |
st_cache=0xffbfe9dc) at scanelf.c:1377 |
31 |
#3 0x0002dee4 in scanelf_dir (path=0xffbfedbd |
32 |
"var/tmp/portage/dev-lang/perl-5.8.8-r6/work/perl-5.8.8/ext/SDBM_File/sdbm/libsdbm.a") |
33 |
at scanelf.c:1401 |
34 |
#4 0x0003041c in parseargs (argc=5, argv=0xffbfebfc) at scanelf.c:1959 |
35 |
#5 0x00030700 in main (argc=5, argv=0xffbfebfc) at scanelf.c:2028 |
36 |
(gdb) lis |
37 |
523 if (invalid > 1) \ |
38 |
524 warn("%s: Invalid section header info |
39 |
(%i)", filename, invalid); \ |
40 |
525 if (invalid) \ |
41 |
526 elf->shdr = NULL; \ |
42 |
527 } |
43 |
528 READELF_HEADER(32) |
44 |
529 READELF_HEADER(64) |
45 |
530 /* { char *p; strncpy(elf->basename, (p = |
46 |
strrchr(filename, '/')) == NULL ? "?" : p+1 , sizeof(elf->basename)); } */ |
47 |
531 |
48 |
532 return elf; |
49 |
|
50 |
seems like either scanelf has a bug, or that perl archive is damaged...? |
51 |
from what i see in gdb, is the buffer contents what it is expected to be |
52 |
("\177ELF\001\002\001")? i think it's off by one, shouldn't ELF be the |
53 |
first bytes (i don't know ELF that well, just PE/COFF, so i might be |
54 |
plain wrong here ;))? |
55 |
|
56 |
Cheers, Markus |