diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2016-05-23 01:37:45 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2016-05-23 01:37:45 +0000 |
| commit | 6cd7c9185b36f719aab098cd54cb317321688d50 (patch) | |
| tree | 7cc127d8feb4c583f679ed0da7a8aef4415dbafe /llvm/lib/CodeGen | |
| parent | 1b2936fc82832feb5de27ef47d270515ffdf0365 (diff) | |
| download | bcm5719-llvm-6cd7c9185b36f719aab098cd54cb317321688d50.tar.gz bcm5719-llvm-6cd7c9185b36f719aab098cd54cb317321688d50.zip | |
Revert "Modify emitTypeInformation to use MemoryTypeTableBuilder"
This reverts commit r270106. It results in certain function types
omitted in the output.
llvm-svn: 270389
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp | 59 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h | 2 |
2 files changed, 42 insertions, 19 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp index 75647e6a64c..b5c796a01bd 100644 --- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp @@ -261,30 +261,55 @@ void CodeViewDebug::emitTypeInformation() { // This type info currently only holds function ids for use with inline call // frame info. All functions are assigned a simple 'void ()' type. Emit that // type here. - ArrayRef<TypeIndex> NoArgs; - ArgListRecord ArgListRec(TypeRecordKind::ArgList, NoArgs); - TypeIndex ArgListIndex = TypeTable.writeArgList(ArgListRec); + unsigned ArgListIndex = getNextTypeIndex(); + OS.AddComment("Type record length"); + OS.EmitIntValue(ArgListRecord::getLayoutSize(), 2); + OS.AddComment("Leaf type: LF_ARGLIST"); + OS.EmitIntValue(LF_ARGLIST, 2); + OS.AddComment("Number of arguments"); + OS.EmitIntValue(0, 4); - ProcedureRecord Procedure(TypeIndex::Void(), CallingConvention::NearC, - FunctionOptions::None, 0, ArgListIndex); - TypeIndex VoidFnTyIdx = TypeTable.writeProcedure(Procedure); + unsigned VoidFnTyIdx = getNextTypeIndex(); + OS.AddComment("Type record length"); + OS.EmitIntValue(ProcedureRecord::getLayoutSize(), 2); + OS.AddComment("Leaf type: LF_PROCEDURE"); + OS.EmitIntValue(LF_PROCEDURE, 2); + OS.AddComment("Return type index"); + OS.EmitIntValue(TypeIndex::Void().getIndex(), 4); + OS.AddComment("Calling convention"); + OS.EmitIntValue(char(CallingConvention::NearC), 1); + OS.AddComment("Function options"); + OS.EmitIntValue(char(FunctionOptions::None), 1); + OS.AddComment("# of parameters"); + OS.EmitIntValue(0, 2); + OS.AddComment("Argument list type index"); + OS.EmitIntValue(ArgListIndex, 4); // Emit LF_FUNC_ID records for all inlined subprograms to the type stream. // Allocate one type index for each func id. + unsigned NextIdx = getNextTypeIndex(InlinedSubprograms.size()); + (void)NextIdx; + assert(NextIdx == FuncIdTypeIndexStart && "func id type indices broken"); for (auto *SP : InlinedSubprograms) { - TypeIndex ParentScope = TypeIndex(0); StringRef DisplayName = SP->getDisplayName(); - FuncIdRecord FuncId(ParentScope, VoidFnTyIdx, DisplayName); - TypeTable.writeFuncId(FuncId); + OS.AddComment("Type record length"); + MCSymbol *FuncBegin = MMI->getContext().createTempSymbol(), + *FuncEnd = MMI->getContext().createTempSymbol(); + OS.emitAbsoluteSymbolDiff(FuncEnd, FuncBegin, 2); + OS.EmitLabel(FuncBegin); + OS.AddComment("Leaf type: LF_FUNC_ID"); + OS.EmitIntValue(LF_FUNC_ID, 2); + + OS.AddComment("Scope type index"); + OS.EmitIntValue(0, 4); + OS.AddComment("Function type"); + OS.EmitIntValue(VoidFnTyIdx, 4); + { + OS.AddComment("Function name"); + emitNullTerminatedSymbolName(OS, DisplayName); + } + OS.EmitLabel(FuncEnd); } - - TypeTable.ForEachRecord( - [&](TypeIndex Index, const MemoryTypeTableBuilder::Record *R) { - OS.AddComment("Type record length"); - OS.EmitIntValue(R->size(), 2); - OS.AddComment("Type record data"); - OS.EmitBytes(StringRef(R->data(), R->size())); - }); } void CodeViewDebug::emitInlineeFuncIdsAndLines() { diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h index 3b1a629cf22..3cc11728504 100644 --- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h +++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h @@ -20,7 +20,6 @@ #include "llvm/CodeGen/AsmPrinter.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineModuleInfo.h" -#include "llvm/DebugInfo/CodeView/MemoryTypeTableBuilder.h" #include "llvm/DebugInfo/CodeView/TypeIndex.h" #include "llvm/IR/DebugInfo.h" #include "llvm/IR/DebugLoc.h" @@ -35,7 +34,6 @@ class LexicalScope; /// \brief Collects and handles line tables information in a CodeView format. class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase { MCStreamer &OS; - codeview::MemoryTypeTableBuilder TypeTable; /// Represents the most general definition range. struct LocalVarDefRange { |

