From: Paul Robinson Date: Wed, 23 Dec 2015 01:57:31 +0000 (+0000) Subject: Form reform for MCDwarf. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=073a62bc1d896ee8afb5b178f2235fb699498804;p=oota-llvm.git Form reform for MCDwarf. MCDwarf emits a canned abbreviation table, but was not emitting proper forms for DWARF version 4, which is the default after r249655. Differential Revision: http://reviews.llvm.org/D15732 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256313 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index a63feeff857..c97d9bb6f92 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -514,10 +514,14 @@ static void EmitGenDwarfAbbrev(MCStreamer *MCOS) { MCOS->EmitULEB128IntValue(1); MCOS->EmitULEB128IntValue(dwarf::DW_TAG_compile_unit); MCOS->EmitIntValue(dwarf::DW_CHILDREN_yes, 1); - EmitAbbrev(MCOS, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4); - if (MCOS->getContext().getGenDwarfSectionSyms().size() > 1 && - MCOS->getContext().getDwarfVersion() >= 3) { - EmitAbbrev(MCOS, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4); + EmitAbbrev(MCOS, dwarf::DW_AT_stmt_list, + context.getDwarfVersion() >= 4 ? dwarf::DW_FORM_sec_offset + : dwarf::DW_FORM_data4); + if (context.getGenDwarfSectionSyms().size() > 1 && + context.getDwarfVersion() >= 3) { + EmitAbbrev(MCOS, dwarf::DW_AT_ranges, + context.getDwarfVersion() >= 4 ? dwarf::DW_FORM_sec_offset + : dwarf::DW_FORM_data4); } else { EmitAbbrev(MCOS, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr); EmitAbbrev(MCOS, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr); diff --git a/test/MC/ARM/dwarf-asm-multiple-sections-dwarf-2.s b/test/MC/ARM/dwarf-asm-multiple-sections-dwarf-2.s index 5bf8fbd57fa..d23c9a93de3 100644 --- a/test/MC/ARM/dwarf-asm-multiple-sections-dwarf-2.s +++ b/test/MC/ARM/dwarf-asm-multiple-sections-dwarf-2.s @@ -25,7 +25,7 @@ b: // DWARF: .debug_info contents: // DWARF: 0x{{[0-9a-f]+}}: DW_TAG_compile_unit [1] -// CHECK-NOT-DWARF: DW_TAG_ +// DWARF-NOT: DW_TAG_ // DWARF: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) // DWARF: DW_AT_high_pc [DW_FORM_addr] (0x0000000000000004) diff --git a/test/MC/ARM/dwarf-asm-multiple-sections.s b/test/MC/ARM/dwarf-asm-multiple-sections.s index 0eb8bab8162..49550559e95 100644 --- a/test/MC/ARM/dwarf-asm-multiple-sections.s +++ b/test/MC/ARM/dwarf-asm-multiple-sections.s @@ -1,6 +1,8 @@ // RUN: llvm-mc < %s -triple=armv7-linux-gnueabi -filetype=obj -o %t -g -fdebug-compilation-dir=/tmp -// RUN: llvm-dwarfdump %t | FileCheck -check-prefix DWARF %s +// RUN: llvm-dwarfdump %t | FileCheck -check-prefix DWARF -check-prefix DWARF4 %s // RUN: llvm-objdump -r %t | FileCheck -check-prefix RELOC %s +// RUN: llvm-mc < %s -triple=armv7-linux-gnueabi -filetype=obj -o %t -g -dwarf-version 3 -fdebug-compilation-dir=/tmp +// RUN: llvm-dwarfdump %t | FileCheck -check-prefix DWARF -check-prefix DWARF3 %s // RUN: llvm-mc < %s -triple=armv7-linux-gnueabi -filetype=obj -o %t -g -dwarf-version 2 2>&1 | FileCheck -check-prefix VERSION %s // RUN: not llvm-mc < %s -triple=armv7-linux-gnueabi -filetype=obj -o %t -g -dwarf-version 1 2>&1 | FileCheck -check-prefix DWARF1 %s // RUN: not llvm-mc < %s -triple=armv7-linux-gnueabi -filetype=obj -o %t -g -dwarf-version 5 2>&1 | FileCheck -check-prefix DWARF5 %s @@ -15,8 +17,10 @@ b: // DWARF: .debug_abbrev contents: // DWARF: Abbrev table for offset: 0x00000000 // DWARF: [1] DW_TAG_compile_unit DW_CHILDREN_yes -// DWARF: DW_AT_stmt_list DW_FORM_data4 -// DWARF: DW_AT_ranges DW_FORM_data4 +// DWARF3: DW_AT_stmt_list DW_FORM_data4 +// DWARF4: DW_AT_stmt_list DW_FORM_sec_offset +// DWARF3: DW_AT_ranges DW_FORM_data4 +// DWARF4: DW_AT_ranges DW_FORM_sec_offset // DWARF: DW_AT_name DW_FORM_string // DWARF: DW_AT_comp_dir DW_FORM_string // DWARF: DW_AT_producer DW_FORM_string @@ -24,8 +28,9 @@ b: // DWARF: .debug_info contents: // DWARF: 0x{{[0-9a-f]+}}: DW_TAG_compile_unit [1] -// CHECK-NOT-DWARF: DW_TAG_ -// DWARF: DW_AT_ranges [DW_FORM_data4] (0x00000000 +// DWARF-NOT: DW_TAG_ +// DWARF3: DW_AT_ranges [DW_FORM_data4] (0x00000000 +// DWARF4: DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 // DWARF: 0x{{[0-9a-f]+}}: DW_TAG_label [2] * // DWARF-NEXT: DW_AT_name [DW_FORM_string] ("a") @@ -41,10 +46,10 @@ b: // DWARF: .debug_line contents: -// DWARF: 0x0000000000000000 9 0 1 0 0 is_stmt -// DWARF-NEXT: 0x0000000000000004 9 0 1 0 0 is_stmt end_sequence -// DWARF-NEXT: 0x0000000000000000 13 0 1 0 0 is_stmt -// DWARF-NEXT: 0x0000000000000004 13 0 1 0 0 is_stmt end_sequence +// DWARF: 0x0000000000000000 11 0 1 0 0 is_stmt +// DWARF-NEXT: 0x0000000000000004 11 0 1 0 0 is_stmt end_sequence +// DWARF-NEXT: 0x0000000000000000 15 0 1 0 0 is_stmt +// DWARF-NEXT: 0x0000000000000004 15 0 1 0 0 is_stmt end_sequence // DWARF: .debug_ranges contents: diff --git a/test/MC/ARM/dwarf-asm-nonstandard-section.s b/test/MC/ARM/dwarf-asm-nonstandard-section.s index 497a39ad116..39065a4d05f 100644 --- a/test/MC/ARM/dwarf-asm-nonstandard-section.s +++ b/test/MC/ARM/dwarf-asm-nonstandard-section.s @@ -9,7 +9,7 @@ b: // DWARF: .debug_abbrev contents: // DWARF: Abbrev table for offset: 0x00000000 // DWARF: [1] DW_TAG_compile_unit DW_CHILDREN_yes -// DWARF: DW_AT_stmt_list DW_FORM_data4 +// DWARF: DW_AT_stmt_list DW_FORM_sec_offset // DWARF: DW_AT_low_pc DW_FORM_addr // DWARF: DW_AT_high_pc DW_FORM_addr // DWARF: DW_AT_name DW_FORM_string diff --git a/test/MC/ARM/dwarf-asm-single-section.s b/test/MC/ARM/dwarf-asm-single-section.s index c57e6498a38..808236f65b3 100644 --- a/test/MC/ARM/dwarf-asm-single-section.s +++ b/test/MC/ARM/dwarf-asm-single-section.s @@ -10,7 +10,7 @@ a: // DWARF: .debug_abbrev contents: // DWARF: Abbrev table for offset: 0x00000000 // DWARF: [1] DW_TAG_compile_unit DW_CHILDREN_yes -// DWARF: DW_AT_stmt_list DW_FORM_data4 +// DWARF: DW_AT_stmt_list DW_FORM_sec_offset // DWARF: DW_AT_low_pc DW_FORM_addr // DWARF: DW_AT_high_pc DW_FORM_addr // DWARF: DW_AT_name DW_FORM_string @@ -20,7 +20,7 @@ a: // DWARF: .debug_info contents: // DWARF: 0x{{[0-9a-f]+}}: DW_TAG_compile_unit [1] -// CHECK-NOT-DWARF: DW_TAG_ +// DWARF-NOT: DW_TAG_ // DWARF: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) // DWARF: DW_AT_high_pc [DW_FORM_addr] (0x0000000000000004) diff --git a/test/MC/MachO/gen-dwarf.s b/test/MC/MachO/gen-dwarf.s index ad0a562aaf7..22a8e93799d 100644 --- a/test/MC/MachO/gen-dwarf.s +++ b/test/MC/MachO/gen-dwarf.s @@ -17,7 +17,7 @@ _x: .long 1 // CHECK: .debug_abbrev contents: // CHECK: Abbrev table for offset: 0x00000000 // CHECK: [1] DW_TAG_compile_unit DW_CHILDREN_yes -// CHECK: DW_AT_stmt_list DW_FORM_data4 +// CHECK: DW_AT_stmt_list DW_FORM_sec_offset // CHECK: DW_AT_low_pc DW_FORM_addr // CHECK: DW_AT_high_pc DW_FORM_addr // CHECK: DW_AT_name DW_FORM_string @@ -39,7 +39,7 @@ _x: .long 1 // We don't check the leading addresses these are at. // CHECK: DW_TAG_compile_unit [1] * -// CHECK: DW_AT_stmt_list [DW_FORM_data4] (0x00000000) +// CHECK: DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) // CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) // CHECK: DW_AT_high_pc [DW_FORM_addr] (0x0000000000000008) // We don't check the file name as it is a temp directory