Skip to content

Commit

Permalink
Avoid including CodeView/SymbolRecord.h from MCStreamer.h
Browse files Browse the repository at this point in the history
Move the types needed out so they can be forward declared instead.

llvm-svn: 375325
  • Loading branch information
rnk committed Oct 19, 2019
1 parent 14a3f77 commit 7bbe711
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 53 deletions.
56 changes: 28 additions & 28 deletions llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h
Expand Up @@ -469,61 +469,61 @@ class DefRangeSubfieldSym : public SymbolRecord {
uint32_t RecordOffset = 0;
};

struct DefRangeRegisterHeader {
ulittle16_t Register;
ulittle16_t MayHaveNoName;
};

// S_DEFRANGE_REGISTER
class DefRangeRegisterSym : public SymbolRecord {
public:
struct Header {
ulittle16_t Register;
ulittle16_t MayHaveNoName;
};

explicit DefRangeRegisterSym(SymbolRecordKind Kind) : SymbolRecord(Kind) {}
explicit DefRangeRegisterSym(uint32_t RecordOffset)
: SymbolRecord(SymbolRecordKind::DefRangeRegisterSym),
RecordOffset(RecordOffset) {}

uint32_t getRelocationOffset() const { return RecordOffset + sizeof(Header); }
uint32_t getRelocationOffset() const { return RecordOffset + sizeof(DefRangeRegisterHeader); }

Header Hdr;
DefRangeRegisterHeader Hdr;
LocalVariableAddrRange Range;
std::vector<LocalVariableAddrGap> Gaps;

uint32_t RecordOffset = 0;
};

struct DefRangeSubfieldRegisterHeader {
ulittle16_t Register;
ulittle16_t MayHaveNoName;
ulittle32_t OffsetInParent;
};

// S_DEFRANGE_SUBFIELD_REGISTER
class DefRangeSubfieldRegisterSym : public SymbolRecord {
public:
struct Header {
ulittle16_t Register;
ulittle16_t MayHaveNoName;
ulittle32_t OffsetInParent;
};

explicit DefRangeSubfieldRegisterSym(SymbolRecordKind Kind)
: SymbolRecord(Kind) {}
explicit DefRangeSubfieldRegisterSym(uint32_t RecordOffset)
: SymbolRecord(SymbolRecordKind::DefRangeSubfieldRegisterSym),
RecordOffset(RecordOffset) {}

uint32_t getRelocationOffset() const { return RecordOffset + sizeof(Header); }
uint32_t getRelocationOffset() const { return RecordOffset + sizeof(DefRangeSubfieldRegisterHeader); }

Header Hdr;
DefRangeSubfieldRegisterHeader Hdr;
LocalVariableAddrRange Range;
std::vector<LocalVariableAddrGap> Gaps;

uint32_t RecordOffset = 0;
};

struct DefRangeFramePointerRelHeader {
little32_t Offset;
};

// S_DEFRANGE_FRAMEPOINTER_REL
class DefRangeFramePointerRelSym : public SymbolRecord {
static constexpr uint32_t RelocationOffset = 8;

public:
struct Header {
little32_t Offset;
};

explicit DefRangeFramePointerRelSym(SymbolRecordKind Kind)
: SymbolRecord(Kind) {}
explicit DefRangeFramePointerRelSym(uint32_t RecordOffset)
Expand All @@ -534,22 +534,22 @@ class DefRangeFramePointerRelSym : public SymbolRecord {
return RecordOffset + RelocationOffset;
}

Header Hdr;
DefRangeFramePointerRelHeader Hdr;
LocalVariableAddrRange Range;
std::vector<LocalVariableAddrGap> Gaps;

uint32_t RecordOffset = 0;
};

struct DefRangeRegisterRelHeader {
ulittle16_t Register;
ulittle16_t Flags;
little32_t BasePointerOffset;
};

// S_DEFRANGE_REGISTER_REL
class DefRangeRegisterRelSym : public SymbolRecord {
public:
struct Header {
ulittle16_t Register;
ulittle16_t Flags;
little32_t BasePointerOffset;
};

explicit DefRangeRegisterRelSym(SymbolRecordKind Kind) : SymbolRecord(Kind) {}
explicit DefRangeRegisterRelSym(uint32_t RecordOffset)
: SymbolRecord(SymbolRecordKind::DefRangeRegisterRelSym),
Expand All @@ -567,9 +567,9 @@ class DefRangeRegisterRelSym : public SymbolRecord {
bool hasSpilledUDTMember() const { return Hdr.Flags & IsSubfieldFlag; }
uint16_t offsetInParent() const { return Hdr.Flags >> OffsetInParentShift; }

uint32_t getRelocationOffset() const { return RecordOffset + sizeof(Header); }
uint32_t getRelocationOffset() const { return RecordOffset + sizeof(DefRangeRegisterRelHeader); }

Header Hdr;
DefRangeRegisterRelHeader Hdr;
LocalVariableAddrRange Range;
std::vector<LocalVariableAddrGap> Gaps;

Expand Down
16 changes: 11 additions & 5 deletions llvm/include/llvm/MC/MCStreamer.h
Expand Up @@ -18,7 +18,6 @@
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
#include "llvm/MC/MCDirectives.h"
#include "llvm/MC/MCLinkerOptimizationHint.h"
#include "llvm/MC/MCSymbol.h"
Expand Down Expand Up @@ -55,6 +54,13 @@ class MCSubtargetInfo;
class raw_ostream;
class Twine;

namespace codeview {
struct DefRangeRegisterRelHeader;
struct DefRangeSubfieldRegisterHeader;
struct DefRangeRegisterHeader;
struct DefRangeFramePointerRelHeader;
}

using MCSectionSubPair = std::pair<MCSection *, const MCExpr *>;

/// Target specific streamer interface. This is used so that targets can
Expand Down Expand Up @@ -873,19 +879,19 @@ class MCStreamer {

virtual void EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeRegisterRelSym::Header DRHdr);
codeview::DefRangeRegisterRelHeader DRHdr);

virtual void EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeSubfieldRegisterSym::Header DRHdr);
codeview::DefRangeSubfieldRegisterHeader DRHdr);

virtual void EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeRegisterSym::Header DRHdr);
codeview::DefRangeRegisterHeader DRHdr);

virtual void EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeFramePointerRelSym::Header DRHdr);
codeview::DefRangeFramePointerRelHeader DRHdr);

/// This implements the CodeView '.cv_stringtable' assembler directive.
virtual void EmitCVStringTableDirective() {}
Expand Down
8 changes: 4 additions & 4 deletions llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
Expand Up @@ -2654,7 +2654,7 @@ void CodeViewDebug::emitLocalVariable(const FunctionInfo &FI,
(bool(Flags & LocalSymFlags::IsParameter)
? (EncFP == FI.EncodedParamFramePtrReg)
: (EncFP == FI.EncodedLocalFramePtrReg))) {
DefRangeFramePointerRelSym::Header DRHdr;
DefRangeFramePointerRelHeader DRHdr;
DRHdr.Offset = Offset;
OS.EmitCVDefRangeDirective(DefRange.Ranges, DRHdr);
} else {
Expand All @@ -2664,7 +2664,7 @@ void CodeViewDebug::emitLocalVariable(const FunctionInfo &FI,
(DefRange.StructOffset
<< DefRangeRegisterRelSym::OffsetInParentShift);
}
DefRangeRegisterRelSym::Header DRHdr;
DefRangeRegisterRelHeader DRHdr;
DRHdr.Register = Reg;
DRHdr.Flags = RegRelFlags;
DRHdr.BasePointerOffset = Offset;
Expand All @@ -2673,13 +2673,13 @@ void CodeViewDebug::emitLocalVariable(const FunctionInfo &FI,
} else {
assert(DefRange.DataOffset == 0 && "unexpected offset into register");
if (DefRange.IsSubfield) {
DefRangeSubfieldRegisterSym::Header DRHdr;
DefRangeSubfieldRegisterHeader DRHdr;
DRHdr.Register = DefRange.CVRegister;
DRHdr.MayHaveNoName = 0;
DRHdr.OffsetInParent = DefRange.StructOffset;
OS.EmitCVDefRangeDirective(DefRange.Ranges, DRHdr);
} else {
DefRangeRegisterSym::Header DRHdr;
DefRangeRegisterHeader DRHdr;
DRHdr.Register = DefRange.CVRegister;
DRHdr.MayHaveNoName = 0;
OS.EmitCVDefRangeDirective(DefRange.Ranges, DRHdr);
Expand Down
17 changes: 9 additions & 8 deletions llvm/lib/MC/MCAsmStreamer.cpp
Expand Up @@ -11,6 +11,7 @@
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/Twine.h"
#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
#include "llvm/MC/MCAsmBackend.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCAssembler.h"
Expand Down Expand Up @@ -263,19 +264,19 @@ class MCAsmStreamer final : public MCStreamer {

void EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeRegisterRelSym::Header DRHdr) override;
codeview::DefRangeRegisterRelHeader DRHdr) override;

void EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeSubfieldRegisterSym::Header DRHdr) override;
codeview::DefRangeSubfieldRegisterHeader DRHdr) override;

void EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeRegisterSym::Header DRHdr) override;
codeview::DefRangeRegisterHeader DRHdr) override;

void EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeFramePointerRelSym::Header DRHdr) override;
codeview::DefRangeFramePointerRelHeader DRHdr) override;

void EmitCVStringTableDirective() override;
void EmitCVFileChecksumsDirective() override;
Expand Down Expand Up @@ -1438,7 +1439,7 @@ void MCAsmStreamer::PrintCVDefRangePrefix(

void MCAsmStreamer::EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeRegisterRelSym::Header DRHdr) {
codeview::DefRangeRegisterRelHeader DRHdr) {
PrintCVDefRangePrefix(Ranges);
OS << ", reg_rel, ";
OS << DRHdr.Register << ", " << DRHdr.Flags << ", "
Expand All @@ -1448,7 +1449,7 @@ void MCAsmStreamer::EmitCVDefRangeDirective(

void MCAsmStreamer::EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeSubfieldRegisterSym::Header DRHdr) {
codeview::DefRangeSubfieldRegisterHeader DRHdr) {
PrintCVDefRangePrefix(Ranges);
OS << ", subfield_reg, ";
OS << DRHdr.Register << ", " << DRHdr.OffsetInParent;
Expand All @@ -1457,7 +1458,7 @@ void MCAsmStreamer::EmitCVDefRangeDirective(

void MCAsmStreamer::EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeRegisterSym::Header DRHdr) {
codeview::DefRangeRegisterHeader DRHdr) {
PrintCVDefRangePrefix(Ranges);
OS << ", reg, ";
OS << DRHdr.Register;
Expand All @@ -1466,7 +1467,7 @@ void MCAsmStreamer::EmitCVDefRangeDirective(

void MCAsmStreamer::EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeFramePointerRelSym::Header DRHdr) {
codeview::DefRangeFramePointerRelHeader DRHdr) {
PrintCVDefRangePrefix(Ranges);
OS << ", frame_ptr_rel, ";
OS << DRHdr.Offset;
Expand Down
9 changes: 5 additions & 4 deletions llvm/lib/MC/MCParser/AsmParser.cpp
Expand Up @@ -22,6 +22,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/BinaryFormat/Dwarf.h"
#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCCodeView.h"
#include "llvm/MC/MCContext.h"
Expand Down Expand Up @@ -3908,7 +3909,7 @@ bool AsmParser::parseDirectiveCVDefRange() {
parseAbsoluteExpression(DRRegister))
return Error(Loc, "expected register number");

codeview::DefRangeRegisterSym::Header DRHdr;
codeview::DefRangeRegisterHeader DRHdr;
DRHdr.Register = DRRegister;
DRHdr.MayHaveNoName = 0;
getStreamer().EmitCVDefRangeDirective(Ranges, DRHdr);
Expand All @@ -3921,7 +3922,7 @@ bool AsmParser::parseDirectiveCVDefRange() {
parseAbsoluteExpression(DROffset))
return Error(Loc, "expected offset value");

codeview::DefRangeFramePointerRelSym::Header DRHdr;
codeview::DefRangeFramePointerRelHeader DRHdr;
DRHdr.Offset = DROffset;
getStreamer().EmitCVDefRangeDirective(Ranges, DRHdr);
break;
Expand All @@ -3938,7 +3939,7 @@ bool AsmParser::parseDirectiveCVDefRange() {
parseAbsoluteExpression(DROffsetInParent))
return Error(Loc, "expected offset value");

codeview::DefRangeSubfieldRegisterSym::Header DRHdr;
codeview::DefRangeSubfieldRegisterHeader DRHdr;
DRHdr.Register = DRRegister;
DRHdr.MayHaveNoName = 0;
DRHdr.OffsetInParent = DROffsetInParent;
Expand All @@ -3963,7 +3964,7 @@ bool AsmParser::parseDirectiveCVDefRange() {
parseAbsoluteExpression(DRBasePointerOffset))
return Error(Loc, "expected base pointer offset value");

codeview::DefRangeRegisterRelSym::Header DRHdr;
codeview::DefRangeRegisterRelHeader DRHdr;
DRHdr.Register = DRRegister;
DRHdr.Flags = DRFlags;
DRHdr.BasePointerOffset = DRBasePointerOffset;
Expand Down
9 changes: 5 additions & 4 deletions llvm/lib/MC/MCStreamer.cpp
Expand Up @@ -12,6 +12,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/BinaryFormat/COFF.h"
#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
#include "llvm/MC/MCAsmBackend.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCCodeView.h"
Expand Down Expand Up @@ -347,15 +348,15 @@ void MCStreamer::EmitCVDefRangeDirective(

void MCStreamer::EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeRegisterRelSym::Header DRHdr) {
codeview::DefRangeRegisterRelHeader DRHdr) {
SmallString<20> BytePrefix;
copyBytesForDefRange(BytePrefix, codeview::S_DEFRANGE_REGISTER_REL, DRHdr);
EmitCVDefRangeDirective(Ranges, BytePrefix);
}

void MCStreamer::EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeSubfieldRegisterSym::Header DRHdr) {
codeview::DefRangeSubfieldRegisterHeader DRHdr) {
SmallString<20> BytePrefix;
copyBytesForDefRange(BytePrefix, codeview::S_DEFRANGE_SUBFIELD_REGISTER,
DRHdr);
Expand All @@ -364,15 +365,15 @@ void MCStreamer::EmitCVDefRangeDirective(

void MCStreamer::EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeRegisterSym::Header DRHdr) {
codeview::DefRangeRegisterHeader DRHdr) {
SmallString<20> BytePrefix;
copyBytesForDefRange(BytePrefix, codeview::S_DEFRANGE_REGISTER, DRHdr);
EmitCVDefRangeDirective(Ranges, BytePrefix);
}

void MCStreamer::EmitCVDefRangeDirective(
ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
codeview::DefRangeFramePointerRelSym::Header DRHdr) {
codeview::DefRangeFramePointerRelHeader DRHdr) {
SmallString<20> BytePrefix;
copyBytesForDefRange(BytePrefix, codeview::S_DEFRANGE_FRAMEPOINTER_REL,
DRHdr);
Expand Down

0 comments on commit 7bbe711

Please sign in to comment.