From: Rafael Espindola Date: Tue, 28 Apr 2015 13:55:31 +0000 (+0000) Subject: Use CIE version 4 for dwarf4. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=99243571758cfc55ddfc9959e149e84a705b4d4a;p=oota-llvm.git Use CIE version 4 for dwarf4. According to http://www.dwarfstd.org/doc/DWARF4.pdf appendix F the CIE version for dwarf 4 is 4. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235988 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index e22b993d569..a8cb384054e 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -1244,6 +1244,20 @@ void FrameEmitterImpl::EmitCompactUnwind(MCObjectStreamer &Streamer, Streamer.EmitIntValue(0, Size); // No LSDA } +static unsigned getCIEVersion(bool IsEH, unsigned DwarfVersion) { + if (IsEH) + return 1; + switch (DwarfVersion) { + case 2: + return 1; + case 3: + return 3; + case 4: + return 4; + } + llvm_unreachable("Unknown version"); +} + const MCSymbol &FrameEmitterImpl::EmitCIE(MCObjectStreamer &streamer, const MCSymbol *personality, unsigned personalityEncoding, @@ -1270,10 +1284,7 @@ const MCSymbol &FrameEmitterImpl::EmitCIE(MCObjectStreamer &streamer, streamer.EmitIntValue(CIE_ID, 4); // Version - // For .eh_frame, we use CIE version 1 - // For DWARF2, we use CIE version 1 - // For DWARF3+, we use CIE version 3 - uint8_t CIEVersion = (IsEH || context.getDwarfVersion() <= 2) ? 1 : 3; + uint8_t CIEVersion = getCIEVersion(IsEH, context.getDwarfVersion()); streamer.EmitIntValue(CIEVersion, 1); // Augmentation String diff --git a/test/MC/ELF/cfi-sections.s b/test/MC/ELF/cfi-sections.s index b0ba543e5bd..04240a8936c 100644 --- a/test/MC/ELF/cfi-sections.s +++ b/test/MC/ELF/cfi-sections.s @@ -26,7 +26,7 @@ f2: // ELF_64-NEXT: AddressAlignment: 8 // ELF_64-NEXT: EntrySize: 0 // ELF_64-NEXT: SectionData ( -// ELF_64-NEXT: 0000: 14000000 FFFFFFFF 03000178 100C0708 +// ELF_64-NEXT: 0000: 14000000 FFFFFFFF 04000178 100C0708 // ELF_64-NEXT: 0010: 90010000 00000000 14000000 00000000 // ELF_64-NEXT: 0020: 00000000 00000000 01000000 00000000 // ELF_64-NEXT: 0030: 14000000 00000000 00000000 00000000 @@ -47,7 +47,7 @@ f2: // ELF_32-NEXT: AddressAlignment: 4 // ELF_32-NEXT: EntrySize: 0 // ELF_32-NEXT: SectionData ( -// ELF_32-NEXT: 0000: 10000000 FFFFFFFF 0300017C 080C0404 +// ELF_32-NEXT: 0000: 10000000 FFFFFFFF 0400017C 080C0404 // ELF_32-NEXT: 0010: 88010000 0C000000 00000000 00000000 // ELF_32-NEXT: 0020: 01000000 0C000000 00000000 01000000 // ELF_32-NEXT: 0030: 01000000 diff --git a/test/MC/ELF/cfi-version.ll b/test/MC/ELF/cfi-version.ll index 2f34b2a1f08..71ed007a8b5 100644 --- a/test/MC/ELF/cfi-version.ll +++ b/test/MC/ELF/cfi-version.ll @@ -1,6 +1,6 @@ ; RUN: %llc_dwarf %s -o - -dwarf-version 2 -filetype=obj | llvm-dwarfdump - | FileCheck %s --check-prefix=DWARF2 -; RUN: %llc_dwarf %s -o - -dwarf-version 3 -filetype=obj | llvm-dwarfdump - | FileCheck %s --check-prefix=DWARF34 -; RUN: %llc_dwarf %s -o - -dwarf-version 4 -filetype=obj | llvm-dwarfdump - | FileCheck %s --check-prefix=DWARF34 +; RUN: %llc_dwarf %s -o - -dwarf-version 3 -filetype=obj | llvm-dwarfdump - | FileCheck %s --check-prefix=DWARF3 +; RUN: %llc_dwarf %s -o - -dwarf-version 4 -filetype=obj | llvm-dwarfdump - | FileCheck %s --check-prefix=DWARF4 ; .debug_frame is not emitted for targeting Windows x64. ; REQUIRES: debug_frame @@ -40,6 +40,10 @@ attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n ; DWARF2: Version: 1 ; DWARF2-NEXT: Augmentation: -; DWARF34: .debug_frame contents: -; DWARF34: Version: 3 -; DWARF34-NEXT: Augmentation: +; DWARF3: .debug_frame contents: +; DWARF3: Version: 3 +; DWARF3-NEXT: Augmentation: + +; DWARF4: .debug_frame contents: +; DWARF4: Version: 4 +; DWARF4-NEXT: Augmentation: