From e5a8980bb96ce4809da58d3ced2bd4725305368a Mon Sep 17 00:00:00 2001 From: Andrew Haley Date: Mon, 21 Mar 2005 14:50:14 +0000 Subject: [PATCH] natVMSecurityManager.cc (getClassContext): Add new arg: klass. 2005-03-17 Andrew Haley * java/lang/natVMSecurityManager.cc (getClassContext): Add new arg: klass. Pass klass to _Jv_StackTrace::GetClassContext(). * java/lang/ClassLoader.java (getParent): Pass class to VMSecurityManager.getClassContext() (getSystemClassLoader): Likewise. * java/lang/Package.java (getPackage): Likewise. (getPackages): Likewise. * java/lang/SecurityManager.java (getClassContext): Likewise. (currentClassLoader): Likewise. * java/lang/VMSecurityManager.java: (getClassContext): Likewise. (currentClassLoader) Add new arg: caller. Pass caller to VMSecurityManager.getClassContext. * stacktrace.cc (GetClassContext): Correct calculation of jframe_count. * boehm.cc (_Jv_MarkObj): (_Jv_MarkObj): Mark im->source_file_name. From-SVN: r96803 --- libjava/ChangeLog | 22 ++++++++++++++++++++++ libjava/boehm.cc | 3 +++ libjava/java/lang/ClassLoader.java | 4 ++-- libjava/java/lang/Package.java | 4 ++-- libjava/java/lang/SecurityManager.java | 4 ++-- libjava/java/lang/VMSecurityManager.java | 6 +++--- libjava/java/lang/natVMSecurityManager.cc | 4 ++-- libjava/stacktrace.cc | 20 +++++++++----------- 8 files changed, 45 insertions(+), 22 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index b156e0ce28d6..44447d43c684 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,25 @@ +2005-03-17 Andrew Haley + + * java/lang/natVMSecurityManager.cc (getClassContext): Add new + arg: klass. + Pass klass to _Jv_StackTrace::GetClassContext(). + * java/lang/ClassLoader.java (getParent): Pass class to + VMSecurityManager.getClassContext() + (getSystemClassLoader): Likewise. + * java/lang/Package.java (getPackage): Likewise. + (getPackages): Likewise. + * java/lang/SecurityManager.java (getClassContext): Likewise. + (currentClassLoader): Likewise. + * java/lang/VMSecurityManager.java: (getClassContext): Likewise. + (currentClassLoader) Add new arg: caller. + Pass caller to VMSecurityManager.getClassContext. + + * stacktrace.cc (GetClassContext): Correct calculation of + jframe_count. + + * boehm.cc (_Jv_MarkObj): (_Jv_MarkObj): Mark + im->source_file_name. + 2005-03-16 Andrew Haley * boehm.cc (_Jv_MarkObj): Mark the interpreted method line_table. diff --git a/libjava/boehm.cc b/libjava/boehm.cc index 45b94731d155..2e64b1ca6cce 100644 --- a/libjava/boehm.cc +++ b/libjava/boehm.cc @@ -248,6 +248,9 @@ _Jv_MarkObj (void *addr, void *msp, void *msl, void *env) p = (GC_PTR) ic->interpreted_methods; MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic); + p = (GC_PTR) ic->source_file_name; + MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic); + for (int i = 0; i < c->method_count; i++) { // The interpreter installs a heap-allocated trampoline diff --git a/libjava/java/lang/ClassLoader.java b/libjava/java/lang/ClassLoader.java index 2621281273f8..f2beaac97f67 100644 --- a/libjava/java/lang/ClassLoader.java +++ b/libjava/java/lang/ClassLoader.java @@ -486,7 +486,7 @@ public abstract class ClassLoader SecurityManager sm = System.getSecurityManager(); if (sm != null) { - Class c = VMSecurityManager.getClassContext()[1]; + Class c = VMSecurityManager.getClassContext(ClassLoader.class)[1]; ClassLoader cl = c.getClassLoader(); if (cl != null && ! cl.isAncestorOf(this)) sm.checkPermission(new RuntimePermission("getClassLoader")); @@ -729,7 +729,7 @@ public abstract class ClassLoader SecurityManager sm = System.getSecurityManager(); if (sm != null) { - Class c = VMSecurityManager.getClassContext()[1]; + Class c = VMSecurityManager.getClassContext(ClassLoader.class)[1]; ClassLoader cl = c.getClassLoader(); if (cl != null && cl != systemClassLoader) sm.checkPermission(new RuntimePermission("getClassLoader")); diff --git a/libjava/java/lang/Package.java b/libjava/java/lang/Package.java index 29b42b63cf12..bddb370f1e7d 100644 --- a/libjava/java/lang/Package.java +++ b/libjava/java/lang/Package.java @@ -273,7 +273,7 @@ public class Package public static Package getPackage(String name) { // Get the caller's classloader - ClassLoader cl = VMSecurityManager.currentClassLoader(); + ClassLoader cl = VMSecurityManager.currentClassLoader(Package.class); return cl != null ? cl.getPackage(name) : VMClassLoader.getPackage(name); } @@ -286,7 +286,7 @@ public class Package public static Package[] getPackages() { // Get the caller's classloader - Class c = VMSecurityManager.getClassContext()[1]; + Class c = VMSecurityManager.getClassContext(Package.class)[1]; ClassLoader cl = c.getClassLoader(); return cl != null ? cl.getPackages() : VMClassLoader.getPackages(); } diff --git a/libjava/java/lang/SecurityManager.java b/libjava/java/lang/SecurityManager.java index c9ed4be0b3f7..350439e0c3dd 100644 --- a/libjava/java/lang/SecurityManager.java +++ b/libjava/java/lang/SecurityManager.java @@ -167,7 +167,7 @@ public class SecurityManager */ protected Class[] getClassContext() { - return VMSecurityManager.getClassContext(); + return VMSecurityManager.getClassContext(SecurityManager.class); } /** @@ -189,7 +189,7 @@ public class SecurityManager */ protected ClassLoader currentClassLoader() { - return VMSecurityManager.currentClassLoader(); + return VMSecurityManager.currentClassLoader(SecurityManager.class); } /** diff --git a/libjava/java/lang/VMSecurityManager.java b/libjava/java/lang/VMSecurityManager.java index 604f8ecb428e..f995ec89cf47 100644 --- a/libjava/java/lang/VMSecurityManager.java +++ b/libjava/java/lang/VMSecurityManager.java @@ -43,19 +43,19 @@ class VMSecurityManager ** @return an array containing all the methods on classes ** on the Java execution stack. **/ - static native Class[] getClassContext(); + static native Class[] getClassContext(Class caller); /** Get the current ClassLoader--the one nearest to the ** top of the stack. ** @return the current ClassLoader. **/ - static ClassLoader currentClassLoader() + static ClassLoader currentClassLoader(Class caller) { // The docs above are wrong. See the online docs. // FIXME this implementation is a bit wrong too -- the docs say we // must also consider ancestors of the system class loader. ClassLoader systemClassLoader = VMClassLoader.getSystemClassLoader(); - Class[] classStack = getClassContext (); + Class[] classStack = getClassContext (caller); for (int i = 0; i < classStack.length; i++) { ClassLoader loader = classStack[i].getClassLoader(); diff --git a/libjava/java/lang/natVMSecurityManager.cc b/libjava/java/lang/natVMSecurityManager.cc index d55b7a54c3a9..9d52c92c7c58 100644 --- a/libjava/java/lang/natVMSecurityManager.cc +++ b/libjava/java/lang/natVMSecurityManager.cc @@ -20,10 +20,10 @@ details. */ #include JArray * -java::lang::VMSecurityManager::getClassContext () +java::lang::VMSecurityManager::getClassContext (jclass klass) { JArray *result = - _Jv_StackTrace::GetClassContext (&SecurityManager::class$); + _Jv_StackTrace::GetClassContext (klass); return result; } diff --git a/libjava/stacktrace.cc b/libjava/stacktrace.cc index 6484dc6008d9..583b11a796c3 100644 --- a/libjava/stacktrace.cc +++ b/libjava/stacktrace.cc @@ -464,19 +464,17 @@ _Jv_StackTrace::GetClassContext (jclass checkClass) _Jv_StackFrame *frame = &state.frames[i]; FillInFrameInfo (frame); - if (seen_checkClass - && frame->klass - && frame->klass != checkClass) + if (seen_checkClass) { - jframe_count++; - if (start_pos == -1) - start_pos = i; + if (frame->klass) + { + jframe_count++; + if (start_pos == -1) + start_pos = i; + } } - - if (!seen_checkClass - && frame->klass - && frame->klass == checkClass) - seen_checkClass = true; + else + seen_checkClass = frame->klass == checkClass; } result = (JArray *) _Jv_NewObjectArray (jframe_count, &Class::class$, NULL); int pos = 0;