[llvm] r344040 - [mips] Fix FDE/CFI encoding in case of N32 ABI

Simon Atanasyan via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 9 04:29:51 PDT 2018


Author: atanasyan
Date: Tue Oct  9 04:29:51 2018
New Revision: 344040

URL: http://llvm.org/viewvc/llvm-project?rev=344040&view=rev
Log:
[mips] Fix FDE/CFI encoding in case of N32 ABI

For O32 and N32 ABI FDE/CFI encoding should be `DW_EH_PE_sdata4` and only
N64 ABI uses `DW_EH_PE_sdata8`. To cover all cases this patch check code
pointer size and setup a correct FDE/CFI encoding type.

Differential revision: https://reviews.llvm.org/D52876

Added:
    llvm/trunk/test/MC/Mips/cfi-encoding.s
Modified:
    llvm/trunk/lib/MC/MCObjectFileInfo.cpp

Modified: llvm/trunk/lib/MC/MCObjectFileInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCObjectFileInfo.cpp?rev=344040&r1=344039&r2=344040&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCObjectFileInfo.cpp (original)
+++ llvm/trunk/lib/MC/MCObjectFileInfo.cpp Tue Oct  9 04:29:51 2018
@@ -291,11 +291,11 @@ void MCObjectFileInfo::initELFMCObjectFi
   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:

Added: llvm/trunk/test/MC/Mips/cfi-encoding.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/cfi-encoding.s?rev=344040&view=auto
==============================================================================
--- llvm/trunk/test/MC/Mips/cfi-encoding.s (added)
+++ llvm/trunk/test/MC/Mips/cfi-encoding.s Tue Oct  9 04:29:51 2018
@@ -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




More information about the llvm-commits mailing list