[libunwind] [RISCV] Allow libunwind to build for rv32e (PR #98855)
Sam Elliott via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 1 10:19:52 PDT 2024
================
@@ -1169,7 +1169,11 @@ DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind15Registers_riscv6jumptoEv)
ILOAD x\i, (RISCV_ISIZE * \i)(a0)
.endr
// skip a0 for now
+#if defined(__riscv_abi_rve)
----------------
lenary wrote:
I don't understand how the non-e version of this list relates to either the ABI or the architecture, so it's really hard to know what this should be doing in the e case. I'm also somewhat surprised that the list in this function is different from the one below, in save function. Shouldn't these be somewhat symmetric (barring having to do things with a few registers which represent unwinder state, like in this case `a0`).
The non-e version is restoring all the argument registers, some (not all) of the callee-saves, and some (not all) of the temporary registers. Are there good docs as to why it is doing so?
I think we might need to restore according to the architecture rather than the ABI, so that we restore live temporary registers correctly, but I'm not entirely sure, and if i could understand what the non-e case was doing better, I'd be able to give a clearer steer as to which this should be based on.
https://github.com/llvm/llvm-project/pull/98855
More information about the cfe-commits
mailing list