[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