tatsuo created this revision.
tatsuo added reviewers: LLDB, jasonmolenda.
Herald added subscribers: lldb-commits, atanasyan, jrtc27, arichardson, sdardis.
Herald added a project: LLDB.
tatsuo requested review of this revision.
Herald added a subscriber: JDevlieghere.
RegInfoBasedABI::GetRegisterInfoByName was failing because mips/mips64 ABIs
don't use ConstString in their register info array.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D88375
Files:
lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp
lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
Index: lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
===
--- lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
+++ lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
@@ -75,7 +75,7 @@
dwarf_pc
};
-static const RegisterInfo g_register_infos_mips64[] = {
+static RegisterInfo g_register_infos_mips64[] = {
// NAME ALTSZ OFF ENCODINGFORMAT EH_FRAME
// DWARF GENERIC PROCESS PLUGIN
// LLDB NATIVE
@@ -542,9 +542,24 @@
static const uint32_t k_num_register_infos =
llvm::array_lengthof(g_register_infos_mips64);
+static bool g_register_info_names_constified = false;
const lldb_private::RegisterInfo *
ABISysV_mips64::GetRegisterInfoArray(uint32_t &count) {
+ // Make the C-string names and alt_names for the register infos into const
+ // C-string values by having the ConstString unique the names in the global
+ // constant C-string pool.
+ if (!g_register_info_names_constified) {
+g_register_info_names_constified = true;
+for (uint32_t i = 0; i < k_num_register_infos; ++i) {
+ if (g_register_infos_mips64[i].name)
+g_register_infos_mips64[i].name =
+ConstString(g_register_infos_mips64[i].name).GetCString();
+ if (g_register_infos_mips64[i].alt_name)
+g_register_infos_mips64[i].alt_name =
+ConstString(g_register_infos_mips64[i].alt_name).GetCString();
+}
+ }
count = k_num_register_infos;
return g_register_infos_mips64;
}
Index: lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp
===
--- lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp
+++ lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp
@@ -75,7 +75,7 @@
dwarf_pc
};
-static const RegisterInfo g_register_infos[] = {
+static RegisterInfo g_register_infos[] = {
// NAME ALTSZ OFF ENCODINGFORMAT EH_FRAME
// DWARF GENERIC PROCESS PLUGINS
// LLDB NATIVEVALUE REGS INVALIDATE REGS
@@ -542,9 +542,24 @@
static const uint32_t k_num_register_infos =
llvm::array_lengthof(g_register_infos);
+static bool g_register_info_names_constified = false;
const lldb_private::RegisterInfo *
ABISysV_mips::GetRegisterInfoArray(uint32_t &count) {
+ // Make the C-string names and alt_names for the register infos into const
+ // C-string values by having the ConstString unique the names in the global
+ // constant C-string pool.
+ if (!g_register_info_names_constified) {
+g_register_info_names_constified = true;
+for (uint32_t i = 0; i < k_num_register_infos; ++i) {
+ if (g_register_infos[i].name)
+g_register_infos[i].name =
+ConstString(g_register_infos[i].name).GetCString();
+ if (g_register_infos[i].alt_name)
+g_register_infos[i].alt_name =
+ConstString(g_register_infos[i].alt_name).GetCString();
+}
+ }
count = k_num_register_infos;
return g_register_infos;
}
Index: lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
===
--- lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
+++ lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
@@ -75,7 +75,7 @@
dwarf_pc
};
-static const RegisterInfo g_register_infos_mips64[] = {
+static RegisterInfo g_register_infos_mips64[] = {
// NAME ALTSZ OFF ENCODINGFORMAT EH_FRAME
// DWARF GENERIC PROCESS PLUGIN
// LLDB NATIVE
@@ -542,9 +542,24 @@
static const uint32_t k_num_register_infos =
llvm::array_lengthof(g_register_infos_mips64);
+static bool g_register_info_names_constified = false;
const lldb_private::RegisterInfo *
ABISysV_mips64::GetRegisterInfoArray(uint32_t &count) {
+ // Make the C-string names and alt_names for the register infos into const
+ // C-string values by having the ConstString unique the names in the global
+ // constant C-string pool.
+ if (!g_register_info_names_constified) {
+g_register_info_names_constified = true;
+for (uint32_t i = 0; i < k_num_register_infos; ++i) {
+ if (g_register_infos_mips64[i].name)
+g_register_infos_mips64[i].name =
+ConstString(g_register_infos_mips64[i].name).GetCString();
+ if (g_register_infos