From af839938102fbe0a958bd3a0832b1895fcf8854f Mon Sep 17 00:00:00 2001 From: grischka Date: Wed, 15 Sep 2010 13:42:52 +0200 Subject: [PATCH] tccrun: improve rt_printline output format Prefix line with "file:linenumber:" such that editors can easily jump to the source location --- tccrun.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/tccrun.c b/tccrun.c index e45c2184..95b823e8 100644 --- a/tccrun.c +++ b/tccrun.c @@ -222,7 +222,7 @@ static void set_pages_executable(void *ptr, unsigned long length) /* print the position in the source file of PC value 'pc' by reading the stabs debug information */ -static uplong rt_printline(uplong wanted_pc) +static uplong rt_printline(uplong wanted_pc, const char *msg) { Stab_Sym *sym, *sym_end; char func_name[128], last_func_name[128]; @@ -231,8 +231,6 @@ static uplong rt_printline(uplong wanted_pc) int incl_index, len, last_line_num, i; const char *str, *p; - fprintf(stderr, "0x%08lx:", (unsigned long)wanted_pc); - func_name[0] = '\0'; func_addr = 0; incl_index = 0; @@ -327,20 +325,28 @@ static uplong rt_printline(uplong wanted_pc) } } /* did not find any info: */ - fprintf(stderr, " ???\n"); + fprintf(stderr, "%s %p ???\n", msg, (void*)wanted_pc); + fflush(stderr); return 0; found: - if (last_func_name[0] != '\0') { + i = incl_index; + if (i > 0) + fprintf(stderr, "%s:%d: ", incl_files[--i], last_line_num); + fprintf(stderr, "%s %p", msg, (void*)wanted_pc); + if (last_func_name[0] != '\0') fprintf(stderr, " %s()", last_func_name); - } - if (incl_index > 0) { - fprintf(stderr, " (%s:%d", - incl_files[incl_index - 1], last_line_num); - for(i = incl_index - 2; i >= 0; i--) - fprintf(stderr, ", included from %s", incl_files[i]); + if (--i >= 0) { + fprintf(stderr, " (included from "); + for (;;) { + fprintf(stderr, "%s", incl_files[i]); + if (--i < 0) + break; + fprintf(stderr, ", "); + } fprintf(stderr, ")"); } fprintf(stderr, "\n"); + fflush(stderr); return func_addr; } @@ -359,11 +365,7 @@ static void rt_error(ucontext_t *uc, const char *fmt, ...) for(i=0;i