mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-14 13:01:23 +08:00
java-stack.h (accesscontrol_trace_fn): Declare.
2006-08-09 Gary Benson <gbenson@redhat.com> * include/java-stack.h (accesscontrol_trace_fn): Declare. (GetAccessControlStack): Likewise. (GetClassMethodStack): Remove. * stacktrace.cc (accesscontrol_trace_fn): New method. (GetAccessControlStack): Likewise. (GetClassMethodStack): Remove. * java/security/natVMAccessController.cc (getStack): Use GetAccessControlStack. From-SVN: r116032
This commit is contained in:
parent
ca78720074
commit
c7dc750aef
@ -1,3 +1,14 @@
|
||||
2006-08-09 Gary Benson <gbenson@redhat.com>
|
||||
|
||||
* include/java-stack.h (accesscontrol_trace_fn): Declare.
|
||||
(GetAccessControlStack): Likewise.
|
||||
(GetClassMethodStack): Remove.
|
||||
* stacktrace.cc (accesscontrol_trace_fn): New method.
|
||||
(GetAccessControlStack): Likewise.
|
||||
(GetClassMethodStack): Remove.
|
||||
* java/security/natVMAccessController.cc (getStack): Use
|
||||
GetAccessControlStack.
|
||||
|
||||
2006-08-07 Gary Benson <gbenson@redhat.com>
|
||||
|
||||
PR libgcj/28340:
|
||||
|
@ -114,6 +114,7 @@ private:
|
||||
|
||||
static _Unwind_Reason_Code calling_class_trace_fn (_Jv_UnwindState *state);
|
||||
static _Unwind_Reason_Code non_system_trace_fn (_Jv_UnwindState *state);
|
||||
static _Unwind_Reason_Code accesscontrol_trace_fn (_Jv_UnwindState *state);
|
||||
|
||||
public:
|
||||
static _Jv_StackTrace *GetStackTrace (void);
|
||||
@ -124,7 +125,7 @@ public:
|
||||
static void GetCallerInfo (jclass checkClass, jclass *, _Jv_Method **);
|
||||
static JArray<jclass> *GetClassContext (jclass checkClass);
|
||||
static ClassLoader *GetFirstNonSystemClassLoader (void);
|
||||
static JArray<jobjectArray> *GetClassMethodStack (_Jv_StackTrace *trace);
|
||||
static JArray<jobjectArray> *GetAccessControlStack ();
|
||||
|
||||
};
|
||||
|
||||
|
@ -19,6 +19,5 @@ details. */
|
||||
JArray<jobjectArray> *
|
||||
java::security::VMAccessController::getStack ()
|
||||
{
|
||||
_Jv_StackTrace *trace = _Jv_StackTrace::GetStackTrace ();
|
||||
return _Jv_StackTrace::GetClassMethodStack (trace);
|
||||
return _Jv_StackTrace::GetAccessControlStack ();
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ details. */
|
||||
|
||||
#include <java/lang/Class.h>
|
||||
#include <java/lang/Long.h>
|
||||
#include <java/security/AccessController.h>
|
||||
#include <java/util/ArrayList.h>
|
||||
#include <java/util/IdentityHashMap.h>
|
||||
#include <gnu/java/lang/MainThread.h>
|
||||
@ -535,16 +536,43 @@ _Jv_StackTrace::GetFirstNonSystemClassLoader ()
|
||||
return NULL;
|
||||
}
|
||||
|
||||
JArray<jobjectArray> *
|
||||
_Jv_StackTrace::GetClassMethodStack (_Jv_StackTrace *trace)
|
||||
_Unwind_Reason_Code
|
||||
_Jv_StackTrace::accesscontrol_trace_fn (_Jv_UnwindState *state)
|
||||
{
|
||||
jint length = 0;
|
||||
_Jv_StackFrame *frame = &state->frames[state->pos];
|
||||
FillInFrameInfo (frame);
|
||||
|
||||
bool *stopping = (bool *) state->trace_data;
|
||||
if (*stopping)
|
||||
return _URC_NORMAL_STOP;
|
||||
|
||||
if (frame->klass == &::java::security::AccessController::class$
|
||||
&& frame->meth
|
||||
&& strcmp (frame->meth->name->chars(), "doPrivileged") == 0)
|
||||
*stopping = true;
|
||||
|
||||
return _URC_NO_REASON;
|
||||
}
|
||||
|
||||
JArray<jobjectArray> *
|
||||
_Jv_StackTrace::GetAccessControlStack (void)
|
||||
{
|
||||
int trace_size = 100;
|
||||
_Jv_StackFrame frames[trace_size];
|
||||
_Jv_UnwindState state (trace_size);
|
||||
state.frames = (_Jv_StackFrame *) &frames;
|
||||
state.trace_function = accesscontrol_trace_fn;
|
||||
bool stopping = false;
|
||||
state.trace_data = (void *) &stopping;
|
||||
|
||||
UpdateNCodeMap();
|
||||
for (int i = 0; i < trace->length; i++)
|
||||
_Unwind_Backtrace (UnwindTraceFn, &state);
|
||||
|
||||
jint length = 0;
|
||||
|
||||
for (int i = 0; i < state.pos; i++)
|
||||
{
|
||||
_Jv_StackFrame *frame = &trace->frames[i];
|
||||
FillInFrameInfo (frame);
|
||||
_Jv_StackFrame *frame = &state.frames[i];
|
||||
|
||||
if (frame->klass && frame->meth)
|
||||
length++;
|
||||
@ -560,9 +588,9 @@ _Jv_StackTrace::GetClassMethodStack (_Jv_StackTrace *trace)
|
||||
jclass *c = elements (classes);
|
||||
jstring *m = elements (methods);
|
||||
|
||||
for (int i = 0, j = 0; i < trace->length; i++)
|
||||
for (int i = 0, j = 0; i < state.pos; i++)
|
||||
{
|
||||
_Jv_StackFrame *frame = &trace->frames[i];
|
||||
_Jv_StackFrame *frame = &state.frames[i];
|
||||
if (!frame->klass || !frame->meth)
|
||||
continue;
|
||||
c[j] = frame->klass;
|
||||
|
Loading…
x
Reference in New Issue
Block a user