svn commit: r367577 - in head: share/mk sys/conf tools/build/options
Matthew Macy
mat.macy at gmail.com
Tue Nov 10 20:47:00 UTC 2020
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 at 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.
More information about the svn-src-all
mailing list