Skip to content

Commit ddb2bfb

Browse files
author
Vladimir Uzelac
committed
libdemangle-msvc: use MSVC demangler in binutils
This is the fifth in a series of patches adding MSVC symbol demangling support to the GNU toolchain. Register the MSVC demangler in nm, objdump, addr2line, and cxxfilt via bfd_set_msvc_demangler() after bfd_init(), guarded by HAVE_MSVC_DEMANGLER. Add MSVC demangling style support to cxxfilt. Link binutils against libdemangle-msvc when enabled. Since libdemangle-msvc is a C++ library, the affected programs are linked with the C++ compiler using automake's nodist_EXTRA_*_SOURCES trick, to pull in the correct C++ runtime automatically. Include testsuite coverage for MSVC demangling in nm, objdump, addr2line, and cxxfilt using a compiled MSVC C++ test object. Update binutils documentation to describe MSVC demangling support.
1 parent e362de2 commit ddb2bfb

15 files changed

Lines changed: 4490 additions & 127 deletions

File tree

binutils/Makefile.am

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,22 @@ LIBSFRAME = ../libsframe/libsframe.la
182182

183183
LIBIBERTY = ../libiberty/libiberty.a
184184

185+
if ENABLE_MSVC_DEMANGLER
186+
LIBDEMANGLE_MSVC = ../libdemangle-msvc/libdemangle-msvc.a
187+
LIBDEMANGLE_MSVC_LDADD = $(LIBDEMANGLE_MSVC)
188+
else
189+
LIBDEMANGLE_MSVC =
190+
LIBDEMANGLE_MSVC_LDADD =
191+
endif
192+
193+
# Enable C++ linking for tools that include libdemangle-msvc.
194+
# Simply include a non-existent C++ source in nodist_EXTRA_*_SOURCES
195+
# as that triggers automake to pick the C++ linker for these programs.
196+
nodist_EXTRA_nm_new_SOURCES = dummy.cxx
197+
nodist_EXTRA_objdump_SOURCES = dummy.cxx
198+
nodist_EXTRA_cxxfilt_SOURCES = dummy.cxx
199+
nodist_EXTRA_addr2line_SOURCES = dummy.cxx
200+
185201
POTFILES = $(CFILES) $(DEBUG_SRCS) $(HFILES)
186202
po/POTFILES.in: @MAINT@ Makefile
187203
for f in $(POTFILES); do echo $$f; done | LC_ALL=C sort > tmp \
@@ -232,21 +248,21 @@ installcheck-local:
232248
# which depends on libintl, since we don't know whether LIBINTL_DEP will be
233249
# non-empty until configure time. Ugh!
234250
size_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
235-
objdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(OPCODES) $(LIBCTF) $(OBJDUMP_PRIVATE_OFILES) $(LIBSFRAME)
236-
nm_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
251+
objdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(OPCODES) $(LIBCTF) $(OBJDUMP_PRIVATE_OFILES) $(LIBSFRAME) $(LIBDEMANGLE_MSVC)
252+
nm_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(LIBDEMANGLE_MSVC)
237253
ar_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
238254
strings_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
239255
strip_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
240256
ranlib_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
241-
cxxfilt_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
257+
cxxfilt_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(LIBDEMANGLE_MSVC)
242258
objcopy_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
243259
srconv_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
244260
sysdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
245261
coffdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
246262
dlltool_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
247263
windres_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
248264
windmc_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
249-
addr2line_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
265+
addr2line_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(LIBDEMANGLE_MSVC)
250266
readelf_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(LIBCTF_NOBFD) $(LIBSFRAME)
251267
elfedit_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY)
252268
dllwrap_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY)
@@ -271,10 +287,11 @@ elfedit_LDADD = $(LIBINTL) $(LIBIBERTY)
271287
strip_new_SOURCES = is-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
272288
273289
nm_new_SOURCES = nm.c demanguse.c $(BULIBS)
290+
nm_new_LDADD = $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(LIBDEMANGLE_MSVC_LDADD)
274291
275292
objdump_SOURCES = objdump.c dwarf.c prdbg.c demanguse.c $(DEBUG_SRCS) $(BULIBS) $(ELFLIBS)
276293
EXTRA_objdump_SOURCES = od-elf32_avr.c od-macho.c od-xcoff.c od-pe.c
277-
objdump_LDADD = $(OBJDUMP_PRIVATE_OFILES) $(OPCODES) $(LIBCTF) $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(DEBUGINFOD_LIBS) $(LIBSFRAME)
294+
objdump_LDADD = $(OBJDUMP_PRIVATE_OFILES) $(OPCODES) $(LIBCTF) $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(DEBUGINFOD_LIBS) $(LIBSFRAME) $(LIBDEMANGLE_MSVC_LDADD)
278295
279296
objdump.@OBJEXT@:objdump.c
280297
if am__fastdepCC
@@ -289,6 +306,7 @@ endif
289306
endif
290307
291308
cxxfilt_SOURCES = cxxfilt.c $(BULIBS)
309+
cxxfilt_LDADD = $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(LIBDEMANGLE_MSVC_LDADD)
292310
293311
ar_SOURCES = arparse.y arlex.l not-ranlib.c arsup.c rename.c binemul.c \
294312
emul_$(EMULATION).c $(BULIBS)
@@ -300,6 +318,7 @@ ranlib_SOURCES = arparse.y arlex.l is-ranlib.c arsup.c rename.c binemul.c \
300318
ranlib_LDADD = $(BFDLIB) $(LIBIBERTY) $(LEXLIB) $(LIBINTL)
301319
302320
addr2line_SOURCES = addr2line.c $(BULIBS)
321+
addr2line_LDADD = $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(LIBDEMANGLE_MSVC_LDADD)
303322
304323
coremerge_SOURCES = coremerge.c $(BULIBS)
305324
coremerge_LDADD = $(BFDLIB) $(LIBIBERTY) $(LIBINTL) -lm

binutils/Makefile.in

Lines changed: 86 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,10 @@ PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
205205
am__objects_1 = bucomm.$(OBJEXT) version.$(OBJEXT) filemode.$(OBJEXT)
206206
am_addr2line_OBJECTS = addr2line.$(OBJEXT) $(am__objects_1)
207207
addr2line_OBJECTS = $(am_addr2line_OBJECTS)
208-
addr2line_LDADD = $(LDADD)
209208
am__DEPENDENCIES_1 =
209+
@ENABLE_MSVC_DEMANGLER_TRUE@am__DEPENDENCIES_2 = ../libdemangle-msvc/libdemangle-msvc.a
210+
@ENABLE_MSVC_DEMANGLER_TRUE@am__DEPENDENCIES_3 = \
211+
@ENABLE_MSVC_DEMANGLER_TRUE@ $(am__DEPENDENCIES_2)
210212
AM_V_lt = $(am__v_lt_@AM_V@)
211213
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
212214
am__v_lt_0 = --silent
@@ -229,7 +231,6 @@ am_coremerge_OBJECTS = coremerge.$(OBJEXT) $(am__objects_1)
229231
coremerge_OBJECTS = $(am_coremerge_OBJECTS)
230232
am_cxxfilt_OBJECTS = cxxfilt.$(OBJEXT) $(am__objects_1)
231233
cxxfilt_OBJECTS = $(am_cxxfilt_OBJECTS)
232-
cxxfilt_LDADD = $(LDADD)
233234
am_dlltool_OBJECTS = dlltool.$(OBJEXT) defparse.$(OBJEXT) \
234235
deflex.$(OBJEXT) $(am__objects_1)
235236
dlltool_OBJECTS = $(am_dlltool_OBJECTS)
@@ -241,7 +242,6 @@ am_elfedit_OBJECTS = elfedit.$(OBJEXT) version.$(OBJEXT) \
241242
elfedit_OBJECTS = $(am_elfedit_OBJECTS)
242243
am_nm_new_OBJECTS = nm.$(OBJEXT) demanguse.$(OBJEXT) $(am__objects_1)
243244
nm_new_OBJECTS = $(am_nm_new_OBJECTS)
244-
nm_new_LDADD = $(LDADD)
245245
am__objects_3 = rddbg.$(OBJEXT) debug.$(OBJEXT) stabs.$(OBJEXT) \
246246
rdcoff.$(OBJEXT)
247247
am__objects_4 = $(am__objects_3) wrstabs.$(OBJEXT)
@@ -253,7 +253,7 @@ am_objdump_OBJECTS = objdump.$(OBJEXT) dwarf.$(OBJEXT) prdbg.$(OBJEXT) \
253253
demanguse.$(OBJEXT) $(am__objects_3) $(am__objects_1) \
254254
$(am__objects_2)
255255
objdump_OBJECTS = $(am_objdump_OBJECTS)
256-
@ENABLE_LIBCTF_TRUE@am__DEPENDENCIES_2 = ../libctf/libctf.la
256+
@ENABLE_LIBCTF_TRUE@am__DEPENDENCIES_4 = ../libctf/libctf.la
257257
am_ranlib_OBJECTS = arparse.$(OBJEXT) arlex.$(OBJEXT) \
258258
is-ranlib.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) \
259259
binemul.$(OBJEXT) emul_$(EMULATION).$(OBJEXT) $(am__objects_1)
@@ -262,7 +262,7 @@ am_readelf_OBJECTS = readelf.$(OBJEXT) version.$(OBJEXT) \
262262
unwind-ia64.$(OBJEXT) dwarf.$(OBJEXT) demanguse.$(OBJEXT) \
263263
$(am__objects_2)
264264
readelf_OBJECTS = $(am_readelf_OBJECTS)
265-
@ENABLE_LIBCTF_TRUE@am__DEPENDENCIES_3 = ../libctf/libctf-nobfd.la
265+
@ENABLE_LIBCTF_TRUE@am__DEPENDENCIES_5 = ../libctf/libctf-nobfd.la
266266
am_size_OBJECTS = size.$(OBJEXT) $(am__objects_1)
267267
size_OBJECTS = $(am_size_OBJECTS)
268268
size_LDADD = $(LDADD)
@@ -356,6 +356,24 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
356356
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
357357
am__v_CCLD_0 = @echo " CCLD " $@;
358358
am__v_CCLD_1 =
359+
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
360+
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
361+
LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
362+
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
363+
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
364+
$(AM_CXXFLAGS) $(CXXFLAGS)
365+
AM_V_CXX = $(am__v_CXX_@AM_V@)
366+
am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
367+
am__v_CXX_0 = @echo " CXX " $@;
368+
am__v_CXX_1 =
369+
CXXLD = $(CXX)
370+
CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
371+
$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
372+
$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
373+
AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
374+
am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
375+
am__v_CXXLD_0 = @echo " CXXLD " $@;
376+
am__v_CXXLD_1 =
359377
@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ ||
360378
LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
361379
LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
@@ -375,11 +393,14 @@ AM_V_YACC = $(am__v_YACC_@AM_V@)
375393
am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@)
376394
am__v_YACC_0 = @echo " YACC " $@;
377395
am__v_YACC_1 =
378-
SOURCES = $(addr2line_SOURCES) $(ar_SOURCES) $(EXTRA_ar_SOURCES) \
379-
bfdtest1.c bfdtest2.c $(coffdump_SOURCES) $(coremerge_SOURCES) \
380-
$(cxxfilt_SOURCES) $(dlltool_SOURCES) $(dllwrap_SOURCES) \
381-
$(elfedit_SOURCES) $(nm_new_SOURCES) $(objcopy_SOURCES) \
382-
$(objdump_SOURCES) $(EXTRA_objdump_SOURCES) $(ranlib_SOURCES) \
396+
SOURCES = $(addr2line_SOURCES) $(nodist_EXTRA_addr2line_SOURCES) \
397+
$(ar_SOURCES) $(EXTRA_ar_SOURCES) bfdtest1.c bfdtest2.c \
398+
$(coffdump_SOURCES) $(coremerge_SOURCES) $(cxxfilt_SOURCES) \
399+
$(nodist_EXTRA_cxxfilt_SOURCES) $(dlltool_SOURCES) \
400+
$(dllwrap_SOURCES) $(elfedit_SOURCES) $(nm_new_SOURCES) \
401+
$(nodist_EXTRA_nm_new_SOURCES) $(objcopy_SOURCES) \
402+
$(objdump_SOURCES) $(EXTRA_objdump_SOURCES) \
403+
$(nodist_EXTRA_objdump_SOURCES) $(ranlib_SOURCES) \
383404
$(readelf_SOURCES) $(size_SOURCES) $(srconv_SOURCES) \
384405
$(strings_SOURCES) $(strip_new_SOURCES) $(sysdump_SOURCES) \
385406
testsuite/gentestdlls.c $(windmc_SOURCES) $(windres_SOURCES)
@@ -493,6 +514,10 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
493514
CFLAGS = @CFLAGS@
494515
CPP = @CPP@
495516
CPPFLAGS = @CPPFLAGS@
517+
CXX = @CXX@
518+
CXXCPP = @CXXCPP@
519+
CXXDEPMODE = @CXXDEPMODE@
520+
CXXFLAGS = @CXXFLAGS@
496521
CYGPATH_W = @CYGPATH_W@
497522
DATADIRNAME = @DATADIRNAME@
498523
DEBUGINFOD_CFLAGS = @DEBUGINFOD_CFLAGS@
@@ -594,6 +619,7 @@ abs_srcdir = @abs_srcdir@
594619
abs_top_builddir = @abs_top_builddir@
595620
abs_top_srcdir = @abs_top_srcdir@
596621
ac_ct_CC = @ac_ct_CC@
622+
ac_ct_CXX = @ac_ct_CXX@
597623
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
598624
am__include = @am__include@
599625
am__leading_dot = @am__leading_dot@
@@ -755,6 +781,18 @@ OPCODES = ../opcodes/libopcodes.la
755781
@ENABLE_LIBCTF_TRUE@LIBCTF_NOBFD = ../libctf/libctf-nobfd.la
756782
LIBSFRAME = ../libsframe/libsframe.la
757783
LIBIBERTY = ../libiberty/libiberty.a
784+
@ENABLE_MSVC_DEMANGLER_FALSE@LIBDEMANGLE_MSVC =
785+
@ENABLE_MSVC_DEMANGLER_TRUE@LIBDEMANGLE_MSVC = ../libdemangle-msvc/libdemangle-msvc.a
786+
@ENABLE_MSVC_DEMANGLER_FALSE@LIBDEMANGLE_MSVC_LDADD =
787+
@ENABLE_MSVC_DEMANGLER_TRUE@LIBDEMANGLE_MSVC_LDADD = $(LIBDEMANGLE_MSVC)
788+
789+
# Enable C++ linking for tools that include libdemangle-msvc.
790+
# Simply include a non-existent C++ source in nodist_EXTRA_*_SOURCES
791+
# as that triggers automake to pick the C++ linker for these programs.
792+
nodist_EXTRA_nm_new_SOURCES = dummy.cxx
793+
nodist_EXTRA_objdump_SOURCES = dummy.cxx
794+
nodist_EXTRA_cxxfilt_SOURCES = dummy.cxx
795+
nodist_EXTRA_addr2line_SOURCES = dummy.cxx
758796
POTFILES = $(CFILES) $(DEBUG_SRCS) $(HFILES)
759797
EXPECT = expect
760798
RUNTEST = runtest
@@ -778,21 +816,21 @@ CC_FOR_TARGET = ` \
778816
# which depends on libintl, since we don't know whether LIBINTL_DEP will be
779817
# non-empty until configure time. Ugh!
780818
size_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
781-
objdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(OPCODES) $(LIBCTF) $(OBJDUMP_PRIVATE_OFILES) $(LIBSFRAME)
782-
nm_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
819+
objdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(OPCODES) $(LIBCTF) $(OBJDUMP_PRIVATE_OFILES) $(LIBSFRAME) $(LIBDEMANGLE_MSVC)
820+
nm_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(LIBDEMANGLE_MSVC)
783821
ar_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
784822
strings_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
785823
strip_new_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
786824
ranlib_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
787-
cxxfilt_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
825+
cxxfilt_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(LIBDEMANGLE_MSVC)
788826
objcopy_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
789827
srconv_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
790828
sysdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
791829
coffdump_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
792830
dlltool_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
793831
windres_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
794832
windmc_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
795-
addr2line_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB)
833+
addr2line_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(BFDLIB) $(LIBDEMANGLE_MSVC)
796834
readelf_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY) $(LIBCTF_NOBFD) $(LIBSFRAME)
797835
elfedit_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY)
798836
dllwrap_DEPENDENCIES = $(LIBINTL_DEP) $(LIBIBERTY)
@@ -809,10 +847,12 @@ elfedit_SOURCES = elfedit.c version.c $(ELFLIBS)
809847
elfedit_LDADD = $(LIBINTL) $(LIBIBERTY)
810848
strip_new_SOURCES = is-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
811849
nm_new_SOURCES = nm.c demanguse.c $(BULIBS)
850+
nm_new_LDADD = $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(LIBDEMANGLE_MSVC_LDADD)
812851
objdump_SOURCES = objdump.c dwarf.c prdbg.c demanguse.c $(DEBUG_SRCS) $(BULIBS) $(ELFLIBS)
813852
EXTRA_objdump_SOURCES = od-elf32_avr.c od-macho.c od-xcoff.c od-pe.c
814-
objdump_LDADD = $(OBJDUMP_PRIVATE_OFILES) $(OPCODES) $(LIBCTF) $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(DEBUGINFOD_LIBS) $(LIBSFRAME)
853+
objdump_LDADD = $(OBJDUMP_PRIVATE_OFILES) $(OPCODES) $(LIBCTF) $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(DEBUGINFOD_LIBS) $(LIBSFRAME) $(LIBDEMANGLE_MSVC_LDADD)
815854
cxxfilt_SOURCES = cxxfilt.c $(BULIBS)
855+
cxxfilt_LDADD = $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(LIBDEMANGLE_MSVC_LDADD)
816856
ar_SOURCES = arparse.y arlex.l not-ranlib.c arsup.c rename.c binemul.c \
817857
emul_$(EMULATION).c $(BULIBS)
818858
@@ -823,6 +863,7 @@ ranlib_SOURCES = arparse.y arlex.l is-ranlib.c arsup.c rename.c binemul.c \
823863
824864
ranlib_LDADD = $(BFDLIB) $(LIBIBERTY) $(LEXLIB) $(LIBINTL)
825865
addr2line_SOURCES = addr2line.c $(BULIBS)
866+
addr2line_LDADD = $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(LIBDEMANGLE_MSVC_LDADD)
826867
coremerge_SOURCES = coremerge.c $(BULIBS)
827868
coremerge_LDADD = $(BFDLIB) $(LIBIBERTY) $(LIBINTL) -lm
828869
srconv_SOURCES = srconv.c coffgrok.c $(BULIBS)
@@ -897,7 +938,7 @@ all: $(BUILT_SOURCES) config.h
897938
$(MAKE) $(AM_MAKEFLAGS) all-recursive
898939
899940
.SUFFIXES:
900-
.SUFFIXES: .c .dvi .l .lo .o .obj .ps .y
941+
.SUFFIXES: .c .cxx .dvi .l .lo .o .obj .ps .y
901942
am--refresh: Makefile
902943
@:
903944
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/doc/local.mk $(am__configure_deps)
@@ -1010,7 +1051,7 @@ clean-noinstPROGRAMS:
10101051
10111052
addr2line$(EXEEXT): $(addr2line_OBJECTS) $(addr2line_DEPENDENCIES) $(EXTRA_addr2line_DEPENDENCIES)
10121053
@rm -f addr2line$(EXEEXT)
1013-
$(AM_V_CCLD)$(LINK) $(addr2line_OBJECTS) $(addr2line_LDADD) $(LIBS)
1054+
$(AM_V_CXXLD)$(CXXLINK) $(addr2line_OBJECTS) $(addr2line_LDADD) $(LIBS)
10141055
arparse.h: arparse.c
10151056
@if test ! -f $@; then rm -f arparse.c; else :; fi
10161057
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) arparse.c; else :; fi
@@ -1037,7 +1078,7 @@ coremerge$(EXEEXT): $(coremerge_OBJECTS) $(coremerge_DEPENDENCIES) $(EXTRA_corem
10371078
10381079
cxxfilt$(EXEEXT): $(cxxfilt_OBJECTS) $(cxxfilt_DEPENDENCIES) $(EXTRA_cxxfilt_DEPENDENCIES)
10391080
@rm -f cxxfilt$(EXEEXT)
1040-
$(AM_V_CCLD)$(LINK) $(cxxfilt_OBJECTS) $(cxxfilt_LDADD) $(LIBS)
1081+
$(AM_V_CXXLD)$(CXXLINK) $(cxxfilt_OBJECTS) $(cxxfilt_LDADD) $(LIBS)
10411082
defparse.h: defparse.c
10421083
@if test ! -f $@; then rm -f defparse.c; else :; fi
10431084
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) defparse.c; else :; fi
@@ -1056,15 +1097,15 @@ elfedit$(EXEEXT): $(elfedit_OBJECTS) $(elfedit_DEPENDENCIES) $(EXTRA_elfedit_DEP
10561097
10571098
nm-new$(EXEEXT): $(nm_new_OBJECTS) $(nm_new_DEPENDENCIES) $(EXTRA_nm_new_DEPENDENCIES)
10581099
@rm -f nm-new$(EXEEXT)
1059-
$(AM_V_CCLD)$(LINK) $(nm_new_OBJECTS) $(nm_new_LDADD) $(LIBS)
1100+
$(AM_V_CXXLD)$(CXXLINK) $(nm_new_OBJECTS) $(nm_new_LDADD) $(LIBS)
10601101
10611102
objcopy$(EXEEXT): $(objcopy_OBJECTS) $(objcopy_DEPENDENCIES) $(EXTRA_objcopy_DEPENDENCIES)
10621103
@rm -f objcopy$(EXEEXT)
10631104
$(AM_V_CCLD)$(LINK) $(objcopy_OBJECTS) $(objcopy_LDADD) $(LIBS)
10641105
10651106
objdump$(EXEEXT): $(objdump_OBJECTS) $(objdump_DEPENDENCIES) $(EXTRA_objdump_DEPENDENCIES)
10661107
@rm -f objdump$(EXEEXT)
1067-
$(AM_V_CCLD)$(LINK) $(objdump_OBJECTS) $(objdump_LDADD) $(LIBS)
1108+
$(AM_V_CXXLD)$(CXXLINK) $(objdump_OBJECTS) $(objdump_LDADD) $(LIBS)
10681109
10691110
ranlib$(EXEEXT): $(ranlib_OBJECTS) $(ranlib_DEPENDENCIES) $(EXTRA_ranlib_DEPENDENCIES)
10701111
@rm -f ranlib$(EXEEXT)
@@ -1182,6 +1223,7 @@ distclean-compile:
11821223
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/demanguse.Po@am__quote@
11831224
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlltool.Po@am__quote@
11841225
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dllwrap.Po@am__quote@
1226+
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Po@am__quote@
11851227
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf.Po@am__quote@
11861228
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfcomm.Po@am__quote@
11871229
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfedit.Po@am__quote@
@@ -1253,6 +1295,30 @@ distclean-compile:
12531295
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
12541296
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
12551297
1298+
.cxx.o:
1299+
@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
1300+
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
1301+
@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
1302+
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
1303+
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1304+
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
1305+
1306+
.cxx.obj:
1307+
@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
1308+
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
1309+
@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
1310+
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
1311+
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1312+
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
1313+
1314+
.cxx.lo:
1315+
@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
1316+
@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
1317+
@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
1318+
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
1319+
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1320+
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
1321+
12561322
.l.c:
12571323
$(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
12581324

binutils/addr2line.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,9 @@ main (int argc, char **argv)
512512

513513
if (bfd_init () != BFD_INIT_MAGIC)
514514
fatal (_("fatal error: libbfd ABI mismatch"));
515+
#ifdef HAVE_MSVC_DEMANGLER
516+
bfd_set_msvc_demangler (msvc_demangle);
517+
#endif
515518
set_default_bfd_target ();
516519

517520
file_name = NULL;

binutils/config.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@
129129
/* Define to 1 if msgpack is available. */
130130
#undef HAVE_MSGPACK
131131

132+
/* defined if MSVC demangler was requested. */
133+
#undef HAVE_MSVC_DEMANGLER
134+
132135
/* Define to 1 if you have the <stdint.h> header file. */
133136
#undef HAVE_STDINT_H
134137

0 commit comments

Comments
 (0)