| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
 [PATCH RESEND v9 06/36] x86/objtool: Teach objtool about ERETU and ERETS
 
To: linux-doc@xxxxxxxxxxxxxxx,	linux-kernel@xxxxxxxxxxxxxxx,	linux-edac@xxxxxxxxxxxxxxx,	linux-hyperv@xxxxxxxxxxxxxxx,	kvm@xxxxxxxxxxxxxxx,	xen-devel@xxxxxxxxxxxxxxxxxxxxFrom: Xin Li <xin3.li@xxxxxxxxx>Date: Tue,  1 Aug 2023 01:32:48 -0700Cc: Jonathan Corbet <corbet@xxxxxxx>,	Thomas Gleixner <tglx@xxxxxxxxxxxxx>,	Ingo Molnar <mingo@xxxxxxxxxx>,	Borislav Petkov <bp@xxxxxxxxx>,	Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>,	x86@xxxxxxxxxx,	"H . Peter Anvin" <hpa@xxxxxxxxx>,	Andy Lutomirski <luto@xxxxxxxxxx>,	Oleg Nesterov <oleg@xxxxxxxxxx>,	Tony Luck <tony.luck@xxxxxxxxx>,	"K . Y . Srinivasan" <kys@xxxxxxxxxxxxx>,	Haiyang Zhang <haiyangz@xxxxxxxxxxxxx>,	Wei Liu <wei.liu@xxxxxxxxxx>,	Dexuan Cui <decui@xxxxxxxxxxxxx>,	Paolo Bonzini <pbonzini@xxxxxxxxxx>,	Wanpeng Li <wanpengli@xxxxxxxxxxx>,	Vitaly Kuznetsov <vkuznets@xxxxxxxxxx>,	Sean Christopherson <seanjc@xxxxxxxxxx>,	Peter Zijlstra <peterz@xxxxxxxxxxxxx>,	Juergen Gross <jgross@xxxxxxxx>,	Stefano Stabellini <sstabellini@xxxxxxxxxx>,	Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>,	Josh Poimboeuf <jpoimboe@xxxxxxxxxx>,	"Paul E . McKenney" <paulmck@xxxxxxxxxx>,	Catalin Marinas <catalin.marinas@xxxxxxx>,	Randy Dunlap <rdunlap@xxxxxxxxxxxxx>,	Steven Rostedt <rostedt@xxxxxxxxxxx>,	Kim Phillips <kim.phillips@xxxxxxx>,	Xin Li <xin3.li@xxxxxxxxx>,	Hyeonggon Yoo <42.hyeyoo@xxxxxxxxx>,	"Liam R . Howlett" <Liam.Howlett@xxxxxxxxxx>,	Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx>,	"Kirill A . Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx>,	Suren Baghdasaryan <surenb@xxxxxxxxxx>,	Pawan Gupta <pawan.kumar.gupta@xxxxxxxxxxxxxxx>,	Babu Moger <babu.moger@xxxxxxx>,	Jim Mattson <jmattson@xxxxxxxxxx>,	Sandipan Das <sandipan.das@xxxxxxx>,	Lai Jiangshan <jiangshanlai@xxxxxxxxx>,	Hans de Goede <hdegoede@xxxxxxxxxx>,	Reinette Chatre <reinette.chatre@xxxxxxxxx>,	Daniel Sneddon <daniel.sneddon@xxxxxxxxxxxxxxx>,	Breno Leitao <leitao@xxxxxxxxxx>,	Nikunj A Dadhania <nikunj@xxxxxxx>,	Brian Gerst <brgerst@xxxxxxxxx>,	Sami Tolvanen <samitolvanen@xxxxxxxxxx>,	Alexander Potapenko <glider@xxxxxxxxxx>,	Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>,	Arnd Bergmann <arnd@xxxxxxxx>,	"Eric W . Biederman" <ebiederm@xxxxxxxxxxxx>,	Kees Cook <keescook@xxxxxxxxxxxx>,	Masami Hiramatsu <mhiramat@xxxxxxxxxx>,	Masahiro Yamada <masahiroy@xxxxxxxxxx>,	Ze Gao <zegao2021@xxxxxxxxx>,	Fei Li <fei1.li@xxxxxxxxx>,	Conghui <conghui.chen@xxxxxxxxx>,	Ashok Raj <ashok.raj@xxxxxxxxx>,	"Jason A . Donenfeld" <Jason@xxxxxxxxx>,	Mark Rutland <mark.rutland@xxxxxxx>,	Jacob Pan <jacob.jun.pan@xxxxxxxxxxxxxxx>,	Jiapeng Chong <jiapeng.chong@xxxxxxxxxxxxxxxxx>,	Jane Malalane <jane.malalane@xxxxxxxxxx>,	David Woodhouse <dwmw@xxxxxxxxxxxx>,	Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>,	Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>,	Yantengsi <siyanteng@xxxxxxxxxxx>,	Christophe Leroy <christophe.leroy@xxxxxxxxxx>,	Sathvika Vasireddy <sv@xxxxxxxxxxxxx>Delivery-date: Tue, 01 Aug 2023 09:02:06 +0000List-id: Xen developer discussion <xen-devel.lists.xenproject.org> 
 From: "H. Peter Anvin (Intel)" <hpa@xxxxxxxxx>
Update the objtool decoder to know about the ERETU and ERETS
instructions (type INSN_CONTEXT_SWITCH).
Signed-off-by: H. Peter Anvin (Intel) <hpa@xxxxxxxxx>
Tested-by: Shan Kang <shan.kang@xxxxxxxxx>
Signed-off-by: Xin Li <xin3.li@xxxxxxxxx>
---
 tools/objtool/arch/x86/decode.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c
index 2e1caabecb18..a486485cff20 100644
--- a/tools/objtool/arch/x86/decode.c
+++ b/tools/objtool/arch/x86/decode.c
@@ -509,11 +509,20 @@ int arch_decode_instruction(struct objtool_file *file, 
const struct section *sec
 
                if (op2 == 0x01) {
 
-                       if (modrm == 0xca)
-                               insn->type = INSN_CLAC;
-                       else if (modrm == 0xcb)
-                               insn->type = INSN_STAC;
-
+                       switch (insn_last_prefix_id(&ins)) {
+                       case INAT_PFX_REPE:
+                       case INAT_PFX_REPNE:
+                               if (modrm == 0xca)
+                                       /* eretu/erets */
+                                       insn->type = INSN_CONTEXT_SWITCH;
+                               break;
+                       default:
+                               if (modrm == 0xca)
+                                       insn->type = INSN_CLAC;
+                               else if (modrm == 0xcb)
+                                       insn->type = INSN_STAC;
+                               break;
+                       }
                } else if (op2 >= 0x80 && op2 <= 0x8f) {
 
                        insn->type = INSN_JUMP_CONDITIONAL;
-- 
2.34.1
 |