hotspot/src/share/vm/classfile/javaClasses.cpp
changeset 18056 0e99ee964114
parent 15234 ff1f01be5fbd
child 18057 3c2ec1be67c7
equal deleted inserted replaced
18055:ba8c01e0d016 18056:0e99ee964114
  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;");