[llvm] r257790 - [codeview] Dump CodeView inlinee lines subsection

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 14 13:38:48 PST 2016


Should've been fixed already: 257793

On Thu, Jan 14, 2016 at 1:29 PM, Mike Aizatsky <aizatsky at google.com> wrote:

> This change breaks the build:
> http://lab.llvm.org:8011/builders/clang-cmake-aarch64-42vma/builds/5209/steps/build%20stage%201/logs/stdio
>
> On Thu, Jan 14, 2016 at 11:24 AM Reid Kleckner via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: rnk
>> Date: Thu Jan 14 13:20:17 2016
>> New Revision: 257790
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=257790&view=rev
>> Log:
>> [codeview] Dump CodeView inlinee lines subsection
>>
>> Added:
>>     llvm/trunk/test/tools/llvm-readobj/Inputs/codeview-inlining.obj.coff
>>     llvm/trunk/test/tools/llvm-readobj/codeview-inlining.test
>> Modified:
>>     llvm/trunk/include/llvm/DebugInfo/CodeView/Line.h
>>     llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
>>
>> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/Line.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/Line.h?rev=257790&r1=257789&r2=257790&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/DebugInfo/CodeView/Line.h (original)
>> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/Line.h Thu Jan 14 13:20:17
>> 2016
>> @@ -10,11 +10,14 @@
>>  #ifndef LLVM_DEBUGINFO_CODEVIEW_LINE_H
>>  #define LLVM_DEBUGINFO_CODEVIEW_LINE_H
>>
>> +#include "llvm/Support/Endian.h"
>>  #include <cinttypes>
>>
>>  namespace llvm {
>>  namespace codeview {
>>
>> +using llvm::support::ulittle32_t;
>> +
>>  class LineInfo {
>>  public:
>>    static const uint32_t AlwaysStepIntoLineNumber = 0xfeefee;
>> @@ -118,7 +121,22 @@ public:
>>
>>    bool isNeverStepInto() const { return LineInf.isNeverStepInto(); }
>>  };
>> -}
>> -}
>> +
>> +enum class InlineeLinesSignature : uint32_t {
>> +  Normal,    // CV_INLINEE_SOURCE_LINE_SIGNATURE
>> +  ExtraFiles // CV_INLINEE_SOURCE_LINE_SIGNATURE_EX
>> +};
>> +
>> +struct InlineeSourceLine {
>> +  TypeIndex Inlinee;         // ID of the function that was inlined.
>> +  ulittle32_t FileID;        // Offset into FileChecksums subsection.
>> +  ulittle32_t SourceLineNum; // First line of inlined code.
>> +  // If extra files present:
>> +  //   ulittle32_t ExtraFileCount;
>> +  //   ulittle32_t Files[];
>> +};
>> +
>> +} // namespace codeview
>> +} // namespace llvm
>>
>>  #endif
>>
>> Added:
>> llvm/trunk/test/tools/llvm-readobj/Inputs/codeview-inlining.obj.coff
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/codeview-inlining.obj.coff?rev=257790&view=auto
>>
>> ==============================================================================
>> Binary files
>> llvm/trunk/test/tools/llvm-readobj/Inputs/codeview-inlining.obj.coff
>> (added) and
>> llvm/trunk/test/tools/llvm-readobj/Inputs/codeview-inlining.obj.coff Thu
>> Jan 14 13:20:17 2016 differ
>>
>> Added: llvm/trunk/test/tools/llvm-readobj/codeview-inlining.test
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/codeview-inlining.test?rev=257790&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/test/tools/llvm-readobj/codeview-inlining.test (added)
>> +++ llvm/trunk/test/tools/llvm-readobj/codeview-inlining.test Thu Jan 14
>> 13:20:17 2016
>> @@ -0,0 +1,65 @@
>> +; The following two object files were generated using the following
>> command:
>> +;   $ cl /d2Zi+ /Zc:inline /O2 /Z7 /c t.cpp
>> +; The contents of t.cpp follow:
>> +;   static void bar() {
>> +;     __asm nop
>> +;   }
>> +;   static void baz() {
>> +;     __asm nop
>> +;   }
>> +;   static __forceinline void foo() {
>> +;     __asm nop
>> +;   #include "a.h"
>> +;   #include "b.h"
>> +;     __asm nop
>> +;     goto forwards;
>> +;
>> +;   backwards:
>> +;     __asm nop
>> +;     return;
>> +;
>> +;   forwards:
>> +;     __asm rep nop
>> +;     goto backwards;
>> +;   }
>> +;   int main() {
>> +;     bar();
>> +;     baz();
>> +;     foo();
>> +;   }
>> +;
>> +; Both a.h and b.h contain "__asm nop".
>> +
>> +RUN: llvm-readobj -s -codeview -section-symbols
>> %p/Inputs/codeview-inlining.obj.coff | FileCheck %s
>> +
>> +; FIXME: If we were more clever, we could turn FileIDs into paths.
>> +
>> +; CHECK:       SubSectionType: InlineeLines (0xF6)
>> +; CHECK-NEXT:  SubSectionSize: 0x3C
>> +; CHECK-NEXT:  InlineeSourceLine {
>> +; CHECK-NEXT:    Inlinee: bar (0x1002)
>> +; CHECK-NEXT:    FileID: 0x30
>> +; CHECK-NEXT:    SourceLineNum: 2
>> +; CHECK-NEXT:    ExtraFileCount: 0
>> +; CHECK-NEXT:    ExtraFiles [
>> +; CHECK-NEXT:    ]
>> +; CHECK-NEXT:  }
>> +; CHECK-NEXT:  InlineeSourceLine {
>> +; CHECK-NEXT:    Inlinee: baz (0x1003)
>> +; CHECK-NEXT:    FileID: 0x30
>> +; CHECK-NEXT:    SourceLineNum: 5
>> +; CHECK-NEXT:    ExtraFileCount: 0
>> +; CHECK-NEXT:    ExtraFiles [
>> +; CHECK-NEXT:    ]
>> +; CHECK-NEXT:  }
>> +;   The 'foo' inline site has extra files due to includes.
>> +; CHECK-NEXT:  InlineeSourceLine {
>> +; CHECK-NEXT:    Inlinee: foo (0x1004)
>> +; CHECK-NEXT:    FileID: 0x0
>> +; CHECK-NEXT:    SourceLineNum: 1
>> +; CHECK-NEXT:    ExtraFileCount: 2
>> +; CHECK-NEXT:    ExtraFiles [
>> +; CHECK-NEXT:      FileID: 0x18
>> +; CHECK-NEXT:      FileID: 0x30
>> +; CHECK-NEXT:    ]
>> +; CHECK-NEXT:  }
>>
>> Modified: llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/COFFDumper.cpp?rev=257790&r1=257789&r2=257790&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-readobj/COFFDumper.cpp (original)
>> +++ llvm/trunk/tools/llvm-readobj/COFFDumper.cpp Thu Jan 14 13:20:17 2016
>> @@ -25,6 +25,7 @@
>>  #include "llvm/ADT/StringExtras.h"
>>  #include "llvm/ADT/StringSet.h"
>>  #include "llvm/DebugInfo/CodeView/CodeView.h"
>> +#include "llvm/DebugInfo/CodeView/Line.h"
>>  #include "llvm/DebugInfo/CodeView/TypeIndex.h"
>>  #include "llvm/DebugInfo/CodeView/TypeRecord.h"
>>  #include "llvm/DebugInfo/CodeView/SymbolRecord.h"
>> @@ -91,6 +92,8 @@ private:
>>                                        const SectionRef &Section,
>>                                        StringRef SectionContents);
>>
>> +  void printCodeViewInlineeLines(StringRef Subsection);
>> +
>>    void printMemberAttributes(MemberAttributes Attrs);
>>
>>    void printRelocatedField(StringRef Label, const coff_section *Sec,
>> @@ -991,6 +994,11 @@ void COFFDumper::printCodeViewSymbolSect
>>      case ModuleSubstreamKind::Symbols:
>>        printCodeViewSymbolsSubsection(Contents, Section, SectionContents);
>>        break;
>> +
>> +    case ModuleSubstreamKind::InlineeLines:
>> +      printCodeViewInlineeLines(Contents);
>> +      break;
>> +
>>      case ModuleSubstreamKind::Lines: {
>>        // Holds a PC to file:line table.  Some data to parse this
>> subsection is
>>        // stored in the other subsections, so just check sanity and store
>> the
>> @@ -1685,6 +1693,34 @@ void COFFDumper::printCodeViewSymbolsSub
>>    }
>>  }
>>
>> +void COFFDumper::printCodeViewInlineeLines(StringRef Subsection) {
>> +  StringRef Data = Subsection;
>> +  uint32_t Signature;
>> +  error(consumeUInt32(Data, Signature));
>> +  bool HasExtraFiles = Signature ==
>> unsigned(InlineeLinesSignature::ExtraFiles);
>> +
>> +  while (!Data.empty()) {
>> +    const InlineeSourceLine *ISL;
>> +    error(consumeObject(Data, ISL));
>> +    DictScope S(W, "InlineeSourceLine");
>> +    printTypeIndex("Inlinee", ISL->Inlinee);
>> +    W.printHex("FileID", ISL->FileID);
>> +    W.printNumber("SourceLineNum", ISL->SourceLineNum);
>> +
>> +    if (HasExtraFiles) {
>> +      uint32_t ExtraFileCount;
>> +      error(consumeUInt32(Data, ExtraFileCount));
>> +      W.printNumber("ExtraFileCount", ExtraFileCount);
>> +      ListScope ExtraFiles(W, "ExtraFiles");
>> +      for (unsigned I = 0; I < ExtraFileCount; ++I) {
>> +        uint32_t FileID;
>> +        error(consumeUInt32(Data, FileID));
>> +        W.printHex("FileID", FileID);
>> +      }
>> +    }
>> +  }
>> +}
>> +
>>  StringRef getRemainingTypeBytes(const TypeRecordPrefix *Rec, const char
>> *Start) {
>>    ptrdiff_t StartOffset = Start - reinterpret_cast<const char *>(Rec);
>>    size_t RecSize = Rec->Len + 2;
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
> --
> Mike
> Sent from phone
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160114/a2d522ce/attachment.html>


More information about the llvm-commits mailing list