From owner-svn-src-head@freebsd.org Tue Nov 10 20:47:00 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 38D2A463FA6; Tue, 10 Nov 2020 20:47:00 +0000 (UTC) (envelope-from mat.macy@gmail.com) Received: from mail-lf1-x131.google.com (mail-lf1-x131.google.com [IPv6:2a00:1450:4864:20::131]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4CW0KJ11NWz4sxj; Tue, 10 Nov 2020 20:46:59 +0000 (UTC) (envelope-from mat.macy@gmail.com) Received: by mail-lf1-x131.google.com with SMTP id i6so64621lfd.1; Tue, 10 Nov 2020 12:46:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=XjlgMnAgIWSg2rW6SWasKv25DHoYOjI22UdS9U7fW/k=; b=lxGYWuzOvchJMjLjAZOrjD7pBk9KEQoxuW3Z/BNJd4/jD96SoNX1MMBcqOkKWFGhDI m2iRWxRjvps5ZlM8Vnl8nuX0KCbefT6op3FMWy1nuSEOVvzQwe3/An7+D/4fFV3uyu8W VDsRrFV8iAP0o0ljgYCqbYubQ+gQFQs1URXEga+28NUP1LZtCNugtMTG18TvbAPze7Ev NmBaGGsYBxBt+U/8dnSwu1ueYCoQ2d9aDx5o3GaMSvuc1utqvEn5NB7omI9mGrInhAjQ ZSOOm/13Cx3nO0SLFHb5cGfQxL0eR2NVg5NRygDEwrxvgF5CpvKqtdrTKHXjBE0UaGhu BobA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=XjlgMnAgIWSg2rW6SWasKv25DHoYOjI22UdS9U7fW/k=; b=osAcxWbtoEd21tm44JFsT+wwx3WAqckGhBaZZhdtC9R4IqjN9HSc9pl9PH/Wu8chZH ySyoSz6JnHaHKjLo/CQkFjdXL+FSsZAthGbKVT6nCXKy5yjTbpVdZ2lKTJE/a0xNcPzB CSr7K+1UIQoANU144slukBQ6gD2R4aWeTH1IsXJWMDbdAmBiBXsCzRciHfP4uYhdZ2Zd 0gSLQhbl70BflWjrm11iC2GCntH5gOCks8tJ54qPu8/gDDd0MgBAIhCADLvYpPd6FuMc rsrXe+FaUPLsJxslWqohl1751xyH/ZNloTk5HI1vBFU6qQwj8uqqa3wdC2/ZiHZ41a3S 2APA== X-Gm-Message-State: AOAM531TKKrlk+g9Xa0TvZXRiSbuzG1z7PQiJd4mz8IO400AjVa3+mSZ KYNxUOIMxS4Brm6PO3OSz07TB0qu+p9AV47qCDl0A4jX3QDBxA== X-Google-Smtp-Source: ABdhPJwf/POXAd8XS9GGzxxDwUsa81ejXzkXfrMJKfoHbmDsbFLn7b1o0no4zHXmPO/92p4YIQDOo7tEsVeS7ZD1YYs= X-Received: by 2002:a05:6512:3496:: with SMTP id v22mr7613928lfr.230.1605041217124; Tue, 10 Nov 2020 12:46:57 -0800 (PST) MIME-Version: 1.0 References: <202011101915.0AAJFEWf059408@repo.freebsd.org> In-Reply-To: <202011101915.0AAJFEWf059408@repo.freebsd.org> From: Matthew Macy Date: Tue, 10 Nov 2020 12:46:45 -0800 Message-ID: Subject: Re: svn commit: r367577 - in head: share/mk sys/conf tools/build/options To: Brooks Davis Cc: src-committers , svn-src-all , svn-src-head Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4CW0KJ11NWz4sxj X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_FROM(0.00)[] X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Nov 2020 20:47:00 -0000 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 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 > + > +.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.