From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-x22c.google.com (mail-wm0-x22c.google.com [IPv6:2a00:1450:400c:c09::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 452CE1A1E1D for ; Tue, 2 Aug 2016 01:51:00 -0700 (PDT) Received: by mail-wm0-x22c.google.com with SMTP id i5so278964692wmg.0 for ; Tue, 02 Aug 2016 01:51:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=mmm/pq4Y6P3Pg06wtmA7x25w/LL0iQlxGEWqrgYpJ+E=; b=RQx4HSs/mukLAxhTCIVIjqI4SDSXOFpfwR4ih6GLINyQZ66tpYoun19BcW4xYUbHgW z77LohzYq5ePJ2OveZIK58QwPBesbyuddZXMTaLcqfrrYUERWqui/cRrIzJUmVlejnIz lO1EEsyU9+ChzESLIe0+FzgwB2YvohpaMV9GE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=mmm/pq4Y6P3Pg06wtmA7x25w/LL0iQlxGEWqrgYpJ+E=; b=dGMrtJEsuI3nrV7hgZhys04soFpSTAfzN/uHf96XoMrWi6XiXxUKN8/zoGEx8AScUx BzlPYKCFC711PxruXOBA/eGtBTFn2Q+ZBd0HGqsC317/Bely2P4KmCkNDQDE4u+WZDQo xpkM0bZZKYfAJLIPUUtzR9Q3womO7L0rzcKkvZ7DFFpBrv5cBosCcQYofh49wJ9s39UP LmAotkeKg10yNAmlm7j/I/hoJwtOEVlLv92MMWiOEi5/7msVUBmXtoXWYx1ZkeoDe13N NDu0yLLIEwy9r1ahykFZqixw+TQU3apIna1NmMz5aiY0+Al0dsUTcjkeWthefzJOfTr4 nl9g== X-Gm-Message-State: AEkoousw2qyMz/jHGX7yge0SfqP85pmSJHGIFhzDsZA1b+/A6qTR4BuF3lAE49Ubscdx/ukV X-Received: by 10.28.165.207 with SMTP id o198mr62169878wme.87.1470127858141; Tue, 02 Aug 2016 01:50:58 -0700 (PDT) Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id q23sm1889046wme.17.2016.08.02.01.50.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 02 Aug 2016 01:50:57 -0700 (PDT) Date: Tue, 2 Aug 2016 09:50:55 +0100 From: Leif Lindholm To: Ard Biesheuvel Cc: steven.shi@intel.com, yonghong.zhu@intel.com, liming.gao@intel.com, jordan.l.justen@intel.com, edk2-devel@lists.01.org, lersek@redhat.com Message-ID: <20160802085055.GU31760@bivouac.eciton.net> References: <1470038497-2536-1-git-send-email-ard.biesheuvel@linaro.org> <1470038497-2536-6-git-send-email-ard.biesheuvel@linaro.org> MIME-Version: 1.0 In-Reply-To: <1470038497-2536-6-git-send-email-ard.biesheuvel@linaro.org> User-Agent: Mutt/1.5.23 (2014-03-12) Subject: Re: [PATCH v5 5/8] ArmPkg: add prebuilt glue binaries for GCC5 LTO support X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Aug 2016 08:51:00 -0000 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Mon, Aug 01, 2016 at 10:01:34AM +0200, Ard Biesheuvel wrote: > GCC in LTO mode interoperates poorly with non-standard libraries that > provide implementations of compiler intrinsics such as memcpy/memset > or the stack protector entry points. Such libraries need to be built > in non-LTO mode, and then referenced explicitly on the linker command > line using a -plugin-opt=-pass-through=-lxxx linker option. > > However, if these intrinsics are also referenced directly, the LTO > version of the code will be pulled in, and will happily satisfy all > other references to the same symbol. > > So add a pair of glue libraries, for ARM and AARCH64, that reference > the known intrinsics. Since the binaries live under ArmPkg directly, > we can reference them in tools_def.txt. Under LD garbage collection, > the object itself will be pruned, and so will the intrinsics that end > up unused by the module. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ard Biesheuvel > Acked-by: Jordan Justen If everyone else is happy about this binary file inclusion, I certainly don't object (given that the source is included). Reviewed-by: Leif Lindholm > --- > ArmPkg/Library/GccLto/liblto-aarch64.a | Bin 0 -> 1016 bytes > ArmPkg/Library/GccLto/liblto-aarch64.s | 27 +++++++++ > ArmPkg/Library/GccLto/liblto-arm.a | Bin 0 -> 2096 bytes > ArmPkg/Library/GccLto/liblto-arm.s | 61 ++++++++++++++++++++ > 4 files changed, 88 insertions(+) > > diff --git a/ArmPkg/Library/GccLto/liblto-aarch64.a b/ArmPkg/Library/GccLto/liblto-aarch64.a > new file mode 100644 > index 0000000000000000000000000000000000000000..2ab00238f0dad882abf08a1fb9623c9cdea9f17b > GIT binary patch > literal 1016 > zcmbu7&rZTX5XPqz6oLo!M8btcV>pmaJb3R#Pab@Ovb0qUG$GwJk&}<*)yMErJh~su > zhGA(FBh#ci^V@G{X8(NLKR&dgh`dGgNxR5Xq8|a14Nj;_ot@whUR;}*D0W|+#ne8) > z+crcqtbp?TKuy$d;Fk^js)5sWPGwPMt2G8wSV~i4b+$;e`67MRugg8~@}{d?w$pJf > z%hU2Z13wYMF8ko8f}aWQH5;VNy0m&m%Ghc<&b?O^ORa42Zb{|ZYEm;}M9QPwkz0*h > zki8>ef}gYSE})e*bOFvFk oxX>*EVPSp5Eivz1-~TrQyaBwMaQ{8W!rrlD%!Td{2n*}~0;u;a`v3p{ > > literal 0 > HcmV?d00001 > > diff --git a/ArmPkg/Library/GccLto/liblto-aarch64.s b/ArmPkg/Library/GccLto/liblto-aarch64.s > new file mode 100644 > index 000000000000..45000d327758 > --- /dev/null > +++ b/ArmPkg/Library/GccLto/liblto-aarch64.s > @@ -0,0 +1,27 @@ > +// > +// Copyright (c) 2016, Linaro Ltd. All rights reserved.
> +// > +// This program and the accompanying materials are licensed and made available under > +// the terms and conditions of the BSD License that accompanies this distribution. > +// The full text of the license may be found at > +// http://opensource.org/licenses/bsd-license.php. > +// > +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > +// > + > +// > +// GCC in LTO mode interoperates poorly with non-standard libraries that > +// provide implementations of compiler intrinsics such as memcpy/memset > +// or the stack protector entry points. > +// > +// By referencing these functions from a non-LTO object that can be passed > +// to the linker via the -plugin-opt=-pass-through=-lxxx options, the > +// intrinsics are included in the link in a way that allows them to be > +// pruned again if no other references to them exist. > +// > + > + .long memcpy - . > + .long memset - . > + .long __stack_chk_fail - . > + .long __stack_chk_guard - . > diff --git a/ArmPkg/Library/GccLto/liblto-arm.a b/ArmPkg/Library/GccLto/liblto-arm.a > new file mode 100644 > index 0000000000000000000000000000000000000000..d811c09573a35ea87a8002ecf01be18e1c6e7fd3 > GIT binary patch > literal 2096 > zcmd6o%WKq76vn?XQ*C|Js#WW|YOD1@u(oJH7cHm=wjd(Xg%C3{sS}#eGD-SEunQLz > zT?o1mx)E36&V>ti;!4n^e}Mi6u3h<^n@J{fT zhR`D5^G4ItF=}K8T}U0-`2R^Kc5yYX=T>}_x@dNmx{6!*W2si#P63O*VzW?IBihqh > z=)ig*pojKb#bw326`xc*toV}R>x!op&nRA0ysG%I;^&HAD}JZ=gW^w$zbO8u_=n=3 > zihn6C7jA)^cemm`#e<4%#TOM%D88Zij$&7Fpm;^`6UFO_-zdgF4UQAVZgtkF)@Pj= > z*ALnp_Y=1vL)@s|sQDwQ6*Mh*7aYIlFNiybaLxo6PTG16rQHlllhBAv-k>#u2@Sol > zI=`G}CPrQiN;tRR(ak(*AdNItn6xb{AamTrttlr6972!~lYGJ?&mg`uh4`8leFjDu > zR1H=l|GXG+(@3h}e9gF`ML(|A$Jm)#Ny{9*kb6fYIz6K#U~GZXiE;<`AQQJZh#Ex* > zvPafpsg(EM+QeEU%F9+!7AJXjt<6BM=oX+)l${4fw*md4-N1n8cCac_8FW^32XIbw > zCm?m%V%-}PWwOhnEHdMwdw?sVdjY8%7AKh$-3Qzh-4EOrJpf1@u{il%(L=yJ(ZfJZ > z^axNF?FRzUqrklAF(4K_4lIdsu@6KCfmP8Hz#~x>xiwL4;;HB<;F;)Y;DzWJUhHT& > zjNJ+~ZlqeztcDlZv9}b%uDP)byAnmP`PA5M95?(*5_=I7{9EHzOij z*-d{<&4d*_Y!hx!AINvPBvHw{hmarpIg2NWNZUrI#!p > wAAvlV^sI41<6<;hHcoUy=A?e-|05l;7C8giM-Tt9*KBPx@rv+1OG3`f-+dwCzyJUM > > literal 0 > HcmV?d00001 > > diff --git a/ArmPkg/Library/GccLto/liblto-arm.s b/ArmPkg/Library/GccLto/liblto-arm.s > new file mode 100644 > index 000000000000..bc16320a46c0 > --- /dev/null > +++ b/ArmPkg/Library/GccLto/liblto-arm.s > @@ -0,0 +1,61 @@ > +// > +// Copyright (c) 2016, Linaro Ltd. All rights reserved.
> +// > +// This program and the accompanying materials are licensed and made available under > +// the terms and conditions of the BSD License that accompanies this distribution. > +// The full text of the license may be found at > +// http://opensource.org/licenses/bsd-license.php. > +// > +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > +// > + > +// > +// GCC in LTO mode interoperates poorly with non-standard libraries that > +// provide implementations of compiler intrinsics such as memcpy/memset > +// or the stack protector entry points. > +// > +// By referencing these functions from a non-LTO object that can be passed > +// to the linker via the -plugin-opt=-pass-through=-lxxx options, the > +// intrinsics are included in the link in a way that allows them to be > +// pruned again if no other references to them exist. > +// > + > + .long memcpy - . > + .long memset - . > + .long __stack_chk_fail - . > + .long __stack_chk_guard - . > + .long __ashrdi3 - . > + .long __ashldi3 - . > + .long __aeabi_idiv - . > + .long __aeabi_idivmod - . > + .long __aeabi_uidiv - . > + .long __aeabi_uidivmod - . > + .long __divdi3 - . > + .long __divsi3 - . > + .long __lshrdi3 - . > + .long __aeabi_memcpy - . > + .long __aeabi_memset - . > + .long memmove - . > + .long __modsi3 - . > + .long __moddi3 - . > + .long __muldi3 - . > + .long __aeabi_lmul - . > + .long __ARM_ll_mullu - . > + .long __udivsi3 - . > + .long __umodsi3 - . > + .long __udivdi3 - . > + .long __umoddi3 - . > + .long __udivmoddi4 - . > + .long __clzsi2 - . > + .long __ctzsi2 - . > + .long __ucmpdi2 - . > + .long __switch8 - . > + .long __switchu8 - . > + .long __switch16 - . > + .long __switch32 - . > + .long __aeabi_ulcmp - . > + .long __aeabi_uldivmod - . > + .long __aeabi_ldivmod - . > + .long __aeabi_llsr - . > + .long __aeabi_llsl - . > -- > 2.7.4 >