2006-07-12 Bryce McKinlay <mckinlay@redhat.com>
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 12 Jul 2006 13:56:25 +0000 (13:56 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 12 Jul 2006 13:56:25 +0000 (13:56 +0000)
PR libgcj/28352
* stacktrace.cc (getLineNumberForFrame): Roll back PC by 1 when
looking up line number for interpreted frame.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115370 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/stacktrace.cc

index 86c0842..88ca1d8 100644 (file)
@@ -1,3 +1,9 @@
+2006-07-12  Bryce McKinlay  <mckinlay@redhat.com>
+
+       PR libgcj/28352
+       * stacktrace.cc (getLineNumberForFrame): Roll back PC by 1 when
+       looking up line number for interpreted frame.
+
 2006-07-07  Bryce McKinlay  <mckinlay@redhat.com>
            Geoffrey Keating <geoffk@apple.com>
 
index 2ace9ab..ed0700b 100644 (file)
@@ -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