From 04de448c6d9d0ceab7f04b1f3d44f91e8b129d58 Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Sat, 15 Jun 2024 01:29:32 +1000 Subject: [PATCH] cmd/internal/obj/x86: add support for the endbr64 instruction on amd64 Add support for endbr64, which terminates an indirect branch in 64-bit mode. This is effectively used to mark locations where an indirect branch is permitted to land, when Indirect Branch Tracking (IBT) is enforced on Intel CPUs. Updates #66054 Change-Id: Ib898031711cfaaa6e05c197bfe727ded0bce6f52 Reviewed-on: https://go-review.googlesource.com/c/go/+/649215 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Reviewed-by: Keith Randall Reviewed-by: Dmitri Shuralyov --- src/cmd/asm/internal/asm/testdata/amd64enc_extra.s | 2 ++ src/cmd/internal/obj/x86/aenum.go | 1 + src/cmd/internal/obj/x86/anames.go | 1 + src/cmd/internal/obj/x86/asm6.go | 1 + 4 files changed, 5 insertions(+) diff --git a/src/cmd/asm/internal/asm/testdata/amd64enc_extra.s b/src/cmd/asm/internal/asm/testdata/amd64enc_extra.s index 08cb20c707..197b2ce628 100644 --- a/src/cmd/asm/internal/asm/testdata/amd64enc_extra.s +++ b/src/cmd/asm/internal/asm/testdata/amd64enc_extra.s @@ -1059,5 +1059,7 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0 RDPID DX // f30fc7fa RDPID R11 // f3410fc7fb + ENDBR64 // f30f1efa + // End of tests. RET diff --git a/src/cmd/internal/obj/x86/aenum.go b/src/cmd/internal/obj/x86/aenum.go index 79cdd241a2..c9be748b32 100644 --- a/src/cmd/internal/obj/x86/aenum.go +++ b/src/cmd/internal/obj/x86/aenum.go @@ -212,6 +212,7 @@ const ( ADPPD ADPPS AEMMS + AENDBR64 AENTER AEXTRACTPS AF2XM1 diff --git a/src/cmd/internal/obj/x86/anames.go b/src/cmd/internal/obj/x86/anames.go index 3966381e50..43483e959a 100644 --- a/src/cmd/internal/obj/x86/anames.go +++ b/src/cmd/internal/obj/x86/anames.go @@ -210,6 +210,7 @@ var Anames = []string{ "DPPD", "DPPS", "EMMS", + "ENDBR64", "ENTER", "EXTRACTPS", "F2XM1", diff --git a/src/cmd/internal/obj/x86/asm6.go b/src/cmd/internal/obj/x86/asm6.go index 95020915ca..3332134141 100644 --- a/src/cmd/internal/obj/x86/asm6.go +++ b/src/cmd/internal/obj/x86/asm6.go @@ -1096,6 +1096,7 @@ var optab = {ADPPD, yxshuf, Pq, opBytes{0x3a, 0x41, 0}}, {ADPPS, yxshuf, Pq, opBytes{0x3a, 0x40, 0}}, {AEMMS, ynone, Pm, opBytes{0x77}}, + {AENDBR64, ynone, Pf3, opBytes{0x1e, 0xfa}}, {AEXTRACTPS, yextractps, Pq, opBytes{0x3a, 0x17, 0}}, {AENTER, nil, 0, opBytes{}}, // botch {AFXRSTOR, ysvrs_mo, Pm, opBytes{0xae, 01, 0xae, 01}}, -- 2.51.0