Matthias Klose wrote:
> not sure why c++filt needs to be diverted.
It shouldn’t be.
$ ldd /usr/bin/c++filt | grep bfd
libbfd-2.20.51-multiarch.20100415.so =>
/usr/lib/libbfd-2.20.51-multiarch.20100415.so (0xb74b6000)
$ readelf --dyn-syms /usr/bin/c++filt | grep bfd_
5: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_get_error
20: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_printable_arch_mach
24: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_close_all_done
30: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_target_list
32: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_openw
34: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_errmsg
45: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_set_default_target
50: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_malloc
52: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_scan_vma
54: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_arch_list
55: 00000000 0 FUNC GLOBAL DEFAULT UND bfd_set_format
70: 0804c220 4 OBJECT GLOBAL DEFAULT 25 bfd_target_vector
That all comes from the common code in bucomm.c, which is only used
to provide program_name() and fatal().
Ideally, c++filt should not be linked against libbfd at all. This
patch confirms that that would work.
Thanks for noticing.
diff --git a/binutils/Makefile.am b/binutils/Makefile.am
index 001bbe5..8f81ed9 100644
--- a/binutils/Makefile.am
+++ b/binutils/Makefile.am
@@ -170,7 +170,7 @@ ar_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY)
$(BFDLIB)
strings_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
strip_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
ranlib_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
-cxxfilt_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
+cxxfilt_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY)
objcopy_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
nlmconv_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
srconv_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
@@ -217,7 +217,8 @@ endif
$(COMPILE) -c $(OBJDUMP_DEFS) $(srcdir)/objdump.c
endif
-cxxfilt_SOURCES = cxxfilt.c $(BULIBS)
+cxxfilt_SOURCES = cxxfilt.c version.c
+cxxfilt_LDADD = $(LIBINTL) $(LIBIBERTY)
ar_SOURCES = arparse.y arlex.l ar.c not-ranlib.c arsup.c rename.c binemul.c \
emul_$(EMULATION).c $(BULIBS)
diff --git a/binutils/cxxfilt.c b/binutils/cxxfilt.c
index 770df9b..b72b6e3 100644
--- a/binutils/cxxfilt.c
+++ b/binutils/cxxfilt.c
@@ -30,6 +30,7 @@
#include "safe-ctype.h"
#include "bucomm.h"
+char *program_name;
static int flags = DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE;
static int strip_underscore = TARGET_PREPENDS_UNDERSCORE;
@@ -250,7 +251,8 @@ main (int argc, char **argv)
/* Folks should explicitly indicate the appropriate alphabet for
each demangling. Providing a default would allow the
question to go unconsidered. */
- fatal ("Internal error: no symbol alphabet for current style");
+ fprintf (stderr, "Internal error: no symbol alphabet for current
style\n");
+ xexit (1);
}
for (;;)
--
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]