|
Message
From: =?unknown-8bit?Q?Gy=F6rgy?= 'nog' Jeney<nog@s...>
Date: Tue Jul 5 17:52:46 CEST 2005
Subject: [openrisc] [or1ksim #137] Decode location of crash
Hi,ChangeLog: * Try to find a symbolic name of the location where we crashed.
nog. -------------- next part -------------- diff -upr --unidirectional-new-file ./cpu/or32/dyn_rec.c /home/nog/or1ksim-ac/cpu/or32/dyn_rec.c --- ./cpu/or32/dyn_rec.c 2005-07-05 10:27:03.000000000 +0200 +++ /home/nog/or1ksim-ac/cpu/or32/dyn_rec.c 2005-07-05 10:19:24.000000000 +0200 @@ -293,9 +293,10 @@ void dyn_sigsegv_debug(int u, siginfo_t char filen[18]; /* 18 == strlen("or_page.%08x") + 1 */ void *stack; int i, j; - void *trace[10]; + void *trace[11]; int num_trace; char **trace_names; + struct sigcontext *sigc = dat; if(!sigsegv_state) { sigsegv_addr = siginf->si_addr; @@ -308,8 +309,8 @@ void dyn_sigsegv_debug(int u, siginfo_t switch(sigsegv_state) { case 0: fflush(stderr); - fprintf(stderr, "Segmentation fault on acces to %p (or address: 0x%"PRIxADDR")\n\n", - sigsegv_addr, get_pc()); + fprintf(stderr, "Segmentation fault on acces to %p at 0x%08lx, (or address: 0x%"PRIxADDR")\n\n", + sigsegv_addr, sigc->eip, get_pc()); sigsegv_state++; case 1: /* Run through the recompiled pages, dumping them to disk as we go */ @@ -339,6 +343,7 @@ void dyn_sigsegv_debug(int u, siginfo_t num_trace = backtrace(trace, 10); + trace[num_trace++] = (void *)sigc->eip; trace_names = backtrace_symbols(trace, num_trace); stack = get_sp(); @@ -354,6 +359,8 @@ void dyn_sigsegv_debug(int u, siginfo_t fprintf(stderr, "\n"); fflush(stderr); } + fprintf(stderr, "Fault at: 0x%08lx <%s>\n", sigc->eip, + trace_names[num_trace - 1]); sigsegv_state++; case 3: sim_done();
|
 |