diff mbox

Get rid of useless -fno-rtti for libubsan

Message ID 5295A6EE.8050906@samsung.com
State New
Headers show

Commit Message

Yury Gribov Nov. 27, 2013, 8:01 a.m. UTC
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

Comments

Jeff Law Nov. 27, 2013, 5:12 p.m. UTC | #1
On 11/27/13 01:01, Yury Gribov wrote:
> 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.
Wasn't that already checked in?

commit 5e0d610a433356af747fdeda5d8acfe34d3115a9
Author: ygribov <ygribov@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Mon Nov 18 08:03:16 2013 +0000

     libsanitizer:
     2013-11-18  Yury Gribov  <y.gribov@samsung.com>

         PR sanitizer/59106
         * asan/Makefile.am (AM_CXXFLAGS): Add -fno-rtti.
         * interception/Makefile.am (AM_CXXFLAGS): Likewise.
         * lsan/Makefile.am (AM_CXXFLAGS): Likewise.
         * sanitizer_common/Makefile.am (AM_CXXFLAGS): Likewise.
         * tsan/Makefile.am (AM_CXXFLAGS): Likewise.
         * asan/Makefile.in: Regenerate.
         * interception/Makefile.in: Regenerate.
         * tsan/Makefile.in: Regenerate.
         * lsan/Makefile.in: Regenerate.
         * sanitizer_common/Makefile.in: Regenerate.

     gcc/testsuite:
     2013-11-18  Yury Gribov  <y.gribov@samsung.com>

         PR sanitizer/59106
         * c-c++-common/asan/pr59106.c: New test.


     git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204934 
138bc75d-0d04-0410-96

Jeff
Yury Gribov Nov. 28, 2013, 6 a.m. UTC | #2
> Wasn't that already checked in?

No, that's an addition to previous commit.

-Y
Jakub Jelinek Nov. 28, 2013, 8:37 a.m. UTC | #3
On Wed, Nov 27, 2013 at 12:01:50PM +0400, Yury Gribov wrote:
> 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.

We assume GNU make I think, I wonder if this can't be done through
just adding -fno-rtti to AM_CXXFLAGS and say
ubsan_handlers_cxx.% ubsan_type_hash.% : AM_CXXFLAGS += -frtti

	Jakub
diff mbox

Patch

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: