Re: [PATCH 1/X] libsanitizer: Tie the hwasan library into our build system
Matthew Malcomson writes: > This patch tries to tie libhwasan into the GCC build system in the same way > that the other sanitizer runtime libraries are handled. > > libsanitizer/ChangeLog: > > * Makefile.am: Build libhwasan. > * Makefile.in: Build libhwasan. > * asan/Makefile.in: Build libhwasan. > * configure: Build libhwasan. > * configure.ac: Build libhwasan. > * hwasan/Makefile.am: New file. > * hwasan/Makefile.in: New file. > * hwasan/libtool-version: New file. > * interception/Makefile.in: Build libhwasan. > * libbacktrace/Makefile.in: Build libhwasan. > * libsanitizer.spec.in: Build libhwasan. > * lsan/Makefile.in: Build libhwasan. > * sanitizer_common/Makefile.in: Build libhwasan. > * tsan/Makefile.in: Build libhwasan. > * ubsan/Makefile.in: Build libhwasan. OK, thanks. Richard > ### Attachment also inlined for ease of reply > ### > > > diff --git a/libsanitizer/Makefile.am b/libsanitizer/Makefile.am > index > 65ed1e712378ef453f820f86c4d3221f9dee5f2c..2a7e8e1debe838719db0f0fad218b2543cc3111b > 100644 > --- a/libsanitizer/Makefile.am > +++ b/libsanitizer/Makefile.am > @@ -14,11 +14,12 @@ endif > if LIBBACKTRACE_SUPPORTED > SUBDIRS += libbacktrace > endif > -SUBDIRS += lsan asan ubsan > +SUBDIRS += lsan asan ubsan hwasan > nodist_saninclude_HEADERS += \ >include/sanitizer/lsan_interface.h \ >include/sanitizer/asan_interface.h \ > - include/sanitizer/tsan_interface.h > + include/sanitizer/tsan_interface.h \ > + include/sanitizer/hwasan_interface.h > if TSAN_SUPPORTED > SUBDIRS += tsan > endif > diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in > index > 02c7f70ac6578a3e93a490ce8bd2c54fc0693c50..2c57d49cbffdb486645aeb5f2c0f85d6e0fad124 > 100644 > --- a/libsanitizer/Makefile.in > +++ b/libsanitizer/Makefile.in > @@ -92,7 +92,8 @@ target_triplet = @target@ > @SANITIZER_SUPPORTED_TRUE@am__append_1 = > include/sanitizer/common_interface_defs.h \ > @SANITIZER_SUPPORTED_TRUE@ include/sanitizer/lsan_interface.h \ > @SANITIZER_SUPPORTED_TRUE@ include/sanitizer/asan_interface.h \ > -@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/tsan_interface.h > +@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/tsan_interface.h \ > +@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/hwasan_interface.h > @SANITIZER_SUPPORTED_TRUE@@USING_MAC_INTERPOSE_FALSE@am__append_2 = > interception > @LIBBACKTRACE_SUPPORTED_TRUE@@SANITIZER_SUPPORTED_TRUE@am__append_3 = > libbacktrace > @SANITIZER_SUPPORTED_TRUE@@TSAN_SUPPORTED_TRUE@am__append_4 = tsan > @@ -207,7 +208,7 @@ ETAGS = etags > CTAGS = ctags > CSCOPE = cscope > DIST_SUBDIRS = sanitizer_common interception libbacktrace lsan asan \ > - ubsan tsan > + ubsan hwasan tsan > ACLOCAL = @ACLOCAL@ > ALLOC_FILE = @ALLOC_FILE@ > AMTAR = @AMTAR@ > @@ -329,6 +330,7 @@ install_sh = @install_sh@ > libdir = @libdir@ > libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > +link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > @@ -362,7 +364,7 @@ sanincludedir = > $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/sanitizer > nodist_saninclude_HEADERS = $(am__append_1) > @SANITIZER_SUPPORTED_TRUE@SUBDIRS = sanitizer_common $(am__append_2) \ > @SANITIZER_SUPPORTED_TRUE@ $(am__append_3) lsan asan ubsan \ > -@SANITIZER_SUPPORTED_TRUE@ $(am__append_4) > +@SANITIZER_SUPPORTED_TRUE@ hwasan $(am__append_4) > gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) > > # Work around what appears to be a GNU make bug handling MAKEFLAGS > diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in > index > 29622bf466a37f819c9fade30e31195adda51190..25c7fd7b7597d6e243005a1bb7de5b6243d2cfcf > 100644 > --- a/libsanitizer/asan/Makefile.in > +++ b/libsanitizer/asan/Makefile.in > @@ -383,6 +383,7 @@ install_sh = @install_sh@ > libdir = @libdir@ > libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > +link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > diff --git a/libsanitizer/configure b/libsanitizer/configure > index > 04eca04fbe5e59bae1ba00597de0cf1b7cf1b5fa..27e72c089cb891dcce09494fa9e39eebe55d2598 > 100755 > --- a/libsanitizer/configure > +++ b/libsanitizer/configure > @@ -657,6 +657,7 @@ USING_MAC_INTERPOSE_TRUE > link_liblsan > link_libubsan > link_libtsan > +link_libhwasan > link_libasan > LSAN_SUPPORTED_FALSE > LSAN_SUPPORTED_TRUE > @@ -12361,7 +12362,7 @@ else >lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 >lt_status=$lt_dlunknown >cat > conftest.$ac_ext <<_LT_EOF > -#line 12364 "configure" > +#line 12365 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -12467,7 +12468,7 @@ else >lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 >lt
[PATCH 1/X] libsanitizer: Tie the hwasan library into our build system
This patch tries to tie libhwasan into the GCC build system in the same way that the other sanitizer runtime libraries are handled. libsanitizer/ChangeLog: * Makefile.am: Build libhwasan. * Makefile.in: Build libhwasan. * asan/Makefile.in: Build libhwasan. * configure: Build libhwasan. * configure.ac: Build libhwasan. * hwasan/Makefile.am: New file. * hwasan/Makefile.in: New file. * hwasan/libtool-version: New file. * interception/Makefile.in: Build libhwasan. * libbacktrace/Makefile.in: Build libhwasan. * libsanitizer.spec.in: Build libhwasan. * lsan/Makefile.in: Build libhwasan. * sanitizer_common/Makefile.in: Build libhwasan. * tsan/Makefile.in: Build libhwasan. * ubsan/Makefile.in: Build libhwasan. ### Attachment also inlined for ease of reply### diff --git a/libsanitizer/Makefile.am b/libsanitizer/Makefile.am index 65ed1e712378ef453f820f86c4d3221f9dee5f2c..2a7e8e1debe838719db0f0fad218b2543cc3111b 100644 --- a/libsanitizer/Makefile.am +++ b/libsanitizer/Makefile.am @@ -14,11 +14,12 @@ endif if LIBBACKTRACE_SUPPORTED SUBDIRS += libbacktrace endif -SUBDIRS += lsan asan ubsan +SUBDIRS += lsan asan ubsan hwasan nodist_saninclude_HEADERS += \ include/sanitizer/lsan_interface.h \ include/sanitizer/asan_interface.h \ - include/sanitizer/tsan_interface.h + include/sanitizer/tsan_interface.h \ + include/sanitizer/hwasan_interface.h if TSAN_SUPPORTED SUBDIRS += tsan endif diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in index 02c7f70ac6578a3e93a490ce8bd2c54fc0693c50..2c57d49cbffdb486645aeb5f2c0f85d6e0fad124 100644 --- a/libsanitizer/Makefile.in +++ b/libsanitizer/Makefile.in @@ -92,7 +92,8 @@ target_triplet = @target@ @SANITIZER_SUPPORTED_TRUE@am__append_1 = include/sanitizer/common_interface_defs.h \ @SANITIZER_SUPPORTED_TRUE@ include/sanitizer/lsan_interface.h \ @SANITIZER_SUPPORTED_TRUE@ include/sanitizer/asan_interface.h \ -@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/tsan_interface.h +@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/tsan_interface.h \ +@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/hwasan_interface.h @SANITIZER_SUPPORTED_TRUE@@USING_MAC_INTERPOSE_FALSE@am__append_2 = interception @LIBBACKTRACE_SUPPORTED_TRUE@@SANITIZER_SUPPORTED_TRUE@am__append_3 = libbacktrace @SANITIZER_SUPPORTED_TRUE@@TSAN_SUPPORTED_TRUE@am__append_4 = tsan @@ -207,7 +208,7 @@ ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = sanitizer_common interception libbacktrace lsan asan \ - ubsan tsan + ubsan hwasan tsan ACLOCAL = @ACLOCAL@ ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ @@ -329,6 +330,7 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ link_libasan = @link_libasan@ +link_libhwasan = @link_libhwasan@ link_liblsan = @link_liblsan@ link_libtsan = @link_libtsan@ link_libubsan = @link_libubsan@ @@ -362,7 +364,7 @@ sanincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/sanitizer nodist_saninclude_HEADERS = $(am__append_1) @SANITIZER_SUPPORTED_TRUE@SUBDIRS = sanitizer_common $(am__append_2) \ @SANITIZER_SUPPORTED_TRUE@ $(am__append_3) lsan asan ubsan \ -@SANITIZER_SUPPORTED_TRUE@ $(am__append_4) +@SANITIZER_SUPPORTED_TRUE@ hwasan $(am__append_4) gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in index 29622bf466a37f819c9fade30e31195adda51190..25c7fd7b7597d6e243005a1bb7de5b6243d2cfcf 100644 --- a/libsanitizer/asan/Makefile.in +++ b/libsanitizer/asan/Makefile.in @@ -383,6 +383,7 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ link_libasan = @link_libasan@ +link_libhwasan = @link_libhwasan@ link_liblsan = @link_liblsan@ link_libtsan = @link_libtsan@ link_libubsan = @link_libubsan@ diff --git a/libsanitizer/configure b/libsanitizer/configure index 04eca04fbe5e59bae1ba00597de0cf1b7cf1b5fa..27e72c089cb891dcce09494fa9e39eebe55d2598 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -657,6 +657,7 @@ USING_MAC_INTERPOSE_TRUE link_liblsan link_libubsan link_libtsan +link_libhwasan link_libasan LSAN_SUPPORTED_FALSE LSAN_SUPPORTED_TRUE @@ -12361,7 +12362,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12364 "configure" +#line 12365 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12467,7 +12468,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12470 "configure" +#line 12471 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15943,6 +15944,10 @@ fi link_libasan=$link_sanitizer_common +# Set up the set of additional libr
Re: [PATCH 1/X] libsanitizer: Tie the hwasan library into our build system
I have the feeling that I've picked the most awkward of each binary choice here, sorry… Matthew Malcomson writes: > - Parametrising the tag size is pretty easy towards less bits, the current > code > handles this quite nicely using HWASAN_TAG_SIZE and in fact I've already done > that for a WIP branch for MTE stack tagging. > > Parametrising the tag size to more bits is much more involved -- especially > since the hwasan library uses a u8 data type to represent these tags > everywhere. Hence I figure I'll leave this as it is. > > Does that sound ok? If it's easy to parameterise towards fewer bits, I think it'd be worth having a target twiddle for it and simply asserting that the value is not more than 8. > --- w.r.t. Patch 5 > > - Around hwasan_increment_tag, yes -- the STATIC_ASSERT made the modulus > reduntant, it should have asserted the below (since the "less than or equal" > check still works for the smaller tag size used in MTE rather than fixing it > to > tag_offset). > HWASAN_TAG_SIZE <= sizeof (tag_offset) * CHAR_BIT OK. > - Exporting hwasan_base_ptr (which will be renamed to hwasan_frame_base_ptr). > I currently export this through a function hwasan_frame_base rather than via > an > exported variable. I want to do this so that any use of the base pointer will > be recorded so we know to emit the initialisation (whereas a use of > virtual_stack_vars_rtx can rest assured that the pointer will always be > initialised). The reason for that comment was that the cfgexpand.c code seemed to have to work around the fact that it couldn't directly tell whether a given rtx was hwasan_base_ptr. I think we should have the ability to test that, even if it's via a function rather than by directly exposing the variable. E.g. maybe you could have a little class around it or something, so that the comparison still happens inline via a public member function, but so that it's not possible for cfgexpand.c to use the private value directly. > N.b. This is also related to API for TARGET_MEMTAG_GENTAG (renamed in the > new patch to TARGET_MEMTAG_INSERT_RANDOM_TAG). I have tried to separate > generating a register to be used as hwasan_frame_base_ptr and emitting the RTL > to initialise that register. > That way, code that knows it does not want to emit any RTL can still access > this > variable, knowing that the initialisation will be emitted later. > This is largely because I didn't want to start spreading the possibility of > emitting RTL earlier in the expand pass. At the moment hwasan_emit_prologue > is often the first time that RTL is emitted (unless there are large aligned > variables in the stack -- these are indexed off of an alternate "base > register" > generated using get_dynamic_stack_base, and that function emits some code to > generate that new register). > > However, an alternative API which returns a fresh register would match the > interface of get_dynamic_stack_base which is an existing API in the codebase. Yeah, I think that would be better. > - default_memtag_addtag (now *_add_tag) > I was mentioning compile-time UB, I thought that `plus_constant` taking a > poly_int64 rather than a poly_uint64 meant I can't pass such a large number. No, it's just that C++ forces us to choose between signed or unsigned, even though for modes of N<=64 bits, the offset is really just a signless bag of N bits. I think the reason a signed type was chosen is that, when operating on 32-bit modes, adding int64_t (-1) looks more obvious than adding ~uint64_t (0), since the latter seems to be adding to bits beyond the MSB. > - I have added a comment about C++ exceptions, but thought I'd include a bit > more information about the state of things here. > LLVM have support for C++ exceptions by using a different unwinding > personality > function for all HWASAN tagged frames. That personality function is defined > in > libhwasan, and untags the entire stack frame as we unwind it. > > Unfortunately, that personality function relies on the frame pointer pointing > to > just before the variables on the stack (commented as not being enforced by the > ABI but being a requirement for HWASAN). That holds in LLVM but does not for > GCC. > https://github.com/llvm-mirror/compiler-rt/blob/master/lib/hwasan/ > hwasan_exceptions.cpp#L51 > > I have a hack that modifies that function to use _Unwind_Backtrace to find the > extent of the current frame, and then adds the exception support to GCC based > on > this new personality function. > Since the focus of the implementation in GCC is for the kernel (which doesn't > have C++ exceptions) I don't have plans to turn that into something > release-quality and upstream it. The userspace story for hwasan on anything > other than Android has much bigger difficulties around not using the "platform > ABI", so I don't think putting much effort into C++ exceptions makes sense > right > now. OK. > - About maybe combining the hwasan pass and the asan pass. > Yes we could just bra
Re: [PATCH 1/X] libsanitizer: Tie the hwasan library into our build system
Android has much bigger difficulties around not using the "platform ABI", so I don't think putting much effort into C++ exceptions makes sense right now. - LLVM does nothing special with strlen, it just doesn't instrument the call. - About maybe combining the hwasan pass and the asan pass. Yes we could just branch the "asan" pass based on hwasan vs asan flags. I would prefer to have the "hwasan" pass separate (I liked having the "correct" names for the -fdump-tree* arguments and dump files). That said -- if you feel strongly about this I'll happily change it. From: Richard Sandiford Sent: 13 October 2020 16:57 To: Matthew Malcomson Cc: gcc-patches@gcc.gnu.org ; k...@google.com ; Richard Earnshaw ; ja...@redhat.com ; jos...@codesourcery.com ; dvyu...@google.com ; Kyrylo Tkachov ; do...@redhat.com ; Martin Liska Subject: Re: [PATCH 1/X] libsanitizer: Tie the hwasan library into our build system Sorry for the slow review. Matthew Malcomson writes: > This patch tries to tie libhwasan into the GCC build system in the same way > that the other sanitizer runtime libraries are handled. > > libsanitizer/ChangeLog: > >* Makefile.am: Build libhwasan. >* Makefile.in: Build libhwasan. >* asan/Makefile.in: Build libhwasan. >* configure: Build libhwasan. >* configure.ac: Build libhwasan. >* hwasan/Makefile.am: New file. >* hwasan/Makefile.in: New file. >* hwasan/libtool-version: New file. >* interception/Makefile.in: Build libhwasan. >* libbacktrace/Makefile.in: Build libhwasan. >* libsanitizer.spec.in: Build libhwasan. >* lsan/Makefile.in: Build libhwasan. >* sanitizer_common/Makefile.in: Build libhwasan. >* tsan/Makefile.in: Build libhwasan. >* ubsan/Makefile.in: Build libhwasan. I think this should also update README.gcc and merge.sh. Could you try locally merging in a dummy change to the llvm sources with merge.sh, to make sure it works correctly? > new file mode 100644 > index > ..aaa39b4536a5c5f54910a951470814bbc8a20946 > --- /dev/null > +++ b/libsanitizer/hwasan/Makefile.am > @@ -0,0 +1,88 @@ > +AM_CPPFLAGS = -I $(top_srcdir)/include -I $(top_srcdir) > + > +# May be used by toolexeclibdir. > +gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) > + > +DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS > -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DCAN_SANITIZE_UB=0 > -DHWASAN_WITH_INTERCEPTORS=1 > +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 > -fno-ipa-icf I realise this is just taken from the other Makefile.ams, but do you know the reason behind -fomit-frame-pointer? I think we should avoid building aarch64 libraries with that flag unless there's a specific reason. Otherwise looks good to me, although I'm definitely not an expert on this stuff. Thanks, Richard
Re: [PATCH 1/X] libsanitizer: Tie the hwasan library into our build system
Sorry for the slow review. Matthew Malcomson writes: > This patch tries to tie libhwasan into the GCC build system in the same way > that the other sanitizer runtime libraries are handled. > > libsanitizer/ChangeLog: > > * Makefile.am: Build libhwasan. > * Makefile.in: Build libhwasan. > * asan/Makefile.in: Build libhwasan. > * configure: Build libhwasan. > * configure.ac: Build libhwasan. > * hwasan/Makefile.am: New file. > * hwasan/Makefile.in: New file. > * hwasan/libtool-version: New file. > * interception/Makefile.in: Build libhwasan. > * libbacktrace/Makefile.in: Build libhwasan. > * libsanitizer.spec.in: Build libhwasan. > * lsan/Makefile.in: Build libhwasan. > * sanitizer_common/Makefile.in: Build libhwasan. > * tsan/Makefile.in: Build libhwasan. > * ubsan/Makefile.in: Build libhwasan. I think this should also update README.gcc and merge.sh. Could you try locally merging in a dummy change to the llvm sources with merge.sh, to make sure it works correctly? > new file mode 100644 > index > ..aaa39b4536a5c5f54910a951470814bbc8a20946 > --- /dev/null > +++ b/libsanitizer/hwasan/Makefile.am > @@ -0,0 +1,88 @@ > +AM_CPPFLAGS = -I $(top_srcdir)/include -I $(top_srcdir) > + > +# May be used by toolexeclibdir. > +gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) > + > +DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS > -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DCAN_SANITIZE_UB=0 > -DHWASAN_WITH_INTERCEPTORS=1 > +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 > -fno-ipa-icf I realise this is just taken from the other Makefile.ams, but do you know the reason behind -fomit-frame-pointer? I think we should avoid building aarch64 libraries with that flag unless there's a specific reason. Otherwise looks good to me, although I'm definitely not an expert on this stuff. Thanks, Richard
[PATCH 1/X] libsanitizer: Tie the hwasan library into our build system
This patch tries to tie libhwasan into the GCC build system in the same way that the other sanitizer runtime libraries are handled. libsanitizer/ChangeLog: * Makefile.am: Build libhwasan. * Makefile.in: Build libhwasan. * asan/Makefile.in: Build libhwasan. * configure: Build libhwasan. * configure.ac: Build libhwasan. * hwasan/Makefile.am: New file. * hwasan/Makefile.in: New file. * hwasan/libtool-version: New file. * interception/Makefile.in: Build libhwasan. * libbacktrace/Makefile.in: Build libhwasan. * libsanitizer.spec.in: Build libhwasan. * lsan/Makefile.in: Build libhwasan. * sanitizer_common/Makefile.in: Build libhwasan. * tsan/Makefile.in: Build libhwasan. * ubsan/Makefile.in: Build libhwasan. ### Attachment also inlined for ease of reply### diff --git a/libsanitizer/Makefile.am b/libsanitizer/Makefile.am index 65ed1e712378ef453f820f86c4d3221f9dee5f2c..2a7e8e1debe838719db0f0fad218b2543cc3111b 100644 --- a/libsanitizer/Makefile.am +++ b/libsanitizer/Makefile.am @@ -14,11 +14,12 @@ endif if LIBBACKTRACE_SUPPORTED SUBDIRS += libbacktrace endif -SUBDIRS += lsan asan ubsan +SUBDIRS += lsan asan ubsan hwasan nodist_saninclude_HEADERS += \ include/sanitizer/lsan_interface.h \ include/sanitizer/asan_interface.h \ - include/sanitizer/tsan_interface.h + include/sanitizer/tsan_interface.h \ + include/sanitizer/hwasan_interface.h if TSAN_SUPPORTED SUBDIRS += tsan endif diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in index 02c7f70ac6578a3e93a490ce8bd2c54fc0693c50..2c57d49cbffdb486645aeb5f2c0f85d6e0fad124 100644 --- a/libsanitizer/Makefile.in +++ b/libsanitizer/Makefile.in @@ -92,7 +92,8 @@ target_triplet = @target@ @SANITIZER_SUPPORTED_TRUE@am__append_1 = include/sanitizer/common_interface_defs.h \ @SANITIZER_SUPPORTED_TRUE@ include/sanitizer/lsan_interface.h \ @SANITIZER_SUPPORTED_TRUE@ include/sanitizer/asan_interface.h \ -@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/tsan_interface.h +@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/tsan_interface.h \ +@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/hwasan_interface.h @SANITIZER_SUPPORTED_TRUE@@USING_MAC_INTERPOSE_FALSE@am__append_2 = interception @LIBBACKTRACE_SUPPORTED_TRUE@@SANITIZER_SUPPORTED_TRUE@am__append_3 = libbacktrace @SANITIZER_SUPPORTED_TRUE@@TSAN_SUPPORTED_TRUE@am__append_4 = tsan @@ -207,7 +208,7 @@ ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = sanitizer_common interception libbacktrace lsan asan \ - ubsan tsan + ubsan hwasan tsan ACLOCAL = @ACLOCAL@ ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ @@ -329,6 +330,7 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ link_libasan = @link_libasan@ +link_libhwasan = @link_libhwasan@ link_liblsan = @link_liblsan@ link_libtsan = @link_libtsan@ link_libubsan = @link_libubsan@ @@ -362,7 +364,7 @@ sanincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/sanitizer nodist_saninclude_HEADERS = $(am__append_1) @SANITIZER_SUPPORTED_TRUE@SUBDIRS = sanitizer_common $(am__append_2) \ @SANITIZER_SUPPORTED_TRUE@ $(am__append_3) lsan asan ubsan \ -@SANITIZER_SUPPORTED_TRUE@ $(am__append_4) +@SANITIZER_SUPPORTED_TRUE@ hwasan $(am__append_4) gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in index 29622bf466a37f819c9fade30e31195adda51190..25c7fd7b7597d6e243005a1bb7de5b6243d2cfcf 100644 --- a/libsanitizer/asan/Makefile.in +++ b/libsanitizer/asan/Makefile.in @@ -383,6 +383,7 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ link_libasan = @link_libasan@ +link_libhwasan = @link_libhwasan@ link_liblsan = @link_liblsan@ link_libtsan = @link_libtsan@ link_libubsan = @link_libubsan@ diff --git a/libsanitizer/configure b/libsanitizer/configure index 04eca04fbe5e59bae1ba00597de0cf1b7cf1b5fa..9ed9669a85d3cfc2f2f623e796e61a5f8f7e4ded 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -657,6 +657,7 @@ USING_MAC_INTERPOSE_TRUE link_liblsan link_libubsan link_libtsan +link_libhwasan link_libasan LSAN_SUPPORTED_FALSE LSAN_SUPPORTED_TRUE @@ -12361,7 +12362,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12364 "configure" +#line 12365 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12467,7 +12468,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12470 "configure" +#line 12471 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15943,6 +15944,10 @@ fi link_libasan=$link_sanitizer_common +# Set up the set of additional libr
[PATCH 1/X] [libsanitizer] Tie the hwasan library into our build system
This patch tries to tie libhwasan into the GCC build system in the same way that the other sanitizer runtime libraries are handled. libsanitizer/ChangeLog: 2019-12-12 Matthew Malcomson * Makefile.am: Build libhwasan. * Makefile.in: Build libhwasan. * asan/Makefile.in: Build libhwasan. * configure: Build libhwasan. * configure.ac: Build libhwasan. * hwasan/Makefile.am: New file. * hwasan/Makefile.in: New file. * hwasan/libtool-version: New file. * interception/Makefile.in: Build libhwasan. * libbacktrace/Makefile.in: Build libhwasan. * libsanitizer.spec.in: Build libhwasan. * lsan/Makefile.in: Build libhwasan. * merge.sh: Build libhwasan. * sanitizer_common/Makefile.in: Build libhwasan. * tsan/Makefile.in: Build libhwasan. * ubsan/Makefile.in: Build libhwasan. ### Attachment also inlined for ease of reply### diff --git a/libsanitizer/Makefile.am b/libsanitizer/Makefile.am index 65ed1e712378ef453f820f86c4d3221f9dee5f2c..2a7e8e1debe838719db0f0fad218b2543cc3111b 100644 --- a/libsanitizer/Makefile.am +++ b/libsanitizer/Makefile.am @@ -14,11 +14,12 @@ endif if LIBBACKTRACE_SUPPORTED SUBDIRS += libbacktrace endif -SUBDIRS += lsan asan ubsan +SUBDIRS += lsan asan ubsan hwasan nodist_saninclude_HEADERS += \ include/sanitizer/lsan_interface.h \ include/sanitizer/asan_interface.h \ - include/sanitizer/tsan_interface.h + include/sanitizer/tsan_interface.h \ + include/sanitizer/hwasan_interface.h if TSAN_SUPPORTED SUBDIRS += tsan endif diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in index 0d789b3a59d21ea2e5a23057ca3afe15425feec4..36aa952af7e04bc0e4fb94cdcd584d539193d781 100644 --- a/libsanitizer/Makefile.in +++ b/libsanitizer/Makefile.in @@ -92,7 +92,8 @@ target_triplet = @target@ @SANITIZER_SUPPORTED_TRUE@am__append_1 = include/sanitizer/common_interface_defs.h \ @SANITIZER_SUPPORTED_TRUE@ include/sanitizer/lsan_interface.h \ @SANITIZER_SUPPORTED_TRUE@ include/sanitizer/asan_interface.h \ -@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/tsan_interface.h +@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/tsan_interface.h \ +@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/hwasan_interface.h @SANITIZER_SUPPORTED_TRUE@@USING_MAC_INTERPOSE_FALSE@am__append_2 = interception @LIBBACKTRACE_SUPPORTED_TRUE@@SANITIZER_SUPPORTED_TRUE@am__append_3 = libbacktrace @SANITIZER_SUPPORTED_TRUE@@TSAN_SUPPORTED_TRUE@am__append_4 = tsan @@ -206,7 +207,7 @@ ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = sanitizer_common interception libbacktrace lsan asan \ - ubsan tsan + ubsan hwasan tsan ACLOCAL = @ACLOCAL@ ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ @@ -328,6 +329,7 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ link_libasan = @link_libasan@ +link_libhwasan = @link_libhwasan@ link_liblsan = @link_liblsan@ link_libtsan = @link_libtsan@ link_libubsan = @link_libubsan@ @@ -361,7 +363,7 @@ sanincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/sanitizer nodist_saninclude_HEADERS = $(am__append_1) @SANITIZER_SUPPORTED_TRUE@SUBDIRS = sanitizer_common $(am__append_2) \ @SANITIZER_SUPPORTED_TRUE@ $(am__append_3) lsan asan ubsan \ -@SANITIZER_SUPPORTED_TRUE@ $(am__append_4) +@SANITIZER_SUPPORTED_TRUE@ hwasan $(am__append_4) gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in index 00b6082da5372efd679ddc230f588bbc58161ef6..76689c3b224b1fb04895ae48829eac4b6784cd84 100644 --- a/libsanitizer/asan/Makefile.in +++ b/libsanitizer/asan/Makefile.in @@ -382,6 +382,7 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ link_libasan = @link_libasan@ +link_libhwasan = @link_libhwasan@ link_liblsan = @link_liblsan@ link_libtsan = @link_libtsan@ link_libubsan = @link_libubsan@ diff --git a/libsanitizer/configure b/libsanitizer/configure index 79b5c1eadb59018bca13a33f19f3494c170365ee..ff72af73e6f77aaf93bf39e6799f896851a377dd 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -657,6 +657,7 @@ USING_MAC_INTERPOSE_TRUE link_liblsan link_libubsan link_libtsan +link_libhwasan link_libasan LSAN_SUPPORTED_FALSE LSAN_SUPPORTED_TRUE @@ -12334,7 +12335,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12337 "configure" +#line 12338 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12440,7 +12441,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12443 "configure" +#line 12444 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15916,6 +15917,10 @@ fi link_l
Re: [PATCH 1/X] [libsanitizer] Tie the hwasan library into our build system
On 11/7/19 7:37 PM, Matthew Malcomson wrote: +# This file is used to maintain libtool version info for libmudflap. See Just a small nit here, the comment is a copy&paste leftover, please rename it to libhwasan. I've just sent similar patch that fixes that in other places: https://gcc.gnu.org/ml/gcc-patches/2019-11/msg01922.html Martin
[PATCH 1/X] [libsanitizer] Tie the hwasan library into our build system
This patch does tries to tie libhwasan into the GCC build system in the same way that the other sanitizer runtime libraries are handled. libsanitizer/ChangeLog: 2019-11-07 Matthew Malcomson * Makefile.am: Build libhwasan. * Makefile.in: Build libhwasan. * asan/Makefile.in: Build libhwasan. * configure: Build libhwasan. * configure.ac: Build libhwasan. * hwasan/Makefile.am: New file. * hwasan/Makefile.in: New file. * hwasan/libtool-version: New file. * interception/Makefile.in: Build libhwasan. * libbacktrace/Makefile.in: Build libhwasan. * libsanitizer.spec.in: Build libhwasan. * lsan/Makefile.in: Build libhwasan. * merge.sh: Build libhwasan. * sanitizer_common/Makefile.in: Build libhwasan. * tsan/Makefile.in: Build libhwasan. * ubsan/Makefile.in: Build libhwasan. ### Attachment also inlined for ease of reply### diff --git a/libsanitizer/Makefile.am b/libsanitizer/Makefile.am index 65ed1e712378ef453f820f86c4d3221f9dee5f2c..2a7e8e1debe838719db0f0fad218b2543cc3111b 100644 --- a/libsanitizer/Makefile.am +++ b/libsanitizer/Makefile.am @@ -14,11 +14,12 @@ endif if LIBBACKTRACE_SUPPORTED SUBDIRS += libbacktrace endif -SUBDIRS += lsan asan ubsan +SUBDIRS += lsan asan ubsan hwasan nodist_saninclude_HEADERS += \ include/sanitizer/lsan_interface.h \ include/sanitizer/asan_interface.h \ - include/sanitizer/tsan_interface.h + include/sanitizer/tsan_interface.h \ + include/sanitizer/hwasan_interface.h if TSAN_SUPPORTED SUBDIRS += tsan endif diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in index 0d789b3a59d21ea2e5a23057ca3afe15425feec4..36aa952af7e04bc0e4fb94cdcd584d539193d781 100644 --- a/libsanitizer/Makefile.in +++ b/libsanitizer/Makefile.in @@ -92,7 +92,8 @@ target_triplet = @target@ @SANITIZER_SUPPORTED_TRUE@am__append_1 = include/sanitizer/common_interface_defs.h \ @SANITIZER_SUPPORTED_TRUE@ include/sanitizer/lsan_interface.h \ @SANITIZER_SUPPORTED_TRUE@ include/sanitizer/asan_interface.h \ -@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/tsan_interface.h +@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/tsan_interface.h \ +@SANITIZER_SUPPORTED_TRUE@ include/sanitizer/hwasan_interface.h @SANITIZER_SUPPORTED_TRUE@@USING_MAC_INTERPOSE_FALSE@am__append_2 = interception @LIBBACKTRACE_SUPPORTED_TRUE@@SANITIZER_SUPPORTED_TRUE@am__append_3 = libbacktrace @SANITIZER_SUPPORTED_TRUE@@TSAN_SUPPORTED_TRUE@am__append_4 = tsan @@ -206,7 +207,7 @@ ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = sanitizer_common interception libbacktrace lsan asan \ - ubsan tsan + ubsan hwasan tsan ACLOCAL = @ACLOCAL@ ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ @@ -328,6 +329,7 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ link_libasan = @link_libasan@ +link_libhwasan = @link_libhwasan@ link_liblsan = @link_liblsan@ link_libtsan = @link_libtsan@ link_libubsan = @link_libubsan@ @@ -361,7 +363,7 @@ sanincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/sanitizer nodist_saninclude_HEADERS = $(am__append_1) @SANITIZER_SUPPORTED_TRUE@SUBDIRS = sanitizer_common $(am__append_2) \ @SANITIZER_SUPPORTED_TRUE@ $(am__append_3) lsan asan ubsan \ -@SANITIZER_SUPPORTED_TRUE@ $(am__append_4) +@SANITIZER_SUPPORTED_TRUE@ hwasan $(am__append_4) gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in index 00b6082da5372efd679ddc230f588bbc58161ef6..76689c3b224b1fb04895ae48829eac4b6784cd84 100644 --- a/libsanitizer/asan/Makefile.in +++ b/libsanitizer/asan/Makefile.in @@ -382,6 +382,7 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ link_libasan = @link_libasan@ +link_libhwasan = @link_libhwasan@ link_liblsan = @link_liblsan@ link_libtsan = @link_libtsan@ link_libubsan = @link_libubsan@ diff --git a/libsanitizer/configure b/libsanitizer/configure index 79b5c1eadb59018bca13a33f19f3494c170365ee..ff72af73e6f77aaf93bf39e6799f896851a377dd 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -657,6 +657,7 @@ USING_MAC_INTERPOSE_TRUE link_liblsan link_libubsan link_libtsan +link_libhwasan link_libasan LSAN_SUPPORTED_FALSE LSAN_SUPPORTED_TRUE @@ -12334,7 +12335,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12337 "configure" +#line 12338 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12440,7 +12441,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12443 "configure" +#line 12444 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15916,6 +15917,10 @@ fi l