[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v3 2/3] x86/clang: add retpoline support


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Roger Pau Monne <roger.pau@xxxxxxxxxx>
  • Date: Fri, 18 Feb 2022 15:34:15 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=nv6gW1Mlt7VQSuRHTBBB8hz+ff/2S3H03ut9wK9Gkqs=; b=kpzao6FfhQcuy/b+7ONocd+T5NG8jtvpAitOq7L7WyqC3XwvxAfWxPCa/3MY0NGVQ4RjkIVtt+VEsNEsaJuEywTaaDC4VbZ44XwSd6R2K99e30yK4h34DvTeq+5VLD0Mo+sY6wI5NZw64W+PbbS7EzotrfoJ6NUNoe8kl44MeRBeMvjDwGjlv9esJuSNsu8sO5d5zJHYf3ZR0Nqjgs8QfZ1ybSPRHLfkCUkDCd7C6ji2ca+u/oQYdhKMSQzlYvEt5RVYmF6tCjbWaevHvy1hlTOaYBiWO5a5n/dXHoFrOpCFx8EquPR8GRkAscBO7+SbOzWFmZuIGAY9niCtHEfJ/Q==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=af74N8QXH5MqPxnqegTCdHwz1KfVlQYKl/XzcAuBz2/MJLVnuQ0agrWyM9qDgklh55++k3WdNOU6m2OFrmMX7UsLITenguiduGXcFd7cSFgXbSqQxln2pQ5iXFW4hb5lFlmEqDoQ9txbyISkYi+GwxQbE/Gd5sGz0O5icr2ZqJblgRRA94tECSAd3Nff5BeeY2cGWTktXQy2HNKdf7aEW/XQxSlC54PfTsn3zmC4XGENysXgevQIUa0zlX36IwA53IBHPT8+TlJj3MbhJy5/4RbDfo2zRM3NXJfdH/DftWS0nqCSM1PfQ3DH1M9B6teostxVfQFJSAEAn+G+H4vhbA==
  • Authentication-results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: Roger Pau Monne <roger.pau@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Fri, 18 Feb 2022 14:34:54 +0000
  • Ironport-data: A9a23:q3HvnaKNiG8yTkHxFE+RxpUlxSXFcZb7ZxGr2PjKsXjdYENS3jAOm GQXWmnXOPiKM2SgL4pzOt+zoEwD7cLTzoUyGVNlqX01Q3x08seUXt7xwmUcns+xwm8vaGo9s q3yv/GZdJhcokf0/0vrav67xZVF/fngqoDUUYYoAQgsA180IMsdoUg7wbRh2Nc42YLR7z6l4 rseneWOYDdJ5BYsWo4kw/rrRMRH5amaVJsw5zTSVNgT1LPsvyB94KE3fMldG0DQUIhMdtNWc s6YpF2PEsE1yD92Yj+tuu6TnkTn2dc+NyDW4pZdc/DKbhSvOkXee0v0XRYRQR4/ttmHozx+4 NRQmsaQVD4jAqeSh+M2SQhYLS1FGbITrdcrIVDn2SCS50jPcn+qyPRyFkAme4Yf/46bA0kXq 6ZecmpUKEne2aTmm9pXScE17ignBNPsM44F/Glp0BnSDOo8QICFSKLPjTNd9Gls2pkRTKmGD yYfQRRhcBudew9+AWwKC7khrMatn3rmVzIN/Tp5ooJoujOOnWSdyoPFL979atGMA8JPkS6wp GjL4mD4CREyL8GExHyO9XfErv/Cm2b3VZwfEJW89+V2mxuDy2oLEhoUWFCn5/6jhSaDt8l3c hJOvHB09O5rqRLtHoKVswCETGCsvwMzAfpNKucG4l+SzYHO8ganClMgUWsUADA5j/MeSTsv3 16PutrmAz1zrbGYIU6gGqeoQSCaYnZMczJbDcMQZU5cuoS4/tlv5v7aZos7SMaIYsvJ9SYcK txghAw3nP0tgMECzM1XFniX0mv39vAlouPYjzg7v15JDCslNeZJhKTysDA3CMqsyq7AHzFtW 1BexqCjABgmV83lqcB0aLxl8EuVz/iEKibAplVkAoMs8T+gk1b6I9wNuWsifBY1bJ9eEdMMX KM1kVoAjHO0FCH3BZKbnqrrU5h6pUQePY+Nug/ogipmPcEqKV7vENBGbk+MxWH9+HXAYolkU ap3hf2EVC5AYYw+lWLeb75EjdcDm3BvrUuOFMuT50n2jtKjiIu9FO5t3K2mNbtisstpYWz9r r5iCid9408BCLanOnGPq+b+7zkidBAGOHw/kOQOHsarKQt6AmAxTfjXxLIqYYt+mKpJ0OzP+ xmAtoVwkzITWVWvxd22V01e
  • Ironport-hdrordr: A9a23:xyo+r6nF8dwNbiyusYo9p2+zIavpDfO0imdD5ihNYBxZY6Wkfp +V88jzhCWZtN9OYhwdcLC7WZVpQRvnhPpICO4qTMuftWjdyRaVxeRZg7cKrAeQfREWmtQtt5 uINpIOc+EYbmIK/PoSgjPIaurIqePvmMvD5Za8854ud3ARV0gJ1XYGNu/xKDwQeOApP+tdKH LKjfA32AZINE5nJfiTNz0gZazuttfLnJXpbVovAAMm0hCHiXeN5KThGxaV8x8CW3cXqI1SvF Ttokjc3OGOovu7whjT2yv66IlXosLozp9mCNaXgsYYBz3wgkKDZZhnWZeFoDcpydvfomoCoZ 3pmVMNLs5z43TeciWcpgbs4RDp1HIU53rr2Taj8A3eiP28YAh/J9tKhIpffBecwVEnpstA3K VC2H/cn4ZLDDvb9R6NqeTgZlVPrA6ZsHAimekcgzh0So0FcoJcqoQZ4Qd8DIoAJiTn84oqed MeQ/003MwmMW9yUkqp/VWGmLeXLzYO91a9MwQ/U/WuonlrdCsT9Tpc+CQd9k1wg67VBaM0o9 gsCZ4Y542mePVmGZ6VNN1xMfdfNVa9My4kSFjiWWgPNJt3ck4l+KSHqInc2omRCek1Jd0J6d P8bG8=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Detect whether the compiler supports clang retpoline option and enable
by default if available, just like it's done for gcc.

Note clang already disables jump tables when retpoline is enabled, so
there's no need to also pass the fno-jump-tables parameter. Also clang
already passes the return address on a register always on amd64, so
there's no need for any equivalent mindirect-branch-register
parameter.

Reported-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
 xen/arch/x86/Kconfig | 4 +++-
 xen/arch/x86/arch.mk | 3 +++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
index a1a90da4fc..f8dca4dc85 100644
--- a/xen/arch/x86/Kconfig
+++ b/xen/arch/x86/Kconfig
@@ -33,7 +33,9 @@ config ARCH_DEFCONFIG
        default "arch/x86/configs/x86_64_defconfig"
 
 config CC_INDIRECT_THUNK
-       def_bool $(cc-option,-mindirect-branch-register)
+       def_bool $(cc-option,-mindirect-branch-register) || \
+                $(cc-option,-mretpoline-external-thunk)
+
 
 config INDIRECT_THUNK
        def_bool y
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index 6388b1d93f..066d749ba0 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -47,6 +47,9 @@ ifeq ($(CONFIG_INDIRECT_THUNK),y)
 CFLAGS-$(CONFIG_CC_IS_GCC) += -mindirect-branch=thunk-extern
 CFLAGS-$(CONFIG_CC_IS_GCC) += -mindirect-branch-register
 CFLAGS-$(CONFIG_CC_IS_GCC) += -fno-jump-tables
+
+# Enable clang retpoline support if available.
+CFLAGS-$(CONFIG_CC_IS_CLANG) += -mretpoline-external-thunk
 endif
 
 # If supported by the compiler, reduce stack alignment to 8 bytes. But allow
-- 
2.34.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.