LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Find Resources
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Openrisc > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    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
    Top
    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();

     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.