[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Minios-devel] [PATCH v3 11/43] arm64: dump the registers for do_bad_mode()/do_sync()
- To: Huang Shijie <shijie.huang@xxxxxxx>, wei.liu2@xxxxxxxxxx
- From: Julien Grall <julien.grall@xxxxxxx>
- Date: Wed, 18 Apr 2018 21:06:13 +0100
- Authentication-results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
- Cc: jgross@xxxxxxxx, wei.chen@xxxxxxx, steve.capper@xxxxxxx, vlad.babchuk@xxxxxxxxx, minios-devel@xxxxxxxxxxxxxxxxxxxx, kaly.xin@xxxxxxx, samuel.thibault@xxxxxxxxxxxx, baozich@xxxxxxxxx, nd@xxxxxxx
- Delivery-date: Wed, 18 Apr 2018 20:06:41 +0000
- List-id: Mini-os development list <minios-devel.lists.xenproject.org>
- Nodisclaimer: True
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:99
Hi,
On 16/04/2018 07:31, Huang Shijie wrote:
This patch adds a new function dump_regs() which can dump the registers
information.
And the do_bad_mode()/do_sync() will use the function to dump the
registers.
This patch refers to Volodymyr Babchuk's patch:
Do you mean "based on" instead of "refers to"?
"WIP: trap.c: add trap handles for arm64"
Signed-off-by: Huang Shijie <shijie.huang@xxxxxxx>
---
arch/arm/arm64/traps.c | 32 ++++++++++++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/arch/arm/arm64/traps.c b/arch/arm/arm64/traps.c
index 62dd2e6..66f842e 100644
--- a/arch/arm/arm64/traps.c
+++ b/arch/arm/arm64/traps.c
@@ -2,15 +2,43 @@
#include <mini-os/arm64/traps.h>
#include <console.h>
+static void dump_regs(struct pt_regs *regs,
+ unsigned long esr, unsigned long far)
The indentation looks wrong.
+{
+ printk("*** Sync exception at PC = %lx *** \n", regs->pc);
+ printk("Thread state:\n");
+ printk("\tX0 = 0x%016lx X1 = 0x%016lx\n", regs->x[0], regs->x[1]);
+ printk("\tX2 = 0x%016lx X3 = 0x%016lx\n", regs->x[2], regs->x[3]);
+ printk("\tX4 = 0x%016lx X5 = 0x%016lx\n", regs->x[4], regs->x[5]);
+ printk("\tX6 = 0x%016lx X7 = 0x%016lx\n", regs->x[6], regs->x[7]);
+ printk("\tX8 = 0x%016lx X9 = 0x%016lx\n", regs->x[8], regs->x[9]);
+ printk("\tX10 = 0x%016lx X11 = 0x%016lx\n", regs->x[10], regs->x[11]);
+ printk("\tX12 = 0x%016lx X13 = 0x%016lx\n", regs->x[12], regs->x[13]);
+ printk("\tX14 = 0x%016lx X15 = 0x%016lx\n", regs->x[14], regs->x[15]);
+ printk("\tX16 = 0x%016lx X17 = 0x%016lx\n", regs->x[16], regs->x[17]);
+ printk("\tX18 = 0x%016lx X19 = 0x%016lx\n", regs->x[18], regs->x[19]);
+ printk("\tX20 = 0x%016lx X21 = 0x%016lx\n", regs->x[20], regs->x[21]);
+ printk("\tX22 = 0x%016lx X23 = 0x%016lx\n", regs->x[22], regs->x[23]);
+ printk("\tX24 = 0x%016lx X25 = 0x%016lx\n", regs->x[24], regs->x[25]);
+ printk("\tX26 = 0x%016lx X27 = 0x%016lx\n", regs->x[26], regs->x[27]);
+ printk("\tX28 = 0x%016lx X29 = 0x%016lx\n", regs->x[28], regs->x[29]);
+ printk("\tX30 (lr) = 0x%016lx\n", regs->lr);
+ printk("\tsp = 0x%016lx\n", regs->sp);
+ printk("\tpstate = 0x%016x\n", regs->pstate);
+ printk("\tesr_el1 = %08lx\n", esr);
+ printk("\tfar_el1 = %08lx\n", far);
+}
+
void do_bad_mode(struct pt_regs *regs, int reason,
unsigned long esr, unsigned long far)
{
- /* TO DO */
+ printk(" Bad abort number : %d\n", reason);
What was the purpose of the variable "reason"? Is it because some trap
don't give a meaningful error syndrome?
+ dump_regs(regs, esr, far);
do_exit();
}
void do_sync(struct pt_regs *regs, unsigned long esr, unsigned long far)
{
- /* TO DO */
+ dump_regs(regs, esr, far);
do_exit();
}
Cheers,
--
Julien Grall
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|