[llvm] r296049 - Implement some methods for NativeRawSymbol

Michael Kuperstein via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 23 16:34:15 PST 2017


This breaks for me on GCC 4.8:

../unittests/DebugInfo/PDB/PDBApiTest.cpp:66:33: error:
‘std::unique_ptr<llvm::pdb::PDBSymbolExe>
{anonymous}::MockSession::getGlobalScope() const’ marked override, but does
not override
   std::unique_ptr<PDBSymbolExe> getGlobalScope() const override {
                                 ^
../unittests/DebugInfo/PDB/PDBApiTest.cpp: In member function ‘virtual void
{anonymous}::PDBApiTest::SetUp()’:
../unittests/DebugInfo/PDB/PDBApiTest.cpp:325:35: error: cannot allocate an
object of abstract type ‘{anonymous}::MockSession’
     Session.reset(new MockSession());
                                   ^
../unittests/DebugInfo/PDB/PDBApiTest.cpp:63:7: note:   because the
following virtual functions are pure within ‘{anonymous}::MockSession’:
 class MockSession : public IPDBSession {
       ^
In file included from ../unittests/DebugInfo/PDB/PDBApiTest.cpp:15:0:
../include/llvm/DebugInfo/PDB/IPDBSession.h:31:41: note: virtual
std::unique_ptr<llvm::pdb::PDBSymbolExe>
llvm::pdb::IPDBSession::getGlobalScope()
   virtual std::unique_ptr<PDBSymbolExe> getGlobalScope() = 0;


On Thu, Feb 23, 2017 at 4:10 PM, Adrian McCarthy via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: amccarth
> Date: Thu Feb 23 18:10:47 2017
> New Revision: 296049
>
> URL: http://llvm.org/viewvc/llvm-project?rev=296049&view=rev
> Log:
> Implement some methods for NativeRawSymbol
>
> This allows the ability to call IPDBSession::getGlobalScope with a
> NativeSession and
> to then query it for some basic fields from the PDB's InfoStream.
> Note that the symbols now have non-const references back to the Session so
> that
> NativeRawSymbol can access the PDBFile through the Session.
>
> Differential Revision: https://reviews.llvm.org/D30314
>
> Modified:
>     llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIASession.h
>     llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h
>     llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h
>     llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeSession.h
>     llvm/trunk/lib/DebugInfo/PDB/DIA/DIASession.cpp
>     llvm/trunk/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp
>     llvm/trunk/lib/DebugInfo/PDB/Native/NativeSession.cpp
>
> Modified: llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIASession.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/DebugInfo/PDB/DIA/DIASession.h?rev=296049&r1=
> 296048&r2=296049&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIASession.h (original)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIASession.h Thu Feb 23
> 18:10:47 2017
> @@ -31,7 +31,7 @@ public:
>
>    uint64_t getLoadAddress() const override;
>    void setLoadAddress(uint64_t Address) override;
> -  std::unique_ptr<PDBSymbolExe> getGlobalScope() const override;
> +  std::unique_ptr<PDBSymbolExe> getGlobalScope() override;
>    std::unique_ptr<PDBSymbol> getSymbolById(uint32_t SymbolId) const
> override;
>
>    std::unique_ptr<PDBSymbol>
>
> Modified: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/DebugInfo/PDB/IPDBSession.h?rev=296049&r1=296048&r2=296049&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h (original)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h Thu Feb 23
> 18:10:47 2017
> @@ -28,7 +28,7 @@ public:
>
>    virtual uint64_t getLoadAddress() const = 0;
>    virtual void setLoadAddress(uint64_t Address) = 0;
> -  virtual std::unique_ptr<PDBSymbolExe> getGlobalScope() const = 0;
> +  virtual std::unique_ptr<PDBSymbolExe> getGlobalScope() = 0;
>    virtual std::unique_ptr<PDBSymbol> getSymbolById(uint32_t SymbolId)
> const = 0;
>
>    template <typename T>
>
> Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/DebugInfo/PDB/Native/NativeRawSymbol.h?rev=296049&
> r1=296048&r2=296049&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h
> (original)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h Thu
> Feb 23 18:10:47 2017
> @@ -19,7 +19,7 @@ class NativeSession;
>
>  class NativeRawSymbol : public IPDBRawSymbol {
>  public:
> -  explicit NativeRawSymbol(const NativeSession &PDBSession);
> +  explicit NativeRawSymbol(NativeSession &PDBSession);
>
>    void dump(raw_ostream &OS, int Indent) const override;
>
> @@ -196,6 +196,9 @@ public:
>    bool isVolatileType() const override;
>    bool wasInlined() const override;
>    std::string getUnused() const override;
> +
> +private:
> +  NativeSession &Session;
>  };
>
>  }
>
> Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeSession.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/DebugInfo/PDB/Native/NativeSession.h?rev=296049&r1=
> 296048&r2=296049&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeSession.h
> (original)
> +++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/NativeSession.h Thu Feb
> 23 18:10:47 2017
> @@ -32,7 +32,7 @@ public:
>
>    uint64_t getLoadAddress() const override;
>    void setLoadAddress(uint64_t Address) override;
> -  std::unique_ptr<PDBSymbolExe> getGlobalScope() const override;
> +  std::unique_ptr<PDBSymbolExe> getGlobalScope() override;
>    std::unique_ptr<PDBSymbol> getSymbolById(uint32_t SymbolId) const
> override;
>
>    std::unique_ptr<PDBSymbol>
>
> Modified: llvm/trunk/lib/DebugInfo/PDB/DIA/DIASession.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
> DebugInfo/PDB/DIA/DIASession.cpp?rev=296049&r1=296048&r2=296049&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/DebugInfo/PDB/DIA/DIASession.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/PDB/DIA/DIASession.cpp Thu Feb 23 18:10:47
> 2017
> @@ -140,7 +140,7 @@ void DIASession::setLoadAddress(uint64_t
>    Session->put_loadAddress(Address);
>  }
>
> -std::unique_ptr<PDBSymbolExe> DIASession::getGlobalScope() const {
> +std::unique_ptr<PDBSymbolExe> DIASession::getGlobalScope() {
>    CComPtr<IDiaSymbol> GlobalScope;
>    if (S_OK != Session->get_globalScope(&GlobalScope))
>      return nullptr;
>
> Modified: llvm/trunk/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
> DebugInfo/PDB/Native/NativeRawSymbol.cpp?rev=296049&r1=296048&r2=296049&
> view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/PDB/Native/NativeRawSymbol.cpp Thu Feb 23
> 18:10:47 2017
> @@ -10,7 +10,9 @@
>  #include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h"
>  #include "llvm/ADT/ArrayRef.h"
>  #include "llvm/ADT/STLExtras.h"
> +#include "llvm/DebugInfo/PDB/Native/InfoStream.h"
>  #include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
> +#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
>  #include "llvm/DebugInfo/PDB/PDBExtras.h"
>  #include "llvm/DebugInfo/PDB/Native/NativeSession.h"
>  #include "llvm/Support/ConvertUTF.h"
> @@ -19,7 +21,8 @@
>  using namespace llvm;
>  using namespace llvm::pdb;
>
> -NativeRawSymbol::NativeRawSymbol(const NativeSession &PDBSession) {}
> +NativeRawSymbol::NativeRawSymbol(NativeSession &PDBSession)
> +  : Session(PDBSession) {}
>
>  void NativeRawSymbol::dump(raw_ostream &OS, int Indent) const {}
>
> @@ -62,6 +65,11 @@ uint32_t NativeRawSymbol::getAddressSect
>  }
>
>  uint32_t NativeRawSymbol::getAge() const {
> +  auto &File = Session.getPDBFile();
> +  auto IS = File.getPDBInfoStream();
> +  if (IS)
> +    return IS->getAge();
> +  consumeError(IS.takeError());
>    return 0;
>  }
>
> @@ -248,7 +256,7 @@ uint32_t NativeRawSymbol::getSubTypeId()
>  }
>
>  std::string NativeRawSymbol::getSymbolsFileName() const {
> -  return 0;
> +  return Session.getPDBFile().getFilePath();
>  }
>
>  uint32_t NativeRawSymbol::getSymIndexId() const {
> @@ -328,7 +336,12 @@ PDB_SymType NativeRawSymbol::getSymTag()
>  }
>
>  PDB_UniqueId NativeRawSymbol::getGuid() const {
> -  return {{0}};
> +  auto &File = Session.getPDBFile();
> +  auto IS = File.getPDBInfoStream();
> +  if (IS)
> +    return IS->getGuid();
> +  consumeError(IS.takeError());
> +  return PDB_UniqueId{{0}};
>  }
>
>  int32_t NativeRawSymbol::getOffset() const {
>
> Modified: llvm/trunk/lib/DebugInfo/PDB/Native/NativeSession.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
> DebugInfo/PDB/Native/NativeSession.cpp?rev=296049&
> r1=296048&r2=296049&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/DebugInfo/PDB/Native/NativeSession.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/PDB/Native/NativeSession.cpp Thu Feb 23
> 18:10:47 2017
> @@ -14,6 +14,7 @@
>  #include "llvm/DebugInfo/PDB/GenericError.h"
>  #include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
>  #include "llvm/DebugInfo/PDB/IPDBSourceFile.h"
> +#include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h"
>  #include "llvm/DebugInfo/PDB/Native/PDBFile.h"
>  #include "llvm/DebugInfo/PDB/Native/RawError.h"
>  #include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
> @@ -68,8 +69,12 @@ uint64_t NativeSession::getLoadAddress()
>
>  void NativeSession::setLoadAddress(uint64_t Address) {}
>
> -std::unique_ptr<PDBSymbolExe> NativeSession::getGlobalScope() const {
> -  return nullptr;
> +std::unique_ptr<PDBSymbolExe> NativeSession::getGlobalScope() {
> +  auto RawSymbol = llvm::make_unique<NativeRawSymbol>(*this);
> +  auto PdbSymbol(PDBSymbol::create(*this, std::move(RawSymbol)));
> +  std::unique_ptr<PDBSymbolExe> ExeSymbol(
> +    static_cast<PDBSymbolExe *>(PdbSymbol.release()));
> +  return ExeSymbol;
>  }
>
>  std::unique_ptr<PDBSymbol>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170223/68641523/attachment.html>


More information about the llvm-commits mailing list