diff --git a/lldb/source/Plugins/ABI/AArch64/ABIAArch64.h b/lldb/source/Plugins/ABI/AArch64/ABIAArch64.h --- a/lldb/source/Plugins/ABI/AArch64/ABIAArch64.h +++ b/lldb/source/Plugins/ABI/AArch64/ABIAArch64.h @@ -31,6 +31,8 @@ uint32_t GetGenericNum(llvm::StringRef name) override; + void AugmentRegisterInfo(lldb_private::RegisterInfo &info) override; + using lldb_private::MCBasedABI::MCBasedABI; }; #endif diff --git a/lldb/source/Plugins/ABI/AArch64/ABIAArch64.cpp b/lldb/source/Plugins/ABI/AArch64/ABIAArch64.cpp --- a/lldb/source/Plugins/ABI/AArch64/ABIAArch64.cpp +++ b/lldb/source/Plugins/ABI/AArch64/ABIAArch64.cpp @@ -52,6 +52,7 @@ 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 @@ .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/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py b/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py --- a/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py +++ b/lldb/test/API/functionalities/gdb_remote_client/TestGDBServerTargetXML.py @@ -397,6 +397,12 @@ ["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",