Re: [PATCH 5/5] Makefile: disable unaligned loads with UBSan
- From
Jeff King <peff@peff.net>
- Date
- Jul 16, 2017, 10:17 UTC
- Message-ID
- <20170716101744.2g3x7v2dtasg45ll@sigill.intra.peff.net>
- In-Reply-To
- <de9c876c-f018-ad6b-3813-576ea73dd49a@web.de>
On Sat, Jul 15, 2017 at 07:18:56PM +0200, René Scharfe wrote:
Show 6 quoted lines
> -- >8 -- > Subject: [PATCH] Makefile: allow combining UBSan with other sanitizers > > Multiple sanitizers can be specified as a comma-separated list. Set > the flag NO_UNALIGNED_LOADS even if UndefinedBehaviorSanitizer is not > the only sanitizer to build with.
Nice, I didn't know you could do comma-separation here. ;)
I always just built the various sanitizers separately since I was testing whether each one worked. But if we can get UBSan to build cleanly, I agree that "make SANITIZE=address,undefined test" would be a nice thing to run periodically.
Show 18 quoted lines
> diff --git a/Makefile b/Makefile > index ba4359ef8d..9b98535a04 100644 > --- a/Makefile > +++ b/Makefile > @@ -1022,10 +1022,15 @@ ifdef DEVELOPER > CFLAGS += $(DEVELOPER_CFLAGS) > endif > > +comma := , > +empty := > +space := $(empty) $(empty) > + > ifdef SANITIZE > +SANITIZERS := $(foreach flag,$(subst $(comma),$(space),$(SANITIZE)),$(flag)) > BASIC_CFLAGS += -fsanitize=$(SANITIZE) -fno-sanitize-recover=$(SANITIZE) > BASIC_CFLAGS += -fno-omit-frame-pointer > -ifeq ($(SANITIZE),undefined) > +ifneq ($(filter undefined,$(SANITIZERS)),)
The implementation is convoluted in the way that "make" usually forces us into. ;)
I would have written it as:
ifeq ($findstring $(SANITIZERS), undefined), undefined)
but I think your version:
1. Isn't fooled by superstrings like a potential undefined-foo
sanitizer.2. Handles SANITIZE=undefined,undefined correctly.
Neither are expected, but it doesn't hurt to be a bit more robust.
-Peff