Index: sal/osl/unx/backtrace.c =================================================================== RCS file: /cvs/porting/sal/osl/unx/backtrace.c,v retrieving revision 1.3 diff -u -r1.3 backtrace.c --- sal/osl/unx/backtrace.c 12 Jun 2003 10:53:48 -0000 1.3 +++ sal/osl/unx/backtrace.c 4 Jul 2003 02:17:34 -0000 @@ -148,4 +148,40 @@ } } +#elif defined(IRIX) +/* Need extra libs -lexc -ldwarf -lelf */ + +int backtrace( void **buffer, int max_frames ) +{ + struct sigcontext context; + int i = 0; + + memset(&context, 0, sizeof(struct sigcontext)); + + exc_setjmp(&context); + while(context.sc_pc != 1 && i < max_frames) { + exc_unwind(&context, 0); + *(buffer++) = (void *)context.sc_pc; + i++; + } + return(i); +} + +void backtrace_symbols_fd( void **buffer, int size, int fd ) +{ + FILE *fp = fdopen( fd, "w" ); + struct sigcontext context; + char *name; + + if ( fp ) { + while(context.sc_pc!=1) { + exc_unwind_name(&context, 0, &name); + fprintf(fp, " 0x%012lx %.100s\n", context.sc_pc, name ? name : ""); + free(name); + } + + fflush( fp ); + fclose( fp ); + } +} #endif /* defined SOLARIS */