Emit S_COMPILE3 record once per TU rather than once per function
authorAdrian McCarthy <amccarth@google.com>
Wed, 2 Nov 2016 21:30:35 +0000 (21:30 +0000)
committerAdrian McCarthy <amccarth@google.com>
Wed, 2 Nov 2016 21:30:35 +0000 (21:30 +0000)
This has some ripple effects in several tests.

llvm-svn: 285862

llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
llvm/test/DebugInfo/COFF/asm.ll
llvm/test/DebugInfo/COFF/multifile.ll
llvm/test/DebugInfo/COFF/multifunction.ll
llvm/test/DebugInfo/COFF/pr28747.ll
llvm/test/DebugInfo/COFF/simple.ll
llvm/test/MC/ARM/coff-debugging-secrel.ll
llvm/test/MC/COFF/cv-compiler-info.ll

index fc69145..aa7a301 100644 (file)
@@ -391,6 +391,11 @@ void CodeViewDebug::endModule() {
   // Use the generic .debug$S section, and make a subsection for all the inlined
   // subprograms.
   switchToDebugSectionForSymbol(nullptr);
+
+  MCSymbol *CompilerInfo = beginCVSubsection(ModuleSubstreamKind::Symbols);
+  emitCompilerInformation();
+  endCVSubsection(CompilerInfo);
+
   emitInlineeLinesSubsection();
 
   // Emit per-function debug information.
@@ -2131,8 +2136,6 @@ MCSymbol *CodeViewDebug::beginCVSubsection(ModuleSubstreamKind Kind) {
   OS.AddComment("Subsection size");
   OS.emitAbsoluteSymbolDiff(EndLabel, BeginLabel, 4);
   OS.EmitLabel(BeginLabel);
-  if (Kind == ModuleSubstreamKind::Symbols)
-    emitCompilerInformation();
   return EndLabel;
 }
 
index 25a012e..3d245e9 100644 (file)
 ; X86:      .cv_loc 0 1 6 0
 ; X86:      ret
 ; X86:      [[END_OF_F:.?Lfunc_end.*]]:
-;
-; X86-LABEL: .section        .debug$S,"dr"
-; X86-NEXT: .p2align 2
-; X86-NEXT: .long   4
-; Symbol subsection
-; X86-NEXT: .long   241
-; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
-; Compiler information record
-; X86-NEXT: [[F1_START]]:
-; X86-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
-; X86:      [[C1_END]]:
-; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
-; X86-NEXT: [[PROC_SEGMENT_START]]:
-; X86-NEXT: .short  4423
-; X86-NEXT: .long   0
-; X86-NEXT: .long   0
-; X86-NEXT: .long   0
-; X86-NEXT: .long [[END_OF_F]]-_f
-; X86-NEXT: .long   0
-; X86-NEXT: .long   0
-; X86-NEXT: .long   4098
-; X86-NEXT: .secrel32 _f
-; X86-NEXT: .secidx _f
-; X86-NEXT: .byte   0
-; X86-NEXT: .asciz "f"
-; X86-NEXT: [[PROC_SEGMENT_END]]:
-; X86-NEXT: .short  2
-; X86-NEXT: .short  4431
-; X86-NEXT: [[F1_END]]:
-; X86-NEXT: .p2align 2
+
 ; Line table
-; X86-NEXT: .cv_linetable 0, _f, [[END_OF_F]]
+; X86:      .cv_linetable 0, _f, [[END_OF_F]]
 ; File index to string table offset subsection
 ; X86-NEXT: .cv_filechecksums
 ; String table
 ; OBJ32:      Name: .debug$S (2E 64 65 62 75 67 24 53)
 ; OBJ32:      Characteristics [ (0x42300040)
 ; OBJ32:      ]
-; OBJ32:      Relocations [
-; OBJ32-NEXT:   0x59 IMAGE_REL_I386_SECREL _f
-; OBJ32-NEXT:   0x5D IMAGE_REL_I386_SECTION _f
-; OBJ32-NEXT:   0x70 IMAGE_REL_I386_SECREL _f
-; OBJ32-NEXT:   0x74 IMAGE_REL_I386_SECTION _f
-; OBJ32-NEXT: ]
 ; OBJ32:    CodeViewDebugInfo [
 ; OBJ32:      Subsection [
 ; OBJ32-NEXT:   SubSectionType: Symbols (0xF1)
 ; X64:      addq    $40, %rsp
 ; X64-NEXT: ret
 ; X64:      [[END_OF_F:.?Lfunc_end.*]]:
-;
-; X64-LABEL: .section        .debug$S,"dr"
-; X64-NEXT: .p2align 2
-; X64-NEXT: .long   4
-; Symbol subsection
-; X64-NEXT: .long   241
-; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
-; Compiler information record
-; X64-NEXT: [[F1_START]]:
-; X64-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
-; X64:      [[C1_END]]:
-; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
-; X64-NEXT: [[PROC_SEGMENT_START]]:
-; X64-NEXT: .short  4423
-; X64-NEXT: .long   0
-; X64-NEXT: .long   0
-; X64-NEXT: .long   0
-; X64-NEXT: .long [[END_OF_F]]-f
-; X64-NEXT: .long   0
-; X64-NEXT: .long   0
-; X64-NEXT: .long   4098
-; X64-NEXT: .secrel32 f
-; X64-NEXT: .secidx f
-; X64-NEXT: .byte   0
-; X64-NEXT: .asciz "f"
-; X64-NEXT: [[PROC_SEGMENT_END]]:
-; X64-NEXT: .short  2
-; X64-NEXT: .short  4431
-; X64-NEXT: [[F1_END]]:
-; X64-NEXT: .p2align 2
+
 ; Line table
-; X64-NEXT: .cv_linetable 0, f, [[END_OF_F]]
+; X64:      .cv_linetable 0, f, [[END_OF_F]]
 ; File index to string table offset subsection
 ; X64-NEXT: .cv_filechecksums
 ; String table
 ; OBJ64:      Name: .debug$S (2E 64 65 62 75 67 24 53)
 ; OBJ64:      Characteristics [ (0x42300040)
 ; OBJ64:      ]
-; OBJ64:      Relocations [
-; OBJ64-NEXT:   0x59 IMAGE_REL_AMD64_SECREL f
-; OBJ64-NEXT:   0x5D IMAGE_REL_AMD64_SECTION f
-; OBJ64-NEXT:   0x70 IMAGE_REL_AMD64_SECREL f
-; OBJ64-NEXT:   0x74 IMAGE_REL_AMD64_SECTION f
-; OBJ64-NEXT: ]
 ; OBJ64:      Subsection [
 ; OBJ64-NEXT:   SubSectionType: Symbols (0xF1)
 ; OBJ64:        ProcStart {
index cb6dba6..5e53fa5 100644 (file)
 ; X86:      .cv_loc 0 1 8 0 # one.c:8:0
 ; X86:      ret
 ; X86:      [[END_OF_F:.?Lfunc_end.*]]:
-;
-; X86-LABEL: .section        .debug$S,"dr"
-; X86-NEXT: .p2align 2
-; X86-NEXT: .long   4
-; Symbol subsection
-; X86-NEXT: .long   241
-; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
-; Compiler information record
-; X86-NEXT: [[F1_START]]:
-; X86-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
-; X86:      [[C1_END]]:
-; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
-; X86-NEXT: [[PROC_SEGMENT_START]]:
-; X86-NEXT: .short  4423
-; X86-NEXT: .long   0
-; X86-NEXT: .long   0
-; X86-NEXT: .long   0
-; X86-NEXT: .long [[END_OF_F]]-_f
-; X86-NEXT: .long   0
-; X86-NEXT: .long   0
-; X86-NEXT: .long   4098
-; X86-NEXT: .secrel32 _f
-; X86-NEXT: .secidx _f
-; X86-NEXT: .byte   0
-; X86-NEXT: .asciz "f"
-; X86-NEXT: [[PROC_SEGMENT_END]]:
-; X86-NEXT: .short  2
-; X86-NEXT: .short  4431
-; X86-NEXT: [[F1_END]]:
-; X86-NEXT: .p2align   2
+
 ; Line table
-; X86-NEXT: .cv_linetable 0, _f, [[END_OF_F]]
+; X86:      .cv_linetable 0, _f, [[END_OF_F]]
 ; File index to string table offset subsection
 ; X86-NEXT: .cv_filechecksums
 ; String table
 ; OBJ32:      Name: .debug$S (2E 64 65 62 75 67 24 53)
 ; OBJ32:      Characteristics [ (0x42300040)
 ; OBJ32:      ]
-; OBJ32:      Relocations [
-; OBJ32-NEXT:   0x59 IMAGE_REL_I386_SECREL _f
-; OBJ32-NEXT:   0x5D IMAGE_REL_I386_SECTION _f
-; OBJ32-NEXT:   0x70 IMAGE_REL_I386_SECREL _f
-; OBJ32-NEXT:   0x74 IMAGE_REL_I386_SECTION _f
-; OBJ32-NEXT: ]
 ; OBJ32:      Subsection [
 ; OBJ32-NEXT:   SubSectionType: Symbols (0xF1)
 ; OBJ32:        ProcStart {
 ; X64:      addq    $40, %rsp
 ; X64-NEXT: ret
 ; X64:      [[END_OF_F:.?Lfunc_end.*]]:
-;
-; X64-LABEL: .section        .debug$S,"dr"
-; X64-NEXT: .p2align 2
-; X64-NEXT: .long   4
-; Symbol subsection
-; X64-NEXT: .long   241
-; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
-; Compiler information record
-; X64-NEXT: [[F1_START]]:
-; X64-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
-; X64:      [[C1_END]]:
-; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
-; X64-NEXT: [[PROC_SEGMENT_START]]:
-; X64-NEXT: .short  4423
-; X64-NEXT: .long   0
-; X64-NEXT: .long   0
-; X64-NEXT: .long   0
-; X64-NEXT: .long [[END_OF_F]]-f
-; X64-NEXT: .long   0
-; X64-NEXT: .long   0
-; X64-NEXT: .long   4098
-; X64-NEXT: .secrel32 f
-; X64-NEXT: .secidx f
-; X64-NEXT: .byte   0
-; X64-NEXT: .asciz "f"
-; X64-NEXT: [[PROC_SEGMENT_END]]:
-; X64-NEXT: .short  2
-; X64-NEXT: .short  4431
-; X64-NEXT: [[F1_END]]:
-; X64-NEXT: .p2align   2
+
 ; X64: .cv_linetable 0, f, [[END_OF_F]]
 ; X64: .cv_filechecksums
 ; X64: .cv_stringtable
 ; OBJ64:      Name: .debug$S (2E 64 65 62 75 67 24 53)
 ; OBJ64:      Characteristics [ (0x42300040)
 ; OBJ64:      ]
-; OBJ64:      Relocations [
-; OBJ64-NEXT:   0x59 IMAGE_REL_AMD64_SECREL f
-; OBJ64-NEXT:   0x5D IMAGE_REL_AMD64_SECTION f
-; OBJ64-NEXT:   0x70 IMAGE_REL_AMD64_SECREL f
-; OBJ64-NEXT:   0x74 IMAGE_REL_AMD64_SECTION f
-; OBJ64-NEXT: ]
 ; OBJ64:      Subsection [
 ; OBJ64-NEXT:   SubSectionType: Symbols (0xF1)
 ; OBJ64:        ProcStart {
index 348dd39..a6290e8 100644 (file)
 ; X86-LABEL: .section        .debug$S,"dr"
 ; X86-NEXT: .p2align 2
 ; X86-NEXT: .long   4
+; X86-NEXT: .long   241
+; X86-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
+; Compiler information record
+; X86-NEXT: [[COMPILE_START]]:
+; X86-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
+; X86:      [[COMPILE_END]]:
+; X86-NEXT: .p2align 2
 ; Symbol subsection for x
 ; X86-NEXT: .long   241
 ; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
-; Compiler information record
 ; X86-NEXT: [[F1_START]]:
-; X86-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
-; X86:      [[C1_END]]:
 ; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
 ; X86-NEXT: [[PROC_SEGMENT_START]]:
 ; X86-NEXT: .short  4422
 ; X86: .cv_linetable 0, _x, [[END_OF_X]]
 ; Symbol subsection for y
 ; X86-NEXT: .long   241
-; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
-; Compiler information record
-; X86-NEXT: [[F1_START]]:
-; X86-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
-; X86:      [[C1_END]]:
+; X86-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
+; X86-NEXT: [[COMPILE_START]]:
 ; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
 ; X86-NEXT: [[PROC_SEGMENT_START]]:
 ; X86-NEXT: .short  4423
 ; X86-NEXT: [[PROC_SEGMENT_END]]:
 ; X86-NEXT: .short  2
 ; X86-NEXT: .short  4431
-; X86-NEXT: [[F1_END]]:
+; X86-NEXT: [[COMPILE_END]]:
 ; X86-NEXT: .p2align 2
 ; Line table subsection for y
 ; X86: .cv_linetable 1, _y, [[END_OF_Y]]
 ; Symbol subsection for f
 ; X86-NEXT: .long   241
-; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
-; Compiler information record
-; X86-NEXT: [[F1_START]]:
-; X86-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
-; X86:      [[C1_END]]:
+; X86-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
+; X86-NEXT: [[COMPILE_START]]:
 ; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
 ; X86-NEXT: [[PROC_SEGMENT_START]]:
 ; X86-NEXT: .short  4423
 ; X86-NEXT: [[PROC_SEGMENT_END]]:
 ; X86-NEXT: .short  2
 ; X86-NEXT: .short  4431
-; X86-NEXT: [[F1_END]]:
+; X86-NEXT: [[COMPILE_END]]:
 ; X86-NEXT: .p2align 2
 ; Line table subsection for f
 ; X86: .cv_linetable 2, _f, [[END_OF_F]]
 ; OBJ32:      Name: .debug$S (2E 64 65 62 75 67 24 53)
 ; OBJ32:      Characteristics [ (0x42300040)
 ; OBJ32:      ]
-; OBJ32:      Relocations [
-; OBJ32-NEXT:   0x59 IMAGE_REL_I386_SECREL _x
-; OBJ32-NEXT:   0x5D IMAGE_REL_I386_SECTION _x
-; OBJ32-NEXT:   0x70 IMAGE_REL_I386_SECREL _x
-; OBJ32-NEXT:   0x74 IMAGE_REL_I386_SECTION _x
-; OBJ32-NEXT:   0xF5 IMAGE_REL_I386_SECREL _y
-; OBJ32-NEXT:   0xF9 IMAGE_REL_I386_SECTION _y
-; OBJ32-NEXT:   0x10C IMAGE_REL_I386_SECREL _y
-; OBJ32-NEXT:   0x110 IMAGE_REL_I386_SECTION _y
-; OBJ32-NEXT:   0x191 IMAGE_REL_I386_SECREL _f
-; OBJ32-NEXT:   0x195 IMAGE_REL_I386_SECTION _f
-; OBJ32-NEXT:   0x1A8 IMAGE_REL_I386_SECREL _f
-; OBJ32-NEXT:   0x1AC IMAGE_REL_I386_SECTION _f
-; OBJ32-NEXT: ]
 ; OBJ32:      Subsection [
 ; OBJ32-NEXT:   SubSectionType: Symbols (0xF1)
 ; OBJ32:        ProcStart {
 ; X64-NEXT: ret
 ; X64:      [[END_OF_F:.?Lfunc_end.*]]:
 ;
+
 ; X64-LABEL: .section        .debug$S,"dr"
 ; X64-NEXT: .p2align 2
 ; X64-NEXT: .long   4
-; Symbol subsection for x
 ; X64-NEXT: .long   241
-; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
+; X64-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
 ; Compiler information record
-; X64-NEXT: [[F1_START]]:
+; X64-NEXT: [[COMPILE_START]]:
 ; X64-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
-; X64:      [[C1_END]]:
+; X64:      [[COMPILE_END]]:
+; X64-NEXT: .p2align 2
+; Symbol subsection for x
+; X64-NEXT: .long   241
+; X64-NEXT: .long  [[F1_END:.*]]-[[F1_START:.*]] #
+; X64-NEXT: [[F1_START]]:
 ; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
 ; X64-NEXT: [[PROC_SEGMENT_START]]:
 ; X64-NEXT: .short  4422
 ; X64: .cv_linetable 0, x, [[END_OF_X]]
 ; Symbol subsection for y
 ; X64-NEXT: .long   241
-; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
-; Compiler information record
-; X64-NEXT: [[F1_START]]:
-; X64-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
-; X64:      [[C1_END]]:
+; X64-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
+; X64-NEXT: [[COMPILE_START]]:
 ; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
 ; X64-NEXT: [[PROC_SEGMENT_START]]:
 ; X64-NEXT: .short  4423
 ; X64-NEXT: [[PROC_SEGMENT_END]]:
 ; X64-NEXT: .short  2
 ; X64-NEXT: .short  4431
-; X64-NEXT: [[F1_END]]:
+; X64-NEXT: [[COMPILE_END]]:
 ; X64-NEXT: .p2align 2
 ; Line table subsection for y
 ; X64: .cv_linetable 1, y, [[END_OF_Y]]
 ; Symbol subsection for f
 ; X64-NEXT: .long   241
-; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
-; Compiler information record
-; X64-NEXT: [[F1_START]]:
-; X64-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
-; X64:      [[C1_END]]:
+; X64-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
+; X64:      [[COMPILE_START]]:
 ; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
 ; X64-NEXT: [[PROC_SEGMENT_START]]:
 ; X64-NEXT: .short  4423
 ; X64-NEXT: [[PROC_SEGMENT_END]]:
 ; X64-NEXT: .short  2
 ; X64-NEXT: .short  4431
-; X64-NEXT: [[F1_END]]:
+; X64-NEXT: [[COMPILE_END]]:
 ; X64-NEXT: .p2align 2
 ; Line table subsection for f
 ; X64: .cv_linetable 2, f, [[END_OF_F]]
 ; OBJ64:      Characteristics [ (0x42300040)
 ; OBJ64:      ]
 ; OBJ64:      Relocations [
-; OBJ64-NEXT:   0x59 IMAGE_REL_AMD64_SECREL x
-; OBJ64-NEXT:   0x5D IMAGE_REL_AMD64_SECTION x
-; OBJ64-NEXT:   0x70 IMAGE_REL_AMD64_SECREL x
-; OBJ64-NEXT:   0x74 IMAGE_REL_AMD64_SECTION x
-; OBJ64-NEXT:   0x101 IMAGE_REL_AMD64_SECREL y
-; OBJ64-NEXT:   0x105 IMAGE_REL_AMD64_SECTION y
-; OBJ64-NEXT:   0x118 IMAGE_REL_AMD64_SECREL y
-; OBJ64-NEXT:   0x11C IMAGE_REL_AMD64_SECTION y
-; OBJ64-NEXT:   0x1A9 IMAGE_REL_AMD64_SECREL f
-; OBJ64-NEXT:   0x1AD IMAGE_REL_AMD64_SECTION f
-; OBJ64-NEXT:   0x1C0 IMAGE_REL_AMD64_SECREL f
-; OBJ64-NEXT:   0x1C4 IMAGE_REL_AMD64_SECTION f
+; OBJ64-NEXT:   0x64 IMAGE_REL_AMD64_SECREL x
+; OBJ64-NEXT:   0x68 IMAGE_REL_AMD64_SECTION x
+; OBJ64-NEXT:   0x7C IMAGE_REL_AMD64_SECREL x
+; OBJ64-NEXT:   0x80 IMAGE_REL_AMD64_SECTION x
+; OBJ64-NEXT:   0xE0 IMAGE_REL_AMD64_SECREL y
+; OBJ64-NEXT:   0xE4 IMAGE_REL_AMD64_SECTION y
+; OBJ64-NEXT:   0xF8 IMAGE_REL_AMD64_SECREL y
+; OBJ64-NEXT:   0xFC IMAGE_REL_AMD64_SECTION y
+; OBJ64-NEXT:   0x15C IMAGE_REL_AMD64_SECREL f
+; OBJ64-NEXT:   0x160 IMAGE_REL_AMD64_SECTION f
+; OBJ64-NEXT:   0x174 IMAGE_REL_AMD64_SECREL f
+; OBJ64-NEXT:   0x178 IMAGE_REL_AMD64_SECTION f
 ; OBJ64-NEXT: ]
 ; OBJ64:      Subsection [
 ; OBJ64-NEXT:   SubSectionType: Symbols (0xF1)
index d19a2fa..f80684d 100644 (file)
@@ -1,8 +1,14 @@
 ; RUN: llc < %s | FileCheck %s
-
 ; CHECK:             .section .debug$S,"dr"{{$}}
 ; CHECK-NEXT:        .p2align 2
 ; CHECK-NEXT:        .long 4
+; CHECK-NEXT:        .long     241
+; CHECK-NEXT:        .long     [[SUBSEC_END:.*]]-[[SUBSEC_START:.*]] # Subsection size
+; CHECK-NEXT:        [[SUBSEC_START]]:
+; CHECK-NEXT:        .short    [[C1_END:.*]]-[[C1_START:.*]] # Record length
+; CHECK:             [[C1_END]]:
+; CHECK-NEXT:        [[SUBSEC_END]]:
+; CHECK-NEXT:        .p2align 2
 ; CHECK-NEXT:        .cv_filechecksums
 ; CHECK-NEXT:        .cv_stringtable
 
index 292aedd..2a71a9f 100644 (file)
 ; X86-NEXT: .long   4
 ; Symbol subsection
 ; X86-NEXT: .long   241
-; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
+; X86-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
 ; Compiler information record
-; X86-NEXT: [[F1_START]]:
+; X86-NEXT: [[COMPILE_START]]:
 ; X86-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
 ; X86:      [[C1_END]]:
+; X86-NEXT: [[COMPILE_END]]:
+; X86-NEXT: .p2align   2
+; X86-NEXT:    .long   241  # Symbol subsection for f
+; X86-NEXT:    .long   [[F1_END:.*]]-[[F1_START:.*]] # Subsection size
+; X86-NEXT: [[F1_START]]:
 ; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
 ; X86-NEXT: [[PROC_SEGMENT_START]]:
 ; X86-NEXT: .short  4423
 ; OBJ32:      Characteristics [ (0x42300040)
 ; OBJ32:      ]
 ; OBJ32:      Relocations [
-; OBJ32-NEXT:   0x59 IMAGE_REL_I386_SECREL _f
-; OBJ32-NEXT:   0x5D IMAGE_REL_I386_SECTION _f
-; OBJ32-NEXT:   0x70 IMAGE_REL_I386_SECREL _f
-; OBJ32-NEXT:   0x74 IMAGE_REL_I386_SECTION _f
+; OBJ32-NEXT:   0x64 IMAGE_REL_I386_SECREL _f
+; OBJ32-NEXT:   0x68 IMAGE_REL_I386_SECTION _f
+; OBJ32-NEXT:   0x7C IMAGE_REL_I386_SECREL _f
+; OBJ32-NEXT:   0x80 IMAGE_REL_I386_SECTION _f
 ; OBJ32-NEXT: ]
 ; OBJ32:      Subsection [
 ; OBJ32-NEXT:   SubSectionType: Symbols (0xF1)
 ; X64-NEXT: .long   4
 ; Symbol subsection
 ; X64-NEXT: .long   241
-; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
+; X64-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
 ; Compiler information record
-; X64-NEXT: [[F1_START]]:
+; X64-NEXT: [[COMPILE_START]]:
 ; X64-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
 ; X64:      [[C1_END]]:
+; X64-NEXT: [[COMPILE_END]]:
+; X64-NEXT: .p2align   2
+; X64-NEXT:    .long   241  # Symbol subsection for f
+; X64-NEXT:    .long   [[F1_END:.*]]-[[F1_START:.*]] # Subsection size
+; X64-NEXT: [[F1_START]]:
 ; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
 ; X64-NEXT: [[PROC_SEGMENT_START]]:
 ; X64-NEXT: .short  4423
 ; OBJ64:      Characteristics [ (0x42300040)
 ; OBJ64:      ]
 ; OBJ64:      Relocations [
-; OBJ64-NEXT:   0x59 IMAGE_REL_AMD64_SECREL f
-; OBJ64-NEXT:   0x5D IMAGE_REL_AMD64_SECTION f
-; OBJ64-NEXT:   0x70 IMAGE_REL_AMD64_SECREL f
-; OBJ64-NEXT:   0x74 IMAGE_REL_AMD64_SECTION f
+; OBJ64-NEXT:   0x64 IMAGE_REL_AMD64_SECREL f
+; OBJ64-NEXT:   0x68 IMAGE_REL_AMD64_SECTION f
+; OBJ64-NEXT:   0x7C IMAGE_REL_AMD64_SECREL f
+; OBJ64-NEXT:   0x80 IMAGE_REL_AMD64_SECTION f
 ; OBJ64-NEXT: ]
 ; OBJ64:      Subsection [
 ; OBJ64-NEXT:   SubSectionType: Symbols (0xF1)
index 031aa76..a273f10 100644 (file)
@@ -42,10 +42,10 @@ entry:
 
 ; CHECK-MSVC: Relocations [
 ; CHECK-MSVC:   Section {{.*}} .debug$S {
-; CHECK-MSVC:     0x5A IMAGE_REL_ARM_SECREL function
-; CHECK-MSVC:     0x5E IMAGE_REL_ARM_SECTION function
-; CHECK-MSVC:     0x78 IMAGE_REL_ARM_SECREL function
-; CHECK-MSVC:     0x7C IMAGE_REL_ARM_SECTION function
+; CHECK-MSVC:     0x64 IMAGE_REL_ARM_SECREL function
+; CHECK-MSVC:     0x68 IMAGE_REL_ARM_SECTION function
+; CHECK-MSVC:     0x80 IMAGE_REL_ARM_SECREL function
+; CHECK-MSVC:     0x84 IMAGE_REL_ARM_SECTION function
 ; CHECK-MSVC:   }
 ; CHECK-MSVC: ]
 
index 36e6ccf..6c33a25 100644 (file)
@@ -17,16 +17,9 @@ attributes #0 = { nounwind sspstrong "correctly-rounded-divide-sqrt-fp-math"="fa
 !llvm.ident = !{!9}
 
 !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 4.0.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
-; The debug$S section should begin with an S_COMPILE3 record that identifies the
+; One .debug$S section should contain an S_COMPILE3 record that identifies the
 ; source language and the version of the compiler based on the DICompileUnit.
 ; CHECK:       .section        .debug$S,"dr"
-; CHECK:               .p2align        2
-; CHECK:               .long   4                       # Debug section magic
-; CHECK:               .long   241                     # Symbol subsection for foo
-; CHECK:               .long   Ltmp3-Ltmp2             # Subsection size
-; CHECK:       Ltmp2:
-; CHECK:               .short  Ltmp5-Ltmp4           # Record length
-; CHECK:       Ltmp4:
 ; CHECK:               .short  4412                  # Record kind: S_COMPILE3
 ; CHECK:               .long   1                       # Flags and language
 ; CHECK:               .short  7                     # CPUType
@@ -39,7 +32,7 @@ attributes #0 = { nounwind sspstrong "correctly-rounded-divide-sqrt-fp-math"="fa
 ; CHECK:               .short  0
 ; CHECK:               .short  0
 ; CHECK:               .asciz  "clang version 4.0.0 "  # Null-terminated compiler version string
-; CHECK:  Ltmp5:
+; CHECK-NOT: .short    4412                  # Record kind: S_COMPILE3
 !1 = !DIFile(filename: "D:\5Csrc\5Cscopes\5Cfoo.cpp", directory: "D:\5Csrc\5Cscopes\5Cclang")
 !2 = !{}
 !3 = !{i32 6, !"Linker Options", !4}