[llvm] 507d80f - Revert "Implement some NativeSession functions" along with some
Amy Huang via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 21 14:22:06 PDT 2020
Author: Amy Huang
Date: 2020-04-21T14:20:13-07:00
New Revision: 507d80fbd21ac5d4b67cb63d727c31e1cc89958e
URL: https://github.com/llvm/llvm-project/commit/507d80fbd21ac5d4b67cb63d727c31e1cc89958e
DIFF: https://github.com/llvm/llvm-project/commit/507d80fbd21ac5d4b67cb63d727c31e1cc89958e.diff
LOG: Revert "Implement some NativeSession functions" along with some
followup fixes.
This reverts commits
a6d8a055e92eb4853805d1ad1be0b1a6523524ef
4927ae085807731eb4052e0a682443fe9399b512
1e1f5eb7c978da3b062daaf3c32c459704e65a55
Added:
Modified:
llvm/include/llvm/DebugInfo/PDB/Native/NativeSession.h
llvm/lib/DebugInfo/PDB/Native/NativeSession.cpp
llvm/lib/DebugInfo/PDB/PDB.cpp
llvm/unittests/DebugInfo/PDB/CMakeLists.txt
Removed:
llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.cpp
llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.exe
llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.pdb
llvm/unittests/DebugInfo/PDB/NativeSessionTest.cpp
################################################################################
diff --git a/llvm/include/llvm/DebugInfo/PDB/Native/NativeSession.h b/llvm/include/llvm/DebugInfo/PDB/Native/NativeSession.h
index 26b1992a03d7..ee7d8cdec93b 100644
--- a/llvm/include/llvm/DebugInfo/PDB/Native/NativeSession.h
+++ b/llvm/include/llvm/DebugInfo/PDB/Native/NativeSession.h
@@ -26,11 +26,6 @@ class PDBFile;
class NativeExeSymbol;
class NativeSession : public IPDBSession {
- struct PdbSearchOptions {
- StringRef ExePath;
- // FIXME: Add other PDB search options (_NT_SYMBOL_PATH, symsrv)
- };
-
public:
NativeSession(std::unique_ptr<PDBFile> PdbFile,
std::unique_ptr<BumpPtrAllocator> Allocator);
@@ -38,11 +33,8 @@ class NativeSession : public IPDBSession {
static Error createFromPdb(std::unique_ptr<MemoryBuffer> MB,
std::unique_ptr<IPDBSession> &Session);
- static Error createFromPdbPath(StringRef PdbPath,
- std::unique_ptr<IPDBSession> &Session);
static Error createFromExe(StringRef Path,
std::unique_ptr<IPDBSession> &Session);
- static Expected<std::string> searchForPdb(const PdbSearchOptions &Opts);
uint64_t getLoadAddress() const override;
bool setLoadAddress(uint64_t Address) override;
@@ -117,7 +109,6 @@ class NativeSession : public IPDBSession {
SymbolCache Cache;
SymIndexId ExeSymbol = 0;
- uint64_t LoadAddress = 0;
};
} // namespace pdb
} // namespace llvm
diff --git a/llvm/lib/DebugInfo/PDB/Native/NativeSession.cpp b/llvm/lib/DebugInfo/PDB/Native/NativeSession.cpp
index d12fec9c8329..b45a5881dcb5 100644
--- a/llvm/lib/DebugInfo/PDB/Native/NativeSession.cpp
+++ b/llvm/lib/DebugInfo/PDB/Native/NativeSession.cpp
@@ -12,7 +12,6 @@
#include "llvm/DebugInfo/CodeView/TypeIndex.h"
#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
#include "llvm/DebugInfo/PDB/IPDBSourceFile.h"
-#include "llvm/DebugInfo/PDB/Native/DbiStream.h"
#include "llvm/DebugInfo/PDB/Native/NativeCompilandSymbol.h"
#include "llvm/DebugInfo/PDB/Native/NativeEnumInjectedSources.h"
#include "llvm/DebugInfo/PDB/Native/NativeEnumTypes.h"
@@ -26,14 +25,11 @@
#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
#include "llvm/DebugInfo/PDB/PDBSymbolExe.h"
#include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h"
-#include "llvm/Object/COFF.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/BinaryByteStream.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorOr.h"
-#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/Path.h"
#include <algorithm>
#include <cassert>
@@ -79,115 +75,14 @@ Error NativeSession::createFromPdb(std::unique_ptr<MemoryBuffer> Buffer,
return Error::success();
}
-static Expected<std::unique_ptr<PDBFile>>
-loadPdbFile(StringRef PdbPath, std::unique_ptr<BumpPtrAllocator> &Allocator) {
- ErrorOr<std::unique_ptr<MemoryBuffer>> ErrorOrBuffer =
- MemoryBuffer::getFile(PdbPath, /*FileSize=*/-1,
- /*RequiresNullTerminator=*/false);
- if (!ErrorOrBuffer)
- return make_error<RawError>(ErrorOrBuffer.getError());
- std::unique_ptr<llvm::MemoryBuffer> Buffer = std::move(*ErrorOrBuffer);
-
- PdbPath = Buffer->getBufferIdentifier();
- file_magic Magic;
- auto EC = identify_magic(PdbPath, Magic);
- if (EC || Magic != file_magic::pdb)
- return make_error<RawError>(EC);
-
- auto Stream = std::make_unique<MemoryBufferByteStream>(std::move(Buffer),
- llvm::support::little);
-
- auto File = std::make_unique<PDBFile>(PdbPath, std::move(Stream), *Allocator);
- if (auto EC = File->parseFileHeaders())
- return std::move(EC);
-
- if (auto EC = File->parseStreamData())
- return std::move(EC);
-
- return std::move(File);
-}
-
-Error NativeSession::createFromPdbPath(StringRef PdbPath,
- std::unique_ptr<IPDBSession> &Session) {
- auto Allocator = std::make_unique<BumpPtrAllocator>();
- auto PdbFile = loadPdbFile(PdbPath, Allocator);
- if (!PdbFile)
- return PdbFile.takeError();
-
- Session = std::make_unique<NativeSession>(std::move(PdbFile.get()),
- std::move(Allocator));
- return Error::success();
-}
-
-static Expected<std::string> getPdbPathFromExe(StringRef ExePath) {
- Expected<object::OwningBinary<object::Binary>> BinaryFile =
- object::createBinary(ExePath);
- if (!BinaryFile)
- return BinaryFile.takeError();
-
- const object::COFFObjectFile *ObjFile =
- dyn_cast<object::COFFObjectFile>(BinaryFile->getBinary());
- if (!ObjFile)
- return make_error<RawError>(raw_error_code::invalid_format);
-
- StringRef PdbPath;
- const llvm::codeview::DebugInfo *PdbInfo = nullptr;
- if (auto EC = ObjFile->getDebugPDBInfo(PdbInfo, PdbPath))
- return make_error<RawError>(EC);
-
- return std::string(PdbPath);
-}
-
-Error NativeSession::createFromExe(StringRef ExePath,
+Error NativeSession::createFromExe(StringRef Path,
std::unique_ptr<IPDBSession> &Session) {
- Expected<std::string> PdbPath = getPdbPathFromExe(ExePath);
- if (!PdbPath)
- return PdbPath.takeError();
-
- file_magic Magic;
- auto EC = identify_magic(PdbPath.get(), Magic);
- if (EC || Magic != file_magic::pdb)
- return make_error<RawError>(EC);
-
- auto Allocator = std::make_unique<BumpPtrAllocator>();
- auto File = loadPdbFile(PdbPath.get(), Allocator);
- if (!File)
- return File.takeError();
-
- Session = std::make_unique<NativeSession>(std::move(File.get()),
- std::move(Allocator));
-
- return Error::success();
+ return make_error<RawError>(raw_error_code::feature_unsupported);
}
-Expected<std::string>
-NativeSession::searchForPdb(const PdbSearchOptions &Opts) {
- Expected<std::string> PathOrErr = getPdbPathFromExe(Opts.ExePath);
- if (!PathOrErr)
- return PathOrErr.takeError();
- StringRef PdbName = sys::path::filename(PathOrErr.get());
+uint64_t NativeSession::getLoadAddress() const { return 0; }
- // Check if pdb exists in the executable directory.
- SmallString<128> PdbPath = StringRef(Opts.ExePath);
- sys::path::remove_filename(PdbPath);
- sys::path::append(PdbPath, PdbName);
-
- auto Allocator = std::make_unique<BumpPtrAllocator>();
-
- if (auto File = loadPdbFile(PdbPath, Allocator))
- return std::string(PdbPath);
- else
- return File.takeError();
-
- return make_error<RawError>("PDB not found");
-}
-
-uint64_t NativeSession::getLoadAddress() const { return LoadAddress; }
-
-bool NativeSession::setLoadAddress(uint64_t Address) {
- LoadAddress = Address;
- return true;
-}
+bool NativeSession::setLoadAddress(uint64_t Address) { return false; }
std::unique_ptr<PDBSymbolExe> NativeSession::getGlobalScope() {
return PDBSymbol::createAs<PDBSymbolExe>(*this, getNativeGlobalScope());
@@ -200,30 +95,12 @@ NativeSession::getSymbolById(SymIndexId SymbolId) const {
bool NativeSession::addressForVA(uint64_t VA, uint32_t &Section,
uint32_t &Offset) const {
- uint32_t RVA = VA - getLoadAddress();
- return addressForRVA(RVA, Section, Offset);
+ return false;
}
-bool NativeSession::addressForRVA(uint32_t RVA, uint32_t &Section,
+bool NativeSession::addressForRVA(uint32_t VA, uint32_t &Section,
uint32_t &Offset) const {
- auto Dbi = Pdb->getPDBDbiStream();
- if (!Dbi)
- return false;
-
- Section = 0;
- Offset = 0;
-
- if ((int32_t)RVA < 0)
- return true;
-
- Offset = RVA;
- for (; Section < Dbi->getSectionHeaders().size(); ++Section) {
- auto &Sec = Dbi->getSectionHeaders()[Section];
- if (RVA < Sec.VirtualAddress)
- return true;
- Offset = RVA - Sec.VirtualAddress;
- }
- return true;
+ return false;
}
std::unique_ptr<PDBSymbol>
diff --git a/llvm/lib/DebugInfo/PDB/PDB.cpp b/llvm/lib/DebugInfo/PDB/PDB.cpp
index a0d015c7839e..e7b968cb7bea 100644
--- a/llvm/lib/DebugInfo/PDB/PDB.cpp
+++ b/llvm/lib/DebugInfo/PDB/PDB.cpp
@@ -23,8 +23,15 @@ using namespace llvm::pdb;
Error llvm::pdb::loadDataForPDB(PDB_ReaderType Type, StringRef Path,
std::unique_ptr<IPDBSession> &Session) {
// Create the correct concrete instance type based on the value of Type.
- if (Type == PDB_ReaderType::Native)
- return NativeSession::createFromPdbPath(Path, Session);
+ if (Type == PDB_ReaderType::Native) {
+ ErrorOr<std::unique_ptr<MemoryBuffer>> ErrorOrBuffer =
+ MemoryBuffer::getFileOrSTDIN(Path, /*FileSize=*/-1,
+ /*RequiresNullTerminator=*/false);
+ if (!ErrorOrBuffer)
+ return errorCodeToError(ErrorOrBuffer.getError());
+
+ return NativeSession::createFromPdb(std::move(*ErrorOrBuffer), Session);
+ }
#if LLVM_ENABLE_DIA_SDK
return DIASession::createFromPdb(Path, Session);
@@ -36,17 +43,8 @@ Error llvm::pdb::loadDataForPDB(PDB_ReaderType Type, StringRef Path,
Error llvm::pdb::loadDataForEXE(PDB_ReaderType Type, StringRef Path,
std::unique_ptr<IPDBSession> &Session) {
// Create the correct concrete instance type based on the value of Type.
- if (Type == PDB_ReaderType::Native) {
- if (auto Err = NativeSession::createFromExe(Path, Session)) {
- consumeError(std::move(Err));
-
- Expected<std::string> PdbPath = NativeSession::searchForPdb({Path});
- if (!PdbPath)
- return PdbPath.takeError();
- return NativeSession::createFromPdbPath(PdbPath.get(), Session);
- }
- return Error::success();
- }
+ if (Type == PDB_ReaderType::Native)
+ return NativeSession::createFromExe(Path, Session);
#if LLVM_ENABLE_DIA_SDK
return DIASession::createFromExe(Path, Session);
diff --git a/llvm/unittests/DebugInfo/PDB/CMakeLists.txt b/llvm/unittests/DebugInfo/PDB/CMakeLists.txt
index c8c2659277a6..4edfd50c148d 100644
--- a/llvm/unittests/DebugInfo/PDB/CMakeLists.txt
+++ b/llvm/unittests/DebugInfo/PDB/CMakeLists.txt
@@ -6,7 +6,6 @@ set(LLVM_LINK_COMPONENTS
add_llvm_unittest_with_input_files(DebugInfoPDBTests
HashTableTest.cpp
- NativeSessionTest.cpp
NativeSymbolReuseTest.cpp
StringTableBuilderTest.cpp
PDBApiTest.cpp
diff --git a/llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.cpp b/llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.cpp
deleted file mode 100644
index 5cd4030802c6..000000000000
--- a/llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-// Compile with "cl /c /Zi SimpleTest.cpp"
-// Link with "link SimpleTest.obj /debug /nodefaultlib /entry:main"
-
-int main() { return 0; }
diff --git a/llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.exe b/llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.exe
deleted file mode 100644
index 35ae9e2682b8..000000000000
Binary files a/llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.exe and /dev/null
diff er
diff --git a/llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.pdb b/llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.pdb
deleted file mode 100644
index 30d00850488e..000000000000
Binary files a/llvm/unittests/DebugInfo/PDB/Inputs/SimpleTest.pdb and /dev/null
diff er
diff --git a/llvm/unittests/DebugInfo/PDB/NativeSessionTest.cpp b/llvm/unittests/DebugInfo/PDB/NativeSessionTest.cpp
deleted file mode 100644
index 8d27389c78d7..000000000000
--- a/llvm/unittests/DebugInfo/PDB/NativeSessionTest.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-//===- llvm/unittest/DebugInfo/PDB/NativeSessionTest.cpp ------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/DebugInfo/PDB/Native/NativeSession.h"
-#include "llvm/DebugInfo/PDB/IPDBSession.h"
-#include "llvm/DebugInfo/PDB/PDB.h"
-#include "llvm/Support/Path.h"
-
-#include "llvm/Testing/Support/Error.h"
-
-#include "gtest/gtest.h"
-
-#include <vector>
-
-using namespace llvm;
-using namespace llvm::pdb;
-
-extern const char *TestMainArgv0;
-
-static std::string getExePath() {
- SmallString<128> InputsDir = unittest::getInputFileDirectory(TestMainArgv0);
- llvm::sys::path::append(InputsDir, "SimpleTest.exe");
- return std::string(InputsDir);
-}
-
-TEST(NativeSessionTest, TestCreateFromExe) {
- std::unique_ptr<IPDBSession> S;
- Error E = pdb::loadDataForEXE(PDB_ReaderType::Native, getExePath(), S);
- ASSERT_THAT_ERROR(std::move(E), Succeeded());
-}
-
-TEST(NativeSessionTest, TestSetLoadAddress) {
- std::unique_ptr<IPDBSession> S;
- Error E = pdb::loadDataForEXE(PDB_ReaderType::Native, getExePath(), S);
- ASSERT_THAT_ERROR(std::move(E), Succeeded());
-
- S->setLoadAddress(123);
- EXPECT_EQ(S->getLoadAddress(), 123U);
-}
-
-TEST(NativeSessionTest, TestAddressForVA) {
- std::unique_ptr<IPDBSession> S;
- Error E = pdb::loadDataForEXE(PDB_ReaderType::Native, getExePath(), S);
- ASSERT_THAT_ERROR(std::move(E), Succeeded());
-
- uint64_t LoadAddr = S->getLoadAddress();
- uint32_t Section;
- uint32_t Offset;
- ASSERT_TRUE(S->addressForVA(LoadAddr + 5000, Section, Offset));
- EXPECT_EQ(1U, Section);
- EXPECT_EQ(904U, Offset);
-
- ASSERT_TRUE(S->addressForVA(-1, Section, Offset));
- EXPECT_EQ(0U, Section);
- EXPECT_EQ(0U, Offset);
-
- ASSERT_TRUE(S->addressForVA(4, Section, Offset));
- EXPECT_EQ(0U, Section);
- EXPECT_EQ(4U, Offset);
-
- ASSERT_TRUE(S->addressForVA(LoadAddr + 100000, Section, Offset));
- EXPECT_EQ(3U, Section);
- EXPECT_EQ(83616U, Offset);
-}
-
-TEST(NativeSessionTest, TestAddressForRVA) {
- std::unique_ptr<IPDBSession> S;
- Error E = pdb::loadDataForEXE(PDB_ReaderType::Native, getExePath(), S);
- ASSERT_THAT_ERROR(std::move(E), Succeeded());
-
- uint32_t Section;
- uint32_t Offset;
- ASSERT_TRUE(S->addressForVA(5000, Section, Offset));
- EXPECT_EQ(1U, Section);
- EXPECT_EQ(904U, Offset);
-
- ASSERT_TRUE(S->addressForVA(-1, Section, Offset));
- EXPECT_EQ(0U, Section);
- EXPECT_EQ(0U, Offset);
-
- ASSERT_TRUE(S->addressForVA(4, Section, Offset));
- EXPECT_EQ(0U, Section);
- EXPECT_EQ(4U, Offset);
-
- ASSERT_TRUE(S->addressForVA(100000, Section, Offset));
- EXPECT_EQ(3U, Section);
- EXPECT_EQ(83616U, Offset);
-}
More information about the llvm-commits
mailing list