diff options
author | orivej <orivej@yandex-team.ru> | 2022-02-10 16:44:49 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:44:49 +0300 |
commit | 718c552901d703c502ccbefdfc3c9028d608b947 (patch) | |
tree | 46534a98bbefcd7b1f3faa5b52c138ab27db75b7 /contrib/libs/llvm12/lib/DebugInfo/PDB/PDBSymbolData.cpp | |
parent | e9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (diff) | |
download | ydb-718c552901d703c502ccbefdfc3c9028d608b947.tar.gz |
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/llvm12/lib/DebugInfo/PDB/PDBSymbolData.cpp')
-rw-r--r-- | contrib/libs/llvm12/lib/DebugInfo/PDB/PDBSymbolData.cpp | 136 |
1 files changed, 68 insertions, 68 deletions
diff --git a/contrib/libs/llvm12/lib/DebugInfo/PDB/PDBSymbolData.cpp b/contrib/libs/llvm12/lib/DebugInfo/PDB/PDBSymbolData.cpp index d2b82111cc..8036765f1a 100644 --- a/contrib/libs/llvm12/lib/DebugInfo/PDB/PDBSymbolData.cpp +++ b/contrib/libs/llvm12/lib/DebugInfo/PDB/PDBSymbolData.cpp @@ -1,68 +1,68 @@ -//===- PDBSymbolData.cpp - PDB data (e.g. variable) accessors ---*- C++ -*-===// -// -// 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/PDBSymbolData.h" -#include "llvm/DebugInfo/PDB/IPDBSectionContrib.h" -#include "llvm/DebugInfo/PDB/IPDBSession.h" -#include "llvm/DebugInfo/PDB/PDBSymDumper.h" - -#include <utility> - -using namespace llvm; -using namespace llvm::pdb; - -void PDBSymbolData::dump(PDBSymDumper &Dumper) const { Dumper.dump(*this); } - -std::unique_ptr<IPDBEnumLineNumbers> PDBSymbolData::getLineNumbers() const { - auto Len = RawSymbol->getLength(); - Len = Len ? Len : 1; - if (auto RVA = RawSymbol->getRelativeVirtualAddress()) - return Session.findLineNumbersByRVA(RVA, Len); - - if (auto Section = RawSymbol->getAddressSection()) - return Session.findLineNumbersBySectOffset( - Section, RawSymbol->getAddressOffset(), Len); - - return nullptr; -} - -uint32_t PDBSymbolData::getCompilandId() const { - if (auto Lines = getLineNumbers()) { - if (auto FirstLine = Lines->getNext()) - return FirstLine->getCompilandId(); - } - - uint32_t DataSection = RawSymbol->getAddressSection(); - uint32_t DataOffset = RawSymbol->getAddressOffset(); - if (DataSection == 0) { - if (auto RVA = RawSymbol->getRelativeVirtualAddress()) - Session.addressForRVA(RVA, DataSection, DataOffset); - } - - if (DataSection) { - if (auto SecContribs = Session.getSectionContribs()) { - while (auto Section = SecContribs->getNext()) { - if (Section->getAddressSection() == DataSection && - Section->getAddressOffset() <= DataOffset && - (Section->getAddressOffset() + Section->getLength()) > DataOffset) - return Section->getCompilandId(); - } - } - } else { - auto LexParentId = RawSymbol->getLexicalParentId(); - while (auto LexParent = Session.getSymbolById(LexParentId)) { - if (LexParent->getSymTag() == PDB_SymType::Exe) - break; - if (LexParent->getSymTag() == PDB_SymType::Compiland) - return LexParentId; - LexParentId = LexParent->getRawSymbol().getLexicalParentId(); - } - } - - return 0; -} +//===- PDBSymbolData.cpp - PDB data (e.g. variable) accessors ---*- C++ -*-===// +// +// 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/PDBSymbolData.h" +#include "llvm/DebugInfo/PDB/IPDBSectionContrib.h" +#include "llvm/DebugInfo/PDB/IPDBSession.h" +#include "llvm/DebugInfo/PDB/PDBSymDumper.h" + +#include <utility> + +using namespace llvm; +using namespace llvm::pdb; + +void PDBSymbolData::dump(PDBSymDumper &Dumper) const { Dumper.dump(*this); } + +std::unique_ptr<IPDBEnumLineNumbers> PDBSymbolData::getLineNumbers() const { + auto Len = RawSymbol->getLength(); + Len = Len ? Len : 1; + if (auto RVA = RawSymbol->getRelativeVirtualAddress()) + return Session.findLineNumbersByRVA(RVA, Len); + + if (auto Section = RawSymbol->getAddressSection()) + return Session.findLineNumbersBySectOffset( + Section, RawSymbol->getAddressOffset(), Len); + + return nullptr; +} + +uint32_t PDBSymbolData::getCompilandId() const { + if (auto Lines = getLineNumbers()) { + if (auto FirstLine = Lines->getNext()) + return FirstLine->getCompilandId(); + } + + uint32_t DataSection = RawSymbol->getAddressSection(); + uint32_t DataOffset = RawSymbol->getAddressOffset(); + if (DataSection == 0) { + if (auto RVA = RawSymbol->getRelativeVirtualAddress()) + Session.addressForRVA(RVA, DataSection, DataOffset); + } + + if (DataSection) { + if (auto SecContribs = Session.getSectionContribs()) { + while (auto Section = SecContribs->getNext()) { + if (Section->getAddressSection() == DataSection && + Section->getAddressOffset() <= DataOffset && + (Section->getAddressOffset() + Section->getLength()) > DataOffset) + return Section->getCompilandId(); + } + } + } else { + auto LexParentId = RawSymbol->getLexicalParentId(); + while (auto LexParent = Session.getSymbolById(LexParentId)) { + if (LexParent->getSymTag() == PDB_SymType::Exe) + break; + if (LexParent->getSymTag() == PDB_SymType::Compiland) + return LexParentId; + LexParentId = LexParent->getRawSymbol().getLexicalParentId(); + } + } + + return 0; +} |