diff options
-rw-r--r-- | llvm/lib/MC/MCObjectFileInfo.cpp | 6 | ||||
-rw-r--r-- | llvm/test/MC/Mips/cfi-encoding.s | 23 |
2 files changed, 26 insertions, 3 deletions
diff --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp index 0f9070bc7dd..edfccfcb9ed 100644 --- a/llvm/lib/MC/MCObjectFileInfo.cpp +++ b/llvm/lib/MC/MCObjectFileInfo.cpp @@ -291,11 +291,11 @@ void MCObjectFileInfo::initELFMCObjectFileInfo(const Triple &T, bool Large) { switch (T.getArch()) { case Triple::mips: case Triple::mipsel: - FDECFIEncoding = dwarf::DW_EH_PE_sdata4; - break; case Triple::mips64: case Triple::mips64el: - FDECFIEncoding = dwarf::DW_EH_PE_sdata8; + FDECFIEncoding = Ctx->getAsmInfo()->getCodePointerSize() == 4 + ? dwarf::DW_EH_PE_sdata4 + : dwarf::DW_EH_PE_sdata8; break; case Triple::ppc64: case Triple::ppc64le: diff --git a/llvm/test/MC/Mips/cfi-encoding.s b/llvm/test/MC/Mips/cfi-encoding.s new file mode 100644 index 00000000000..fe098076830 --- /dev/null +++ b/llvm/test/MC/Mips/cfi-encoding.s @@ -0,0 +1,23 @@ +# RUN: llvm-mc -filetype=obj -triple mips--gnu -g %s \ +# RUN: | llvm-objdump -s -section=.eh_frame - | FileCheck --check-prefix=O32 %s +# RUN: llvm-mc -filetype=obj -triple mips64--gnuabin32 -g %s \ +# RUN: | llvm-objdump -s -section=.eh_frame - | FileCheck --check-prefix=N32 %s +# RUN: llvm-mc -filetype=obj -triple mips64--gnuabi64 -g %s \ +# RUN: | llvm-objdump -s -section=.eh_frame - | FileCheck --check-prefix=N64 %s + +# O32: 0000 00000010 00000000 017a5200 017c1f01 +# O32: 0010 0b0c1d00 00000010 00000018 00000000 +# O32: 0020 00000004 00000000 + +# N32: 0000 00000010 00000000 017a5200 017c1f01 +# N32: 0010 0b0c1d00 00000010 00000018 00000000 +# N32: 0020 00000004 00000000 + +# N64: 0000 00000010 00000000 017a5200 01781f01 +# N64: 0010 0c0c1d00 00000018 00000018 00000000 +# N64: 0020 00000000 00000000 00000004 00000000 + +foo: + .cfi_startproc + nop + .cfi_endproc |