From: Julian Seward Date: Thu, 14 Nov 2002 23:16:58 +0000 (+0000) Subject: Merge patch from JeremyF: X-Git-Tag: svn/VALGRIND_1_9_4~130 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ee957f7bd3f336bbfb3a702366c57d2ed42494c9;p=thirdparty%2Fvalgrind.git Merge patch from JeremyF: 41-linefix When working out the source:line information for a stack backtrace, subtract 1 from return addresses in the hope that this points to the line of the caller rather than the line after the caller. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1317 --- diff --git a/coregrind/vg_symtab2.c b/coregrind/vg_symtab2.c index 9a37eeaae9..ba70ce4a77 100644 --- a/coregrind/vg_symtab2.c +++ b/coregrind/vg_symtab2.c @@ -2238,15 +2238,18 @@ void VG_(mini_stack_dump) ( ExeContext* ec ) i = 0; do { + Addr eip = ec->eips[i]; n = 0; - know_fnname = get_fnname (True, ec->eips[i], buf_fn, M_VG_ERRTXT, True, False); - know_objname = VG_(get_objname)(ec->eips[i], buf_obj, M_VG_ERRTXT); - know_srcloc = VG_(get_filename_linenum)(ec->eips[i], + if (i > 0) + eip--; /* point to calling line */ + know_fnname = get_fnname (True, eip, buf_fn, M_VG_ERRTXT, True, False); + know_objname = VG_(get_objname)(eip, buf_obj, M_VG_ERRTXT); + know_srcloc = VG_(get_filename_linenum)(eip, buf_srcloc, M_VG_ERRTXT, &lineno); if (i == 0) APPEND(" at ") else APPEND(" by "); - VG_(sprintf)(ibuf,"0x%x: ", ec->eips[i]); + VG_(sprintf)(ibuf,"0x%x: ", eip); APPEND(ibuf); if (know_fnname) { APPEND(buf_fn);