[PATCH] D63409: [WIP][RISCV] Specify various encodings for DWARF exception handling

Edward Jones via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 17 04:38:35 PDT 2019


edward-jones created this revision.
edward-jones added reviewers: asb, lewis-revill, HsiangKai.
Herald added subscribers: llvm-commits, benna, psnobl, rkruppe, rogfer01, shiva0217, kito-cheng.
Herald added a project: LLVM.

This specifies the encodings used for the personality function, LSDA and type info for exception handling.

Currently WIP as this is missing tests


Repository:
  rL LLVM

https://reviews.llvm.org/D63409

Files:
  lib/CodeGen/TargetLoweringObjectFileImpl.cpp


Index: lib/CodeGen/TargetLoweringObjectFileImpl.cpp
===================================================================
--- lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -205,6 +205,27 @@
     TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
       dwarf::DW_EH_PE_udata8;
     break;
+  case Triple::riscv32:
+  case Triple::riscv64:
+    assert((CM == CodeModel::Small || CM == CodeModel::Medium)
+           && "unhandled code model");
+    if (isPositionIndependent()) {
+      PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
+        dwarf::DW_EH_PE_sdata4;
+      LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
+      TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel |
+        dwarf::DW_EH_PE_sdata4;
+    } else if (CM == CodeModel::Small) {
+      PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_udata4;
+      LSDAEncoding = dwarf::DW_EH_PE_udata4;
+      TTypeEncoding = dwarf::DW_EH_PE_udata4;
+    } else {
+      assert(CM == CodeModel::Medium);
+      PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_absptr;
+      LSDAEncoding = dwarf::DW_EH_PE_absptr;
+      TTypeEncoding = dwarf::DW_EH_PE_absptr;
+    }
+    break;
   case Triple::sparcel:
   case Triple::sparc:
     if (isPositionIndependent()) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D63409.205025.patch
Type: text/x-patch
Size: 1379 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190617/2f842ac6/attachment.bin>


More information about the llvm-commits mailing list