[PATCH] D38110: [libunwind][MIPS]: Add support for unwinding in O32 and N64 processes.

Simon Dardis via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 12 08:24:39 PDT 2017


sdardis added a comment.

I have tested this on one of my machines after removing the checks for soft float (my debian install doesn't have the necessary headers for soft-float). With the patch you've pointed out and my inline comments addressed (bar the HI / LO register comments), it passes the supplied test suite.

Can you change the checks for ABI from '_MIPS_SIM == $ABI' to 'defined($ABI)'? I mistakenly assumed they were always defined and that _MIPS_SIM was defined to be one of them but they are only defined when that particular ABI is being used.



================
Comment at: include/libunwind.h:584
+  UNW_MIPS_R31 = 31,
+};
+
----------------
Requires HI / LO registers.


================
Comment at: src/Registers.hpp:2014
+    uint32_t __pc;
+  };
+
----------------
This appears to be missing the HI / LO registers.


================
Comment at: src/Registers.hpp:2039
+    return true;
+  // FIXME: Hard float
+  return false;
----------------
FIXME: Hard float, DSP accumulator registers, MSA registers


================
Comment at: src/UnwindRegistersSave.S:120-122
+  jr	$31
+  # fp (in delay slot)
+  sw    $30, (4 * 30)($4)
----------------
Move the last store out of the delay slot and put 'or $2, $zero, $zero' in the delay slot to return UNW_ESUCCESS.


================
Comment at: src/UnwindRegistersSave.S:155-157
+  jr	$31
+  # fp (in delay slot)
+  sd    $30, (8 * 30)($4)
----------------
Move the last store out of the delay slot and put 'or $2, $zero, $zero' in the delay slot to return UNW_ESUCCESS.


https://reviews.llvm.org/D38110





More information about the cfe-commits mailing list