forked from OSchip/llvm-project
[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
This commit is contained in:
parent
1ef62cb200
commit
47d57547f4
|
@ -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<uint32_t>(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";
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue