1342 static int methodName_offset;
1343 static int fileName_offset;
1344 static int lineNumber_offset;
1345
1346 public:
1347 // Setters
1348 static void set_declaringClass(oop element, oop value);
1349 static void set_methodName(oop element, oop value);
1350 static void set_fileName(oop element, oop value);
1351 static void set_lineNumber(oop element, int value);
1352
1353 // Create an instance of StackTraceElement
1354 static oop create(Handle mirror, int method, int version, int bci, int cpref, TRAPS);
1355 static oop create(const methodHandle& method, int bci, TRAPS);
1356
1357 // Debugging
1358 friend class JavaClasses;
1359 };
1360
1361
1362 // Interface to java.lang.AssertionStatusDirectives objects
1363
1364 class java_lang_AssertionStatusDirectives: AllStatic {
1365 private:
1366 enum {
1367 hc_classes_offset,
1368 hc_classEnabled_offset,
1369 hc_packages_offset,
1370 hc_packageEnabled_offset,
1371 hc_deflt_offset
1372 };
1373
1374 static int classes_offset;
1375 static int classEnabled_offset;
1376 static int packages_offset;
1377 static int packageEnabled_offset;
1378 static int deflt_offset;
1379
1380 public:
1381 // Setters
1425
1426 Klass* klass() const { return SystemDictionary::well_known_klass(klass_id); }
1427 Symbol* name() const { return lookup_symbol(name_index); }
1428 Symbol* signature() const { return lookup_symbol(signature_index); }
1429
1430 int compute_offset();
1431
1432 // Find the Symbol for this index
1433 static Symbol* lookup_symbol(int symbol_index) {
1434 return vmSymbols::symbol_at((vmSymbols::SID)symbol_index);
1435 }
1436 };
1437
1438 #define DECLARE_INJECTED_FIELD_ENUM(klass, name, signature, may_be_java) \
1439 klass##_##name##_enum,
1440
1441 #define ALL_INJECTED_FIELDS(macro) \
1442 CLASS_INJECTED_FIELDS(macro) \
1443 CLASSLOADER_INJECTED_FIELDS(macro) \
1444 MEMBERNAME_INJECTED_FIELDS(macro) \
1445 CALLSITECONTEXT_INJECTED_FIELDS(macro)
1446
1447 // Interface to hard-coded offset checking
1448
1449 class JavaClasses : AllStatic {
1450 private:
1451
1452 static InjectedField _injected_fields[];
1453
1454 static bool check_offset(const char *klass_name, int offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
1455 static bool check_static_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
1456 static bool check_constant(const char *klass_name, int constant, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
1457
1458 public:
1459 enum InjectedFieldID {
1460 ALL_INJECTED_FIELDS(DECLARE_INJECTED_FIELD_ENUM)
1461 MAX_enum
1462 };
1463
1464 static int compute_injected_offset(InjectedFieldID id);
1465
|
1342 static int methodName_offset;
1343 static int fileName_offset;
1344 static int lineNumber_offset;
1345
1346 public:
1347 // Setters
1348 static void set_declaringClass(oop element, oop value);
1349 static void set_methodName(oop element, oop value);
1350 static void set_fileName(oop element, oop value);
1351 static void set_lineNumber(oop element, int value);
1352
1353 // Create an instance of StackTraceElement
1354 static oop create(Handle mirror, int method, int version, int bci, int cpref, TRAPS);
1355 static oop create(const methodHandle& method, int bci, TRAPS);
1356
1357 // Debugging
1358 friend class JavaClasses;
1359 };
1360
1361
1362 class Backtrace: AllStatic {
1363 public:
1364 // Helper backtrace functions to store bci|version together.
1365 static int merge_bci_and_version(int bci, int version);
1366 static int merge_mid_and_cpref(int mid, int cpref);
1367 static int bci_at(unsigned int merged);
1368 static int version_at(unsigned int merged);
1369 static int mid_at(unsigned int merged);
1370 static int cpref_at(unsigned int merged);
1371 static int get_line_number(const methodHandle& method, int bci);
1372 static Symbol* get_source_file_name(InstanceKlass* holder, int version);
1373
1374 // Debugging
1375 friend class JavaClasses;
1376 };
1377
1378 // Interface to java.lang.StackFrameInfo objects
1379
1380 #define STACKFRAMEINFO_INJECTED_FIELDS(macro) \
1381 macro(java_lang_StackFrameInfo, mid, short_signature, false) \
1382 macro(java_lang_StackFrameInfo, version, short_signature, false) \
1383 macro(java_lang_StackFrameInfo, cpref, short_signature, false)
1384
1385 class java_lang_StackFrameInfo: AllStatic {
1386 private:
1387 static int _declaringClass_offset;
1388 static int _memberName_offset;
1389 static int _bci_offset;
1390 static int _methodName_offset;
1391 static int _fileName_offset;
1392 static int _lineNumber_offset;
1393
1394 static int _mid_offset;
1395 static int _version_offset;
1396 static int _cpref_offset;
1397
1398 static Method* get_method(Handle stackFrame, InstanceKlass* holder, TRAPS);
1399 static Symbol* get_file_name(Handle stackFrame, InstanceKlass* holder);
1400
1401 public:
1402 // Setters
1403 static void set_declaringClass(oop info, oop value);
1404 static void set_method_and_bci(Handle stackFrame, const methodHandle& method, int bci);
1405 static void set_bci(oop info, int value);
1406
1407 // set method info in an instance of StackFrameInfo
1408 static void fill_methodInfo(Handle info, TRAPS);
1409 static void set_methodName(oop info, oop value);
1410 static void set_fileName(oop info, oop value);
1411 static void set_lineNumber(oop info, int value);
1412
1413 // these injected fields are only used if -XX:-MemberNameInStackFrame set
1414 static void set_mid(oop info, short value);
1415 static void set_version(oop info, short value);
1416 static void set_cpref(oop info, short value);
1417
1418 static void compute_offsets();
1419
1420 // Debugging
1421 friend class JavaClasses;
1422 };
1423
1424 class java_lang_LiveStackFrameInfo: AllStatic {
1425 private:
1426 static int _monitors_offset;
1427 static int _locals_offset;
1428 static int _operands_offset;
1429
1430 public:
1431 static void set_monitors(oop info, oop value);
1432 static void set_locals(oop info, oop value);
1433 static void set_operands(oop info, oop value);
1434
1435 static void compute_offsets();
1436
1437 // Debugging
1438 friend class JavaClasses;
1439 };
1440
1441 // Interface to java.lang.AssertionStatusDirectives objects
1442
1443 class java_lang_AssertionStatusDirectives: AllStatic {
1444 private:
1445 enum {
1446 hc_classes_offset,
1447 hc_classEnabled_offset,
1448 hc_packages_offset,
1449 hc_packageEnabled_offset,
1450 hc_deflt_offset
1451 };
1452
1453 static int classes_offset;
1454 static int classEnabled_offset;
1455 static int packages_offset;
1456 static int packageEnabled_offset;
1457 static int deflt_offset;
1458
1459 public:
1460 // Setters
1504
1505 Klass* klass() const { return SystemDictionary::well_known_klass(klass_id); }
1506 Symbol* name() const { return lookup_symbol(name_index); }
1507 Symbol* signature() const { return lookup_symbol(signature_index); }
1508
1509 int compute_offset();
1510
1511 // Find the Symbol for this index
1512 static Symbol* lookup_symbol(int symbol_index) {
1513 return vmSymbols::symbol_at((vmSymbols::SID)symbol_index);
1514 }
1515 };
1516
1517 #define DECLARE_INJECTED_FIELD_ENUM(klass, name, signature, may_be_java) \
1518 klass##_##name##_enum,
1519
1520 #define ALL_INJECTED_FIELDS(macro) \
1521 CLASS_INJECTED_FIELDS(macro) \
1522 CLASSLOADER_INJECTED_FIELDS(macro) \
1523 MEMBERNAME_INJECTED_FIELDS(macro) \
1524 CALLSITECONTEXT_INJECTED_FIELDS(macro) \
1525 STACKFRAMEINFO_INJECTED_FIELDS(macro)
1526
1527
1528 // Interface to hard-coded offset checking
1529
1530 class JavaClasses : AllStatic {
1531 private:
1532
1533 static InjectedField _injected_fields[];
1534
1535 static bool check_offset(const char *klass_name, int offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
1536 static bool check_static_offset(const char *klass_name, int hardcoded_offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
1537 static bool check_constant(const char *klass_name, int constant, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
1538
1539 public:
1540 enum InjectedFieldID {
1541 ALL_INJECTED_FIELDS(DECLARE_INJECTED_FIELD_ENUM)
1542 MAX_enum
1543 };
1544
1545 static int compute_injected_offset(InjectedFieldID id);
1546
|