diff options
author | Andreas Tobler <a.tobler@schweiz.ch> | 2005-03-16 19:18:59 +0100 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2005-03-16 18:18:59 +0000 |
commit | 455d8f0605b9e3c4f8760470471d22a43d01f531 (patch) | |
tree | 9871e263b817e18744f4503c39a8704b9cf723fd /libjava/stacktrace.cc | |
parent | ab1bc4e8168069b1fbe71fd5f69baf339a45775d (diff) | |
download | gcc-455d8f0605b9e3c4f8760470471d22a43d01f531.zip gcc-455d8f0605b9e3c4f8760470471d22a43d01f531.tar.gz gcc-455d8f0605b9e3c4f8760470471d22a43d01f531.tar.bz2 |
stacktrace.cc (_Jv_StackTrace::UnwindTraceFn): Protect interpreter-specific code with #ifdef INTERPRETER.
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.
From-SVN: r96571
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 19123e2..6484dc6 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; |