comparison src/share/vm/classfile/javaClasses.cpp @ 11010:b295e132102d

8001330: Improve on checking order Reviewed-by: acorn, hawtin
author mullan
date Fri, 05 Apr 2013 10:18:36 -0400
parents 22ba8c8ce6a6
children be131aa5a529
comparison
equal deleted inserted replaced
11009:f75faf51e8c4 11010:b295e132102d
2772 // Support for java_security_AccessControlContext 2772 // Support for java_security_AccessControlContext
2773 2773
2774 int java_security_AccessControlContext::_context_offset = 0; 2774 int java_security_AccessControlContext::_context_offset = 0;
2775 int java_security_AccessControlContext::_privilegedContext_offset = 0; 2775 int java_security_AccessControlContext::_privilegedContext_offset = 0;
2776 int java_security_AccessControlContext::_isPrivileged_offset = 0; 2776 int java_security_AccessControlContext::_isPrivileged_offset = 0;
2777 int java_security_AccessControlContext::_isAuthorized_offset = -1;
2777 2778
2778 void java_security_AccessControlContext::compute_offsets() { 2779 void java_security_AccessControlContext::compute_offsets() {
2779 assert(_isPrivileged_offset == 0, "offsets should be initialized only once"); 2780 assert(_isPrivileged_offset == 0, "offsets should be initialized only once");
2780 fieldDescriptor fd; 2781 fieldDescriptor fd;
2781 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass()); 2782 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass());
2792 2793
2793 if (!ik->find_local_field(vmSymbols::isPrivileged_name(), vmSymbols::bool_signature(), &fd)) { 2794 if (!ik->find_local_field(vmSymbols::isPrivileged_name(), vmSymbols::bool_signature(), &fd)) {
2794 fatal("Invalid layout of java.security.AccessControlContext"); 2795 fatal("Invalid layout of java.security.AccessControlContext");
2795 } 2796 }
2796 _isPrivileged_offset = fd.offset(); 2797 _isPrivileged_offset = fd.offset();
2797 } 2798
2798 2799 // The offset may not be present for bootstrapping with older JDK.
2800 if (ik->find_local_field(vmSymbols::isAuthorized_name(), vmSymbols::bool_signature(), &fd)) {
2801 _isAuthorized_offset = fd.offset();
2802 }
2803 }
2804
2805
2806 bool java_security_AccessControlContext::is_authorized(Handle context) {
2807 assert(context.not_null() && context->klass() == SystemDictionary::AccessControlContext_klass(), "Invalid type");
2808 assert(_isAuthorized_offset != -1, "should be set");
2809 return context->bool_field(_isAuthorized_offset) != 0;
2810 }
2799 2811
2800 oop java_security_AccessControlContext::create(objArrayHandle context, bool isPrivileged, Handle privileged_context, TRAPS) { 2812 oop java_security_AccessControlContext::create(objArrayHandle context, bool isPrivileged, Handle privileged_context, TRAPS) {
2801 assert(_isPrivileged_offset != 0, "offsets should have been initialized"); 2813 assert(_isPrivileged_offset != 0, "offsets should have been initialized");
2802 // Ensure klass is initialized 2814 // Ensure klass is initialized
2803 InstanceKlass::cast(SystemDictionary::AccessControlContext_klass())->initialize(CHECK_0); 2815 InstanceKlass::cast(SystemDictionary::AccessControlContext_klass())->initialize(CHECK_0);
2805 oop result = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass())->allocate_instance(CHECK_0); 2817 oop result = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass())->allocate_instance(CHECK_0);
2806 // Fill in values 2818 // Fill in values
2807 result->obj_field_put(_context_offset, context()); 2819 result->obj_field_put(_context_offset, context());
2808 result->obj_field_put(_privilegedContext_offset, privileged_context()); 2820 result->obj_field_put(_privilegedContext_offset, privileged_context());
2809 result->bool_field_put(_isPrivileged_offset, isPrivileged); 2821 result->bool_field_put(_isPrivileged_offset, isPrivileged);
2822 // whitelist AccessControlContexts created by the JVM.
2823 result->bool_field_put(_isAuthorized_offset, true);
2810 return result; 2824 return result;
2811 } 2825 }
2812 2826
2813 2827
2814 // Support for java_lang_ClassLoader 2828 // Support for java_lang_ClassLoader
2914 int java_lang_System::err_offset_in_bytes() { 2928 int java_lang_System::err_offset_in_bytes() {
2915 return (InstanceMirrorKlass::offset_of_static_fields() + static_err_offset); 2929 return (InstanceMirrorKlass::offset_of_static_fields() + static_err_offset);
2916 } 2930 }
2917 2931
2918 2932
2933 bool java_lang_System::has_security_manager() {
2934 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::System_klass());
2935 address addr = ik->static_field_addr(static_security_offset);
2936 if (UseCompressedOops) {
2937 return oopDesc::load_decode_heap_oop((narrowOop *)addr) != NULL;
2938 } else {
2939 return oopDesc::load_decode_heap_oop((oop*)addr) != NULL;
2940 }
2941 }
2919 2942
2920 int java_lang_Class::_klass_offset; 2943 int java_lang_Class::_klass_offset;
2921 int java_lang_Class::_array_klass_offset; 2944 int java_lang_Class::_array_klass_offset;
2922 int java_lang_Class::_oop_size_offset; 2945 int java_lang_Class::_oop_size_offset;
2923 int java_lang_Class::_static_oop_field_count_offset; 2946 int java_lang_Class::_static_oop_field_count_offset;
2974 int java_lang_ref_SoftReference::static_clock_offset; 2997 int java_lang_ref_SoftReference::static_clock_offset;
2975 int java_lang_ClassLoader::parent_offset; 2998 int java_lang_ClassLoader::parent_offset;
2976 int java_lang_System::static_in_offset; 2999 int java_lang_System::static_in_offset;
2977 int java_lang_System::static_out_offset; 3000 int java_lang_System::static_out_offset;
2978 int java_lang_System::static_err_offset; 3001 int java_lang_System::static_err_offset;
3002 int java_lang_System::static_security_offset;
2979 int java_lang_StackTraceElement::declaringClass_offset; 3003 int java_lang_StackTraceElement::declaringClass_offset;
2980 int java_lang_StackTraceElement::methodName_offset; 3004 int java_lang_StackTraceElement::methodName_offset;
2981 int java_lang_StackTraceElement::fileName_offset; 3005 int java_lang_StackTraceElement::fileName_offset;
2982 int java_lang_StackTraceElement::lineNumber_offset; 3006 int java_lang_StackTraceElement::lineNumber_offset;
2983 int java_lang_AssertionStatusDirectives::classes_offset; 3007 int java_lang_AssertionStatusDirectives::classes_offset;
3099 3123
3100 // java_lang_System 3124 // java_lang_System
3101 java_lang_System::static_in_offset = java_lang_System::hc_static_in_offset * x; 3125 java_lang_System::static_in_offset = java_lang_System::hc_static_in_offset * x;
3102 java_lang_System::static_out_offset = java_lang_System::hc_static_out_offset * x; 3126 java_lang_System::static_out_offset = java_lang_System::hc_static_out_offset * x;
3103 java_lang_System::static_err_offset = java_lang_System::hc_static_err_offset * x; 3127 java_lang_System::static_err_offset = java_lang_System::hc_static_err_offset * x;
3128 java_lang_System::static_security_offset = java_lang_System::hc_static_security_offset * x;
3104 3129
3105 // java_lang_StackTraceElement 3130 // java_lang_StackTraceElement
3106 java_lang_StackTraceElement::declaringClass_offset = java_lang_StackTraceElement::hc_declaringClass_offset * x + header; 3131 java_lang_StackTraceElement::declaringClass_offset = java_lang_StackTraceElement::hc_declaringClass_offset * x + header;
3107 java_lang_StackTraceElement::methodName_offset = java_lang_StackTraceElement::hc_methodName_offset * x + header; 3132 java_lang_StackTraceElement::methodName_offset = java_lang_StackTraceElement::hc_methodName_offset * x + header;
3108 java_lang_StackTraceElement::fileName_offset = java_lang_StackTraceElement::hc_fileName_offset * x + header; 3133 java_lang_StackTraceElement::fileName_offset = java_lang_StackTraceElement::hc_fileName_offset * x + header;
3298 // java.lang.System 3323 // java.lang.System
3299 3324
3300 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, in, "Ljava/io/InputStream;"); 3325 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, in, "Ljava/io/InputStream;");
3301 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, out, "Ljava/io/PrintStream;"); 3326 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, out, "Ljava/io/PrintStream;");
3302 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, err, "Ljava/io/PrintStream;"); 3327 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, err, "Ljava/io/PrintStream;");
3328 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, security, "Ljava/lang/SecurityManager;");
3303 3329
3304 // java.lang.StackTraceElement 3330 // java.lang.StackTraceElement
3305 3331
3306 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClass, "Ljava/lang/String;"); 3332 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClass, "Ljava/lang/String;");
3307 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, methodName, "Ljava/lang/String;"); 3333 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, methodName, "Ljava/lang/String;");