Index: source/Utility/Makefile =================================================================== --- source/Utility/Makefile (revision 169766) +++ source/Utility/Makefile (revision 169767) @@ -12,4 +12,11 @@ BUILD_ARCHIVE = 1 NO_PEDANTIC = 1 +# Enable RTTI on GCC builds because liblldbCore.a requires RTTI. +# See source/Core/Makefile for details. +ifeq (g++,$(shell basename $(CXX))) + REQUIRES_RTTI = 1 +endif + + include $(LLDB_LEVEL)/Makefile Index: source/Core/Makefile =================================================================== --- source/Core/Makefile (revision 169766) +++ source/Core/Makefile (revision 169767) @@ -11,4 +11,15 @@ LIBRARYNAME := lldbCore BUILD_ARCHIVE = 1 +# Enable RTTI on GCC builds because one source file in this directory +# (cxa_demangle.cpp) uses dynamic_cast<> and GCC (at least 4.6 and 4.7) +# complain if we try to compile it with -fno-rtti. This is somewhat of a +# kludge because it forces us to enable RTTI in liblldbUtility.a and also +# link in additional clang static libraries to resolve vtable references, +# but actually has negligible impact on (shard object) file size. +$(info shell basename CXX is $(shell basename $(CXX))) +ifeq (g++,$(shell basename $(CXX))) + REQUIRES_RTTI = 1 +endif + include $(LLDB_LEVEL)/Makefile Index: lib/Makefile =================================================================== --- lib/Makefile (revision 169766) +++ lib/Makefile (revision 169767) @@ -67,6 +67,14 @@ lldbPluginPlatformLinux.a \ lldbPluginPlatformFreeBSD.a +# Because GCC requires RTTI enabled for lldbCore (see source/Core/Makefile) it is +# necessary to also link the clang rewriter libraries so vtable references can +# be resolved correctly, if we are building with GCC. +ifeq (g++,$(shell basename $(CXX))) + USEDLIBS += clangRewriteCore.a \ + clangRewriteFrontend.a +endif + include $(LLDB_LEVEL)/../../Makefile.config LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter codegen \