blob: eac1a544d33c2940430210ff3486234a049542ab [file] [log] [blame]
Zachary Turner21473f72015-02-08 00:29:29 +00001//===- PDBSymbolThunk.cpp - -------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include <utility>
11
12#include "llvm/DebugInfo/PDB/PDBSymbol.h"
13#include "llvm/DebugInfo/PDB/PDBSymbolThunk.h"
14
Zachary Turnera5549172015-02-10 22:43:25 +000015#include "llvm/Support/Format.h"
16
Zachary Turner21473f72015-02-08 00:29:29 +000017using namespace llvm;
18
Zachary Turner98571ed2015-02-08 22:53:53 +000019PDBSymbolThunk::PDBSymbolThunk(const IPDBSession &PDBSession,
Zachary Turnerbae16b32015-02-08 20:58:09 +000020 std::unique_ptr<IPDBRawSymbol> Symbol)
David Blaikiee4698b92015-02-08 23:15:37 +000021 : PDBSymbol(PDBSession, std::move(Symbol)) {}
Zachary Turner21473f72015-02-08 00:29:29 +000022
Zachary Turnera5549172015-02-10 22:43:25 +000023void PDBSymbolThunk::dump(raw_ostream &OS, int Indent,
24 PDB_DumpLevel Level) const {
25 if (Level == PDB_DumpLevel::Compact) {
26 OS.indent(Indent);
27 PDB_ThunkOrdinal Ordinal = getThunkOrdinal();
Zachary Turnerc074de02015-02-12 21:09:24 +000028 uint32_t RVA = getRelativeVirtualAddress();
29 if (Ordinal == PDB_ThunkOrdinal::TrampIncremental) {
30 OS << format_hex(RVA, 10);
31 } else {
32 OS << "[" << format_hex(RVA, 10);
33 OS << " - " << format_hex(RVA + getLength(), 10) << "]";
34 }
35 OS << " thunk(" << Ordinal << ")";
Zachary Turnera5549172015-02-10 22:43:25 +000036 if (Ordinal == PDB_ThunkOrdinal::TrampIncremental)
37 OS << " -> " << format_hex(getTargetRelativeVirtualAddress(), 10);
Zachary Turnerc074de02015-02-12 21:09:24 +000038 OS << " ";
Zachary Turnera5549172015-02-10 22:43:25 +000039 std::string Name = getName();
40 if (!Name.empty())
41 OS << Name;
42 OS << "\n";
43 }
44}