summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/MC/MCObjectFileInfo.cpp6
-rw-r--r--llvm/test/MC/Mips/cfi-encoding.s23
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
OpenPOWER on IntegriCloud