diff options
| author | Eric Christopher <echristo@gmail.com> | 2013-09-23 20:55:35 +0000 |
|---|---|---|
| committer | Eric Christopher <echristo@gmail.com> | 2013-09-23 20:55:35 +0000 |
| commit | cdeaae4f75fa2716bdc749b812273ac046344091 (patch) | |
| tree | 3164fc3ebd609ba4becad8332c4267d97c1bfcee | |
| parent | a4ae405c1f6103373ca6eba47b1da9f61599bde6 (diff) | |
| download | external_llvm-cdeaae4f75fa2716bdc749b812273ac046344091.zip external_llvm-cdeaae4f75fa2716bdc749b812273ac046344091.tar.gz external_llvm-cdeaae4f75fa2716bdc749b812273ac046344091.tar.bz2 | |
Handle gnu pubtypes sections:
a) Make sure we are emitting the correct section in our section labels
when we begin the module.
b) Make sure we are emitting the correct pubtypes section in the
presence of gnu pubtypes.
c) For C++ struct, union, class, and enumeration types are default
external.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191225 91177308-0d34-0410-b5e6-96231b3b80d8
| -rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 16 | ||||
| -rw-r--r-- | test/DebugInfo/X86/gnu-public-names.ll | 5 |
2 files changed, 15 insertions, 6 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 48a7c18..a6de1ac 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1966,12 +1966,12 @@ void DwarfDebug::emitSectionLabels() { DwarfLineSectionSym = emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line"); emitSectionSym(Asm, TLOF.getDwarfLocSection()); - if (HasDwarfPubSections) { - emitSectionSym(Asm, TLOF.getDwarfPubNamesSection()); - emitSectionSym(Asm, TLOF.getDwarfPubTypesSection()); - } else if (GenerateGnuPubSections) { + if (GenerateGnuPubSections) { emitSectionSym(Asm, TLOF.getDwarfGnuPubNamesSection()); emitSectionSym(Asm, TLOF.getDwarfGnuPubTypesSection()); + } else if (HasDwarfPubSections) { + emitSectionSym(Asm, TLOF.getDwarfPubNamesSection()); + emitSectionSym(Asm, TLOF.getDwarfPubTypesSection()); } DwarfStrSectionSym = @@ -2358,6 +2358,10 @@ static dwarf::PubIndexEntryDescriptor computeIndexValue(CompileUnit *CU, case dwarf::DW_TAG_structure_type: case dwarf::DW_TAG_union_type: case dwarf::DW_TAG_enumeration_type: + return dwarf::PubIndexEntryDescriptor( + dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus + ? dwarf::GIEL_STATIC + : dwarf::GIEL_EXTERNAL); case dwarf::DW_TAG_typedef: case dwarf::DW_TAG_base_type: case dwarf::DW_TAG_subrange_type: @@ -2446,7 +2450,9 @@ void DwarfDebug::emitDebugPubNames(bool GnuStyle) { void DwarfDebug::emitDebugPubTypes(bool GnuStyle) { const MCSection *ISec = Asm->getObjFileLowering().getDwarfInfoSection(); - const MCSection *PSec = Asm->getObjFileLowering().getDwarfPubTypesSection(); + const MCSection *PSec = + GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection() + : Asm->getObjFileLowering().getDwarfPubTypesSection(); for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(), E = CUMap.end(); diff --git a/test/DebugInfo/X86/gnu-public-names.ll b/test/DebugInfo/X86/gnu-public-names.ll index 0dd668a..54320be 100644 --- a/test/DebugInfo/X86/gnu-public-names.ll +++ b/test/DebugInfo/X86/gnu-public-names.ll @@ -33,9 +33,12 @@ ; int global_namespace_variable = 1; ; } - +; ASM: .section .debug_gnu_pubnames ; ASM: .byte 32 # Kind: VARIABLE, EXTERNAL +; ASM: .section .debug_gnu_pubtypes +; ASM: .byte 16 # Kind: TYPE, EXTERNAL + ; CHECK: .debug_info contents: ; CHECK: 0x00000046: DW_TAG_subprogram ; CHECK-NEXT: DW_AT_MIPS_linkage_name |
