< prev index next >

src/share/vm/jvmci/jvmciCodeInstaller.cpp

Print this page




1074 }
1075 
1076 void CodeInstaller::site_DataPatch(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS) {
1077   Handle reference = site_DataPatch::reference(site);
1078   if (reference.is_null()) {
1079     THROW(vmSymbols::java_lang_NullPointerException());
1080   } else if (reference->is_a(site_ConstantReference::klass())) {
1081     Handle constant = site_ConstantReference::constant(reference);
1082     if (constant.is_null()) {
1083       THROW(vmSymbols::java_lang_NullPointerException());
1084     } else if (constant->is_a(HotSpotObjectConstantImpl::klass())) {
1085       pd_patch_OopConstant(pc_offset, constant, CHECK);
1086     } else if (constant->is_a(HotSpotMetaspaceConstantImpl::klass())) {
1087       pd_patch_MetaspaceConstant(pc_offset, constant, CHECK);
1088     } else {
1089       JVMCI_ERROR("unknown constant type in data patch: %s", constant->klass()->signature_name());
1090     }
1091   } else if (reference->is_a(site_DataSectionReference::klass())) {
1092     int data_offset = site_DataSectionReference::offset(reference);
1093     if (0 <= data_offset && data_offset < _constants_size) {
1094       pd_patch_DataSectionReference(pc_offset, data_offset);
1095     } else {
1096       JVMCI_ERROR("data offset 0x%X points outside data section (size 0x%X)", data_offset, _constants_size);
1097     }
1098   } else {
1099     JVMCI_ERROR("unknown data patch type: %s", reference->klass()->signature_name());
1100   }
1101 }
1102 
1103 void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS) {
1104   Handle id_obj = site_Mark::id(site);
1105 
1106   if (id_obj.not_null()) {
1107     if (!java_lang_boxing_object::is_instance(id_obj(), T_INT)) {
1108       JVMCI_ERROR("expected Integer id, got %s", id_obj->klass()->signature_name());
1109     }
1110     jint id = id_obj->int_field(java_lang_boxing_object::value_offset_in_bytes(T_INT));
1111 
1112     address pc = _instructions->start() + pc_offset;
1113 
1114     switch (id) {




1074 }
1075 
1076 void CodeInstaller::site_DataPatch(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS) {
1077   Handle reference = site_DataPatch::reference(site);
1078   if (reference.is_null()) {
1079     THROW(vmSymbols::java_lang_NullPointerException());
1080   } else if (reference->is_a(site_ConstantReference::klass())) {
1081     Handle constant = site_ConstantReference::constant(reference);
1082     if (constant.is_null()) {
1083       THROW(vmSymbols::java_lang_NullPointerException());
1084     } else if (constant->is_a(HotSpotObjectConstantImpl::klass())) {
1085       pd_patch_OopConstant(pc_offset, constant, CHECK);
1086     } else if (constant->is_a(HotSpotMetaspaceConstantImpl::klass())) {
1087       pd_patch_MetaspaceConstant(pc_offset, constant, CHECK);
1088     } else {
1089       JVMCI_ERROR("unknown constant type in data patch: %s", constant->klass()->signature_name());
1090     }
1091   } else if (reference->is_a(site_DataSectionReference::klass())) {
1092     int data_offset = site_DataSectionReference::offset(reference);
1093     if (0 <= data_offset && data_offset < _constants_size) {
1094       pd_patch_DataSectionReference(pc_offset, data_offset, CHECK);
1095     } else {
1096       JVMCI_ERROR("data offset 0x%X points outside data section (size 0x%X)", data_offset, _constants_size);
1097     }
1098   } else {
1099     JVMCI_ERROR("unknown data patch type: %s", reference->klass()->signature_name());
1100   }
1101 }
1102 
1103 void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS) {
1104   Handle id_obj = site_Mark::id(site);
1105 
1106   if (id_obj.not_null()) {
1107     if (!java_lang_boxing_object::is_instance(id_obj(), T_INT)) {
1108       JVMCI_ERROR("expected Integer id, got %s", id_obj->klass()->signature_name());
1109     }
1110     jint id = id_obj->int_field(java_lang_boxing_object::value_offset_in_bytes(T_INT));
1111 
1112     address pc = _instructions->start() + pc_offset;
1113 
1114     switch (id) {


< prev index next >