Hi all,
As discussed in http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59106 only a
subset of libubsan should be built with RTTI support. Attached patch
adds custom build rules for relevant files.
-Y
diff --git a/libsanitizer/ubsan/Makefile.am b/libsanitizer/ubsan/Makefile.am
index e98984a..eaab156 100644
--- a/libsanitizer/ubsan/Makefile.am
+++ b/libsanitizer/ubsan/Makefile.am
@@ -4,7 +4,7 @@ AM_CPPFLAGS = -I $(top_srcdir) -I $(top_srcdir)/include
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
+AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS)
ACLOCAL_AMFLAGS = -I m4
@@ -13,11 +13,13 @@ toolexeclib_LTLIBRARIES = libubsan.la
ubsan_files = \
ubsan_diag.cc \
ubsan_handlers.cc \
- ubsan_handlers_cxx.cc \
- ubsan_type_hash.cc \
ubsan_value.cc
-libubsan_la_SOURCES = $(ubsan_files)
+ubsan_cxx_files = \
+ ubsan_handlers_cxx.cc \
+ ubsan_type_hash.cc
+
+libubsan_la_SOURCES = $(ubsan_files) $(ubsan_cxx_files)
libubsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la
if !USING_MAC_INTERPOSE
libubsan_la_LIBADD += $(top_builddir)/interception/libinterception.la
@@ -25,6 +27,17 @@ endif
libubsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
libubsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -lpthread -ldl
+# Use special rules for files/objects that require RTTI support.
+ubsan_handlers_cxx.lo: ubsan_handlers_cxx.cc
+ $(LTCXXCOMPILE) -frtti -c $<
+ubsan_handlers_cxx.o: ubsan_handlers_cxx.cc
+ $(CXXCOMPILE) -frtti -c $<
+
+ubsan_type_hash.lo: ubsan_type_hash.cc
+ $(LTCXXCOMPILE) -frtti -c $<
+ubsan_type_hash.o: ubsan_type_hash.cc
+ $(CXXCOMPILE) -frtti -c $<
+
# Work around what appears to be a GNU make bug handling MAKEFLAGS
# values defined in terms of make variables, as is the case for CC and
# friends when we are called from the top level Makefile.
diff --git a/libsanitizer/ubsan/Makefile.in b/libsanitizer/ubsan/Makefile.in
index 6812538..198e31d 100644
--- a/libsanitizer/ubsan/Makefile.in
+++ b/libsanitizer/ubsan/Makefile.in
@@ -81,9 +81,9 @@ am__DEPENDENCIES_1 =
libubsan_la_DEPENDENCIES = \
$(top_builddir)/sanitizer_common/libsanitizer_common.la \
$(am__append_1) $(am__DEPENDENCIES_1)
-am__objects_1 = ubsan_diag.lo ubsan_handlers.lo ubsan_handlers_cxx.lo \
- ubsan_type_hash.lo ubsan_value.lo
-am_libubsan_la_OBJECTS = $(am__objects_1)
+am__objects_1 = ubsan_diag.lo ubsan_handlers.lo ubsan_value.lo
+am__objects_2 = ubsan_handlers_cxx.lo ubsan_type_hash.lo
+am_libubsan_la_OBJECTS = $(am__objects_1) $(am__objects_2)
libubsan_la_OBJECTS = $(am_libubsan_la_OBJECTS)
libubsan_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
@@ -240,7 +240,7 @@ AM_CPPFLAGS = -I $(top_srcdir) -I $(top_srcdir)/include
# May be used by toolexeclibdir.
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic \
- -Wno-long-long -fPIC -fno-builtin -fno-exceptions \
+ -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti \
-fomit-frame-pointer -funwind-tables -fvisibility=hidden \
-Wno-variadic-macros $(LIBSTDCXX_RAW_CXX_CXXFLAGS)
ACLOCAL_AMFLAGS = -I m4
@@ -248,11 +248,13 @@ toolexeclib_LTLIBRARIES = libubsan.la
ubsan_files = \
ubsan_diag.cc \
ubsan_handlers.cc \
- ubsan_handlers_cxx.cc \
- ubsan_type_hash.cc \
ubsan_value.cc
-libubsan_la_SOURCES = $(ubsan_files)
+ubsan_cxx_files = \
+ ubsan_handlers_cxx.cc \
+ ubsan_type_hash.cc
+
+libubsan_la_SOURCES = $(ubsan_files) $(ubsan_cxx_files)
libubsan_la_LIBADD = \
$(top_builddir)/sanitizer_common/libsanitizer_common.la \
$(am__append_1) $(LIBSTDCXX_RAW_CXX_LDFLAGS)
@@ -575,6 +577,17 @@ uninstall-am: uninstall-toolexeclibLTLIBRARIES
tags uninstall uninstall-am uninstall-toolexeclibLTLIBRARIES
+# Use special rules for files/objects that require RTTI support.
+ubsan_handlers_cxx.lo: ubsan_handlers_cxx.cc
+ $(LTCXXCOMPILE) -frtti -c $<
+ubsan_handlers_cxx.o: ubsan_handlers_cxx.cc
+ $(CXXCOMPILE) -frtti -c $<
+
+ubsan_type_hash.lo: ubsan_type_hash.cc
+ $(LTCXXCOMPILE) -frtti -c $<
+ubsan_type_hash.o: ubsan_type_hash.cc
+ $(CXXCOMPILE) -frtti -c $<
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: