From a4e7dfbc16e6e9c786f01a325a3663e8028b4cc0 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Fri, 16 Dec 2016 19:20:35 +0000 Subject: [CodeView] Hook CodeViewRecordIO for reading/writing symbols. This is the 3rd of 3 patches to get reading and writing of CodeView symbol and type records to use a single codepath. Differential Revision: https://reviews.llvm.org/D26427 llvm-svn: 289978 --- llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp | 30 +++++++++++++++------------ 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp') diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp index 3f5ef1a..3d0ae1a 100644 --- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp @@ -2072,35 +2072,39 @@ void CodeViewDebug::emitLocalVariable(const LocalVariable &Var) { (DefRange.StructOffset << DefRangeRegisterRelSym::OffsetInParentShift); } - DefRangeRegisterRelSym Sym(DefRange.CVRegister, RegRelFlags, - DefRange.DataOffset, None); + DefRangeRegisterRelSym Sym(S_DEFRANGE_REGISTER_REL); + Sym.Hdr.Register = DefRange.CVRegister; + Sym.Hdr.Flags = RegRelFlags; + Sym.Hdr.BasePointerOffset = DefRange.DataOffset; ulittle16_t SymKind = ulittle16_t(S_DEFRANGE_REGISTER_REL); BytePrefix += StringRef(reinterpret_cast(&SymKind), sizeof(SymKind)); BytePrefix += - StringRef(reinterpret_cast(&Sym.Header), - sizeof(Sym.Header) - sizeof(LocalVariableAddrRange)); + StringRef(reinterpret_cast(&Sym.Hdr), sizeof(Sym.Hdr)); } else { assert(DefRange.DataOffset == 0 && "unexpected offset into register"); if (DefRange.IsSubfield) { // Unclear what matters here. - DefRangeSubfieldRegisterSym Sym(DefRange.CVRegister, 0, - DefRange.StructOffset, None); + DefRangeSubfieldRegisterSym Sym(S_DEFRANGE_SUBFIELD_REGISTER); + Sym.Hdr.Register = DefRange.CVRegister; + Sym.Hdr.MayHaveNoName = 0; + Sym.Hdr.OffsetInParent = DefRange.StructOffset; + ulittle16_t SymKind = ulittle16_t(S_DEFRANGE_SUBFIELD_REGISTER); BytePrefix += StringRef(reinterpret_cast(&SymKind), sizeof(SymKind)); - BytePrefix += - StringRef(reinterpret_cast(&Sym.Header), - sizeof(Sym.Header) - sizeof(LocalVariableAddrRange)); + BytePrefix += StringRef(reinterpret_cast(&Sym.Hdr), + sizeof(Sym.Hdr)); } else { // Unclear what matters here. - DefRangeRegisterSym Sym(DefRange.CVRegister, 0, None); + DefRangeRegisterSym Sym(S_DEFRANGE_REGISTER); + Sym.Hdr.Register = DefRange.CVRegister; + Sym.Hdr.MayHaveNoName = 0; ulittle16_t SymKind = ulittle16_t(S_DEFRANGE_REGISTER); BytePrefix += StringRef(reinterpret_cast(&SymKind), sizeof(SymKind)); - BytePrefix += - StringRef(reinterpret_cast(&Sym.Header), - sizeof(Sym.Header) - sizeof(LocalVariableAddrRange)); + BytePrefix += StringRef(reinterpret_cast(&Sym.Hdr), + sizeof(Sym.Hdr)); } } OS.EmitCVDefRangeDirective(DefRange.Ranges, BytePrefix); -- cgit v1.1