Package: binutils
Version: 2.17.20070210cvs-1
Severity: important

Hi,

When building openipmi 2.0.7-1 and trying to make a shared library and
generating a map file, ld segfaults:
x86_64-linux-gnu-gcc -shared  .libs/md5.o .libs/md2.o .libs/ipmi_auth.o 
.libs/ipmi_malloc.o .libs/ilist.o .libs/locks.o .libs/hash.o 
.libs/locked_list.o .libs/os_handler.o  -lcurses  -Wl,-Map 
-Wl,libOpenIPMIutils.map -Wl,-soname -Wl,libOpenIPMIutils.so.0 -o 
.libs/libOpenIPMIutils.so.0.0.1
collect2: ld terminated with signal 11 [Segmentation fault]
Which generated this command:
/usr/bin/ld --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -shared -o 
.libs/libOpenIPMIutils.so.0.0.1 
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/../../../../lib/crti.o 
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/crtbeginS.o 
-L/usr/lib/gcc/x86_64-linux-gnu/4.1.3 -L/usr/lib/gcc/x86_64-linux-gnu/4.1.3 
-L/usr/lib/gcc/x86_64-linux-gnu/4.1.3/../../../../lib -L/lib/../lib 
-L/usr/lib/../lib .libs/ipmi_malloc.o -Map libOpenIPMIutils.map -lgcc 
--as-needed -lgcc_s --no-as-needed -lc -lgcc
--as-needed -lgcc_s --no-as-needed 
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/crtendS.o 
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/../../../../lib/crtn.o

It seems this is the minimal command to reproduce it:
ld -o .libs/libOpenIPMIutils.so.0.0.1  .libs/ipmi_malloc.o -Map file

This only seems to be trigger by ipmi_malloc.o, which has a common
symbol: malloc_os_hnd.  And it seems to be having the problems when
it tries to print that to the map file.

ltrace shows:
bfd_demangle(0x689100, 0x6a24da, 3, 0, 10)       = 0
fputs(NULL, 0x688ec0 <unfinished ...>

Core was generated by `/usr/bin/ld -o .libs/libOpenIPMIutils.so.0.0.1 
.libs/ipmi_malloc.o -Map file'.
Program terminated with signal 11, Segmentation fault.
#0  0x00002b0f554839f0 in strlen () from /lib/libc.so.6
(gdb) bt
#0  0x00002b0f554839f0 in strlen () from /lib/libc.so.6
#1  0x00002b0f5546d23e in fputs () from /lib/libc.so.6
#2  0x0000000000421124 in vfinfo (fp=0x688ec0, fmt=0x43c355 "",
    arg=0x7fff55bc7460, is_warning=0) at ../../ld/ldmisc.c:400
#3  0x00000000004216e2 in minfo (fmt=0x43c353 "%s") at ../../ld/ldmisc.c:483
#4  0x00000000004159af in lang_one_common (h=0x68b9c0, info=0x0)
    at ../../ld/ldlang.c:5272
#5  0x00002b0f5513b8ed in bfd_hash_traverse (table=0x68b4a0,
    func=0x4157eb <lang_one_common>, info=0x0) at ../../bfd/hash.c:582
#6  0x00002b0f5513c20e in bfd_link_hash_traverse (table=0x68b4a0,
    func=0x4157eb <lang_one_common>, info=0x0) at ../../bfd/linker.c:612
#7  0x00000000004157b9 in lang_common () at ../../ld/ldlang.c:5204
#8  0x0000000000416424 in lang_process () at ../../ld/ldlang.c:5741
#9  0x000000000041a442 in main (argc=6, argv=0x7fff55bc7868)
    at ../../ld/ldmain.c:518
(gdb) frame 2
#2  0x0000000000421124 in vfinfo (fp=0x688ec0, fmt=0x43c355 "",
    arg=0x7fff55bc7460, is_warning=0) at ../../ld/ldmisc.c:400
400                   fprintf (fp, "%s", va_arg (arg, char *));
(gdb) frame 4
#4  0x00000000004159af in lang_one_common (h=0x68b9c0, info=0x0)
    at ../../ld/ldlang.c:5272
5272          minfo ("%s", name);
(gdb) p name
$2 = 0x0
(gdb) p h->root.string
$3 = 0x6a24da "malloc_os_hnd"


When debbuging inside bfd_demangle() I get:
bfd_demangle (abfd=0x689100, name=0x6a24da "malloc_os_hnd", options=3)
    at ../../bfd/bfd.c:1729
[...]
1756      res = cplus_demangle (name, options);
(gdb) p res
$3 = 0x0

And in cplus_demangle():
cplus_demangle (mangled=0x6a24da "malloc_os_hnd", options=3)
    at ../../libiberty/cplus-dem.c:851

Which goes to:
cplus_demangle_v3 (mangled=0x6a24da "malloc_os_hnd", options=259)
    at ../../libiberty/cp-demangle.c:4182
4182      return d_demangle (mangled, options, &alc);
(gdb) s
d_demangle (mangled=0x6a24da "malloc_os_hnd", options=259, palc=0x7fffdf0a7918)
    at ../../libiberty/cp-demangle.c:4023
4023      d_growable_string_init (&dgs, 0);
(gdb) n
4025      status = d_demangle_callback (mangled, options,
(gdb) s
d_demangle_callback (mangled=0x6a24da "malloc_os_hnd", options=259,
    callback=0x2b14cbcf3797 <d_growable_string_callback_adapter>,
    opaque=0x7fffdf0a78c0) at ../../libiberty/cp-demangle.c:3948
3948      if (mangled[0] == '_' && mangled[1] == 'Z')
(gdb) n
3950      else if (strncmp (mangled, "_GLOBAL_", 8) == 0
(gdb)
3967          if ((options & DMGL_TYPES) == 0)
(gdb)
3968            return 0;

This return 0 will result in it returning NULL.

I have no idea where it's going wrong.


Kurt



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to