From 47d57547f43c6cf9404268b8a4c2f75c402615c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Date: Thu, 16 Sep 2021 11:03:00 +0200 Subject: [PATCH] [lldb] [Process/gdb-remote] Alias sp to x31 on AArch64 for gdbserver Alias the "sp" register to "x31" on AArch64 if one is present and does not have the alt_name. This is the case when connecting to gdbserver. Differential Revision: https://reviews.llvm.org/D109695 --- lldb/source/Plugins/ABI/AArch64/ABIAArch64.cpp | 9 +++++++++ lldb/source/Plugins/ABI/AArch64/ABIAArch64.h | 2 ++ .../gdb_remote_client/TestGDBServerTargetXML.py | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/lldb/source/Plugins/ABI/AArch64/ABIAArch64.cpp b/lldb/source/Plugins/ABI/AArch64/ABIAArch64.cpp index 619c45dc12ec..66a38ab6e3e9 100644 --- a/lldb/source/Plugins/ABI/AArch64/ABIAArch64.cpp +++ b/lldb/source/Plugins/ABI/AArch64/ABIAArch64.cpp @@ -52,6 +52,7 @@ std::string ABIAArch64::GetMCName(std::string reg) { MapRegisterName(reg, "x30", "lr"); return reg; } + uint32_t ABIAArch64::GetGenericNum(llvm::StringRef name) { return llvm::StringSwitch(name) .Case("pc", LLDB_REGNUM_GENERIC_PC) @@ -69,3 +70,11 @@ uint32_t ABIAArch64::GetGenericNum(llvm::StringRef name) { .Case("x7", LLDB_REGNUM_GENERIC_ARG8) .Default(LLDB_INVALID_REGNUM); } + +void ABIAArch64::AugmentRegisterInfo(lldb_private::RegisterInfo &info) { + lldb_private::MCBasedABI::AugmentRegisterInfo(info); + + // GDB sends x31 as "sp". Add the "x31" alt_name for convenience. + if (!strcmp(info.name, "sp") && !info.alt_name) + info.alt_name = "x31"; +} diff --git a/lldb/source/Plugins/ABI/AArch64/ABIAArch64.h b/lldb/source/Plugins/ABI/AArch64/ABIAArch64.h index 41bbf5cfdeb9..13dcfdd4c6d7 100644 --- a/lldb/source/Plugins/ABI/AArch64/ABIAArch64.h +++ b/lldb/source/Plugins/ABI/AArch64/ABIAArch64.h @@ -31,6 +31,8 @@ protected: uint32_t GetGenericNum(llvm::StringRef name) override; + void AugmentRegisterInfo(lldb_private::RegisterInfo &info) override; + using lldb_private::MCBasedABI::MCBasedABI; }; #endif diff --git a/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py b/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py index 13d780428613..5d307fc1e3d4 100644 --- a/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py +++ b/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py @@ -397,6 +397,12 @@ class TestGDBServerTargetXML(GDBRemoteTestBase): ["x0 = 0x0807060504030201"]) self.match("register read x1", ["x1 = 0x1817161514131211"]) + self.match("register read x29", + ["x29 = 0x3837363534333231"]) + self.match("register read x30", + ["x30 = 0x4847464544434241"]) + self.match("register read x31", + ["sp = 0x5857565554535251"]) self.match("register read sp", ["sp = 0x5857565554535251"]) self.match("register read pc",