OSDN Git Service

* stacktrace.cc (UnwindTraceFn): Use UNWRAP_FUNCTION_DESCRIPTOR
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Nov 2005 23:58:16 +0000 (23:58 +0000)
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Nov 2005 23:58:16 +0000 (23:58 +0000)
to compare _Jv_InterpMethod::run against current func.

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

libjava/ChangeLog
libjava/stacktrace.cc

index ddecdcd..5bd43c1 100644 (file)
@@ -1,3 +1,8 @@
+2005-12-01  Alan Modra  <amodra@bigpond.net.au>
+
+       * stacktrace.cc (UnwindTraceFn): Use UNWRAP_FUNCTION_DESCRIPTOR
+       to compare _Jv_InterpMethod::run against current func.
+
 2005-11-30  Andrew Haley  <aph@redhat.com>
 
        * classpath/lib/Makefile.am (resources): Use `cp -p'.
index bc1935f..1bdabdf 100644 (file)
@@ -108,16 +108,17 @@ _Jv_StackTrace::UnwindTraceFn (struct _Unwind_Context *context, void *state_ptr)
       state->frames = (_Jv_StackFrame *) newFrames;
       state->length = newLength;
     }
-  
-  _Unwind_Ptr func_addr = _Unwind_GetRegionStart (context);
-  
+
+  void *func_addr = (void *) _Unwind_GetRegionStart (context);
+
   // If we see the interpreter's main function, "pop" an entry off the 
   // interpreter stack and use that instead, so that the trace goes through 
   // the java code and not the interpreter itself. This assumes a 1:1 
   // correspondance between call frames in the interpreted stack and occurances
   // of _Jv_InterpMethod::run() on the native stack.
 #ifdef INTERPRETER
-  if ((void (*)(void)) func_addr == (void (*)(void)) &_Jv_InterpMethod::run)
+  void *interp_run = (void *) &_Jv_InterpMethod::run;
+  if (func_addr == UNWRAP_FUNCTION_DESCRIPTOR (interp_run))
     {
       state->frames[pos].type = frame_interpreter;
       state->frames[pos].interp.meth = state->interp_frame->self;
@@ -129,7 +130,7 @@ _Jv_StackTrace::UnwindTraceFn (struct _Unwind_Context *context, void *state_ptr)
     {
       state->frames[pos].type = frame_native;
       state->frames[pos].ip = (void *) _Unwind_GetIP (context);
-      state->frames[pos].start_ip = (void *) func_addr;
+      state->frames[pos].start_ip = func_addr;
     }
 
   //printf ("unwind ip: %p\n", _Unwind_GetIP (context));