zequanwu updated this revision to Diff 476221.
zequanwu added a comment.
Use plugin.object-file.pe-coff.abi as minidump process abi.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D137873/new/
https://reviews.llvm.org/D137873
Files:
lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h
lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
lldb/test/Shell/Minidump/Windows/find-module.test
Index: lldb/test/Shell/Minidump/Windows/find-module.test
===================================================================
--- lldb/test/Shell/Minidump/Windows/find-module.test
+++ lldb/test/Shell/Minidump/Windows/find-module.test
@@ -4,7 +4,25 @@
RUN: yaml2obj %S/Inputs/find-module.exe.yaml -o %T/find-module.exe
RUN: yaml2obj %S/Inputs/find-module.dmp.yaml -o %T/find-module.dmp
RUN: %lldb -O "settings set target.exec-search-paths %T" \
-RUN: -c %T/find-module.dmp -o "image dump objfile" -o exit | FileCheck %s
+RUN: -c %T/find-module.dmp -o "image dump objfile" -o "target list" -o exit \
+RUN: | FileCheck --check-prefix=DEFAULT %s
-CHECK-LABEL: image dump objfile
-CHECK: ObjectFilePECOFF, file = '{{.*}}find-module.exe', arch = i386
+RUN: %lldb -O "settings set plugin.object-file.pe-coff.abi msvc" \
+RUN: -O "settings set target.exec-search-paths %T" -c %T/find-module.dmp \
+RUN: -o "target list" -o exit | FileCheck --check-prefix=MSVC %s
+
+RUN: %lldb -O "settings set plugin.object-file.pe-coff.abi gnu" \
+RUN: -O "settings set target.exec-search-paths %T" -c %T/find-module.dmp \
+RUN: -o "target list" -o exit | FileCheck --check-prefix=GNU %s
+
+DEFAULT-LABEL: image dump objfile
+DEFAULT: ObjectFilePECOFF, file = '{{.*}}find-module.exe', arch = i386
+
+DEFAULT-LABEL: target list
+DEFAULT: arch=i386-pc-windows-{{msvc|gnu}}
+
+MSVC-LABEL: target list
+MSVC: arch=i386-pc-windows-msvc
+
+GNU-LABEL: target list
+GNU: arch=i386-pc-windows-gnu
Index: lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
===================================================================
--- lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
+++ lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
@@ -8,6 +8,7 @@
#include "ProcessMinidump.h"
+#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
#include "ThreadMinidump.h"
#include "lldb/Core/DumpDataExtractor.h"
@@ -31,6 +32,7 @@
#include "lldb/Utility/Log.h"
#include "lldb/Utility/State.h"
#include "llvm/BinaryFormat/Magic.h"
+#include "llvm/Support/Host.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Threading.h"
@@ -389,7 +391,23 @@
ArchSpec ProcessMinidump::GetArchitecture() {
if (!m_is_wow64) {
- return m_minidump_parser->GetArchitecture();
+ ArchSpec arch = m_minidump_parser->GetArchitecture();
+ if (arch.GetTriple().getOS() == llvm::Triple::OSType::Win32) {
+ static llvm::Triple::EnvironmentType default_env = [] {
+ auto def_target = llvm::Triple(
+ llvm::Triple::normalize(llvm::sys::getDefaultTargetTriple()));
+ if (def_target.getOS() == llvm::Triple::Win32 &&
+ def_target.getEnvironment() != llvm::Triple::UnknownEnvironment)
+ return def_target.getEnvironment();
+ return llvm::Triple::MSVC;
+ }();
+ llvm::Triple::EnvironmentType env =
+ ObjectFilePECOFF::GetGlobalPluginEnvironment();
+ if (env == llvm::Triple::UnknownEnvironment)
+ env = default_env;
+ arch.GetTriple().setEnvironment(env);
+ }
+ return arch;
}
llvm::Triple triple;
Index: lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h
===================================================================
--- lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h
+++ lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h
@@ -88,6 +88,8 @@
static lldb::SymbolType MapSymbolType(uint16_t coff_symbol_type);
+ static llvm::Triple::EnvironmentType GetGlobalPluginEnvironment();
+
// LLVM RTTI support
static char ID;
bool isA(const void *ClassID) const override {
Index: lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
===================================================================
--- lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
+++ lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
@@ -389,6 +389,10 @@
return lldb::eSymbolTypeInvalid;
}
+llvm::Triple::EnvironmentType ObjectFilePECOFF::GetGlobalPluginEnvironment() {
+ return GetGlobalPluginProperties().ABI();
+}
+
bool ObjectFilePECOFF::CreateBinary() {
if (m_binary)
return true;
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits