From 2bdda702e977dc22a7d83b5e462ecefa381eb1b1 Mon Sep 17 00:00:00 2001 From: Bryce McKinlay Date: Wed, 12 Jul 2006 13:56:25 +0000 Subject: [PATCH] re PR java/28352 (gcj -C fails to generate line number info for method) 2006-07-12 Bryce McKinlay PR libgcj/28352 * stacktrace.cc (getLineNumberForFrame): Roll back PC by 1 when looking up line number for interpreted frame. From-SVN: r115370 --- libjava/ChangeLog | 6 ++++++ libjava/stacktrace.cc | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 86c08420083..88ca1d86f47 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,9 @@ +2006-07-12 Bryce McKinlay + + PR libgcj/28352 + * stacktrace.cc (getLineNumberForFrame): Roll back PC by 1 when + looking up line number for interpreted frame. + 2006-07-07 Bryce McKinlay Geoffrey Keating diff --git a/libjava/stacktrace.cc b/libjava/stacktrace.cc index 2ace9abc232..ed0700bd629 100644 --- a/libjava/stacktrace.cc +++ b/libjava/stacktrace.cc @@ -182,7 +182,9 @@ _Jv_StackTrace::getLineNumberForFrame(_Jv_StackFrame *frame, NameFinder *finder, _Jv_InterpClass *interp_class = (_Jv_InterpClass *) interp_meth->defining_class->aux_info; *sourceFileName = interp_class->source_file_name; - *lineNum = interp_meth->get_source_line(frame->interp.pc); + // The interpreter advances the PC before executing an instruction, + // so roll-back 1 byte to ensure the line number is accurate. + *lineNum = interp_meth->get_source_line(frame->interp.pc - 1); return; } #endif -- 2.30.2