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]