Diff below has two dt(4) improvements. It fixes the construction of
the call frame that accompanies the stack frame. Currently it sticks
the saved copy of the LR register in there. But instead it should
stick the value of the ELR in there to record the location where the
trap happened. This fixes stack traces through traps.
Then it adds the magic defines to strip off the frames that are't
interesting.
ok?
Index: dev/dt/dt_dev.c
===================================================================
RCS file: /cvs/src/sys/dev/dt/dt_dev.c,v
retrieving revision 1.10
diff -u -p -r1.10 dt_dev.c
--- dev/dt/dt_dev.c 28 Sep 2020 13:16:58 -0000 1.10
+++ dev/dt/dt_dev.c 3 Oct 2020 17:54:20 -0000
@@ -56,6 +56,9 @@
#if defined(__amd64__)
#define DT_FA_PROFILE 5
#define DT_FA_STATIC 2
+#elif defined(__arm64__)
+#define DT_FA_PROFILE 7
+#define DT_FA_STATIC 2
#elif defined(__powerpc64__)
#define DT_FA_PROFILE 6
#define DT_FA_STATIC 2
Index: arch/arm64/arm64/exception.S
===================================================================
RCS file: /cvs/src/sys/arch/arm64/arm64/exception.S,v
retrieving revision 1.11
diff -u -p -r1.11 exception.S
--- arch/arm64/arm64/exception.S 17 Mar 2020 17:27:12 -0000 1.11
+++ arch/arm64/arm64/exception.S 3 Oct 2020 17:54:21 -0000
@@ -38,7 +38,6 @@
sub sp, sp, #128
.endif
sub sp, sp, #(TF_SIZE + 16)
- stp x29, x30, [sp, #(TF_SIZE)]
stp x28, x29, [sp, #(TF_X + 28 * 8)]
stp x26, x27, [sp, #(TF_X + 26 * 8)]
stp x24, x25, [sp, #(TF_X + 24 * 8)]
@@ -60,6 +59,7 @@
mrs x18, sp_el0
.endif
mov fp, x18
+ stp x29, x10, [sp, #(TF_SIZE)]
stp x10, x11, [sp, #(TF_ELR)]
stp x18, lr, [sp, #(TF_SP)]
mrs x18, tpidr_el1