================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits