-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[LLDB, FreeBSD, x86] Fix empty register set when trying to get size of register #162890
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
I fell asleep so I will write the test case tomorrow. I put it here to first let more people test it and to seek comments on my method. |
@llvm/pr-subscribers-lldb Author: None (aokblast) ChangesGetSharedRegisterInfoVector is a function to get the singleton of total register info. Also, PrivateGetRegisterCount assumes that we have already filled the object in GetSharedRegisterInfoVector and panic when the object is empty. Also, reorder the header order and provide a test for debugging 32bit binary on 64bit platform. Full diff: https://github.com/llvm/llvm-project/pull/162890.diff 2 Files Affected:
diff --git a/lldb/source/Host/freebsd/Host.cpp b/lldb/source/Host/freebsd/Host.cpp
index fa7efad466bad..dfdbfea0c3c0a 100644
--- a/lldb/source/Host/freebsd/Host.cpp
+++ b/lldb/source/Host/freebsd/Host.cpp
@@ -18,8 +18,6 @@
#include <dlfcn.h>
#include <execinfo.h>
-#include "llvm/Object/ELF.h"
-
#include "lldb/Host/FileSystem.h"
#include "lldb/Host/Host.h"
#include "lldb/Host/HostInfo.h"
@@ -32,6 +30,7 @@
#include "lldb/Utility/Status.h"
#include "lldb/Utility/StreamString.h"
+#include "llvm/Object/ELF.h"
#include "llvm/TargetParser/Host.h"
namespace lldb_private {
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp
index e0f3971c6e272..b55a5c595d3ca 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp
@@ -76,8 +76,7 @@ static std::vector<lldb_private::RegisterInfo> &GetSharedRegisterInfoVector() {
static const RegisterInfo *
GetRegisterInfo_i386(const lldb_private::ArchSpec &arch) {
- static std::vector<lldb_private::RegisterInfo> g_register_infos(
- GetSharedRegisterInfoVector());
+ static std::vector<lldb_private::RegisterInfo> g_register_infos;
// Allocate RegisterInfo only once
if (g_register_infos.empty()) {
@@ -93,6 +92,9 @@ GetRegisterInfo_i386(const lldb_private::ArchSpec &arch) {
#define UPDATE_REGISTER_INFOS_I386_STRUCT_WITH_X86_64_OFFSETS
#include "RegisterInfos_x86_64.h"
#undef UPDATE_REGISTER_INFOS_I386_STRUCT_WITH_X86_64_OFFSETS
+ std::vector<lldb_private::RegisterInfo> &shared_regs =
+ GetSharedRegisterInfoVector();
+ shared_regs = g_register_infos;
}
return &g_register_infos[0];
|
f5994f1
to
02a3bd3
Compare
…f register info The register set information is stored as a singleton in GetRegisterInfo_i386. However, it is later use by other function which assume it stores in GetSharedRegisterInfoVector. Therefore, we copy the data to GetSharedRegisterInfoVector directly so that LLDB won't get panic. Also, reorder the header order and provide a test for debugging 32bit binary on 64bit platform. This test is just a copy paste from dummy-target.test but change the target as -m32.
02a3bd3
to
60d267a
Compare
@DavidSpickett Hello: |
GetSharedRegisterInfoVector is a function to get the singleton of total register info.
Also, PrivateGetRegisterCount assumes that we have already filled the object in GetSharedRegisterInfoVector and panic when the object is empty.
However, the actually function possess the register info is GetRegisterInfo_i386. Originally, I plan to solve this by only referencing object in GetSharedRegisterInfoVector. But RegisterInfos_x86_64.h requires the symbol with name g_register_infos in current scope so that the header can append x86_64 registers after it.
As a result, I decide to copy the info to the object in GetSharedRegisterInfoVector.
Also, reorder the header and provide a test for debugging 32bit binary on 64bit platform.