1208 // Debugging/initialization 1209 friend class JavaClasses; 1210 }; 1211 1212 1213 // Interface to java.lang.ClassLoader objects 1214 1215 #define CLASSLOADER_INJECTED_FIELDS(macro) \ 1216 macro(java_lang_ClassLoader, loader_data, intptr_signature, false) 1217 1218 class java_lang_ClassLoader : AllStatic { 1219 private: 1220 // The fake offsets are added by the class loader when java.lang.Class is loaded 1221 enum { 1222 hc_parent_offset = 0 1223 }; 1224 static int _loader_data_offset; 1225 static bool offsets_computed; 1226 static int parent_offset; 1227 static int parallelCapable_offset; 1228 static int unnamedModule_offset; 1229 1230 public: 1231 static void compute_offsets(); 1232 1233 static ClassLoaderData** loader_data_addr(oop loader); 1234 static ClassLoaderData* loader_data(oop loader); 1235 1236 static oop parent(oop loader); 1237 static bool isAncestor(oop loader, oop cl); 1238 1239 // Support for parallelCapable field 1240 static bool parallelCapable(oop the_class_mirror); 1241 1242 static bool is_trusted_loader(oop loader); 1243 1244 // Fix for 4474172 1245 static oop non_reflection_class_loader(oop loader); 1246 1247 // Testers 1248 static bool is_subclass(Klass* klass) { 1249 return klass->is_subclass_of(SystemDictionary::ClassLoader_klass()); 1250 } 1251 static bool is_instance(oop obj); 1252 1253 static oop unnamedModule(oop loader); 1254 1255 // Debugging 1256 friend class JavaClasses; 1274 static int static_err_offset; 1275 static int static_security_offset; 1276 1277 public: 1278 static int in_offset_in_bytes(); 1279 static int out_offset_in_bytes(); 1280 static int err_offset_in_bytes(); 1281 1282 static bool has_security_manager(); 1283 1284 // Debugging 1285 friend class JavaClasses; 1286 }; 1287 1288 1289 // Interface to java.lang.StackTraceElement objects 1290 1291 class java_lang_StackTraceElement: AllStatic { 1292 private: 1293 enum { 1294 hc_moduleName_offset = 0, 1295 hc_moduleVersion_offset = 1, 1296 hc_declaringClass_offset = 2, 1297 hc_methodName_offset = 3, 1298 hc_fileName_offset = 4, 1299 hc_lineNumber_offset = 5 1300 }; 1301 1302 static int moduleName_offset; 1303 static int moduleVersion_offset; 1304 static int declaringClass_offset; 1305 static int methodName_offset; 1306 static int fileName_offset; 1307 static int lineNumber_offset; 1308 1309 // Setters 1310 static void set_moduleName(oop element, oop value); 1311 static void set_moduleVersion(oop element, oop value); 1312 static void set_declaringClass(oop element, oop value); 1313 static void set_methodName(oop element, oop value); 1314 static void set_fileName(oop element, oop value); 1315 static void set_lineNumber(oop element, int value); 1316 1317 public: 1318 // Create an instance of StackTraceElement 1319 static oop create(const methodHandle& method, int bci, TRAPS); 1320 1321 static void fill_in(Handle element, InstanceKlass* holder, const methodHandle& method, 1322 int version, int bci, int cpref, TRAPS); 1323 1324 // Debugging 1325 friend class JavaClasses; 1326 }; 1327 1328 1329 class Backtrace: AllStatic { 1330 public: 1331 // Helper backtrace functions to store bci|version together. 1332 static int merge_bci_and_version(int bci, int version); 1333 static int merge_mid_and_cpref(int mid, int cpref); 1334 static int bci_at(unsigned int merged); 1335 static int version_at(unsigned int merged); | 1208 // Debugging/initialization 1209 friend class JavaClasses; 1210 }; 1211 1212 1213 // Interface to java.lang.ClassLoader objects 1214 1215 #define CLASSLOADER_INJECTED_FIELDS(macro) \ 1216 macro(java_lang_ClassLoader, loader_data, intptr_signature, false) 1217 1218 class java_lang_ClassLoader : AllStatic { 1219 private: 1220 // The fake offsets are added by the class loader when java.lang.Class is loaded 1221 enum { 1222 hc_parent_offset = 0 1223 }; 1224 static int _loader_data_offset; 1225 static bool offsets_computed; 1226 static int parent_offset; 1227 static int parallelCapable_offset; 1228 static int name_offset; 1229 static int unnamedModule_offset; 1230 1231 public: 1232 static void compute_offsets(); 1233 1234 static ClassLoaderData** loader_data_addr(oop loader); 1235 static ClassLoaderData* loader_data(oop loader); 1236 1237 static oop parent(oop loader); 1238 static oop name(oop loader); 1239 static bool isAncestor(oop loader, oop cl); 1240 1241 // Support for parallelCapable field 1242 static bool parallelCapable(oop the_class_mirror); 1243 1244 static bool is_trusted_loader(oop loader); 1245 1246 // Fix for 4474172 1247 static oop non_reflection_class_loader(oop loader); 1248 1249 // Testers 1250 static bool is_subclass(Klass* klass) { 1251 return klass->is_subclass_of(SystemDictionary::ClassLoader_klass()); 1252 } 1253 static bool is_instance(oop obj); 1254 1255 static oop unnamedModule(oop loader); 1256 1257 // Debugging 1258 friend class JavaClasses; 1276 static int static_err_offset; 1277 static int static_security_offset; 1278 1279 public: 1280 static int in_offset_in_bytes(); 1281 static int out_offset_in_bytes(); 1282 static int err_offset_in_bytes(); 1283 1284 static bool has_security_manager(); 1285 1286 // Debugging 1287 friend class JavaClasses; 1288 }; 1289 1290 1291 // Interface to java.lang.StackTraceElement objects 1292 1293 class java_lang_StackTraceElement: AllStatic { 1294 private: 1295 enum { 1296 hc_classOrLoaderModuleClassName_offset = 0, 1297 hc_classLoaderName_offset = 1, 1298 hc_moduleName_offset = 2, 1299 hc_moduleVersion_offset = 3, 1300 hc_declaringClass_offset = 4, 1301 hc_methodName_offset = 5, 1302 hc_fileName_offset = 6, 1303 hc_lineNumber_offset = 7 1304 }; 1305 1306 static int classOrLoaderModuleClassName_offset; 1307 static int classLoaderName_offset; 1308 static int moduleName_offset; 1309 static int moduleVersion_offset; 1310 static int declaringClass_offset; 1311 static int methodName_offset; 1312 static int fileName_offset; 1313 static int lineNumber_offset; 1314 1315 // Setters 1316 static void set_classLoaderName(oop element, oop value); 1317 static void set_moduleName(oop element, oop value); 1318 static void set_moduleVersion(oop element, oop value); 1319 static void set_declaringClass(oop element, oop value); 1320 static void set_methodName(oop element, oop value); 1321 static void set_fileName(oop element, oop value); 1322 static void set_lineNumber(oop element, int value); 1323 static void set_declaringClassObject(oop element, oop value); 1324 1325 public: 1326 // Create an instance of StackTraceElement 1327 static oop create(const methodHandle& method, int bci, TRAPS); 1328 1329 static void fill_in(Handle element, InstanceKlass* holder, const methodHandle& method, 1330 int version, int bci, int cpref, TRAPS); 1331 1332 // Debugging 1333 friend class JavaClasses; 1334 }; 1335 1336 1337 class Backtrace: AllStatic { 1338 public: 1339 // Helper backtrace functions to store bci|version together. 1340 static int merge_bci_and_version(int bci, int version); 1341 static int merge_mid_and_cpref(int mid, int cpref); 1342 static int bci_at(unsigned int merged); 1343 static int version_at(unsigned int merged); |