diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2019-02-28 22:42:55 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2019-02-28 22:42:55 +0000 |
commit | ac136cd18c55c1a5d6884b868b460a5439dd3a52 (patch) | |
tree | ab7a378dc17ebebf3b47db216e48f19a628324b4 | |
parent | b7812652c6f76045884ac4ee45a315e63c905302 (diff) | |
download | bcm5719-llvm-ac136cd18c55c1a5d6884b868b460a5439dd3a52.tar.gz bcm5719-llvm-ac136cd18c55c1a5d6884b868b460a5439dd3a52.zip |
llvm-readobj: Try the DWARF CFI dumper on all machines.
There's no reason to limit the DWARF CFI dumper to EM_386 and EM_X86_64;
ELF files could contain DWARF CFI on almost any platform (even 32-bit ARM;
NetBSD uses DWARF CFI on that platform). So start using the DWARF CFI dumper
unconditionally so that we can dump .eh_frame sections on the remaining ELF
platforms as well as in NetBSD binaries.
Differential Revision: https://reviews.llvm.org/D58761
llvm-svn: 355151
-rw-r--r-- | llvm/test/tools/llvm-readobj/AArch64/dwarf-cfi.s | 25 | ||||
-rw-r--r-- | llvm/test/tools/llvm-readobj/AArch64/lit.local.cfg | 3 | ||||
-rw-r--r-- | llvm/test/tools/llvm-readobj/ARM/dwarf-cfi.s | 27 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/ELFDumper.cpp | 13 |
4 files changed, 60 insertions, 8 deletions
diff --git a/llvm/test/tools/llvm-readobj/AArch64/dwarf-cfi.s b/llvm/test/tools/llvm-readobj/AArch64/dwarf-cfi.s new file mode 100644 index 00000000000..f1295467876 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/AArch64/dwarf-cfi.s @@ -0,0 +1,25 @@ +# RUN: llvm-mc -triple arm64-linux -filetype obj -o - %s | llvm-readobj -u | FileCheck %s + +# CHECK: [0x0] CIE length=16 +# CHECK-NEXT: version: 1 +# CHECK-NEXT: augmentation: zR +# CHECK-NEXT: code_alignment_factor: 1 +# CHECK-NEXT: data_alignment_factor: -4 +# CHECK-NEXT: return_address_register: 30 + +# CHECK: Program: +# CHECK-NEXT: DW_CFA_def_cfa: reg31 +0 + +# CHECK: [0x14] FDE length=16 cie=[0x0] +# CHECK-NEXT: initial_location: 0x0 +# CHECK-NEXT: address_range: 0x4 (end : 0x4) + +# CHECK: Program: +# CHECK-NEXT: DW_CFA_nop: +# CHECK-NEXT: DW_CFA_nop: +# CHECK-NEXT: DW_CFA_nop: + +foo: +.cfi_startproc +ret +.cfi_endproc diff --git a/llvm/test/tools/llvm-readobj/AArch64/lit.local.cfg b/llvm/test/tools/llvm-readobj/AArch64/lit.local.cfg new file mode 100644 index 00000000000..cec29af5bbe --- /dev/null +++ b/llvm/test/tools/llvm-readobj/AArch64/lit.local.cfg @@ -0,0 +1,3 @@ +if not 'AArch64' in config.root.targets: + config.unsupported = True + diff --git a/llvm/test/tools/llvm-readobj/ARM/dwarf-cfi.s b/llvm/test/tools/llvm-readobj/ARM/dwarf-cfi.s new file mode 100644 index 00000000000..36d71d61c9f --- /dev/null +++ b/llvm/test/tools/llvm-readobj/ARM/dwarf-cfi.s @@ -0,0 +1,27 @@ +# RUN: llvm-mc -triple arm-linux -filetype obj -o - %s | llvm-readobj -u | FileCheck %s + +# CHECK: [0x0] CIE length=16 +# CHECK-NEXT: version: 1 +# CHECK-NEXT: augmentation: zR +# CHECK-NEXT: code_alignment_factor: 1 +# CHECK-NEXT: data_alignment_factor: -4 +# CHECK-NEXT: return_address_register: 14 + +# CHECK: Program: +# CHECK-NEXT: DW_CFA_def_cfa: reg13 +0 + +# CHECK: [0x14] FDE length=16 cie=[0x0] +# CHECK-NEXT: initial_location: 0x0 +# CHECK-NEXT: address_range: 0x4 (end : 0x4) + +# CHECK: Program: +# CHECK-NEXT: DW_CFA_nop: +# CHECK-NEXT: DW_CFA_nop: +# CHECK-NEXT: DW_CFA_nop: + +.cpu cortex-a8 + +foo: +.cfi_startproc +bx lr +.cfi_endproc diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp index 410ab3f87ca..6428e9926ef 100644 --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -1890,12 +1890,8 @@ void ELFDumper<ELFT>::printValue(uint64_t Type, uint64_t Value) { template<class ELFT> void ELFDumper<ELFT>::printUnwindInfo() { - const unsigned Machine = ObjF->getELFFile()->getHeader()->e_machine; - if (Machine == EM_386 || Machine == EM_X86_64) { - DwarfCFIEH::PrinterContext<ELFT> Ctx(W, ObjF); - return Ctx.printUnwindInformation(); - } - W.startLine() << "UnwindInfo not implemented.\n"; + DwarfCFIEH::PrinterContext<ELFT> Ctx(W, ObjF); + Ctx.printUnwindInformation(); } namespace { @@ -1905,9 +1901,10 @@ template <> void ELFDumper<ELF32LE>::printUnwindInfo() { const unsigned Machine = Obj->getHeader()->e_machine; if (Machine == EM_ARM) { ARM::EHABI::PrinterContext<ELF32LE> Ctx(W, Obj, DotSymtabSec); - return Ctx.PrintUnwindInformation(); + Ctx.PrintUnwindInformation(); } - W.startLine() << "UnwindInfo not implemented.\n"; + DwarfCFIEH::PrinterContext<ELF32LE> Ctx(W, ObjF); + Ctx.printUnwindInformation(); } } // end anonymous namespace |