Date: Tue, 10 Nov 2020 12:46:45 -0800 From: Matthew Macy <mat.macy@gmail.com> To: Brooks Davis <brooks@freebsd.org> Cc: src-committers <src-committers@freebsd.org>, svn-src-all <svn-src-all@freebsd.org>, svn-src-head <svn-src-head@freebsd.org> Subject: Re: svn commit: r367577 - in head: share/mk sys/conf tools/build/options Message-ID: <CAPrugNoFuWdEcmRY72Zcb9x3JWWvY4OGx-ZPaUVEi3WTu7PVKA@mail.gmail.com> In-Reply-To: <202011101915.0AAJFEWf059408@repo.freebsd.org> References: <202011101915.0AAJFEWf059408@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
These flags aren't defined by default when building external kernel modules: gmake[2]: Entering directory '/usr/home/matt/devel/ZoF/module' env -u MAKEFLAGS make -C /home/matt/devel/ZoF/module -f Makefile.bsd -w make[3]: Entering directory `/home/matt/devel/ZoF/module' make[3]: "/usr/home/matt/devel/freebsd/sys/conf/kern.mk" line 233: Malformed conditional (${MK_INIT_ALL_ZERO} == "yes") make[3]: Fatal errors encountered -- cannot continue make[3]: stopped in /home/matt/devel/ZoF/module gmake[2]: *** [Makefile:53: modules-FreeBSD] Error 1 gmake[2]: Leaving directory '/usr/home/matt/devel/ZoF/module' On Tue, Nov 10, 2020 at 11:15 AM Brooks Davis <brooks@freebsd.org> wrote: > > Author: brooks > Date: Tue Nov 10 19:15:13 2020 > New Revision: 367577 > URL: https://svnweb.freebsd.org/changeset/base/367577 > > Log: > Support initializing stack variables on function entry > > There are two options: > - WITH_INIT_ALL_ZERO: Zero all variables on the stack. > - WITH_INIT_ALL_PATTERN: Initialize variables with well-defined patterns. > > The exact pattern are a compiler implementation detail and vary by type. > They are somewhat documented in the LLVM commit message: > https://reviews.llvm.org/rL349442 > I've used WITH_INIT_ALL_* to match Microsoft's InitAll feature rather > than naming them after the LLVM specific compiler flags. > > In a range of consumer products, options like these are used in > both debug and production builds with debugs builds using patterns > (intended to provoke crashes on use of uninitialized values) and > production using zeros (deemed more likely to lead to harmless > misbehavior or NULL-pointer dereferences). > > Reviewed by: emaste > Obtained from: CheriBSD > Sponsored by: DARPA > Differential Revision: https://reviews.freebsd.org/D27131 > > Added: > head/tools/build/options/WITH_INIT_ALL_PATTERN (contents, props changed) > head/tools/build/options/WITH_INIT_ALL_ZERO (contents, props changed) > Modified: > head/share/mk/bsd.compiler.mk > head/share/mk/bsd.lib.mk > head/share/mk/bsd.opts.mk > head/share/mk/bsd.prog.mk > head/sys/conf/kern.mk > > Modified: head/share/mk/bsd.compiler.mk > ============================================================================== > --- head/share/mk/bsd.compiler.mk Tue Nov 10 19:09:35 2020 (r367576) > +++ head/share/mk/bsd.compiler.mk Tue Nov 10 19:15:13 2020 (r367577) > @@ -24,6 +24,7 @@ > # - c++11: supports full (or nearly full) C++11 programming environment. > # - retpoline: supports the retpoline speculative execution vulnerability > # mitigation. > +# - init-all: supports stack variable initialization. > # > # These variables with an X_ prefix will also be provided if XCC is set. > # > @@ -214,7 +215,7 @@ ${X_}COMPILER_FEATURES= c++11 c++14 > ${X_}COMPILER_FEATURES+= c++17 > .endif > .if ${${X_}COMPILER_TYPE} == "clang" > -${X_}COMPILER_FEATURES+= retpoline > +${X_}COMPILER_FEATURES+= retpoline init-all > .endif > > .else > > Modified: head/share/mk/bsd.lib.mk > ============================================================================== > --- head/share/mk/bsd.lib.mk Tue Nov 10 19:09:35 2020 (r367576) > +++ head/share/mk/bsd.lib.mk Tue Nov 10 19:15:13 2020 (r367577) > @@ -85,6 +85,25 @@ LDFLAGS+= -Wl,-zretpolineplt > .endif > .endif > > +# Initialize stack variables on function entry > +.if ${MK_INIT_ALL_ZERO} == "yes" > +.if ${COMPILER_FEATURES:Minit-all} > +CFLAGS+= -ftrivial-auto-var-init=zero \ > + -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang > +CXXFLAGS+= -ftrivial-auto-var-init=zero \ > + -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang > +.else > +.warning InitAll (zeros) requested but not support by compiler > +.endif > +.elif ${MK_INIT_ALL_PATTERN} == "yes" > +.if ${COMPILER_FEATURES:Minit-all} > +CFLAGS+= -ftrivial-auto-var-init=pattern > +CXXFLAGS+= -ftrivial-auto-var-init=pattern > +.else > +.warning InitAll (pattern) requested but not support by compiler > +.endif > +.endif > + > .if ${MK_DEBUG_FILES} != "no" && empty(DEBUG_FLAGS:M-g) && \ > empty(DEBUG_FLAGS:M-gdwarf*) > CFLAGS+= ${DEBUG_FILES_CFLAGS} > > Modified: head/share/mk/bsd.opts.mk > ============================================================================== > --- head/share/mk/bsd.opts.mk Tue Nov 10 19:09:35 2020 (r367576) > +++ head/share/mk/bsd.opts.mk Tue Nov 10 19:15:13 2020 (r367577) > @@ -71,6 +71,8 @@ __DEFAULT_NO_OPTIONS = \ > BIND_NOW \ > CCACHE_BUILD \ > CTF \ > + INIT_ALL_PATTERN \ > + INIT_ALL_ZERO \ > INSTALL_AS_USER \ > PIE \ > RETPOLINE \ > @@ -84,6 +86,10 @@ __DEFAULT_DEPENDENT_OPTIONS = \ > > > .include <bsd.mkopt.mk> > + > +.if ${MK_INIT_ALL_PATTERN} == "yes" && ${MK_INIT_ALL_ZERO} == "yes" > +.error WITH_INIT_ALL_PATTERN and WITH_INIT_ALL_ZERO are mutually exclusive. > +.endif > > # > # Supported NO_* options (if defined, MK_* will be forced to "no", > > Modified: head/share/mk/bsd.prog.mk > ============================================================================== > --- head/share/mk/bsd.prog.mk Tue Nov 10 19:09:35 2020 (r367576) > +++ head/share/mk/bsd.prog.mk Tue Nov 10 19:15:13 2020 (r367577) > @@ -60,6 +60,25 @@ LDFLAGS+= -Wl,-zretpolineplt > .endif > .endif > > +# Initialize stack variables on function entry > +.if ${MK_INIT_ALL_ZERO} == "yes" > +.if ${COMPILER_FEATURES:Minit-all} > +CFLAGS+= -ftrivial-auto-var-init=zero \ > + -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang > +CXXFLAGS+= -ftrivial-auto-var-init=zero \ > + -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang > +.else > +.warning InitAll (zeros) requested but not support by compiler > +.endif > +.elif ${MK_INIT_ALL_PATTERN} == "yes" > +.if ${COMPILER_FEATURES:Minit-all} > +CFLAGS+= -ftrivial-auto-var-init=pattern > +CXXFLAGS+= -ftrivial-auto-var-init=pattern > +.else > +.warning InitAll (pattern) requested but not support by compiler > +.endif > +.endif > + > .if ${MACHINE_CPUARCH} == "riscv" && ${LINKER_FEATURES:Mriscv-relaxations} == "" > CFLAGS += -mno-relax > .endif > > Modified: head/sys/conf/kern.mk > ============================================================================== > --- head/sys/conf/kern.mk Tue Nov 10 19:09:35 2020 (r367576) > +++ head/sys/conf/kern.mk Tue Nov 10 19:15:13 2020 (r367577) > @@ -228,6 +228,24 @@ CFLAGS+= -mretpoline > .endif > > # > +# Initialize stack variables on function entry > +# > +.if ${MK_INIT_ALL_ZERO} == "yes" > +.if ${COMPILER_FEATURES:Minit-all} > +CFLAGS+= -ftrivial-auto-var-init=zero \ > + -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang > +.else > +.warning InitAll (zeros) requested but not support by compiler > +.endif > +.elif ${MK_INIT_ALL_PATTERN} == "yes" > +.if ${COMPILER_FEATURES:Minit-all} > +CFLAGS+= -ftrivial-auto-var-init=pattern > +.else > +.warning InitAll (pattern) requested but not support by compiler > +.endif > +.endif > + > +# > # Add -gdwarf-2 when compiling -g. The default starting in clang v3.4 > # and gcc 4.8 is to generate DWARF version 4. However, our tools don't > # cope well with DWARF 4, so force it to genereate DWARF2, which they > > Added: head/tools/build/options/WITH_INIT_ALL_PATTERN > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/tools/build/options/WITH_INIT_ALL_PATTERN Tue Nov 10 19:15:13 2020 (r367577) > @@ -0,0 +1,5 @@ > +.\" $FreeBSD$ > +Set to build the base system or kernel with stack variables initialized to > +.Pq compiler defined > +debugging patterns on function entry. > +This option requires the clang compiler. > > Added: head/tools/build/options/WITH_INIT_ALL_ZERO > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/tools/build/options/WITH_INIT_ALL_ZERO Tue Nov 10 19:15:13 2020 (r367577) > @@ -0,0 +1,4 @@ > +.\" $FreeBSD$ > +Set to build the base system or kernel with stack variables initialized > +to zero on function entry. > +This option requires that the clang compiler be used.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPrugNoFuWdEcmRY72Zcb9x3JWWvY4OGx-ZPaUVEi3WTu7PVKA>