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:43 CEST 2005
    Subject: [openrisc] [or1ksim #136] Print stack dump to stderr
    Top
    Hi,

    ChangeLog:
    * Print stackdump to stderr instead of stdout.

    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 06:18:33.000000000 +0200
    +++ /home/nog/or1ksim-ac/cpu/or32/dyn_rec.c 2005-06-19 13:09:13.000000000 +0200
    @@ -300,21 +300,21 @@ void dyn_sigsegv_debug(int u, siginfo_t
    if(!sigsegv_state) {
    sigsegv_addr = siginf->si_addr;
    } else {
    - printf("Nested SIGSEGV occured, dumping next chuck of info\n");
    + fprintf(stderr, "Nested SIGSEGV occured, dumping next chuck of info\n");
    sigsegv_state++;
    }

    /* First dump all the data that does not need dereferenceing to get */
    switch(sigsegv_state) {
    case 0:
    - fflush(stdout);
    - printf("Segmentation fault at %p (or address: 0x%"PRIxADDR")\n\n",
    - sigsegv_addr, get_pc());
    + fflush(stderr);
    + fprintf(stderr, "Segmentation fault on acces to %p (or address: 0x%"PRIxADDR")\n\n",
    + sigsegv_addr, get_pc());
    sigsegv_state++;
    case 1:
    /* Run through the recompiled pages, dumping them to disk as we go */
    for(dp = cpu_state.dyn_pages; dp; dp = dp->next) {
    - printf("Dumping%s page 0x%"PRIxADDR" recompiled to %p (len: %u) to disk\n",
    + fprintf(stderr, "Dumping%s page 0x%"PRIxADDR" recompiled to %p (len: %u) to disk\n",
    dp->dirty ? " dirty" : "", dp->or_page, dp->host_page,
    dp->host_len);
    fflush(stdout);
    @@ -334,25 +334,25 @@ void dyn_sigsegv_debug(int u, siginfo_t
    sigsegv_state++;
    case 2:
    /* Dump the contents of the stack */
    - printf("Stack dump: ");
    - fflush(stdout);
    + fprintf(stderr, "Stack dump: ");
    + fflush(stderr);

    num_trace = backtrace(trace, 10);

    trace_names = backtrace_symbols(trace, num_trace);

    stack = get_sp();
    - printf("(of stack at %p, base: %p)\n", stack, rec_stack_base);
    - fflush(stdout);
    + fprintf(stderr, "(of stack at %p, base: %p)\n", stack, rec_stack_base);
    + fflush(stderr);
    for(i = 0; stack < rec_stack_base; i++, stack += 4) {
    - printf(" <%i> 0x%08x", i, *(uint32_t *)stack);
    + fprintf(stderr, " <%i> 0x%08x", i, *(uint32_t *)stack);
    /* Try to find a symbolic name with this entry */
    for(j = 0; j < num_trace; j++) {
    if(trace[j] == *(void **)stack)
    - printf(" <%s>", trace_names[j]);
    + fprintf(stderr, " <%s>", trace_names[j]);
    }
    - printf("\n");
    - fflush(stdout);
    + fprintf(stderr, "\n");
    + fflush(stderr);
    }
    sigsegv_state++;
    case 3:

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