diff options
author | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-03-16 18:18:59 +0000 |
---|---|---|
committer | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-03-16 18:18:59 +0000 |
commit | 42ecb5a44a291cfe9508b9775dc34634760c2dae (patch) | |
tree | 9871e263b817e18744f4503c39a8704b9cf723fd /libjava/stacktrace.cc | |
parent | fb45b4c382262d59f797b828131f3e0c0d25ad84 (diff) | |
download | gcc-42ecb5a44a291cfe9508b9775dc34634760c2dae.tar.gz |
2005-03-15 Andreas Tobler <a.tobler@schweiz.ch>
* stacktrace.cc (_Jv_StackTrace::UnwindTraceFn): Protect
interpreter-specific code with #ifdef INTERPRETER.
(_Jv_StackTrace::getLineNumberForFrame): Likewise.
(_Jv_StackTrace::FillInFrameInfo): Likewise.
(_Jv_StackTrace::non_system_trace_fn): Likewise.
* include/java-stack.h (struct _Jv_InterpFrameInfo): Protect with
#ifdef INTERPRETER. Also protect declarations that use it.
* java/lang/Class.h: Move _Jv_StackTrace friend declaration outside
#ifdef INTERPRETER block.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@96571 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/stacktrace.cc')
-rw-r--r-- | libjava/stacktrace.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/libjava/stacktrace.cc b/libjava/stacktrace.cc index 19123e23597..6484dc6008d 100644 --- a/libjava/stacktrace.cc +++ b/libjava/stacktrace.cc @@ -120,6 +120,7 @@ _Jv_StackTrace::UnwindTraceFn (struct _Unwind_Context *context, void *state_ptr) // 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 (func_addr == (_Unwind_Ptr) &_Jv_InterpMethod::run) { state->frames[pos].type = frame_interpreter; @@ -128,6 +129,7 @@ _Jv_StackTrace::UnwindTraceFn (struct _Unwind_Context *context, void *state_ptr) state->interp_frame = state->interp_frame->next; } else +#endif { state->frames[pos].type = frame_native; state->frames[pos].ip = (void *) _Unwind_GetIP (context); @@ -174,6 +176,7 @@ void _Jv_StackTrace::getLineNumberForFrame(_Jv_StackFrame *frame, NameFinder *finder, jstring *sourceFileName, jint *lineNum) { +#ifdef INTERPRETER if (frame->type == frame_interpreter) { _Jv_InterpMethod *interp_meth = frame->interp.meth; @@ -183,6 +186,7 @@ _Jv_StackTrace::getLineNumberForFrame(_Jv_StackFrame *frame, NameFinder *finder, *lineNum = interp_meth->get_source_line(frame->interp.pc); return; } +#endif // Use dladdr() to determine in which binary the address IP resides. #if defined (HAVE_DLFCN_H) && defined (HAVE_DLADDR) extern char **_Jv_argv; @@ -245,12 +249,14 @@ _Jv_StackTrace::FillInFrameInfo (_Jv_StackFrame *frame) } } } +#ifdef INTERPRETER else if (frame->type == frame_interpreter) { _Jv_InterpMethod *interp_meth = frame->interp.meth; klass = interp_meth->defining_class; meth = interp_meth->self; } +#endif else JvFail ("Unknown frame type"); @@ -495,11 +501,13 @@ _Jv_StackTrace::non_system_trace_fn (_Jv_UnwindState *state) if (frame->klass) { classLoader = frame->klass->getClassLoaderInternal(); +#ifdef INTERPRETER if (classLoader != NULL && classLoader != ClassLoader::systemClassLoader) { state->trace_data = (void *) classLoader; return _URC_NORMAL_STOP; } +#endif } return _URC_NO_REASON; |