[PATCH] D80690: [RISCV] Support libunwind for riscv32

Luís Marques via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu May 28 01:02:44 PDT 2020


luismarques added inline comments.


================
Comment at: libunwind/include/__libunwind_config.h:132
 #    define _LIBUNWIND_TARGET_RISCV 1
-#    define _LIBUNWIND_CONTEXT_SIZE 64
+#    define _LIBUNWIND_CONTEXT_SIZE (32 * (__riscv_xlen + __riscv_flen) / 64)
 #    define _LIBUNWIND_CURSOR_SIZE 76
----------------
This doesn't seem correct.


================
Comment at: libunwind/src/Registers.hpp:3717-3721
+#if __riscv_xlen == 64
+#define uintX_t uint64_t
+#elif __riscv_xlen == 32
+#define uintX_t uint32_t
+#endif
----------------
If we go the generic route, why not just use `unsigned long` (or `size_t`, etc.) instead of these custom types? Also, these uncapitalized `*_t` names are generally typedefs, not preprocessor defines.


================
Comment at: libunwind/src/Registers.hpp:3962-3963
 #else
-  (void)regNum;
-  (void)value;
   _LIBUNWIND_ABORT("libunwind not built with float support");
----------------
In the #else "branch" those variables aren't used, so presumably you still need those lines to avoid warnings about unused variables.


================
Comment at: libunwind/src/UnwindRegistersRestore.S:1074
 
-#elif defined(__riscv) && __riscv_xlen == 64
+#elif defined(__riscv)
 
----------------
It might be a good idea to use instead `__riscv_xlen == 32 || __riscv_xlen == 64`, as that will correctly detect the case that riscv128 isn't handled.


================
Comment at: libunwind/src/UnwindRegistersRestore.S:1085-1116
+  fload    f0, (RISCV_FOFFSET + RISCV_FSIZE * 0)(a0)
+  fload    f1, (RISCV_FOFFSET + RISCV_FSIZE * 1)(a0)
+  fload    f2, (RISCV_FOFFSET + RISCV_FSIZE * 2)(a0)
+  fload    f3, (RISCV_FOFFSET + RISCV_FSIZE * 3)(a0)
+  fload    f4, (RISCV_FOFFSET + RISCV_FSIZE * 4)(a0)
+  fload    f5, (RISCV_FOFFSET + RISCV_FSIZE * 5)(a0)
+  fload    f6, (RISCV_FOFFSET + RISCV_FSIZE * 6)(a0)
----------------
If we are going to use a preprocessed instruction name (which I'm not sure we should) then at least the name should be ALL CAPS to make it obvious that it's a preprocessor definition, not a regular instruction.


================
Comment at: libunwind/src/UnwindRegistersSave.S:1024
 
-#elif defined(__riscv) && __riscv_xlen == 64
+#elif defined(__riscv)
 
----------------
ditto `32 || 64`.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80690/new/

https://reviews.llvm.org/D80690





More information about the llvm-commits mailing list