[Lldb-commits] [PATCH] D88375: Fix MIPS and MIPS64 ABI to use ConstString in thier register info arrays.

2020-09-27 Thread Tatsuo Nomura via Phabricator via lldb-commits
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

[Lldb-commits] [PATCH] D88375: Fix MIPS and MIPS64 ABI to use ConstString in thier register info arrays.

2020-09-27 Thread Tatsuo Nomura via Phabricator via lldb-commits
tatsuo added a comment.

@teemperor Thanks for the quick review and context!
I don't have commit access, that'd be great if you could merge it in.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88375/new/

https://reviews.llvm.org/D88375

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits