xref: /llvm-project/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp (revision 0cac726a00a2be06a959a89efe6587dba28e5822)
1 //===- llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp ----------------------===//
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 // This file contains support for writing Microsoft CodeView debug info.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "CodeViewDebug.h"
15 #include "DwarfExpression.h"
16 #include "llvm/ADT/APSInt.h"
17 #include "llvm/ADT/ArrayRef.h"
18 #include "llvm/ADT/DenseMap.h"
19 #include "llvm/ADT/DenseSet.h"
20 #include "llvm/ADT/MapVector.h"
21 #include "llvm/ADT/None.h"
22 #include "llvm/ADT/Optional.h"
23 #include "llvm/ADT/STLExtras.h"
24 #include "llvm/ADT/SmallString.h"
25 #include "llvm/ADT/SmallVector.h"
26 #include "llvm/ADT/StringRef.h"
27 #include "llvm/ADT/TinyPtrVector.h"
28 #include "llvm/ADT/Triple.h"
29 #include "llvm/ADT/Twine.h"
30 #include "llvm/BinaryFormat/COFF.h"
31 #include "llvm/BinaryFormat/Dwarf.h"
32 #include "llvm/CodeGen/AsmPrinter.h"
33 #include "llvm/CodeGen/LexicalScopes.h"
34 #include "llvm/CodeGen/MachineFunction.h"
35 #include "llvm/CodeGen/MachineInstr.h"
36 #include "llvm/CodeGen/MachineModuleInfo.h"
37 #include "llvm/CodeGen/MachineOperand.h"
38 #include "llvm/CodeGen/TargetFrameLowering.h"
39 #include "llvm/CodeGen/TargetRegisterInfo.h"
40 #include "llvm/CodeGen/TargetSubtargetInfo.h"
41 #include "llvm/Config/llvm-config.h"
42 #include "llvm/DebugInfo/CodeView/CVTypeVisitor.h"
43 #include "llvm/DebugInfo/CodeView/CodeView.h"
44 #include "llvm/DebugInfo/CodeView/ContinuationRecordBuilder.h"
45 #include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h"
46 #include "llvm/DebugInfo/CodeView/Line.h"
47 #include "llvm/DebugInfo/CodeView/SymbolRecord.h"
48 #include "llvm/DebugInfo/CodeView/TypeDumpVisitor.h"
49 #include "llvm/DebugInfo/CodeView/TypeIndex.h"
50 #include "llvm/DebugInfo/CodeView/TypeRecord.h"
51 #include "llvm/DebugInfo/CodeView/TypeTableCollection.h"
52 #include "llvm/IR/Constants.h"
53 #include "llvm/IR/DataLayout.h"
54 #include "llvm/IR/DebugInfoMetadata.h"
55 #include "llvm/IR/DebugLoc.h"
56 #include "llvm/IR/Function.h"
57 #include "llvm/IR/GlobalValue.h"
58 #include "llvm/IR/GlobalVariable.h"
59 #include "llvm/IR/Metadata.h"
60 #include "llvm/IR/Module.h"
61 #include "llvm/MC/MCAsmInfo.h"
62 #include "llvm/MC/MCContext.h"
63 #include "llvm/MC/MCSectionCOFF.h"
64 #include "llvm/MC/MCStreamer.h"
65 #include "llvm/MC/MCSymbol.h"
66 #include "llvm/Support/BinaryByteStream.h"
67 #include "llvm/Support/BinaryStreamReader.h"
68 #include "llvm/Support/Casting.h"
69 #include "llvm/Support/CommandLine.h"
70 #include "llvm/Support/Compiler.h"
71 #include "llvm/Support/Endian.h"
72 #include "llvm/Support/Error.h"
73 #include "llvm/Support/ErrorHandling.h"
74 #include "llvm/Support/FormatVariadic.h"
75 #include "llvm/Support/SMLoc.h"
76 #include "llvm/Support/ScopedPrinter.h"
77 #include "llvm/Target/TargetLoweringObjectFile.h"
78 #include "llvm/Target/TargetMachine.h"
79 #include <algorithm>
80 #include <cassert>
81 #include <cctype>
82 #include <cstddef>
83 #include <cstdint>
84 #include <iterator>
85 #include <limits>
86 #include <string>
87 #include <utility>
88 #include <vector>
89 
90 using namespace llvm;
91 using namespace llvm::codeview;
92 
93 static cl::opt<bool> EmitDebugGlobalHashes("emit-codeview-ghash-section",
94                                            cl::ReallyHidden, cl::init(false));
95 
96 CodeViewDebug::CodeViewDebug(AsmPrinter *AP)
97     : DebugHandlerBase(AP), OS(*Asm->OutStreamer), TypeTable(Allocator) {
98   // If module doesn't have named metadata anchors or COFF debug section
99   // is not available, skip any debug info related stuff.
100   if (!MMI->getModule()->getNamedMetadata("llvm.dbg.cu") ||
101       !AP->getObjFileLowering().getCOFFDebugSymbolsSection()) {
102     Asm = nullptr;
103     return;
104   }
105 
106   // Tell MMI that we have debug info.
107   MMI->setDebugInfoAvailability(true);
108 }
109 
110 StringRef CodeViewDebug::getFullFilepath(const DIFile *File) {
111   std::string &Filepath = FileToFilepathMap[File];
112   if (!Filepath.empty())
113     return Filepath;
114 
115   StringRef Dir = File->getDirectory(), Filename = File->getFilename();
116 
117   // If this is a Unix-style path, just use it as is. Don't try to canonicalize
118   // it textually because one of the path components could be a symlink.
119   if (!Dir.empty() && Dir[0] == '/') {
120     Filepath = Dir;
121     if (Dir.back() != '/')
122       Filepath += '/';
123     Filepath += Filename;
124     return Filepath;
125   }
126 
127   // Clang emits directory and relative filename info into the IR, but CodeView
128   // operates on full paths.  We could change Clang to emit full paths too, but
129   // that would increase the IR size and probably not needed for other users.
130   // For now, just concatenate and canonicalize the path here.
131   if (Filename.find(':') == 1)
132     Filepath = Filename;
133   else
134     Filepath = (Dir + "\\" + Filename).str();
135 
136   // Canonicalize the path.  We have to do it textually because we may no longer
137   // have access the file in the filesystem.
138   // First, replace all slashes with backslashes.
139   std::replace(Filepath.begin(), Filepath.end(), '/', '\\');
140 
141   // Remove all "\.\" with "\".
142   size_t Cursor = 0;
143   while ((Cursor = Filepath.find("\\.\\", Cursor)) != std::string::npos)
144     Filepath.erase(Cursor, 2);
145 
146   // Replace all "\XXX\..\" with "\".  Don't try too hard though as the original
147   // path should be well-formatted, e.g. start with a drive letter, etc.
148   Cursor = 0;
149   while ((Cursor = Filepath.find("\\..\\", Cursor)) != std::string::npos) {
150     // Something's wrong if the path starts with "\..\", abort.
151     if (Cursor == 0)
152       break;
153 
154     size_t PrevSlash = Filepath.rfind('\\', Cursor - 1);
155     if (PrevSlash == std::string::npos)
156       // Something's wrong, abort.
157       break;
158 
159     Filepath.erase(PrevSlash, Cursor + 3 - PrevSlash);
160     // The next ".." might be following the one we've just erased.
161     Cursor = PrevSlash;
162   }
163 
164   // Remove all duplicate backslashes.
165   Cursor = 0;
166   while ((Cursor = Filepath.find("\\\\", Cursor)) != std::string::npos)
167     Filepath.erase(Cursor, 1);
168 
169   return Filepath;
170 }
171 
172 unsigned CodeViewDebug::maybeRecordFile(const DIFile *F) {
173   StringRef FullPath = getFullFilepath(F);
174   unsigned NextId = FileIdMap.size() + 1;
175   auto Insertion = FileIdMap.insert(std::make_pair(FullPath, NextId));
176   if (Insertion.second) {
177     // We have to compute the full filepath and emit a .cv_file directive.
178     ArrayRef<uint8_t> ChecksumAsBytes;
179     FileChecksumKind CSKind = FileChecksumKind::None;
180     if (F->getChecksum()) {
181       std::string Checksum = fromHex(F->getChecksum()->Value);
182       void *CKMem = OS.getContext().allocate(Checksum.size(), 1);
183       memcpy(CKMem, Checksum.data(), Checksum.size());
184       ChecksumAsBytes = ArrayRef<uint8_t>(
185           reinterpret_cast<const uint8_t *>(CKMem), Checksum.size());
186       switch (F->getChecksum()->Kind) {
187       case DIFile::CSK_MD5:  CSKind = FileChecksumKind::MD5; break;
188       case DIFile::CSK_SHA1: CSKind = FileChecksumKind::SHA1; break;
189       }
190     }
191     bool Success = OS.EmitCVFileDirective(NextId, FullPath, ChecksumAsBytes,
192                                           static_cast<unsigned>(CSKind));
193     (void)Success;
194     assert(Success && ".cv_file directive failed");
195   }
196   return Insertion.first->second;
197 }
198 
199 CodeViewDebug::InlineSite &
200 CodeViewDebug::getInlineSite(const DILocation *InlinedAt,
201                              const DISubprogram *Inlinee) {
202   auto SiteInsertion = CurFn->InlineSites.insert({InlinedAt, InlineSite()});
203   InlineSite *Site = &SiteInsertion.first->second;
204   if (SiteInsertion.second) {
205     unsigned ParentFuncId = CurFn->FuncId;
206     if (const DILocation *OuterIA = InlinedAt->getInlinedAt())
207       ParentFuncId =
208           getInlineSite(OuterIA, InlinedAt->getScope()->getSubprogram())
209               .SiteFuncId;
210 
211     Site->SiteFuncId = NextFuncId++;
212     OS.EmitCVInlineSiteIdDirective(
213         Site->SiteFuncId, ParentFuncId, maybeRecordFile(InlinedAt->getFile()),
214         InlinedAt->getLine(), InlinedAt->getColumn(), SMLoc());
215     Site->Inlinee = Inlinee;
216     InlinedSubprograms.insert(Inlinee);
217     getFuncIdForSubprogram(Inlinee);
218   }
219   return *Site;
220 }
221 
222 static StringRef getPrettyScopeName(const DIScope *Scope) {
223   StringRef ScopeName = Scope->getName();
224   if (!ScopeName.empty())
225     return ScopeName;
226 
227   switch (Scope->getTag()) {
228   case dwarf::DW_TAG_enumeration_type:
229   case dwarf::DW_TAG_class_type:
230   case dwarf::DW_TAG_structure_type:
231   case dwarf::DW_TAG_union_type:
232     return "<unnamed-tag>";
233   case dwarf::DW_TAG_namespace:
234     return "`anonymous namespace'";
235   }
236 
237   return StringRef();
238 }
239 
240 static const DISubprogram *getQualifiedNameComponents(
241     const DIScope *Scope, SmallVectorImpl<StringRef> &QualifiedNameComponents) {
242   const DISubprogram *ClosestSubprogram = nullptr;
243   while (Scope != nullptr) {
244     if (ClosestSubprogram == nullptr)
245       ClosestSubprogram = dyn_cast<DISubprogram>(Scope);
246     StringRef ScopeName = getPrettyScopeName(Scope);
247     if (!ScopeName.empty())
248       QualifiedNameComponents.push_back(ScopeName);
249     Scope = Scope->getScope().resolve();
250   }
251   return ClosestSubprogram;
252 }
253 
254 static std::string getQualifiedName(ArrayRef<StringRef> QualifiedNameComponents,
255                                     StringRef TypeName) {
256   std::string FullyQualifiedName;
257   for (StringRef QualifiedNameComponent :
258        llvm::reverse(QualifiedNameComponents)) {
259     FullyQualifiedName.append(QualifiedNameComponent);
260     FullyQualifiedName.append("::");
261   }
262   FullyQualifiedName.append(TypeName);
263   return FullyQualifiedName;
264 }
265 
266 static std::string getFullyQualifiedName(const DIScope *Scope, StringRef Name) {
267   SmallVector<StringRef, 5> QualifiedNameComponents;
268   getQualifiedNameComponents(Scope, QualifiedNameComponents);
269   return getQualifiedName(QualifiedNameComponents, Name);
270 }
271 
272 struct CodeViewDebug::TypeLoweringScope {
273   TypeLoweringScope(CodeViewDebug &CVD) : CVD(CVD) { ++CVD.TypeEmissionLevel; }
274   ~TypeLoweringScope() {
275     // Don't decrement TypeEmissionLevel until after emitting deferred types, so
276     // inner TypeLoweringScopes don't attempt to emit deferred types.
277     if (CVD.TypeEmissionLevel == 1)
278       CVD.emitDeferredCompleteTypes();
279     --CVD.TypeEmissionLevel;
280   }
281   CodeViewDebug &CVD;
282 };
283 
284 static std::string getFullyQualifiedName(const DIScope *Ty) {
285   const DIScope *Scope = Ty->getScope().resolve();
286   return getFullyQualifiedName(Scope, getPrettyScopeName(Ty));
287 }
288 
289 TypeIndex CodeViewDebug::getScopeIndex(const DIScope *Scope) {
290   // No scope means global scope and that uses the zero index.
291   if (!Scope || isa<DIFile>(Scope))
292     return TypeIndex();
293 
294   assert(!isa<DIType>(Scope) && "shouldn't make a namespace scope for a type");
295 
296   // Check if we've already translated this scope.
297   auto I = TypeIndices.find({Scope, nullptr});
298   if (I != TypeIndices.end())
299     return I->second;
300 
301   // Build the fully qualified name of the scope.
302   std::string ScopeName = getFullyQualifiedName(Scope);
303   StringIdRecord SID(TypeIndex(), ScopeName);
304   auto TI = TypeTable.writeLeafType(SID);
305   return recordTypeIndexForDINode(Scope, TI);
306 }
307 
308 TypeIndex CodeViewDebug::getFuncIdForSubprogram(const DISubprogram *SP) {
309   assert(SP);
310 
311   // Check if we've already translated this subprogram.
312   auto I = TypeIndices.find({SP, nullptr});
313   if (I != TypeIndices.end())
314     return I->second;
315 
316   // The display name includes function template arguments. Drop them to match
317   // MSVC.
318   StringRef DisplayName = SP->getName().split('<').first;
319 
320   const DIScope *Scope = SP->getScope().resolve();
321   TypeIndex TI;
322   if (const auto *Class = dyn_cast_or_null<DICompositeType>(Scope)) {
323     // If the scope is a DICompositeType, then this must be a method. Member
324     // function types take some special handling, and require access to the
325     // subprogram.
326     TypeIndex ClassType = getTypeIndex(Class);
327     MemberFuncIdRecord MFuncId(ClassType, getMemberFunctionType(SP, Class),
328                                DisplayName);
329     TI = TypeTable.writeLeafType(MFuncId);
330   } else {
331     // Otherwise, this must be a free function.
332     TypeIndex ParentScope = getScopeIndex(Scope);
333     FuncIdRecord FuncId(ParentScope, getTypeIndex(SP->getType()), DisplayName);
334     TI = TypeTable.writeLeafType(FuncId);
335   }
336 
337   return recordTypeIndexForDINode(SP, TI);
338 }
339 
340 TypeIndex CodeViewDebug::getMemberFunctionType(const DISubprogram *SP,
341                                                const DICompositeType *Class) {
342   // Always use the method declaration as the key for the function type. The
343   // method declaration contains the this adjustment.
344   if (SP->getDeclaration())
345     SP = SP->getDeclaration();
346   assert(!SP->getDeclaration() && "should use declaration as key");
347 
348   // Key the MemberFunctionRecord into the map as {SP, Class}. It won't collide
349   // with the MemberFuncIdRecord, which is keyed in as {SP, nullptr}.
350   auto I = TypeIndices.find({SP, Class});
351   if (I != TypeIndices.end())
352     return I->second;
353 
354   // Make sure complete type info for the class is emitted *after* the member
355   // function type, as the complete class type is likely to reference this
356   // member function type.
357   TypeLoweringScope S(*this);
358   const bool IsStaticMethod = (SP->getFlags() & DINode::FlagStaticMember) != 0;
359   TypeIndex TI = lowerTypeMemberFunction(
360       SP->getType(), Class, SP->getThisAdjustment(), IsStaticMethod);
361   return recordTypeIndexForDINode(SP, TI, Class);
362 }
363 
364 TypeIndex CodeViewDebug::recordTypeIndexForDINode(const DINode *Node,
365                                                   TypeIndex TI,
366                                                   const DIType *ClassTy) {
367   auto InsertResult = TypeIndices.insert({{Node, ClassTy}, TI});
368   (void)InsertResult;
369   assert(InsertResult.second && "DINode was already assigned a type index");
370   return TI;
371 }
372 
373 unsigned CodeViewDebug::getPointerSizeInBytes() {
374   return MMI->getModule()->getDataLayout().getPointerSizeInBits() / 8;
375 }
376 
377 void CodeViewDebug::recordLocalVariable(LocalVariable &&Var,
378                                         const LexicalScope *LS) {
379   if (const DILocation *InlinedAt = LS->getInlinedAt()) {
380     // This variable was inlined. Associate it with the InlineSite.
381     const DISubprogram *Inlinee = Var.DIVar->getScope()->getSubprogram();
382     InlineSite &Site = getInlineSite(InlinedAt, Inlinee);
383     Site.InlinedLocals.emplace_back(Var);
384   } else {
385     // This variable goes into the corresponding lexical scope.
386     ScopeVariables[LS].emplace_back(Var);
387   }
388 }
389 
390 static void addLocIfNotPresent(SmallVectorImpl<const DILocation *> &Locs,
391                                const DILocation *Loc) {
392   auto B = Locs.begin(), E = Locs.end();
393   if (std::find(B, E, Loc) == E)
394     Locs.push_back(Loc);
395 }
396 
397 void CodeViewDebug::maybeRecordLocation(const DebugLoc &DL,
398                                         const MachineFunction *MF) {
399   // Skip this instruction if it has the same location as the previous one.
400   if (!DL || DL == PrevInstLoc)
401     return;
402 
403   const DIScope *Scope = DL.get()->getScope();
404   if (!Scope)
405     return;
406 
407   // Skip this line if it is longer than the maximum we can record.
408   LineInfo LI(DL.getLine(), DL.getLine(), /*IsStatement=*/true);
409   if (LI.getStartLine() != DL.getLine() || LI.isAlwaysStepInto() ||
410       LI.isNeverStepInto())
411     return;
412 
413   ColumnInfo CI(DL.getCol(), /*EndColumn=*/0);
414   if (CI.getStartColumn() != DL.getCol())
415     return;
416 
417   if (!CurFn->HaveLineInfo)
418     CurFn->HaveLineInfo = true;
419   unsigned FileId = 0;
420   if (PrevInstLoc.get() && PrevInstLoc->getFile() == DL->getFile())
421     FileId = CurFn->LastFileId;
422   else
423     FileId = CurFn->LastFileId = maybeRecordFile(DL->getFile());
424   PrevInstLoc = DL;
425 
426   unsigned FuncId = CurFn->FuncId;
427   if (const DILocation *SiteLoc = DL->getInlinedAt()) {
428     const DILocation *Loc = DL.get();
429 
430     // If this location was actually inlined from somewhere else, give it the ID
431     // of the inline call site.
432     FuncId =
433         getInlineSite(SiteLoc, Loc->getScope()->getSubprogram()).SiteFuncId;
434 
435     // Ensure we have links in the tree of inline call sites.
436     bool FirstLoc = true;
437     while ((SiteLoc = Loc->getInlinedAt())) {
438       InlineSite &Site =
439           getInlineSite(SiteLoc, Loc->getScope()->getSubprogram());
440       if (!FirstLoc)
441         addLocIfNotPresent(Site.ChildSites, Loc);
442       FirstLoc = false;
443       Loc = SiteLoc;
444     }
445     addLocIfNotPresent(CurFn->ChildSites, Loc);
446   }
447 
448   OS.EmitCVLocDirective(FuncId, FileId, DL.getLine(), DL.getCol(),
449                         /*PrologueEnd=*/false, /*IsStmt=*/false,
450                         DL->getFilename(), SMLoc());
451 }
452 
453 void CodeViewDebug::emitCodeViewMagicVersion() {
454   OS.EmitValueToAlignment(4);
455   OS.AddComment("Debug section magic");
456   OS.EmitIntValue(COFF::DEBUG_SECTION_MAGIC, 4);
457 }
458 
459 void CodeViewDebug::endModule() {
460   if (!Asm || !MMI->hasDebugInfo())
461     return;
462 
463   assert(Asm != nullptr);
464 
465   // The COFF .debug$S section consists of several subsections, each starting
466   // with a 4-byte control code (e.g. 0xF1, 0xF2, etc) and then a 4-byte length
467   // of the payload followed by the payload itself.  The subsections are 4-byte
468   // aligned.
469 
470   // Use the generic .debug$S section, and make a subsection for all the inlined
471   // subprograms.
472   switchToDebugSectionForSymbol(nullptr);
473 
474   MCSymbol *CompilerInfo = beginCVSubsection(DebugSubsectionKind::Symbols);
475   emitCompilerInformation();
476   endCVSubsection(CompilerInfo);
477 
478   emitInlineeLinesSubsection();
479 
480   // Emit per-function debug information.
481   for (auto &P : FnDebugInfo)
482     if (!P.first->isDeclarationForLinker())
483       emitDebugInfoForFunction(P.first, *P.second);
484 
485   // Emit global variable debug information.
486   setCurrentSubprogram(nullptr);
487   emitDebugInfoForGlobals();
488 
489   // Emit retained types.
490   emitDebugInfoForRetainedTypes();
491 
492   // Switch back to the generic .debug$S section after potentially processing
493   // comdat symbol sections.
494   switchToDebugSectionForSymbol(nullptr);
495 
496   // Emit UDT records for any types used by global variables.
497   if (!GlobalUDTs.empty()) {
498     MCSymbol *SymbolsEnd = beginCVSubsection(DebugSubsectionKind::Symbols);
499     emitDebugInfoForUDTs(GlobalUDTs);
500     endCVSubsection(SymbolsEnd);
501   }
502 
503   // This subsection holds a file index to offset in string table table.
504   OS.AddComment("File index to string table offset subsection");
505   OS.EmitCVFileChecksumsDirective();
506 
507   // This subsection holds the string table.
508   OS.AddComment("String table");
509   OS.EmitCVStringTableDirective();
510 
511   // Emit type information and hashes last, so that any types we translate while
512   // emitting function info are included.
513   emitTypeInformation();
514 
515   if (EmitDebugGlobalHashes)
516     emitTypeGlobalHashes();
517 
518   clear();
519 }
520 
521 static void emitNullTerminatedSymbolName(MCStreamer &OS, StringRef S,
522     unsigned MaxFixedRecordLength = 0xF00) {
523   // The maximum CV record length is 0xFF00. Most of the strings we emit appear
524   // after a fixed length portion of the record. The fixed length portion should
525   // always be less than 0xF00 (3840) bytes, so truncate the string so that the
526   // overall record size is less than the maximum allowed.
527   SmallString<32> NullTerminatedString(
528       S.take_front(MaxRecordLength - MaxFixedRecordLength - 1));
529   NullTerminatedString.push_back('\0');
530   OS.EmitBytes(NullTerminatedString);
531 }
532 
533 void CodeViewDebug::emitTypeInformation() {
534   if (TypeTable.empty())
535     return;
536 
537   // Start the .debug$T or .debug$P section with 0x4.
538   OS.SwitchSection(Asm->getObjFileLowering().getCOFFDebugTypesSection());
539   emitCodeViewMagicVersion();
540 
541   SmallString<8> CommentPrefix;
542   if (OS.isVerboseAsm()) {
543     CommentPrefix += '\t';
544     CommentPrefix += Asm->MAI->getCommentString();
545     CommentPrefix += ' ';
546   }
547 
548   TypeTableCollection Table(TypeTable.records());
549   Optional<TypeIndex> B = Table.getFirst();
550   while (B) {
551     // This will fail if the record data is invalid.
552     CVType Record = Table.getType(*B);
553 
554     if (OS.isVerboseAsm()) {
555       // Emit a block comment describing the type record for readability.
556       SmallString<512> CommentBlock;
557       raw_svector_ostream CommentOS(CommentBlock);
558       ScopedPrinter SP(CommentOS);
559       SP.setPrefix(CommentPrefix);
560       TypeDumpVisitor TDV(Table, &SP, false);
561 
562       Error E = codeview::visitTypeRecord(Record, *B, TDV);
563       if (E) {
564         logAllUnhandledErrors(std::move(E), errs(), "error: ");
565         llvm_unreachable("produced malformed type record");
566       }
567       // emitRawComment will insert its own tab and comment string before
568       // the first line, so strip off our first one. It also prints its own
569       // newline.
570       OS.emitRawComment(
571           CommentOS.str().drop_front(CommentPrefix.size() - 1).rtrim());
572     }
573     OS.EmitBinaryData(Record.str_data());
574     B = Table.getNext(*B);
575   }
576 }
577 
578 void CodeViewDebug::emitTypeGlobalHashes() {
579   if (TypeTable.empty())
580     return;
581 
582   // Start the .debug$H section with the version and hash algorithm, currently
583   // hardcoded to version 0, SHA1.
584   OS.SwitchSection(Asm->getObjFileLowering().getCOFFGlobalTypeHashesSection());
585 
586   OS.EmitValueToAlignment(4);
587   OS.AddComment("Magic");
588   OS.EmitIntValue(COFF::DEBUG_HASHES_SECTION_MAGIC, 4);
589   OS.AddComment("Section Version");
590   OS.EmitIntValue(0, 2);
591   OS.AddComment("Hash Algorithm");
592   OS.EmitIntValue(uint16_t(GlobalTypeHashAlg::SHA1_8), 2);
593 
594   TypeIndex TI(TypeIndex::FirstNonSimpleIndex);
595   for (const auto &GHR : TypeTable.hashes()) {
596     if (OS.isVerboseAsm()) {
597       // Emit an EOL-comment describing which TypeIndex this hash corresponds
598       // to, as well as the stringified SHA1 hash.
599       SmallString<32> Comment;
600       raw_svector_ostream CommentOS(Comment);
601       CommentOS << formatv("{0:X+} [{1}]", TI.getIndex(), GHR);
602       OS.AddComment(Comment);
603       ++TI;
604     }
605     assert(GHR.Hash.size() == 8);
606     StringRef S(reinterpret_cast<const char *>(GHR.Hash.data()),
607                 GHR.Hash.size());
608     OS.EmitBinaryData(S);
609   }
610 }
611 
612 static SourceLanguage MapDWLangToCVLang(unsigned DWLang) {
613   switch (DWLang) {
614   case dwarf::DW_LANG_C:
615   case dwarf::DW_LANG_C89:
616   case dwarf::DW_LANG_C99:
617   case dwarf::DW_LANG_C11:
618   case dwarf::DW_LANG_ObjC:
619     return SourceLanguage::C;
620   case dwarf::DW_LANG_C_plus_plus:
621   case dwarf::DW_LANG_C_plus_plus_03:
622   case dwarf::DW_LANG_C_plus_plus_11:
623   case dwarf::DW_LANG_C_plus_plus_14:
624     return SourceLanguage::Cpp;
625   case dwarf::DW_LANG_Fortran77:
626   case dwarf::DW_LANG_Fortran90:
627   case dwarf::DW_LANG_Fortran03:
628   case dwarf::DW_LANG_Fortran08:
629     return SourceLanguage::Fortran;
630   case dwarf::DW_LANG_Pascal83:
631     return SourceLanguage::Pascal;
632   case dwarf::DW_LANG_Cobol74:
633   case dwarf::DW_LANG_Cobol85:
634     return SourceLanguage::Cobol;
635   case dwarf::DW_LANG_Java:
636     return SourceLanguage::Java;
637   case dwarf::DW_LANG_D:
638     return SourceLanguage::D;
639   default:
640     // There's no CodeView representation for this language, and CV doesn't
641     // have an "unknown" option for the language field, so we'll use MASM,
642     // as it's very low level.
643     return SourceLanguage::Masm;
644   }
645 }
646 
647 namespace {
648 struct Version {
649   int Part[4];
650 };
651 } // end anonymous namespace
652 
653 // Takes a StringRef like "clang 4.0.0.0 (other nonsense 123)" and parses out
654 // the version number.
655 static Version parseVersion(StringRef Name) {
656   Version V = {{0}};
657   int N = 0;
658   for (const char C : Name) {
659     if (isdigit(C)) {
660       V.Part[N] *= 10;
661       V.Part[N] += C - '0';
662     } else if (C == '.') {
663       ++N;
664       if (N >= 4)
665         return V;
666     } else if (N > 0)
667       return V;
668   }
669   return V;
670 }
671 
672 static CPUType mapArchToCVCPUType(Triple::ArchType Type) {
673   switch (Type) {
674   case Triple::ArchType::x86:
675     return CPUType::Pentium3;
676   case Triple::ArchType::x86_64:
677     return CPUType::X64;
678   case Triple::ArchType::thumb:
679     return CPUType::Thumb;
680   case Triple::ArchType::aarch64:
681     return CPUType::ARM64;
682   default:
683     report_fatal_error("target architecture doesn't map to a CodeView CPUType");
684   }
685 }
686 
687 void CodeViewDebug::emitCompilerInformation() {
688   MCContext &Context = MMI->getContext();
689   MCSymbol *CompilerBegin = Context.createTempSymbol(),
690            *CompilerEnd = Context.createTempSymbol();
691   OS.AddComment("Record length");
692   OS.emitAbsoluteSymbolDiff(CompilerEnd, CompilerBegin, 2);
693   OS.EmitLabel(CompilerBegin);
694   OS.AddComment("Record kind: S_COMPILE3");
695   OS.EmitIntValue(SymbolKind::S_COMPILE3, 2);
696   uint32_t Flags = 0;
697 
698   NamedMDNode *CUs = MMI->getModule()->getNamedMetadata("llvm.dbg.cu");
699   const MDNode *Node = *CUs->operands().begin();
700   const auto *CU = cast<DICompileUnit>(Node);
701 
702   // The low byte of the flags indicates the source language.
703   Flags = MapDWLangToCVLang(CU->getSourceLanguage());
704   // TODO:  Figure out which other flags need to be set.
705 
706   OS.AddComment("Flags and language");
707   OS.EmitIntValue(Flags, 4);
708 
709   OS.AddComment("CPUType");
710   CPUType CPU =
711       mapArchToCVCPUType(Triple(MMI->getModule()->getTargetTriple()).getArch());
712   OS.EmitIntValue(static_cast<uint64_t>(CPU), 2);
713 
714   StringRef CompilerVersion = CU->getProducer();
715   Version FrontVer = parseVersion(CompilerVersion);
716   OS.AddComment("Frontend version");
717   for (int N = 0; N < 4; ++N)
718     OS.EmitIntValue(FrontVer.Part[N], 2);
719 
720   // Some Microsoft tools, like Binscope, expect a backend version number of at
721   // least 8.something, so we'll coerce the LLVM version into a form that
722   // guarantees it'll be big enough without really lying about the version.
723   int Major = 1000 * LLVM_VERSION_MAJOR +
724               10 * LLVM_VERSION_MINOR +
725               LLVM_VERSION_PATCH;
726   // Clamp it for builds that use unusually large version numbers.
727   Major = std::min<int>(Major, std::numeric_limits<uint16_t>::max());
728   Version BackVer = {{ Major, 0, 0, 0 }};
729   OS.AddComment("Backend version");
730   for (int N = 0; N < 4; ++N)
731     OS.EmitIntValue(BackVer.Part[N], 2);
732 
733   OS.AddComment("Null-terminated compiler version string");
734   emitNullTerminatedSymbolName(OS, CompilerVersion);
735 
736   OS.EmitLabel(CompilerEnd);
737 }
738 
739 void CodeViewDebug::emitInlineeLinesSubsection() {
740   if (InlinedSubprograms.empty())
741     return;
742 
743   OS.AddComment("Inlinee lines subsection");
744   MCSymbol *InlineEnd = beginCVSubsection(DebugSubsectionKind::InlineeLines);
745 
746   // We emit the checksum info for files.  This is used by debuggers to
747   // determine if a pdb matches the source before loading it.  Visual Studio,
748   // for instance, will display a warning that the breakpoints are not valid if
749   // the pdb does not match the source.
750   OS.AddComment("Inlinee lines signature");
751   OS.EmitIntValue(unsigned(InlineeLinesSignature::Normal), 4);
752 
753   for (const DISubprogram *SP : InlinedSubprograms) {
754     assert(TypeIndices.count({SP, nullptr}));
755     TypeIndex InlineeIdx = TypeIndices[{SP, nullptr}];
756 
757     OS.AddBlankLine();
758     unsigned FileId = maybeRecordFile(SP->getFile());
759     OS.AddComment("Inlined function " + SP->getName() + " starts at " +
760                   SP->getFilename() + Twine(':') + Twine(SP->getLine()));
761     OS.AddBlankLine();
762     OS.AddComment("Type index of inlined function");
763     OS.EmitIntValue(InlineeIdx.getIndex(), 4);
764     OS.AddComment("Offset into filechecksum table");
765     OS.EmitCVFileChecksumOffsetDirective(FileId);
766     OS.AddComment("Starting line number");
767     OS.EmitIntValue(SP->getLine(), 4);
768   }
769 
770   endCVSubsection(InlineEnd);
771 }
772 
773 void CodeViewDebug::emitInlinedCallSite(const FunctionInfo &FI,
774                                         const DILocation *InlinedAt,
775                                         const InlineSite &Site) {
776   MCSymbol *InlineBegin = MMI->getContext().createTempSymbol(),
777            *InlineEnd = MMI->getContext().createTempSymbol();
778 
779   assert(TypeIndices.count({Site.Inlinee, nullptr}));
780   TypeIndex InlineeIdx = TypeIndices[{Site.Inlinee, nullptr}];
781 
782   // SymbolRecord
783   OS.AddComment("Record length");
784   OS.emitAbsoluteSymbolDiff(InlineEnd, InlineBegin, 2);   // RecordLength
785   OS.EmitLabel(InlineBegin);
786   OS.AddComment("Record kind: S_INLINESITE");
787   OS.EmitIntValue(SymbolKind::S_INLINESITE, 2); // RecordKind
788 
789   OS.AddComment("PtrParent");
790   OS.EmitIntValue(0, 4);
791   OS.AddComment("PtrEnd");
792   OS.EmitIntValue(0, 4);
793   OS.AddComment("Inlinee type index");
794   OS.EmitIntValue(InlineeIdx.getIndex(), 4);
795 
796   unsigned FileId = maybeRecordFile(Site.Inlinee->getFile());
797   unsigned StartLineNum = Site.Inlinee->getLine();
798 
799   OS.EmitCVInlineLinetableDirective(Site.SiteFuncId, FileId, StartLineNum,
800                                     FI.Begin, FI.End);
801 
802   OS.EmitLabel(InlineEnd);
803 
804   emitLocalVariableList(Site.InlinedLocals);
805 
806   // Recurse on child inlined call sites before closing the scope.
807   for (const DILocation *ChildSite : Site.ChildSites) {
808     auto I = FI.InlineSites.find(ChildSite);
809     assert(I != FI.InlineSites.end() &&
810            "child site not in function inline site map");
811     emitInlinedCallSite(FI, ChildSite, I->second);
812   }
813 
814   // Close the scope.
815   OS.AddComment("Record length");
816   OS.EmitIntValue(2, 2);                                  // RecordLength
817   OS.AddComment("Record kind: S_INLINESITE_END");
818   OS.EmitIntValue(SymbolKind::S_INLINESITE_END, 2); // RecordKind
819 }
820 
821 void CodeViewDebug::switchToDebugSectionForSymbol(const MCSymbol *GVSym) {
822   // If we have a symbol, it may be in a section that is COMDAT. If so, find the
823   // comdat key. A section may be comdat because of -ffunction-sections or
824   // because it is comdat in the IR.
825   MCSectionCOFF *GVSec =
826       GVSym ? dyn_cast<MCSectionCOFF>(&GVSym->getSection()) : nullptr;
827   const MCSymbol *KeySym = GVSec ? GVSec->getCOMDATSymbol() : nullptr;
828 
829   MCSectionCOFF *DebugSec = cast<MCSectionCOFF>(
830       Asm->getObjFileLowering().getCOFFDebugSymbolsSection());
831   DebugSec = OS.getContext().getAssociativeCOFFSection(DebugSec, KeySym);
832 
833   OS.SwitchSection(DebugSec);
834 
835   // Emit the magic version number if this is the first time we've switched to
836   // this section.
837   if (ComdatDebugSections.insert(DebugSec).second)
838     emitCodeViewMagicVersion();
839 }
840 
841 // Emit an S_THUNK32/S_END symbol pair for a thunk routine.
842 // The only supported thunk ordinal is currently the standard type.
843 void CodeViewDebug::emitDebugInfoForThunk(const Function *GV,
844                                           FunctionInfo &FI,
845                                           const MCSymbol *Fn) {
846   std::string FuncName = GlobalValue::dropLLVMManglingEscape(GV->getName());
847   const ThunkOrdinal ordinal = ThunkOrdinal::Standard; // Only supported kind.
848 
849   OS.AddComment("Symbol subsection for " + Twine(FuncName));
850   MCSymbol *SymbolsEnd = beginCVSubsection(DebugSubsectionKind::Symbols);
851 
852   // Emit S_THUNK32
853   MCSymbol *ThunkRecordBegin = MMI->getContext().createTempSymbol(),
854            *ThunkRecordEnd   = MMI->getContext().createTempSymbol();
855   OS.AddComment("Record length");
856   OS.emitAbsoluteSymbolDiff(ThunkRecordEnd, ThunkRecordBegin, 2);
857   OS.EmitLabel(ThunkRecordBegin);
858   OS.AddComment("Record kind: S_THUNK32");
859   OS.EmitIntValue(unsigned(SymbolKind::S_THUNK32), 2);
860   OS.AddComment("PtrParent");
861   OS.EmitIntValue(0, 4);
862   OS.AddComment("PtrEnd");
863   OS.EmitIntValue(0, 4);
864   OS.AddComment("PtrNext");
865   OS.EmitIntValue(0, 4);
866   OS.AddComment("Thunk section relative address");
867   OS.EmitCOFFSecRel32(Fn, /*Offset=*/0);
868   OS.AddComment("Thunk section index");
869   OS.EmitCOFFSectionIndex(Fn);
870   OS.AddComment("Code size");
871   OS.emitAbsoluteSymbolDiff(FI.End, Fn, 2);
872   OS.AddComment("Ordinal");
873   OS.EmitIntValue(unsigned(ordinal), 1);
874   OS.AddComment("Function name");
875   emitNullTerminatedSymbolName(OS, FuncName);
876   // Additional fields specific to the thunk ordinal would go here.
877   OS.EmitLabel(ThunkRecordEnd);
878 
879   // Local variables/inlined routines are purposely omitted here.  The point of
880   // marking this as a thunk is so Visual Studio will NOT stop in this routine.
881 
882   // Emit S_PROC_ID_END
883   const unsigned RecordLengthForSymbolEnd = 2;
884   OS.AddComment("Record length");
885   OS.EmitIntValue(RecordLengthForSymbolEnd, 2);
886   OS.AddComment("Record kind: S_PROC_ID_END");
887   OS.EmitIntValue(unsigned(SymbolKind::S_PROC_ID_END), 2);
888 
889   endCVSubsection(SymbolsEnd);
890 }
891 
892 void CodeViewDebug::emitDebugInfoForFunction(const Function *GV,
893                                              FunctionInfo &FI) {
894   // For each function there is a separate subsection which holds the PC to
895   // file:line table.
896   const MCSymbol *Fn = Asm->getSymbol(GV);
897   assert(Fn);
898 
899   // Switch to the to a comdat section, if appropriate.
900   switchToDebugSectionForSymbol(Fn);
901 
902   std::string FuncName;
903   auto *SP = GV->getSubprogram();
904   assert(SP);
905   setCurrentSubprogram(SP);
906 
907   if (SP->isThunk()) {
908     emitDebugInfoForThunk(GV, FI, Fn);
909     return;
910   }
911 
912   // If we have a display name, build the fully qualified name by walking the
913   // chain of scopes.
914   if (!SP->getName().empty())
915     FuncName =
916         getFullyQualifiedName(SP->getScope().resolve(), SP->getName());
917 
918   // If our DISubprogram name is empty, use the mangled name.
919   if (FuncName.empty())
920     FuncName = GlobalValue::dropLLVMManglingEscape(GV->getName());
921 
922   // Emit FPO data, but only on 32-bit x86. No other platforms use it.
923   if (Triple(MMI->getModule()->getTargetTriple()).getArch() == Triple::x86)
924     OS.EmitCVFPOData(Fn);
925 
926   // Emit a symbol subsection, required by VS2012+ to find function boundaries.
927   OS.AddComment("Symbol subsection for " + Twine(FuncName));
928   MCSymbol *SymbolsEnd = beginCVSubsection(DebugSubsectionKind::Symbols);
929   {
930     MCSymbol *ProcRecordBegin = MMI->getContext().createTempSymbol(),
931              *ProcRecordEnd = MMI->getContext().createTempSymbol();
932     OS.AddComment("Record length");
933     OS.emitAbsoluteSymbolDiff(ProcRecordEnd, ProcRecordBegin, 2);
934     OS.EmitLabel(ProcRecordBegin);
935 
936     if (GV->hasLocalLinkage()) {
937       OS.AddComment("Record kind: S_LPROC32_ID");
938       OS.EmitIntValue(unsigned(SymbolKind::S_LPROC32_ID), 2);
939     } else {
940       OS.AddComment("Record kind: S_GPROC32_ID");
941       OS.EmitIntValue(unsigned(SymbolKind::S_GPROC32_ID), 2);
942     }
943 
944     // These fields are filled in by tools like CVPACK which run after the fact.
945     OS.AddComment("PtrParent");
946     OS.EmitIntValue(0, 4);
947     OS.AddComment("PtrEnd");
948     OS.EmitIntValue(0, 4);
949     OS.AddComment("PtrNext");
950     OS.EmitIntValue(0, 4);
951     // This is the important bit that tells the debugger where the function
952     // code is located and what's its size:
953     OS.AddComment("Code size");
954     OS.emitAbsoluteSymbolDiff(FI.End, Fn, 4);
955     OS.AddComment("Offset after prologue");
956     OS.EmitIntValue(0, 4);
957     OS.AddComment("Offset before epilogue");
958     OS.EmitIntValue(0, 4);
959     OS.AddComment("Function type index");
960     OS.EmitIntValue(getFuncIdForSubprogram(GV->getSubprogram()).getIndex(), 4);
961     OS.AddComment("Function section relative address");
962     OS.EmitCOFFSecRel32(Fn, /*Offset=*/0);
963     OS.AddComment("Function section index");
964     OS.EmitCOFFSectionIndex(Fn);
965     OS.AddComment("Flags");
966     OS.EmitIntValue(0, 1);
967     // Emit the function display name as a null-terminated string.
968     OS.AddComment("Function name");
969     // Truncate the name so we won't overflow the record length field.
970     emitNullTerminatedSymbolName(OS, FuncName);
971     OS.EmitLabel(ProcRecordEnd);
972 
973     emitLocalVariableList(FI.Locals);
974     emitLexicalBlockList(FI.ChildBlocks, FI);
975 
976     // Emit inlined call site information. Only emit functions inlined directly
977     // into the parent function. We'll emit the other sites recursively as part
978     // of their parent inline site.
979     for (const DILocation *InlinedAt : FI.ChildSites) {
980       auto I = FI.InlineSites.find(InlinedAt);
981       assert(I != FI.InlineSites.end() &&
982              "child site not in function inline site map");
983       emitInlinedCallSite(FI, InlinedAt, I->second);
984     }
985 
986     for (auto Annot : FI.Annotations) {
987       MCSymbol *Label = Annot.first;
988       MDTuple *Strs = cast<MDTuple>(Annot.second);
989       MCSymbol *AnnotBegin = MMI->getContext().createTempSymbol(),
990                *AnnotEnd = MMI->getContext().createTempSymbol();
991       OS.AddComment("Record length");
992       OS.emitAbsoluteSymbolDiff(AnnotEnd, AnnotBegin, 2);
993       OS.EmitLabel(AnnotBegin);
994       OS.AddComment("Record kind: S_ANNOTATION");
995       OS.EmitIntValue(SymbolKind::S_ANNOTATION, 2);
996       OS.EmitCOFFSecRel32(Label, /*Offset=*/0);
997       // FIXME: Make sure we don't overflow the max record size.
998       OS.EmitCOFFSectionIndex(Label);
999       OS.EmitIntValue(Strs->getNumOperands(), 2);
1000       for (Metadata *MD : Strs->operands()) {
1001         // MDStrings are null terminated, so we can do EmitBytes and get the
1002         // nice .asciz directive.
1003         StringRef Str = cast<MDString>(MD)->getString();
1004         assert(Str.data()[Str.size()] == '\0' && "non-nullterminated MDString");
1005         OS.EmitBytes(StringRef(Str.data(), Str.size() + 1));
1006       }
1007       OS.EmitLabel(AnnotEnd);
1008     }
1009 
1010     if (SP != nullptr)
1011       emitDebugInfoForUDTs(LocalUDTs);
1012 
1013     // We're done with this function.
1014     OS.AddComment("Record length");
1015     OS.EmitIntValue(0x0002, 2);
1016     OS.AddComment("Record kind: S_PROC_ID_END");
1017     OS.EmitIntValue(unsigned(SymbolKind::S_PROC_ID_END), 2);
1018   }
1019   endCVSubsection(SymbolsEnd);
1020 
1021   // We have an assembler directive that takes care of the whole line table.
1022   OS.EmitCVLinetableDirective(FI.FuncId, Fn, FI.End);
1023 }
1024 
1025 CodeViewDebug::LocalVarDefRange
1026 CodeViewDebug::createDefRangeMem(uint16_t CVRegister, int Offset) {
1027   LocalVarDefRange DR;
1028   DR.InMemory = -1;
1029   DR.DataOffset = Offset;
1030   assert(DR.DataOffset == Offset && "truncation");
1031   DR.IsSubfield = 0;
1032   DR.StructOffset = 0;
1033   DR.CVRegister = CVRegister;
1034   return DR;
1035 }
1036 
1037 void CodeViewDebug::collectVariableInfoFromMFTable(
1038     DenseSet<InlinedEntity> &Processed) {
1039   const MachineFunction &MF = *Asm->MF;
1040   const TargetSubtargetInfo &TSI = MF.getSubtarget();
1041   const TargetFrameLowering *TFI = TSI.getFrameLowering();
1042   const TargetRegisterInfo *TRI = TSI.getRegisterInfo();
1043 
1044   for (const MachineFunction::VariableDbgInfo &VI : MF.getVariableDbgInfo()) {
1045     if (!VI.Var)
1046       continue;
1047     assert(VI.Var->isValidLocationForIntrinsic(VI.Loc) &&
1048            "Expected inlined-at fields to agree");
1049 
1050     Processed.insert(InlinedEntity(VI.Var, VI.Loc->getInlinedAt()));
1051     LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc);
1052 
1053     // If variable scope is not found then skip this variable.
1054     if (!Scope)
1055       continue;
1056 
1057     // If the variable has an attached offset expression, extract it.
1058     // FIXME: Try to handle DW_OP_deref as well.
1059     int64_t ExprOffset = 0;
1060     if (VI.Expr)
1061       if (!VI.Expr->extractIfOffset(ExprOffset))
1062         continue;
1063 
1064     // Get the frame register used and the offset.
1065     unsigned FrameReg = 0;
1066     int FrameOffset = TFI->getFrameIndexReference(*Asm->MF, VI.Slot, FrameReg);
1067     uint16_t CVReg = TRI->getCodeViewRegNum(FrameReg);
1068 
1069     // Calculate the label ranges.
1070     LocalVarDefRange DefRange =
1071         createDefRangeMem(CVReg, FrameOffset + ExprOffset);
1072     for (const InsnRange &Range : Scope->getRanges()) {
1073       const MCSymbol *Begin = getLabelBeforeInsn(Range.first);
1074       const MCSymbol *End = getLabelAfterInsn(Range.second);
1075       End = End ? End : Asm->getFunctionEnd();
1076       DefRange.Ranges.emplace_back(Begin, End);
1077     }
1078 
1079     LocalVariable Var;
1080     Var.DIVar = VI.Var;
1081     Var.DefRanges.emplace_back(std::move(DefRange));
1082     recordLocalVariable(std::move(Var), Scope);
1083   }
1084 }
1085 
1086 static bool canUseReferenceType(const DbgVariableLocation &Loc) {
1087   return !Loc.LoadChain.empty() && Loc.LoadChain.back() == 0;
1088 }
1089 
1090 static bool needsReferenceType(const DbgVariableLocation &Loc) {
1091   return Loc.LoadChain.size() == 2 && Loc.LoadChain.back() == 0;
1092 }
1093 
1094 void CodeViewDebug::calculateRanges(
1095     LocalVariable &Var, const DbgValueHistoryMap::InstrRanges &Ranges) {
1096   const TargetRegisterInfo *TRI = Asm->MF->getSubtarget().getRegisterInfo();
1097 
1098   // Calculate the definition ranges.
1099   for (auto I = Ranges.begin(), E = Ranges.end(); I != E; ++I) {
1100     const InsnRange &Range = *I;
1101     const MachineInstr *DVInst = Range.first;
1102     assert(DVInst->isDebugValue() && "Invalid History entry");
1103     // FIXME: Find a way to represent constant variables, since they are
1104     // relatively common.
1105     Optional<DbgVariableLocation> Location =
1106         DbgVariableLocation::extractFromMachineInstruction(*DVInst);
1107     if (!Location)
1108       continue;
1109 
1110     // CodeView can only express variables in register and variables in memory
1111     // at a constant offset from a register. However, for variables passed
1112     // indirectly by pointer, it is common for that pointer to be spilled to a
1113     // stack location. For the special case of one offseted load followed by a
1114     // zero offset load (a pointer spilled to the stack), we change the type of
1115     // the local variable from a value type to a reference type. This tricks the
1116     // debugger into doing the load for us.
1117     if (Var.UseReferenceType) {
1118       // We're using a reference type. Drop the last zero offset load.
1119       if (canUseReferenceType(*Location))
1120         Location->LoadChain.pop_back();
1121       else
1122         continue;
1123     } else if (needsReferenceType(*Location)) {
1124       // This location can't be expressed without switching to a reference type.
1125       // Start over using that.
1126       Var.UseReferenceType = true;
1127       Var.DefRanges.clear();
1128       calculateRanges(Var, Ranges);
1129       return;
1130     }
1131 
1132     // We can only handle a register or an offseted load of a register.
1133     if (Location->Register == 0 || Location->LoadChain.size() > 1)
1134       continue;
1135     {
1136       LocalVarDefRange DR;
1137       DR.CVRegister = TRI->getCodeViewRegNum(Location->Register);
1138       DR.InMemory = !Location->LoadChain.empty();
1139       DR.DataOffset =
1140           !Location->LoadChain.empty() ? Location->LoadChain.back() : 0;
1141       if (Location->FragmentInfo) {
1142         DR.IsSubfield = true;
1143         DR.StructOffset = Location->FragmentInfo->OffsetInBits / 8;
1144       } else {
1145         DR.IsSubfield = false;
1146         DR.StructOffset = 0;
1147       }
1148 
1149       if (Var.DefRanges.empty() ||
1150           Var.DefRanges.back().isDifferentLocation(DR)) {
1151         Var.DefRanges.emplace_back(std::move(DR));
1152       }
1153     }
1154 
1155     // Compute the label range.
1156     const MCSymbol *Begin = getLabelBeforeInsn(Range.first);
1157     const MCSymbol *End = getLabelAfterInsn(Range.second);
1158     if (!End) {
1159       // This range is valid until the next overlapping bitpiece. In the
1160       // common case, ranges will not be bitpieces, so they will overlap.
1161       auto J = std::next(I);
1162       const DIExpression *DIExpr = DVInst->getDebugExpression();
1163       while (J != E &&
1164              !DIExpr->fragmentsOverlap(J->first->getDebugExpression()))
1165         ++J;
1166       if (J != E)
1167         End = getLabelBeforeInsn(J->first);
1168       else
1169         End = Asm->getFunctionEnd();
1170     }
1171 
1172     // If the last range end is our begin, just extend the last range.
1173     // Otherwise make a new range.
1174     SmallVectorImpl<std::pair<const MCSymbol *, const MCSymbol *>> &R =
1175         Var.DefRanges.back().Ranges;
1176     if (!R.empty() && R.back().second == Begin)
1177       R.back().second = End;
1178     else
1179       R.emplace_back(Begin, End);
1180 
1181     // FIXME: Do more range combining.
1182   }
1183 }
1184 
1185 void CodeViewDebug::collectVariableInfo(const DISubprogram *SP) {
1186   DenseSet<InlinedEntity> Processed;
1187   // Grab the variable info that was squirreled away in the MMI side-table.
1188   collectVariableInfoFromMFTable(Processed);
1189 
1190   for (const auto &I : DbgValues) {
1191     InlinedEntity IV = I.first;
1192     if (Processed.count(IV))
1193       continue;
1194     const DILocalVariable *DIVar = cast<DILocalVariable>(IV.first);
1195     const DILocation *InlinedAt = IV.second;
1196 
1197     // Instruction ranges, specifying where IV is accessible.
1198     const auto &Ranges = I.second;
1199 
1200     LexicalScope *Scope = nullptr;
1201     if (InlinedAt)
1202       Scope = LScopes.findInlinedScope(DIVar->getScope(), InlinedAt);
1203     else
1204       Scope = LScopes.findLexicalScope(DIVar->getScope());
1205     // If variable scope is not found then skip this variable.
1206     if (!Scope)
1207       continue;
1208 
1209     LocalVariable Var;
1210     Var.DIVar = DIVar;
1211 
1212     calculateRanges(Var, Ranges);
1213     recordLocalVariable(std::move(Var), Scope);
1214   }
1215 }
1216 
1217 void CodeViewDebug::beginFunctionImpl(const MachineFunction *MF) {
1218   const Function &GV = MF->getFunction();
1219   auto Insertion = FnDebugInfo.insert({&GV, llvm::make_unique<FunctionInfo>()});
1220   assert(Insertion.second && "function already has info");
1221   CurFn = Insertion.first->second.get();
1222   CurFn->FuncId = NextFuncId++;
1223   CurFn->Begin = Asm->getFunctionBegin();
1224 
1225   OS.EmitCVFuncIdDirective(CurFn->FuncId);
1226 
1227   // Find the end of the function prolog.  First known non-DBG_VALUE and
1228   // non-frame setup location marks the beginning of the function body.
1229   // FIXME: is there a simpler a way to do this? Can we just search
1230   // for the first instruction of the function, not the last of the prolog?
1231   DebugLoc PrologEndLoc;
1232   bool EmptyPrologue = true;
1233   for (const auto &MBB : *MF) {
1234     for (const auto &MI : MBB) {
1235       if (!MI.isMetaInstruction() && !MI.getFlag(MachineInstr::FrameSetup) &&
1236           MI.getDebugLoc()) {
1237         PrologEndLoc = MI.getDebugLoc();
1238         break;
1239       } else if (!MI.isMetaInstruction()) {
1240         EmptyPrologue = false;
1241       }
1242     }
1243   }
1244 
1245   // Record beginning of function if we have a non-empty prologue.
1246   if (PrologEndLoc && !EmptyPrologue) {
1247     DebugLoc FnStartDL = PrologEndLoc.getFnDebugLoc();
1248     maybeRecordLocation(FnStartDL, MF);
1249   }
1250 }
1251 
1252 static bool shouldEmitUdt(const DIType *T) {
1253   if (!T)
1254     return false;
1255 
1256   // MSVC does not emit UDTs for typedefs that are scoped to classes.
1257   if (T->getTag() == dwarf::DW_TAG_typedef) {
1258     if (DIScope *Scope = T->getScope().resolve()) {
1259       switch (Scope->getTag()) {
1260       case dwarf::DW_TAG_structure_type:
1261       case dwarf::DW_TAG_class_type:
1262       case dwarf::DW_TAG_union_type:
1263         return false;
1264       }
1265     }
1266   }
1267 
1268   while (true) {
1269     if (!T || T->isForwardDecl())
1270       return false;
1271 
1272     const DIDerivedType *DT = dyn_cast<DIDerivedType>(T);
1273     if (!DT)
1274       return true;
1275     T = DT->getBaseType().resolve();
1276   }
1277   return true;
1278 }
1279 
1280 void CodeViewDebug::addToUDTs(const DIType *Ty) {
1281   // Don't record empty UDTs.
1282   if (Ty->getName().empty())
1283     return;
1284   if (!shouldEmitUdt(Ty))
1285     return;
1286 
1287   SmallVector<StringRef, 5> QualifiedNameComponents;
1288   const DISubprogram *ClosestSubprogram = getQualifiedNameComponents(
1289       Ty->getScope().resolve(), QualifiedNameComponents);
1290 
1291   std::string FullyQualifiedName =
1292       getQualifiedName(QualifiedNameComponents, getPrettyScopeName(Ty));
1293 
1294   if (ClosestSubprogram == nullptr) {
1295     GlobalUDTs.emplace_back(std::move(FullyQualifiedName), Ty);
1296   } else if (ClosestSubprogram == CurrentSubprogram) {
1297     LocalUDTs.emplace_back(std::move(FullyQualifiedName), Ty);
1298   }
1299 
1300   // TODO: What if the ClosestSubprogram is neither null or the current
1301   // subprogram?  Currently, the UDT just gets dropped on the floor.
1302   //
1303   // The current behavior is not desirable.  To get maximal fidelity, we would
1304   // need to perform all type translation before beginning emission of .debug$S
1305   // and then make LocalUDTs a member of FunctionInfo
1306 }
1307 
1308 TypeIndex CodeViewDebug::lowerType(const DIType *Ty, const DIType *ClassTy) {
1309   // Generic dispatch for lowering an unknown type.
1310   switch (Ty->getTag()) {
1311   case dwarf::DW_TAG_array_type:
1312     return lowerTypeArray(cast<DICompositeType>(Ty));
1313   case dwarf::DW_TAG_typedef:
1314     return lowerTypeAlias(cast<DIDerivedType>(Ty));
1315   case dwarf::DW_TAG_base_type:
1316     return lowerTypeBasic(cast<DIBasicType>(Ty));
1317   case dwarf::DW_TAG_pointer_type:
1318     if (cast<DIDerivedType>(Ty)->getName() == "__vtbl_ptr_type")
1319       return lowerTypeVFTableShape(cast<DIDerivedType>(Ty));
1320     LLVM_FALLTHROUGH;
1321   case dwarf::DW_TAG_reference_type:
1322   case dwarf::DW_TAG_rvalue_reference_type:
1323     return lowerTypePointer(cast<DIDerivedType>(Ty));
1324   case dwarf::DW_TAG_ptr_to_member_type:
1325     return lowerTypeMemberPointer(cast<DIDerivedType>(Ty));
1326   case dwarf::DW_TAG_restrict_type:
1327   case dwarf::DW_TAG_const_type:
1328   case dwarf::DW_TAG_volatile_type:
1329   // TODO: add support for DW_TAG_atomic_type here
1330     return lowerTypeModifier(cast<DIDerivedType>(Ty));
1331   case dwarf::DW_TAG_subroutine_type:
1332     if (ClassTy) {
1333       // The member function type of a member function pointer has no
1334       // ThisAdjustment.
1335       return lowerTypeMemberFunction(cast<DISubroutineType>(Ty), ClassTy,
1336                                      /*ThisAdjustment=*/0,
1337                                      /*IsStaticMethod=*/false);
1338     }
1339     return lowerTypeFunction(cast<DISubroutineType>(Ty));
1340   case dwarf::DW_TAG_enumeration_type:
1341     return lowerTypeEnum(cast<DICompositeType>(Ty));
1342   case dwarf::DW_TAG_class_type:
1343   case dwarf::DW_TAG_structure_type:
1344     return lowerTypeClass(cast<DICompositeType>(Ty));
1345   case dwarf::DW_TAG_union_type:
1346     return lowerTypeUnion(cast<DICompositeType>(Ty));
1347   case dwarf::DW_TAG_unspecified_type:
1348     return TypeIndex::None();
1349   default:
1350     // Use the null type index.
1351     return TypeIndex();
1352   }
1353 }
1354 
1355 TypeIndex CodeViewDebug::lowerTypeAlias(const DIDerivedType *Ty) {
1356   DITypeRef UnderlyingTypeRef = Ty->getBaseType();
1357   TypeIndex UnderlyingTypeIndex = getTypeIndex(UnderlyingTypeRef);
1358   StringRef TypeName = Ty->getName();
1359 
1360   addToUDTs(Ty);
1361 
1362   if (UnderlyingTypeIndex == TypeIndex(SimpleTypeKind::Int32Long) &&
1363       TypeName == "HRESULT")
1364     return TypeIndex(SimpleTypeKind::HResult);
1365   if (UnderlyingTypeIndex == TypeIndex(SimpleTypeKind::UInt16Short) &&
1366       TypeName == "wchar_t")
1367     return TypeIndex(SimpleTypeKind::WideCharacter);
1368 
1369   return UnderlyingTypeIndex;
1370 }
1371 
1372 TypeIndex CodeViewDebug::lowerTypeArray(const DICompositeType *Ty) {
1373   DITypeRef ElementTypeRef = Ty->getBaseType();
1374   TypeIndex ElementTypeIndex = getTypeIndex(ElementTypeRef);
1375   // IndexType is size_t, which depends on the bitness of the target.
1376   TypeIndex IndexType = getPointerSizeInBytes() == 8
1377                             ? TypeIndex(SimpleTypeKind::UInt64Quad)
1378                             : TypeIndex(SimpleTypeKind::UInt32Long);
1379 
1380   uint64_t ElementSize = getBaseTypeSize(ElementTypeRef) / 8;
1381 
1382   // Add subranges to array type.
1383   DINodeArray Elements = Ty->getElements();
1384   for (int i = Elements.size() - 1; i >= 0; --i) {
1385     const DINode *Element = Elements[i];
1386     assert(Element->getTag() == dwarf::DW_TAG_subrange_type);
1387 
1388     const DISubrange *Subrange = cast<DISubrange>(Element);
1389     assert(Subrange->getLowerBound() == 0 &&
1390            "codeview doesn't support subranges with lower bounds");
1391     int64_t Count = -1;
1392     if (auto *CI = Subrange->getCount().dyn_cast<ConstantInt*>())
1393       Count = CI->getSExtValue();
1394 
1395     // Forward declarations of arrays without a size and VLAs use a count of -1.
1396     // Emit a count of zero in these cases to match what MSVC does for arrays
1397     // without a size. MSVC doesn't support VLAs, so it's not clear what we
1398     // should do for them even if we could distinguish them.
1399     if (Count == -1)
1400       Count = 0;
1401 
1402     // Update the element size and element type index for subsequent subranges.
1403     ElementSize *= Count;
1404 
1405     // If this is the outermost array, use the size from the array. It will be
1406     // more accurate if we had a VLA or an incomplete element type size.
1407     uint64_t ArraySize =
1408         (i == 0 && ElementSize == 0) ? Ty->getSizeInBits() / 8 : ElementSize;
1409 
1410     StringRef Name = (i == 0) ? Ty->getName() : "";
1411     ArrayRecord AR(ElementTypeIndex, IndexType, ArraySize, Name);
1412     ElementTypeIndex = TypeTable.writeLeafType(AR);
1413   }
1414 
1415   return ElementTypeIndex;
1416 }
1417 
1418 TypeIndex CodeViewDebug::lowerTypeBasic(const DIBasicType *Ty) {
1419   TypeIndex Index;
1420   dwarf::TypeKind Kind;
1421   uint32_t ByteSize;
1422 
1423   Kind = static_cast<dwarf::TypeKind>(Ty->getEncoding());
1424   ByteSize = Ty->getSizeInBits() / 8;
1425 
1426   SimpleTypeKind STK = SimpleTypeKind::None;
1427   switch (Kind) {
1428   case dwarf::DW_ATE_address:
1429     // FIXME: Translate
1430     break;
1431   case dwarf::DW_ATE_boolean:
1432     switch (ByteSize) {
1433     case 1:  STK = SimpleTypeKind::Boolean8;   break;
1434     case 2:  STK = SimpleTypeKind::Boolean16;  break;
1435     case 4:  STK = SimpleTypeKind::Boolean32;  break;
1436     case 8:  STK = SimpleTypeKind::Boolean64;  break;
1437     case 16: STK = SimpleTypeKind::Boolean128; break;
1438     }
1439     break;
1440   case dwarf::DW_ATE_complex_float:
1441     switch (ByteSize) {
1442     case 2:  STK = SimpleTypeKind::Complex16;  break;
1443     case 4:  STK = SimpleTypeKind::Complex32;  break;
1444     case 8:  STK = SimpleTypeKind::Complex64;  break;
1445     case 10: STK = SimpleTypeKind::Complex80;  break;
1446     case 16: STK = SimpleTypeKind::Complex128; break;
1447     }
1448     break;
1449   case dwarf::DW_ATE_float:
1450     switch (ByteSize) {
1451     case 2:  STK = SimpleTypeKind::Float16;  break;
1452     case 4:  STK = SimpleTypeKind::Float32;  break;
1453     case 6:  STK = SimpleTypeKind::Float48;  break;
1454     case 8:  STK = SimpleTypeKind::Float64;  break;
1455     case 10: STK = SimpleTypeKind::Float80;  break;
1456     case 16: STK = SimpleTypeKind::Float128; break;
1457     }
1458     break;
1459   case dwarf::DW_ATE_signed:
1460     switch (ByteSize) {
1461     case 1:  STK = SimpleTypeKind::SignedCharacter; break;
1462     case 2:  STK = SimpleTypeKind::Int16Short;      break;
1463     case 4:  STK = SimpleTypeKind::Int32;           break;
1464     case 8:  STK = SimpleTypeKind::Int64Quad;       break;
1465     case 16: STK = SimpleTypeKind::Int128Oct;       break;
1466     }
1467     break;
1468   case dwarf::DW_ATE_unsigned:
1469     switch (ByteSize) {
1470     case 1:  STK = SimpleTypeKind::UnsignedCharacter; break;
1471     case 2:  STK = SimpleTypeKind::UInt16Short;       break;
1472     case 4:  STK = SimpleTypeKind::UInt32;            break;
1473     case 8:  STK = SimpleTypeKind::UInt64Quad;        break;
1474     case 16: STK = SimpleTypeKind::UInt128Oct;        break;
1475     }
1476     break;
1477   case dwarf::DW_ATE_UTF:
1478     switch (ByteSize) {
1479     case 2: STK = SimpleTypeKind::Character16; break;
1480     case 4: STK = SimpleTypeKind::Character32; break;
1481     }
1482     break;
1483   case dwarf::DW_ATE_signed_char:
1484     if (ByteSize == 1)
1485       STK = SimpleTypeKind::SignedCharacter;
1486     break;
1487   case dwarf::DW_ATE_unsigned_char:
1488     if (ByteSize == 1)
1489       STK = SimpleTypeKind::UnsignedCharacter;
1490     break;
1491   default:
1492     break;
1493   }
1494 
1495   // Apply some fixups based on the source-level type name.
1496   if (STK == SimpleTypeKind::Int32 && Ty->getName() == "long int")
1497     STK = SimpleTypeKind::Int32Long;
1498   if (STK == SimpleTypeKind::UInt32 && Ty->getName() == "long unsigned int")
1499     STK = SimpleTypeKind::UInt32Long;
1500   if (STK == SimpleTypeKind::UInt16Short &&
1501       (Ty->getName() == "wchar_t" || Ty->getName() == "__wchar_t"))
1502     STK = SimpleTypeKind::WideCharacter;
1503   if ((STK == SimpleTypeKind::SignedCharacter ||
1504        STK == SimpleTypeKind::UnsignedCharacter) &&
1505       Ty->getName() == "char")
1506     STK = SimpleTypeKind::NarrowCharacter;
1507 
1508   return TypeIndex(STK);
1509 }
1510 
1511 TypeIndex CodeViewDebug::lowerTypePointer(const DIDerivedType *Ty,
1512                                           PointerOptions PO) {
1513   TypeIndex PointeeTI = getTypeIndex(Ty->getBaseType());
1514 
1515   // Pointers to simple types without any options can use SimpleTypeMode, rather
1516   // than having a dedicated pointer type record.
1517   if (PointeeTI.isSimple() && PO == PointerOptions::None &&
1518       PointeeTI.getSimpleMode() == SimpleTypeMode::Direct &&
1519       Ty->getTag() == dwarf::DW_TAG_pointer_type) {
1520     SimpleTypeMode Mode = Ty->getSizeInBits() == 64
1521                               ? SimpleTypeMode::NearPointer64
1522                               : SimpleTypeMode::NearPointer32;
1523     return TypeIndex(PointeeTI.getSimpleKind(), Mode);
1524   }
1525 
1526   PointerKind PK =
1527       Ty->getSizeInBits() == 64 ? PointerKind::Near64 : PointerKind::Near32;
1528   PointerMode PM = PointerMode::Pointer;
1529   switch (Ty->getTag()) {
1530   default: llvm_unreachable("not a pointer tag type");
1531   case dwarf::DW_TAG_pointer_type:
1532     PM = PointerMode::Pointer;
1533     break;
1534   case dwarf::DW_TAG_reference_type:
1535     PM = PointerMode::LValueReference;
1536     break;
1537   case dwarf::DW_TAG_rvalue_reference_type:
1538     PM = PointerMode::RValueReference;
1539     break;
1540   }
1541 
1542   PointerRecord PR(PointeeTI, PK, PM, PO, Ty->getSizeInBits() / 8);
1543   return TypeTable.writeLeafType(PR);
1544 }
1545 
1546 static PointerToMemberRepresentation
1547 translatePtrToMemberRep(unsigned SizeInBytes, bool IsPMF, unsigned Flags) {
1548   // SizeInBytes being zero generally implies that the member pointer type was
1549   // incomplete, which can happen if it is part of a function prototype. In this
1550   // case, use the unknown model instead of the general model.
1551   if (IsPMF) {
1552     switch (Flags & DINode::FlagPtrToMemberRep) {
1553     case 0:
1554       return SizeInBytes == 0 ? PointerToMemberRepresentation::Unknown
1555                               : PointerToMemberRepresentation::GeneralFunction;
1556     case DINode::FlagSingleInheritance:
1557       return PointerToMemberRepresentation::SingleInheritanceFunction;
1558     case DINode::FlagMultipleInheritance:
1559       return PointerToMemberRepresentation::MultipleInheritanceFunction;
1560     case DINode::FlagVirtualInheritance:
1561       return PointerToMemberRepresentation::VirtualInheritanceFunction;
1562     }
1563   } else {
1564     switch (Flags & DINode::FlagPtrToMemberRep) {
1565     case 0:
1566       return SizeInBytes == 0 ? PointerToMemberRepresentation::Unknown
1567                               : PointerToMemberRepresentation::GeneralData;
1568     case DINode::FlagSingleInheritance:
1569       return PointerToMemberRepresentation::SingleInheritanceData;
1570     case DINode::FlagMultipleInheritance:
1571       return PointerToMemberRepresentation::MultipleInheritanceData;
1572     case DINode::FlagVirtualInheritance:
1573       return PointerToMemberRepresentation::VirtualInheritanceData;
1574     }
1575   }
1576   llvm_unreachable("invalid ptr to member representation");
1577 }
1578 
1579 TypeIndex CodeViewDebug::lowerTypeMemberPointer(const DIDerivedType *Ty,
1580                                                 PointerOptions PO) {
1581   assert(Ty->getTag() == dwarf::DW_TAG_ptr_to_member_type);
1582   TypeIndex ClassTI = getTypeIndex(Ty->getClassType());
1583   TypeIndex PointeeTI = getTypeIndex(Ty->getBaseType(), Ty->getClassType());
1584   PointerKind PK = getPointerSizeInBytes() == 8 ? PointerKind::Near64
1585                                                 : PointerKind::Near32;
1586   bool IsPMF = isa<DISubroutineType>(Ty->getBaseType());
1587   PointerMode PM = IsPMF ? PointerMode::PointerToMemberFunction
1588                          : PointerMode::PointerToDataMember;
1589 
1590   assert(Ty->getSizeInBits() / 8 <= 0xff && "pointer size too big");
1591   uint8_t SizeInBytes = Ty->getSizeInBits() / 8;
1592   MemberPointerInfo MPI(
1593       ClassTI, translatePtrToMemberRep(SizeInBytes, IsPMF, Ty->getFlags()));
1594   PointerRecord PR(PointeeTI, PK, PM, PO, SizeInBytes, MPI);
1595   return TypeTable.writeLeafType(PR);
1596 }
1597 
1598 /// Given a DWARF calling convention, get the CodeView equivalent. If we don't
1599 /// have a translation, use the NearC convention.
1600 static CallingConvention dwarfCCToCodeView(unsigned DwarfCC) {
1601   switch (DwarfCC) {
1602   case dwarf::DW_CC_normal:             return CallingConvention::NearC;
1603   case dwarf::DW_CC_BORLAND_msfastcall: return CallingConvention::NearFast;
1604   case dwarf::DW_CC_BORLAND_thiscall:   return CallingConvention::ThisCall;
1605   case dwarf::DW_CC_BORLAND_stdcall:    return CallingConvention::NearStdCall;
1606   case dwarf::DW_CC_BORLAND_pascal:     return CallingConvention::NearPascal;
1607   case dwarf::DW_CC_LLVM_vectorcall:    return CallingConvention::NearVector;
1608   }
1609   return CallingConvention::NearC;
1610 }
1611 
1612 TypeIndex CodeViewDebug::lowerTypeModifier(const DIDerivedType *Ty) {
1613   ModifierOptions Mods = ModifierOptions::None;
1614   PointerOptions PO = PointerOptions::None;
1615   bool IsModifier = true;
1616   const DIType *BaseTy = Ty;
1617   while (IsModifier && BaseTy) {
1618     // FIXME: Need to add DWARF tags for __unaligned and _Atomic
1619     switch (BaseTy->getTag()) {
1620     case dwarf::DW_TAG_const_type:
1621       Mods |= ModifierOptions::Const;
1622       PO |= PointerOptions::Const;
1623       break;
1624     case dwarf::DW_TAG_volatile_type:
1625       Mods |= ModifierOptions::Volatile;
1626       PO |= PointerOptions::Volatile;
1627       break;
1628     case dwarf::DW_TAG_restrict_type:
1629       // Only pointer types be marked with __restrict. There is no known flag
1630       // for __restrict in LF_MODIFIER records.
1631       PO |= PointerOptions::Restrict;
1632       break;
1633     default:
1634       IsModifier = false;
1635       break;
1636     }
1637     if (IsModifier)
1638       BaseTy = cast<DIDerivedType>(BaseTy)->getBaseType().resolve();
1639   }
1640 
1641   // Check if the inner type will use an LF_POINTER record. If so, the
1642   // qualifiers will go in the LF_POINTER record. This comes up for types like
1643   // 'int *const' and 'int *__restrict', not the more common cases like 'const
1644   // char *'.
1645   if (BaseTy) {
1646     switch (BaseTy->getTag()) {
1647     case dwarf::DW_TAG_pointer_type:
1648     case dwarf::DW_TAG_reference_type:
1649     case dwarf::DW_TAG_rvalue_reference_type:
1650       return lowerTypePointer(cast<DIDerivedType>(BaseTy), PO);
1651     case dwarf::DW_TAG_ptr_to_member_type:
1652       return lowerTypeMemberPointer(cast<DIDerivedType>(BaseTy), PO);
1653     default:
1654       break;
1655     }
1656   }
1657 
1658   TypeIndex ModifiedTI = getTypeIndex(BaseTy);
1659 
1660   // Return the base type index if there aren't any modifiers. For example, the
1661   // metadata could contain restrict wrappers around non-pointer types.
1662   if (Mods == ModifierOptions::None)
1663     return ModifiedTI;
1664 
1665   ModifierRecord MR(ModifiedTI, Mods);
1666   return TypeTable.writeLeafType(MR);
1667 }
1668 
1669 TypeIndex CodeViewDebug::lowerTypeFunction(const DISubroutineType *Ty) {
1670   SmallVector<TypeIndex, 8> ReturnAndArgTypeIndices;
1671   for (DITypeRef ArgTypeRef : Ty->getTypeArray())
1672     ReturnAndArgTypeIndices.push_back(getTypeIndex(ArgTypeRef));
1673 
1674   // MSVC uses type none for variadic argument.
1675   if (ReturnAndArgTypeIndices.size() > 1 &&
1676       ReturnAndArgTypeIndices.back() == TypeIndex::Void()) {
1677     ReturnAndArgTypeIndices.back() = TypeIndex::None();
1678   }
1679   TypeIndex ReturnTypeIndex = TypeIndex::Void();
1680   ArrayRef<TypeIndex> ArgTypeIndices = None;
1681   if (!ReturnAndArgTypeIndices.empty()) {
1682     auto ReturnAndArgTypesRef = makeArrayRef(ReturnAndArgTypeIndices);
1683     ReturnTypeIndex = ReturnAndArgTypesRef.front();
1684     ArgTypeIndices = ReturnAndArgTypesRef.drop_front();
1685   }
1686 
1687   ArgListRecord ArgListRec(TypeRecordKind::ArgList, ArgTypeIndices);
1688   TypeIndex ArgListIndex = TypeTable.writeLeafType(ArgListRec);
1689 
1690   CallingConvention CC = dwarfCCToCodeView(Ty->getCC());
1691 
1692   ProcedureRecord Procedure(ReturnTypeIndex, CC, FunctionOptions::None,
1693                             ArgTypeIndices.size(), ArgListIndex);
1694   return TypeTable.writeLeafType(Procedure);
1695 }
1696 
1697 TypeIndex CodeViewDebug::lowerTypeMemberFunction(const DISubroutineType *Ty,
1698                                                  const DIType *ClassTy,
1699                                                  int ThisAdjustment,
1700                                                  bool IsStaticMethod) {
1701   // Lower the containing class type.
1702   TypeIndex ClassType = getTypeIndex(ClassTy);
1703 
1704   SmallVector<TypeIndex, 8> ReturnAndArgTypeIndices;
1705   for (DITypeRef ArgTypeRef : Ty->getTypeArray())
1706     ReturnAndArgTypeIndices.push_back(getTypeIndex(ArgTypeRef));
1707 
1708   // MSVC uses type none for variadic argument.
1709   if (ReturnAndArgTypeIndices.size() > 1 &&
1710       ReturnAndArgTypeIndices.back() == TypeIndex::Void()) {
1711     ReturnAndArgTypeIndices.back() = TypeIndex::None();
1712   }
1713   TypeIndex ReturnTypeIndex = TypeIndex::Void();
1714   ArrayRef<TypeIndex> ArgTypeIndices = None;
1715   if (!ReturnAndArgTypeIndices.empty()) {
1716     auto ReturnAndArgTypesRef = makeArrayRef(ReturnAndArgTypeIndices);
1717     ReturnTypeIndex = ReturnAndArgTypesRef.front();
1718     ArgTypeIndices = ReturnAndArgTypesRef.drop_front();
1719   }
1720   TypeIndex ThisTypeIndex;
1721   if (!IsStaticMethod && !ArgTypeIndices.empty()) {
1722     ThisTypeIndex = ArgTypeIndices.front();
1723     ArgTypeIndices = ArgTypeIndices.drop_front();
1724   }
1725 
1726   ArgListRecord ArgListRec(TypeRecordKind::ArgList, ArgTypeIndices);
1727   TypeIndex ArgListIndex = TypeTable.writeLeafType(ArgListRec);
1728 
1729   CallingConvention CC = dwarfCCToCodeView(Ty->getCC());
1730 
1731   // TODO: Need to use the correct values for FunctionOptions.
1732   MemberFunctionRecord MFR(ReturnTypeIndex, ClassType, ThisTypeIndex, CC,
1733                            FunctionOptions::None, ArgTypeIndices.size(),
1734                            ArgListIndex, ThisAdjustment);
1735   return TypeTable.writeLeafType(MFR);
1736 }
1737 
1738 TypeIndex CodeViewDebug::lowerTypeVFTableShape(const DIDerivedType *Ty) {
1739   unsigned VSlotCount =
1740       Ty->getSizeInBits() / (8 * Asm->MAI->getCodePointerSize());
1741   SmallVector<VFTableSlotKind, 4> Slots(VSlotCount, VFTableSlotKind::Near);
1742 
1743   VFTableShapeRecord VFTSR(Slots);
1744   return TypeTable.writeLeafType(VFTSR);
1745 }
1746 
1747 static MemberAccess translateAccessFlags(unsigned RecordTag, unsigned Flags) {
1748   switch (Flags & DINode::FlagAccessibility) {
1749   case DINode::FlagPrivate:   return MemberAccess::Private;
1750   case DINode::FlagPublic:    return MemberAccess::Public;
1751   case DINode::FlagProtected: return MemberAccess::Protected;
1752   case 0:
1753     // If there was no explicit access control, provide the default for the tag.
1754     return RecordTag == dwarf::DW_TAG_class_type ? MemberAccess::Private
1755                                                  : MemberAccess::Public;
1756   }
1757   llvm_unreachable("access flags are exclusive");
1758 }
1759 
1760 static MethodOptions translateMethodOptionFlags(const DISubprogram *SP) {
1761   if (SP->isArtificial())
1762     return MethodOptions::CompilerGenerated;
1763 
1764   // FIXME: Handle other MethodOptions.
1765 
1766   return MethodOptions::None;
1767 }
1768 
1769 static MethodKind translateMethodKindFlags(const DISubprogram *SP,
1770                                            bool Introduced) {
1771   if (SP->getFlags() & DINode::FlagStaticMember)
1772     return MethodKind::Static;
1773 
1774   switch (SP->getVirtuality()) {
1775   case dwarf::DW_VIRTUALITY_none:
1776     break;
1777   case dwarf::DW_VIRTUALITY_virtual:
1778     return Introduced ? MethodKind::IntroducingVirtual : MethodKind::Virtual;
1779   case dwarf::DW_VIRTUALITY_pure_virtual:
1780     return Introduced ? MethodKind::PureIntroducingVirtual
1781                       : MethodKind::PureVirtual;
1782   default:
1783     llvm_unreachable("unhandled virtuality case");
1784   }
1785 
1786   return MethodKind::Vanilla;
1787 }
1788 
1789 static TypeRecordKind getRecordKind(const DICompositeType *Ty) {
1790   switch (Ty->getTag()) {
1791   case dwarf::DW_TAG_class_type:     return TypeRecordKind::Class;
1792   case dwarf::DW_TAG_structure_type: return TypeRecordKind::Struct;
1793   }
1794   llvm_unreachable("unexpected tag");
1795 }
1796 
1797 /// Return ClassOptions that should be present on both the forward declaration
1798 /// and the defintion of a tag type.
1799 static ClassOptions getCommonClassOptions(const DICompositeType *Ty) {
1800   ClassOptions CO = ClassOptions::None;
1801 
1802   // MSVC always sets this flag, even for local types. Clang doesn't always
1803   // appear to give every type a linkage name, which may be problematic for us.
1804   // FIXME: Investigate the consequences of not following them here.
1805   if (!Ty->getIdentifier().empty())
1806     CO |= ClassOptions::HasUniqueName;
1807 
1808   // Put the Nested flag on a type if it appears immediately inside a tag type.
1809   // Do not walk the scope chain. Do not attempt to compute ContainsNestedClass
1810   // here. That flag is only set on definitions, and not forward declarations.
1811   const DIScope *ImmediateScope = Ty->getScope().resolve();
1812   if (ImmediateScope && isa<DICompositeType>(ImmediateScope))
1813     CO |= ClassOptions::Nested;
1814 
1815   // Put the Scoped flag on function-local types.
1816   for (const DIScope *Scope = ImmediateScope; Scope != nullptr;
1817        Scope = Scope->getScope().resolve()) {
1818     if (isa<DISubprogram>(Scope)) {
1819       CO |= ClassOptions::Scoped;
1820       break;
1821     }
1822   }
1823 
1824   return CO;
1825 }
1826 
1827 void CodeViewDebug::addUDTSrcLine(const DIType *Ty, TypeIndex TI) {
1828   switch (Ty->getTag()) {
1829   case dwarf::DW_TAG_class_type:
1830   case dwarf::DW_TAG_structure_type:
1831   case dwarf::DW_TAG_union_type:
1832   case dwarf::DW_TAG_enumeration_type:
1833     break;
1834   default:
1835     return;
1836   }
1837 
1838   if (const auto *File = Ty->getFile()) {
1839     StringIdRecord SIDR(TypeIndex(0x0), getFullFilepath(File));
1840     TypeIndex SIDI = TypeTable.writeLeafType(SIDR);
1841 
1842     UdtSourceLineRecord USLR(TI, SIDI, Ty->getLine());
1843     TypeTable.writeLeafType(USLR);
1844   }
1845 }
1846 
1847 TypeIndex CodeViewDebug::lowerTypeEnum(const DICompositeType *Ty) {
1848   ClassOptions CO = getCommonClassOptions(Ty);
1849   TypeIndex FTI;
1850   unsigned EnumeratorCount = 0;
1851 
1852   if (Ty->isForwardDecl()) {
1853     CO |= ClassOptions::ForwardReference;
1854   } else {
1855     ContinuationRecordBuilder ContinuationBuilder;
1856     ContinuationBuilder.begin(ContinuationRecordKind::FieldList);
1857     for (const DINode *Element : Ty->getElements()) {
1858       // We assume that the frontend provides all members in source declaration
1859       // order, which is what MSVC does.
1860       if (auto *Enumerator = dyn_cast_or_null<DIEnumerator>(Element)) {
1861         EnumeratorRecord ER(MemberAccess::Public,
1862                             APSInt::getUnsigned(Enumerator->getValue()),
1863                             Enumerator->getName());
1864         ContinuationBuilder.writeMemberType(ER);
1865         EnumeratorCount++;
1866       }
1867     }
1868     FTI = TypeTable.insertRecord(ContinuationBuilder);
1869   }
1870 
1871   std::string FullName = getFullyQualifiedName(Ty);
1872 
1873   EnumRecord ER(EnumeratorCount, CO, FTI, FullName, Ty->getIdentifier(),
1874                 getTypeIndex(Ty->getBaseType()));
1875   TypeIndex EnumTI = TypeTable.writeLeafType(ER);
1876 
1877   addUDTSrcLine(Ty, EnumTI);
1878 
1879   return EnumTI;
1880 }
1881 
1882 //===----------------------------------------------------------------------===//
1883 // ClassInfo
1884 //===----------------------------------------------------------------------===//
1885 
1886 struct llvm::ClassInfo {
1887   struct MemberInfo {
1888     const DIDerivedType *MemberTypeNode;
1889     uint64_t BaseOffset;
1890   };
1891   // [MemberInfo]
1892   using MemberList = std::vector<MemberInfo>;
1893 
1894   using MethodsList = TinyPtrVector<const DISubprogram *>;
1895   // MethodName -> MethodsList
1896   using MethodsMap = MapVector<MDString *, MethodsList>;
1897 
1898   /// Base classes.
1899   std::vector<const DIDerivedType *> Inheritance;
1900 
1901   /// Direct members.
1902   MemberList Members;
1903   // Direct overloaded methods gathered by name.
1904   MethodsMap Methods;
1905 
1906   TypeIndex VShapeTI;
1907 
1908   std::vector<const DIType *> NestedTypes;
1909 };
1910 
1911 void CodeViewDebug::clear() {
1912   assert(CurFn == nullptr);
1913   FileIdMap.clear();
1914   FnDebugInfo.clear();
1915   FileToFilepathMap.clear();
1916   LocalUDTs.clear();
1917   GlobalUDTs.clear();
1918   TypeIndices.clear();
1919   CompleteTypeIndices.clear();
1920 }
1921 
1922 void CodeViewDebug::collectMemberInfo(ClassInfo &Info,
1923                                       const DIDerivedType *DDTy) {
1924   if (!DDTy->getName().empty()) {
1925     Info.Members.push_back({DDTy, 0});
1926     return;
1927   }
1928 
1929   // An unnamed member may represent a nested struct or union. Attempt to
1930   // interpret the unnamed member as a DICompositeType possibly wrapped in
1931   // qualifier types. Add all the indirect fields to the current record if that
1932   // succeeds, and drop the member if that fails.
1933   assert((DDTy->getOffsetInBits() % 8) == 0 && "Unnamed bitfield member!");
1934   uint64_t Offset = DDTy->getOffsetInBits();
1935   const DIType *Ty = DDTy->getBaseType().resolve();
1936   bool FullyResolved = false;
1937   while (!FullyResolved) {
1938     switch (Ty->getTag()) {
1939     case dwarf::DW_TAG_const_type:
1940     case dwarf::DW_TAG_volatile_type:
1941       // FIXME: we should apply the qualifier types to the indirect fields
1942       // rather than dropping them.
1943       Ty = cast<DIDerivedType>(Ty)->getBaseType().resolve();
1944       break;
1945     default:
1946       FullyResolved = true;
1947       break;
1948     }
1949   }
1950 
1951   const DICompositeType *DCTy = dyn_cast<DICompositeType>(Ty);
1952   if (!DCTy)
1953     return;
1954 
1955   ClassInfo NestedInfo = collectClassInfo(DCTy);
1956   for (const ClassInfo::MemberInfo &IndirectField : NestedInfo.Members)
1957     Info.Members.push_back(
1958         {IndirectField.MemberTypeNode, IndirectField.BaseOffset + Offset});
1959 }
1960 
1961 ClassInfo CodeViewDebug::collectClassInfo(const DICompositeType *Ty) {
1962   ClassInfo Info;
1963   // Add elements to structure type.
1964   DINodeArray Elements = Ty->getElements();
1965   for (auto *Element : Elements) {
1966     // We assume that the frontend provides all members in source declaration
1967     // order, which is what MSVC does.
1968     if (!Element)
1969       continue;
1970     if (auto *SP = dyn_cast<DISubprogram>(Element)) {
1971       Info.Methods[SP->getRawName()].push_back(SP);
1972     } else if (auto *DDTy = dyn_cast<DIDerivedType>(Element)) {
1973       if (DDTy->getTag() == dwarf::DW_TAG_member) {
1974         collectMemberInfo(Info, DDTy);
1975       } else if (DDTy->getTag() == dwarf::DW_TAG_inheritance) {
1976         Info.Inheritance.push_back(DDTy);
1977       } else if (DDTy->getTag() == dwarf::DW_TAG_pointer_type &&
1978                  DDTy->getName() == "__vtbl_ptr_type") {
1979         Info.VShapeTI = getTypeIndex(DDTy);
1980       } else if (DDTy->getTag() == dwarf::DW_TAG_typedef) {
1981         Info.NestedTypes.push_back(DDTy);
1982       } else if (DDTy->getTag() == dwarf::DW_TAG_friend) {
1983         // Ignore friend members. It appears that MSVC emitted info about
1984         // friends in the past, but modern versions do not.
1985       }
1986     } else if (auto *Composite = dyn_cast<DICompositeType>(Element)) {
1987       Info.NestedTypes.push_back(Composite);
1988     }
1989     // Skip other unrecognized kinds of elements.
1990   }
1991   return Info;
1992 }
1993 
1994 static bool shouldAlwaysEmitCompleteClassType(const DICompositeType *Ty) {
1995   // This routine is used by lowerTypeClass and lowerTypeUnion to determine
1996   // if a complete type should be emitted instead of a forward reference.
1997   return Ty->getName().empty() && Ty->getIdentifier().empty() &&
1998       !Ty->isForwardDecl();
1999 }
2000 
2001 TypeIndex CodeViewDebug::lowerTypeClass(const DICompositeType *Ty) {
2002   // Emit the complete type for unnamed structs.  C++ classes with methods
2003   // which have a circular reference back to the class type are expected to
2004   // be named by the front-end and should not be "unnamed".  C unnamed
2005   // structs should not have circular references.
2006   if (shouldAlwaysEmitCompleteClassType(Ty)) {
2007     // If this unnamed complete type is already in the process of being defined
2008     // then the description of the type is malformed and cannot be emitted
2009     // into CodeView correctly so report a fatal error.
2010     auto I = CompleteTypeIndices.find(Ty);
2011     if (I != CompleteTypeIndices.end() && I->second == TypeIndex())
2012       report_fatal_error("cannot debug circular reference to unnamed type");
2013     return getCompleteTypeIndex(Ty);
2014   }
2015 
2016   // First, construct the forward decl.  Don't look into Ty to compute the
2017   // forward decl options, since it might not be available in all TUs.
2018   TypeRecordKind Kind = getRecordKind(Ty);
2019   ClassOptions CO =
2020       ClassOptions::ForwardReference | getCommonClassOptions(Ty);
2021   std::string FullName = getFullyQualifiedName(Ty);
2022   ClassRecord CR(Kind, 0, CO, TypeIndex(), TypeIndex(), TypeIndex(), 0,
2023                  FullName, Ty->getIdentifier());
2024   TypeIndex FwdDeclTI = TypeTable.writeLeafType(CR);
2025   if (!Ty->isForwardDecl())
2026     DeferredCompleteTypes.push_back(Ty);
2027   return FwdDeclTI;
2028 }
2029 
2030 TypeIndex CodeViewDebug::lowerCompleteTypeClass(const DICompositeType *Ty) {
2031   // Construct the field list and complete type record.
2032   TypeRecordKind Kind = getRecordKind(Ty);
2033   ClassOptions CO = getCommonClassOptions(Ty);
2034   TypeIndex FieldTI;
2035   TypeIndex VShapeTI;
2036   unsigned FieldCount;
2037   bool ContainsNestedClass;
2038   std::tie(FieldTI, VShapeTI, FieldCount, ContainsNestedClass) =
2039       lowerRecordFieldList(Ty);
2040 
2041   if (ContainsNestedClass)
2042     CO |= ClassOptions::ContainsNestedClass;
2043 
2044   std::string FullName = getFullyQualifiedName(Ty);
2045 
2046   uint64_t SizeInBytes = Ty->getSizeInBits() / 8;
2047 
2048   ClassRecord CR(Kind, FieldCount, CO, FieldTI, TypeIndex(), VShapeTI,
2049                  SizeInBytes, FullName, Ty->getIdentifier());
2050   TypeIndex ClassTI = TypeTable.writeLeafType(CR);
2051 
2052   addUDTSrcLine(Ty, ClassTI);
2053 
2054   addToUDTs(Ty);
2055 
2056   return ClassTI;
2057 }
2058 
2059 TypeIndex CodeViewDebug::lowerTypeUnion(const DICompositeType *Ty) {
2060   // Emit the complete type for unnamed unions.
2061   if (shouldAlwaysEmitCompleteClassType(Ty))
2062     return getCompleteTypeIndex(Ty);
2063 
2064   ClassOptions CO =
2065       ClassOptions::ForwardReference | getCommonClassOptions(Ty);
2066   std::string FullName = getFullyQualifiedName(Ty);
2067   UnionRecord UR(0, CO, TypeIndex(), 0, FullName, Ty->getIdentifier());
2068   TypeIndex FwdDeclTI = TypeTable.writeLeafType(UR);
2069   if (!Ty->isForwardDecl())
2070     DeferredCompleteTypes.push_back(Ty);
2071   return FwdDeclTI;
2072 }
2073 
2074 TypeIndex CodeViewDebug::lowerCompleteTypeUnion(const DICompositeType *Ty) {
2075   ClassOptions CO = ClassOptions::Sealed | getCommonClassOptions(Ty);
2076   TypeIndex FieldTI;
2077   unsigned FieldCount;
2078   bool ContainsNestedClass;
2079   std::tie(FieldTI, std::ignore, FieldCount, ContainsNestedClass) =
2080       lowerRecordFieldList(Ty);
2081 
2082   if (ContainsNestedClass)
2083     CO |= ClassOptions::ContainsNestedClass;
2084 
2085   uint64_t SizeInBytes = Ty->getSizeInBits() / 8;
2086   std::string FullName = getFullyQualifiedName(Ty);
2087 
2088   UnionRecord UR(FieldCount, CO, FieldTI, SizeInBytes, FullName,
2089                  Ty->getIdentifier());
2090   TypeIndex UnionTI = TypeTable.writeLeafType(UR);
2091 
2092   addUDTSrcLine(Ty, UnionTI);
2093 
2094   addToUDTs(Ty);
2095 
2096   return UnionTI;
2097 }
2098 
2099 std::tuple<TypeIndex, TypeIndex, unsigned, bool>
2100 CodeViewDebug::lowerRecordFieldList(const DICompositeType *Ty) {
2101   // Manually count members. MSVC appears to count everything that generates a
2102   // field list record. Each individual overload in a method overload group
2103   // contributes to this count, even though the overload group is a single field
2104   // list record.
2105   unsigned MemberCount = 0;
2106   ClassInfo Info = collectClassInfo(Ty);
2107   ContinuationRecordBuilder ContinuationBuilder;
2108   ContinuationBuilder.begin(ContinuationRecordKind::FieldList);
2109 
2110   // Create base classes.
2111   for (const DIDerivedType *I : Info.Inheritance) {
2112     if (I->getFlags() & DINode::FlagVirtual) {
2113       // Virtual base.
2114       unsigned VBPtrOffset = I->getVBPtrOffset();
2115       // FIXME: Despite the accessor name, the offset is really in bytes.
2116       unsigned VBTableIndex = I->getOffsetInBits() / 4;
2117       auto RecordKind = (I->getFlags() & DINode::FlagIndirectVirtualBase) == DINode::FlagIndirectVirtualBase
2118                             ? TypeRecordKind::IndirectVirtualBaseClass
2119                             : TypeRecordKind::VirtualBaseClass;
2120       VirtualBaseClassRecord VBCR(
2121           RecordKind, translateAccessFlags(Ty->getTag(), I->getFlags()),
2122           getTypeIndex(I->getBaseType()), getVBPTypeIndex(), VBPtrOffset,
2123           VBTableIndex);
2124 
2125       ContinuationBuilder.writeMemberType(VBCR);
2126       MemberCount++;
2127     } else {
2128       assert(I->getOffsetInBits() % 8 == 0 &&
2129              "bases must be on byte boundaries");
2130       BaseClassRecord BCR(translateAccessFlags(Ty->getTag(), I->getFlags()),
2131                           getTypeIndex(I->getBaseType()),
2132                           I->getOffsetInBits() / 8);
2133       ContinuationBuilder.writeMemberType(BCR);
2134       MemberCount++;
2135     }
2136   }
2137 
2138   // Create members.
2139   for (ClassInfo::MemberInfo &MemberInfo : Info.Members) {
2140     const DIDerivedType *Member = MemberInfo.MemberTypeNode;
2141     TypeIndex MemberBaseType = getTypeIndex(Member->getBaseType());
2142     StringRef MemberName = Member->getName();
2143     MemberAccess Access =
2144         translateAccessFlags(Ty->getTag(), Member->getFlags());
2145 
2146     if (Member->isStaticMember()) {
2147       StaticDataMemberRecord SDMR(Access, MemberBaseType, MemberName);
2148       ContinuationBuilder.writeMemberType(SDMR);
2149       MemberCount++;
2150       continue;
2151     }
2152 
2153     // Virtual function pointer member.
2154     if ((Member->getFlags() & DINode::FlagArtificial) &&
2155         Member->getName().startswith("_vptr$")) {
2156       VFPtrRecord VFPR(getTypeIndex(Member->getBaseType()));
2157       ContinuationBuilder.writeMemberType(VFPR);
2158       MemberCount++;
2159       continue;
2160     }
2161 
2162     // Data member.
2163     uint64_t MemberOffsetInBits =
2164         Member->getOffsetInBits() + MemberInfo.BaseOffset;
2165     if (Member->isBitField()) {
2166       uint64_t StartBitOffset = MemberOffsetInBits;
2167       if (const auto *CI =
2168               dyn_cast_or_null<ConstantInt>(Member->getStorageOffsetInBits())) {
2169         MemberOffsetInBits = CI->getZExtValue() + MemberInfo.BaseOffset;
2170       }
2171       StartBitOffset -= MemberOffsetInBits;
2172       BitFieldRecord BFR(MemberBaseType, Member->getSizeInBits(),
2173                          StartBitOffset);
2174       MemberBaseType = TypeTable.writeLeafType(BFR);
2175     }
2176     uint64_t MemberOffsetInBytes = MemberOffsetInBits / 8;
2177     DataMemberRecord DMR(Access, MemberBaseType, MemberOffsetInBytes,
2178                          MemberName);
2179     ContinuationBuilder.writeMemberType(DMR);
2180     MemberCount++;
2181   }
2182 
2183   // Create methods
2184   for (auto &MethodItr : Info.Methods) {
2185     StringRef Name = MethodItr.first->getString();
2186 
2187     std::vector<OneMethodRecord> Methods;
2188     for (const DISubprogram *SP : MethodItr.second) {
2189       TypeIndex MethodType = getMemberFunctionType(SP, Ty);
2190       bool Introduced = SP->getFlags() & DINode::FlagIntroducedVirtual;
2191 
2192       unsigned VFTableOffset = -1;
2193       if (Introduced)
2194         VFTableOffset = SP->getVirtualIndex() * getPointerSizeInBytes();
2195 
2196       Methods.push_back(OneMethodRecord(
2197           MethodType, translateAccessFlags(Ty->getTag(), SP->getFlags()),
2198           translateMethodKindFlags(SP, Introduced),
2199           translateMethodOptionFlags(SP), VFTableOffset, Name));
2200       MemberCount++;
2201     }
2202     assert(!Methods.empty() && "Empty methods map entry");
2203     if (Methods.size() == 1)
2204       ContinuationBuilder.writeMemberType(Methods[0]);
2205     else {
2206       // FIXME: Make this use its own ContinuationBuilder so that
2207       // MethodOverloadList can be split correctly.
2208       MethodOverloadListRecord MOLR(Methods);
2209       TypeIndex MethodList = TypeTable.writeLeafType(MOLR);
2210 
2211       OverloadedMethodRecord OMR(Methods.size(), MethodList, Name);
2212       ContinuationBuilder.writeMemberType(OMR);
2213     }
2214   }
2215 
2216   // Create nested classes.
2217   for (const DIType *Nested : Info.NestedTypes) {
2218     NestedTypeRecord R(getTypeIndex(DITypeRef(Nested)), Nested->getName());
2219     ContinuationBuilder.writeMemberType(R);
2220     MemberCount++;
2221   }
2222 
2223   TypeIndex FieldTI = TypeTable.insertRecord(ContinuationBuilder);
2224   return std::make_tuple(FieldTI, Info.VShapeTI, MemberCount,
2225                          !Info.NestedTypes.empty());
2226 }
2227 
2228 TypeIndex CodeViewDebug::getVBPTypeIndex() {
2229   if (!VBPType.getIndex()) {
2230     // Make a 'const int *' type.
2231     ModifierRecord MR(TypeIndex::Int32(), ModifierOptions::Const);
2232     TypeIndex ModifiedTI = TypeTable.writeLeafType(MR);
2233 
2234     PointerKind PK = getPointerSizeInBytes() == 8 ? PointerKind::Near64
2235                                                   : PointerKind::Near32;
2236     PointerMode PM = PointerMode::Pointer;
2237     PointerOptions PO = PointerOptions::None;
2238     PointerRecord PR(ModifiedTI, PK, PM, PO, getPointerSizeInBytes());
2239     VBPType = TypeTable.writeLeafType(PR);
2240   }
2241 
2242   return VBPType;
2243 }
2244 
2245 TypeIndex CodeViewDebug::getTypeIndex(DITypeRef TypeRef, DITypeRef ClassTyRef) {
2246   const DIType *Ty = TypeRef.resolve();
2247   const DIType *ClassTy = ClassTyRef.resolve();
2248 
2249   // The null DIType is the void type. Don't try to hash it.
2250   if (!Ty)
2251     return TypeIndex::Void();
2252 
2253   // Check if we've already translated this type. Don't try to do a
2254   // get-or-create style insertion that caches the hash lookup across the
2255   // lowerType call. It will update the TypeIndices map.
2256   auto I = TypeIndices.find({Ty, ClassTy});
2257   if (I != TypeIndices.end())
2258     return I->second;
2259 
2260   TypeLoweringScope S(*this);
2261   TypeIndex TI = lowerType(Ty, ClassTy);
2262   return recordTypeIndexForDINode(Ty, TI, ClassTy);
2263 }
2264 
2265 TypeIndex CodeViewDebug::getTypeIndexForReferenceTo(DITypeRef TypeRef) {
2266   DIType *Ty = TypeRef.resolve();
2267   PointerRecord PR(getTypeIndex(Ty),
2268                    getPointerSizeInBytes() == 8 ? PointerKind::Near64
2269                                                 : PointerKind::Near32,
2270                    PointerMode::LValueReference, PointerOptions::None,
2271                    Ty->getSizeInBits() / 8);
2272   return TypeTable.writeLeafType(PR);
2273 }
2274 
2275 TypeIndex CodeViewDebug::getCompleteTypeIndex(DITypeRef TypeRef) {
2276   const DIType *Ty = TypeRef.resolve();
2277 
2278   // The null DIType is the void type. Don't try to hash it.
2279   if (!Ty)
2280     return TypeIndex::Void();
2281 
2282   // If this is a non-record type, the complete type index is the same as the
2283   // normal type index. Just call getTypeIndex.
2284   switch (Ty->getTag()) {
2285   case dwarf::DW_TAG_class_type:
2286   case dwarf::DW_TAG_structure_type:
2287   case dwarf::DW_TAG_union_type:
2288     break;
2289   default:
2290     return getTypeIndex(Ty);
2291   }
2292 
2293   // Check if we've already translated the complete record type.
2294   const auto *CTy = cast<DICompositeType>(Ty);
2295   auto InsertResult = CompleteTypeIndices.insert({CTy, TypeIndex()});
2296   if (!InsertResult.second)
2297     return InsertResult.first->second;
2298 
2299   TypeLoweringScope S(*this);
2300 
2301   // Make sure the forward declaration is emitted first. It's unclear if this
2302   // is necessary, but MSVC does it, and we should follow suit until we can show
2303   // otherwise.
2304   // We only emit a forward declaration for named types.
2305   if (!CTy->getName().empty() || !CTy->getIdentifier().empty()) {
2306     TypeIndex FwdDeclTI = getTypeIndex(CTy);
2307 
2308     // Just use the forward decl if we don't have complete type info. This
2309     // might happen if the frontend is using modules and expects the complete
2310     // definition to be emitted elsewhere.
2311     if (CTy->isForwardDecl())
2312       return FwdDeclTI;
2313   }
2314 
2315   TypeIndex TI;
2316   switch (CTy->getTag()) {
2317   case dwarf::DW_TAG_class_type:
2318   case dwarf::DW_TAG_structure_type:
2319     TI = lowerCompleteTypeClass(CTy);
2320     break;
2321   case dwarf::DW_TAG_union_type:
2322     TI = lowerCompleteTypeUnion(CTy);
2323     break;
2324   default:
2325     llvm_unreachable("not a record");
2326   }
2327 
2328   // Update the type index associated with this CompositeType.  This cannot
2329   // use the 'InsertResult' iterator above because it is potentially
2330   // invalidated by map insertions which can occur while lowering the class
2331   // type above.
2332   CompleteTypeIndices[CTy] = TI;
2333   return TI;
2334 }
2335 
2336 /// Emit all the deferred complete record types. Try to do this in FIFO order,
2337 /// and do this until fixpoint, as each complete record type typically
2338 /// references
2339 /// many other record types.
2340 void CodeViewDebug::emitDeferredCompleteTypes() {
2341   SmallVector<const DICompositeType *, 4> TypesToEmit;
2342   while (!DeferredCompleteTypes.empty()) {
2343     std::swap(DeferredCompleteTypes, TypesToEmit);
2344     for (const DICompositeType *RecordTy : TypesToEmit)
2345       getCompleteTypeIndex(RecordTy);
2346     TypesToEmit.clear();
2347   }
2348 }
2349 
2350 void CodeViewDebug::emitLocalVariableList(ArrayRef<LocalVariable> Locals) {
2351   // Get the sorted list of parameters and emit them first.
2352   SmallVector<const LocalVariable *, 6> Params;
2353   for (const LocalVariable &L : Locals)
2354     if (L.DIVar->isParameter())
2355       Params.push_back(&L);
2356   llvm::sort(Params, [](const LocalVariable *L, const LocalVariable *R) {
2357     return L->DIVar->getArg() < R->DIVar->getArg();
2358   });
2359   for (const LocalVariable *L : Params)
2360     emitLocalVariable(*L);
2361 
2362   // Next emit all non-parameters in the order that we found them.
2363   for (const LocalVariable &L : Locals)
2364     if (!L.DIVar->isParameter())
2365       emitLocalVariable(L);
2366 }
2367 
2368 void CodeViewDebug::emitLocalVariable(const LocalVariable &Var) {
2369   // LocalSym record, see SymbolRecord.h for more info.
2370   MCSymbol *LocalBegin = MMI->getContext().createTempSymbol(),
2371            *LocalEnd = MMI->getContext().createTempSymbol();
2372   OS.AddComment("Record length");
2373   OS.emitAbsoluteSymbolDiff(LocalEnd, LocalBegin, 2);
2374   OS.EmitLabel(LocalBegin);
2375 
2376   OS.AddComment("Record kind: S_LOCAL");
2377   OS.EmitIntValue(unsigned(SymbolKind::S_LOCAL), 2);
2378 
2379   LocalSymFlags Flags = LocalSymFlags::None;
2380   if (Var.DIVar->isParameter())
2381     Flags |= LocalSymFlags::IsParameter;
2382   if (Var.DefRanges.empty())
2383     Flags |= LocalSymFlags::IsOptimizedOut;
2384 
2385   OS.AddComment("TypeIndex");
2386   TypeIndex TI = Var.UseReferenceType
2387                      ? getTypeIndexForReferenceTo(Var.DIVar->getType())
2388                      : getCompleteTypeIndex(Var.DIVar->getType());
2389   OS.EmitIntValue(TI.getIndex(), 4);
2390   OS.AddComment("Flags");
2391   OS.EmitIntValue(static_cast<uint16_t>(Flags), 2);
2392   // Truncate the name so we won't overflow the record length field.
2393   emitNullTerminatedSymbolName(OS, Var.DIVar->getName());
2394   OS.EmitLabel(LocalEnd);
2395 
2396   // Calculate the on disk prefix of the appropriate def range record. The
2397   // records and on disk formats are described in SymbolRecords.h. BytePrefix
2398   // should be big enough to hold all forms without memory allocation.
2399   SmallString<20> BytePrefix;
2400   for (const LocalVarDefRange &DefRange : Var.DefRanges) {
2401     BytePrefix.clear();
2402     if (DefRange.InMemory) {
2403       uint16_t RegRelFlags = 0;
2404       if (DefRange.IsSubfield) {
2405         RegRelFlags = DefRangeRegisterRelSym::IsSubfieldFlag |
2406                       (DefRange.StructOffset
2407                        << DefRangeRegisterRelSym::OffsetInParentShift);
2408       }
2409       DefRangeRegisterRelSym Sym(S_DEFRANGE_REGISTER_REL);
2410       Sym.Hdr.Register = DefRange.CVRegister;
2411       Sym.Hdr.Flags = RegRelFlags;
2412       Sym.Hdr.BasePointerOffset = DefRange.DataOffset;
2413       ulittle16_t SymKind = ulittle16_t(S_DEFRANGE_REGISTER_REL);
2414       BytePrefix +=
2415           StringRef(reinterpret_cast<const char *>(&SymKind), sizeof(SymKind));
2416       BytePrefix +=
2417           StringRef(reinterpret_cast<const char *>(&Sym.Hdr), sizeof(Sym.Hdr));
2418     } else {
2419       assert(DefRange.DataOffset == 0 && "unexpected offset into register");
2420       if (DefRange.IsSubfield) {
2421         // Unclear what matters here.
2422         DefRangeSubfieldRegisterSym Sym(S_DEFRANGE_SUBFIELD_REGISTER);
2423         Sym.Hdr.Register = DefRange.CVRegister;
2424         Sym.Hdr.MayHaveNoName = 0;
2425         Sym.Hdr.OffsetInParent = DefRange.StructOffset;
2426 
2427         ulittle16_t SymKind = ulittle16_t(S_DEFRANGE_SUBFIELD_REGISTER);
2428         BytePrefix += StringRef(reinterpret_cast<const char *>(&SymKind),
2429                                 sizeof(SymKind));
2430         BytePrefix += StringRef(reinterpret_cast<const char *>(&Sym.Hdr),
2431                                 sizeof(Sym.Hdr));
2432       } else {
2433         // Unclear what matters here.
2434         DefRangeRegisterSym Sym(S_DEFRANGE_REGISTER);
2435         Sym.Hdr.Register = DefRange.CVRegister;
2436         Sym.Hdr.MayHaveNoName = 0;
2437         ulittle16_t SymKind = ulittle16_t(S_DEFRANGE_REGISTER);
2438         BytePrefix += StringRef(reinterpret_cast<const char *>(&SymKind),
2439                                 sizeof(SymKind));
2440         BytePrefix += StringRef(reinterpret_cast<const char *>(&Sym.Hdr),
2441                                 sizeof(Sym.Hdr));
2442       }
2443     }
2444     OS.EmitCVDefRangeDirective(DefRange.Ranges, BytePrefix);
2445   }
2446 }
2447 
2448 void CodeViewDebug::emitLexicalBlockList(ArrayRef<LexicalBlock *> Blocks,
2449                                          const FunctionInfo& FI) {
2450   for (LexicalBlock *Block : Blocks)
2451     emitLexicalBlock(*Block, FI);
2452 }
2453 
2454 /// Emit an S_BLOCK32 and S_END record pair delimiting the contents of a
2455 /// lexical block scope.
2456 void CodeViewDebug::emitLexicalBlock(const LexicalBlock &Block,
2457                                      const FunctionInfo& FI) {
2458   MCSymbol *RecordBegin = MMI->getContext().createTempSymbol(),
2459            *RecordEnd   = MMI->getContext().createTempSymbol();
2460 
2461   // Lexical block symbol record.
2462   OS.AddComment("Record length");
2463   OS.emitAbsoluteSymbolDiff(RecordEnd, RecordBegin, 2);   // Record Length
2464   OS.EmitLabel(RecordBegin);
2465   OS.AddComment("Record kind: S_BLOCK32");
2466   OS.EmitIntValue(SymbolKind::S_BLOCK32, 2);              // Record Kind
2467   OS.AddComment("PtrParent");
2468   OS.EmitIntValue(0, 4);                                  // PtrParent
2469   OS.AddComment("PtrEnd");
2470   OS.EmitIntValue(0, 4);                                  // PtrEnd
2471   OS.AddComment("Code size");
2472   OS.emitAbsoluteSymbolDiff(Block.End, Block.Begin, 4);   // Code Size
2473   OS.AddComment("Function section relative address");
2474   OS.EmitCOFFSecRel32(Block.Begin, /*Offset=*/0);         // Func Offset
2475   OS.AddComment("Function section index");
2476   OS.EmitCOFFSectionIndex(FI.Begin);                      // Func Symbol
2477   OS.AddComment("Lexical block name");
2478   emitNullTerminatedSymbolName(OS, Block.Name);           // Name
2479   OS.EmitLabel(RecordEnd);
2480 
2481   // Emit variables local to this lexical block.
2482   emitLocalVariableList(Block.Locals);
2483 
2484   // Emit lexical blocks contained within this block.
2485   emitLexicalBlockList(Block.Children, FI);
2486 
2487   // Close the lexical block scope.
2488   OS.AddComment("Record length");
2489   OS.EmitIntValue(2, 2);                                  // Record Length
2490   OS.AddComment("Record kind: S_END");
2491   OS.EmitIntValue(SymbolKind::S_END, 2);                  // Record Kind
2492 }
2493 
2494 /// Convenience routine for collecting lexical block information for a list
2495 /// of lexical scopes.
2496 void CodeViewDebug::collectLexicalBlockInfo(
2497         SmallVectorImpl<LexicalScope *> &Scopes,
2498         SmallVectorImpl<LexicalBlock *> &Blocks,
2499         SmallVectorImpl<LocalVariable> &Locals) {
2500   for (LexicalScope *Scope : Scopes)
2501     collectLexicalBlockInfo(*Scope, Blocks, Locals);
2502 }
2503 
2504 /// Populate the lexical blocks and local variable lists of the parent with
2505 /// information about the specified lexical scope.
2506 void CodeViewDebug::collectLexicalBlockInfo(
2507     LexicalScope &Scope,
2508     SmallVectorImpl<LexicalBlock *> &ParentBlocks,
2509     SmallVectorImpl<LocalVariable> &ParentLocals) {
2510   if (Scope.isAbstractScope())
2511     return;
2512 
2513   auto LocalsIter = ScopeVariables.find(&Scope);
2514   if (LocalsIter == ScopeVariables.end()) {
2515     // This scope does not contain variables and can be eliminated.
2516     collectLexicalBlockInfo(Scope.getChildren(), ParentBlocks, ParentLocals);
2517     return;
2518   }
2519   SmallVectorImpl<LocalVariable> &Locals = LocalsIter->second;
2520 
2521   const DILexicalBlock *DILB = dyn_cast<DILexicalBlock>(Scope.getScopeNode());
2522   if (!DILB) {
2523     // This scope is not a lexical block and can be eliminated, but keep any
2524     // local variables it contains.
2525     ParentLocals.append(Locals.begin(), Locals.end());
2526     collectLexicalBlockInfo(Scope.getChildren(), ParentBlocks, ParentLocals);
2527     return;
2528   }
2529 
2530   const SmallVectorImpl<InsnRange> &Ranges = Scope.getRanges();
2531   if (Ranges.size() != 1 || !getLabelAfterInsn(Ranges.front().second)) {
2532     // This lexical block scope has too many address ranges to represent in the
2533     // current CodeView format or does not have a valid address range.
2534     // Eliminate this lexical scope and promote any locals it contains to the
2535     // parent scope.
2536     //
2537     // For lexical scopes with multiple address ranges you may be tempted to
2538     // construct a single range covering every instruction where the block is
2539     // live and everything in between.  Unfortunately, Visual Studio only
2540     // displays variables from the first matching lexical block scope.  If the
2541     // first lexical block contains exception handling code or cold code which
2542     // is moved to the bottom of the routine creating a single range covering
2543     // nearly the entire routine, then it will hide all other lexical blocks
2544     // and the variables they contain.
2545     //
2546     ParentLocals.append(Locals.begin(), Locals.end());
2547     collectLexicalBlockInfo(Scope.getChildren(), ParentBlocks, ParentLocals);
2548     return;
2549   }
2550 
2551   // Create a new CodeView lexical block for this lexical scope.  If we've
2552   // seen this DILexicalBlock before then the scope tree is malformed and
2553   // we can handle this gracefully by not processing it a second time.
2554   auto BlockInsertion = CurFn->LexicalBlocks.insert({DILB, LexicalBlock()});
2555   if (!BlockInsertion.second)
2556     return;
2557 
2558   // Create a lexical block containing the local variables and collect the
2559   // the lexical block information for the children.
2560   const InsnRange &Range = Ranges.front();
2561   assert(Range.first && Range.second);
2562   LexicalBlock &Block = BlockInsertion.first->second;
2563   Block.Begin = getLabelBeforeInsn(Range.first);
2564   Block.End = getLabelAfterInsn(Range.second);
2565   assert(Block.Begin && "missing label for scope begin");
2566   assert(Block.End && "missing label for scope end");
2567   Block.Name = DILB->getName();
2568   Block.Locals = std::move(Locals);
2569   ParentBlocks.push_back(&Block);
2570   collectLexicalBlockInfo(Scope.getChildren(), Block.Children, Block.Locals);
2571 }
2572 
2573 void CodeViewDebug::endFunctionImpl(const MachineFunction *MF) {
2574   const Function &GV = MF->getFunction();
2575   assert(FnDebugInfo.count(&GV));
2576   assert(CurFn == FnDebugInfo[&GV].get());
2577 
2578   collectVariableInfo(GV.getSubprogram());
2579 
2580   // Build the lexical block structure to emit for this routine.
2581   if (LexicalScope *CFS = LScopes.getCurrentFunctionScope())
2582     collectLexicalBlockInfo(*CFS, CurFn->ChildBlocks, CurFn->Locals);
2583 
2584   // Clear the scope and variable information from the map which will not be
2585   // valid after we have finished processing this routine.  This also prepares
2586   // the map for the subsequent routine.
2587   ScopeVariables.clear();
2588 
2589   // Don't emit anything if we don't have any line tables.
2590   // Thunks are compiler-generated and probably won't have source correlation.
2591   if (!CurFn->HaveLineInfo && !GV.getSubprogram()->isThunk()) {
2592     FnDebugInfo.erase(&GV);
2593     CurFn = nullptr;
2594     return;
2595   }
2596 
2597   CurFn->Annotations = MF->getCodeViewAnnotations();
2598 
2599   CurFn->End = Asm->getFunctionEnd();
2600 
2601   CurFn = nullptr;
2602 }
2603 
2604 void CodeViewDebug::beginInstruction(const MachineInstr *MI) {
2605   DebugHandlerBase::beginInstruction(MI);
2606 
2607   // Ignore DBG_VALUE and DBG_LABEL locations and function prologue.
2608   if (!Asm || !CurFn || MI->isDebugInstr() ||
2609       MI->getFlag(MachineInstr::FrameSetup))
2610     return;
2611 
2612   // If the first instruction of a new MBB has no location, find the first
2613   // instruction with a location and use that.
2614   DebugLoc DL = MI->getDebugLoc();
2615   if (!DL && MI->getParent() != PrevInstBB) {
2616     for (const auto &NextMI : *MI->getParent()) {
2617       if (NextMI.isDebugInstr())
2618         continue;
2619       DL = NextMI.getDebugLoc();
2620       if (DL)
2621         break;
2622     }
2623   }
2624   PrevInstBB = MI->getParent();
2625 
2626   // If we still don't have a debug location, don't record a location.
2627   if (!DL)
2628     return;
2629 
2630   maybeRecordLocation(DL, Asm->MF);
2631 }
2632 
2633 MCSymbol *CodeViewDebug::beginCVSubsection(DebugSubsectionKind Kind) {
2634   MCSymbol *BeginLabel = MMI->getContext().createTempSymbol(),
2635            *EndLabel = MMI->getContext().createTempSymbol();
2636   OS.EmitIntValue(unsigned(Kind), 4);
2637   OS.AddComment("Subsection size");
2638   OS.emitAbsoluteSymbolDiff(EndLabel, BeginLabel, 4);
2639   OS.EmitLabel(BeginLabel);
2640   return EndLabel;
2641 }
2642 
2643 void CodeViewDebug::endCVSubsection(MCSymbol *EndLabel) {
2644   OS.EmitLabel(EndLabel);
2645   // Every subsection must be aligned to a 4-byte boundary.
2646   OS.EmitValueToAlignment(4);
2647 }
2648 
2649 void CodeViewDebug::emitDebugInfoForUDTs(
2650     ArrayRef<std::pair<std::string, const DIType *>> UDTs) {
2651   for (const auto &UDT : UDTs) {
2652     const DIType *T = UDT.second;
2653     assert(shouldEmitUdt(T));
2654 
2655     MCSymbol *UDTRecordBegin = MMI->getContext().createTempSymbol(),
2656              *UDTRecordEnd = MMI->getContext().createTempSymbol();
2657     OS.AddComment("Record length");
2658     OS.emitAbsoluteSymbolDiff(UDTRecordEnd, UDTRecordBegin, 2);
2659     OS.EmitLabel(UDTRecordBegin);
2660 
2661     OS.AddComment("Record kind: S_UDT");
2662     OS.EmitIntValue(unsigned(SymbolKind::S_UDT), 2);
2663 
2664     OS.AddComment("Type");
2665     OS.EmitIntValue(getCompleteTypeIndex(T).getIndex(), 4);
2666 
2667     emitNullTerminatedSymbolName(OS, UDT.first);
2668     OS.EmitLabel(UDTRecordEnd);
2669   }
2670 }
2671 
2672 void CodeViewDebug::emitDebugInfoForGlobals() {
2673   DenseMap<const DIGlobalVariableExpression *, const GlobalVariable *>
2674       GlobalMap;
2675   for (const GlobalVariable &GV : MMI->getModule()->globals()) {
2676     SmallVector<DIGlobalVariableExpression *, 1> GVEs;
2677     GV.getDebugInfo(GVEs);
2678     for (const auto *GVE : GVEs)
2679       GlobalMap[GVE] = &GV;
2680   }
2681 
2682   NamedMDNode *CUs = MMI->getModule()->getNamedMetadata("llvm.dbg.cu");
2683   for (const MDNode *Node : CUs->operands()) {
2684     const auto *CU = cast<DICompileUnit>(Node);
2685 
2686     // First, emit all globals that are not in a comdat in a single symbol
2687     // substream. MSVC doesn't like it if the substream is empty, so only open
2688     // it if we have at least one global to emit.
2689     switchToDebugSectionForSymbol(nullptr);
2690     MCSymbol *EndLabel = nullptr;
2691     for (const auto *GVE : CU->getGlobalVariables()) {
2692       if (const auto *GV = GlobalMap.lookup(GVE))
2693         if (!GV->hasComdat() && !GV->isDeclarationForLinker()) {
2694           if (!EndLabel) {
2695             OS.AddComment("Symbol subsection for globals");
2696             EndLabel = beginCVSubsection(DebugSubsectionKind::Symbols);
2697           }
2698           // FIXME: emitDebugInfoForGlobal() doesn't handle DIExpressions.
2699           emitDebugInfoForGlobal(GVE->getVariable(), GV, Asm->getSymbol(GV));
2700         }
2701     }
2702     if (EndLabel)
2703       endCVSubsection(EndLabel);
2704 
2705     // Second, emit each global that is in a comdat into its own .debug$S
2706     // section along with its own symbol substream.
2707     for (const auto *GVE : CU->getGlobalVariables()) {
2708       if (const auto *GV = GlobalMap.lookup(GVE)) {
2709         if (GV->hasComdat()) {
2710           MCSymbol *GVSym = Asm->getSymbol(GV);
2711           OS.AddComment("Symbol subsection for " +
2712                         Twine(GlobalValue::dropLLVMManglingEscape(GV->getName())));
2713           switchToDebugSectionForSymbol(GVSym);
2714           EndLabel = beginCVSubsection(DebugSubsectionKind::Symbols);
2715           // FIXME: emitDebugInfoForGlobal() doesn't handle DIExpressions.
2716           emitDebugInfoForGlobal(GVE->getVariable(), GV, GVSym);
2717           endCVSubsection(EndLabel);
2718         }
2719       }
2720     }
2721   }
2722 }
2723 
2724 void CodeViewDebug::emitDebugInfoForRetainedTypes() {
2725   NamedMDNode *CUs = MMI->getModule()->getNamedMetadata("llvm.dbg.cu");
2726   for (const MDNode *Node : CUs->operands()) {
2727     for (auto *Ty : cast<DICompileUnit>(Node)->getRetainedTypes()) {
2728       if (DIType *RT = dyn_cast<DIType>(Ty)) {
2729         getTypeIndex(RT);
2730         // FIXME: Add to global/local DTU list.
2731       }
2732     }
2733   }
2734 }
2735 
2736 void CodeViewDebug::emitDebugInfoForGlobal(const DIGlobalVariable *DIGV,
2737                                            const GlobalVariable *GV,
2738                                            MCSymbol *GVSym) {
2739   // DataSym record, see SymbolRecord.h for more info.
2740   // FIXME: Thread local data, etc
2741   MCSymbol *DataBegin = MMI->getContext().createTempSymbol(),
2742            *DataEnd = MMI->getContext().createTempSymbol();
2743   const unsigned FixedLengthOfThisRecord = 12;
2744   OS.AddComment("Record length");
2745   OS.emitAbsoluteSymbolDiff(DataEnd, DataBegin, 2);
2746   OS.EmitLabel(DataBegin);
2747   if (DIGV->isLocalToUnit()) {
2748     if (GV->isThreadLocal()) {
2749       OS.AddComment("Record kind: S_LTHREAD32");
2750       OS.EmitIntValue(unsigned(SymbolKind::S_LTHREAD32), 2);
2751     } else {
2752       OS.AddComment("Record kind: S_LDATA32");
2753       OS.EmitIntValue(unsigned(SymbolKind::S_LDATA32), 2);
2754     }
2755   } else {
2756     if (GV->isThreadLocal()) {
2757       OS.AddComment("Record kind: S_GTHREAD32");
2758       OS.EmitIntValue(unsigned(SymbolKind::S_GTHREAD32), 2);
2759     } else {
2760       OS.AddComment("Record kind: S_GDATA32");
2761       OS.EmitIntValue(unsigned(SymbolKind::S_GDATA32), 2);
2762     }
2763   }
2764   OS.AddComment("Type");
2765   OS.EmitIntValue(getCompleteTypeIndex(DIGV->getType()).getIndex(), 4);
2766   OS.AddComment("DataOffset");
2767   OS.EmitCOFFSecRel32(GVSym, /*Offset=*/0);
2768   OS.AddComment("Segment");
2769   OS.EmitCOFFSectionIndex(GVSym);
2770   OS.AddComment("Name");
2771   emitNullTerminatedSymbolName(OS, DIGV->getName(), FixedLengthOfThisRecord);
2772   OS.EmitLabel(DataEnd);
2773 }
2774