comparison agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java @ 147:83c868b757c0

6701024: SAJDI functionality is broken Summary: back out sa-related changes to 6652736, use concrete expressions for WKK names in the SA Reviewed-by: never, sundar
author jrose
date Wed, 14 May 2008 00:41:06 -0700
parents 60b728ec77c1
children d1605aabd0a1
comparison
equal deleted inserted replaced
146:7cce9e4e0f7c 147:83c868b757c0
27 import java.util.*; 27 import java.util.*;
28 import sun.jvm.hotspot.debugger.*; 28 import sun.jvm.hotspot.debugger.*;
29 import sun.jvm.hotspot.oops.*; 29 import sun.jvm.hotspot.oops.*;
30 import sun.jvm.hotspot.runtime.*; 30 import sun.jvm.hotspot.runtime.*;
31 import sun.jvm.hotspot.types.*; 31 import sun.jvm.hotspot.types.*;
32 import sun.jvm.hotspot.types.OopField; // resolve ambiguity with oops.OopField
33
34 // following needed for on-the-fly field construction:
35 import sun.jvm.hotspot.types.basic.BasicOopField;
36 import sun.jvm.hotspot.types.basic.BasicTypeDataBase;
37 32
38 public class SystemDictionary { 33 public class SystemDictionary {
39 private static AddressField dictionaryField; 34 private static AddressField dictionaryField;
40 private static AddressField sharedDictionaryField; 35 private static AddressField sharedDictionaryField;
41 private static AddressField placeholdersField; 36 private static AddressField placeholdersField;
42 private static AddressField loaderConstraintTableField; 37 private static AddressField loaderConstraintTableField;
43 private static OopField javaSystemLoaderField; 38 private static sun.jvm.hotspot.types.OopField javaSystemLoaderField;
44 private static int nofBuckets; 39 private static int nofBuckets;
45 40
46 private static OopField wellKnownKlasses; 41 private static sun.jvm.hotspot.types.OopField objectKlassField;
47 private static OopField objectKlassField; 42 private static sun.jvm.hotspot.types.OopField classLoaderKlassField;
48 private static OopField classLoaderKlassField; 43 private static sun.jvm.hotspot.types.OopField stringKlassField;
49 private static OopField stringKlassField; 44 private static sun.jvm.hotspot.types.OopField systemKlassField;
50 private static OopField systemKlassField; 45 private static sun.jvm.hotspot.types.OopField threadKlassField;
51 private static OopField threadKlassField; 46 private static sun.jvm.hotspot.types.OopField threadGroupKlassField;
52 private static OopField threadGroupKlassField;
53 47
54 static { 48 static {
55 VM.registerVMInitializedObserver(new Observer() { 49 VM.registerVMInitializedObserver(new Observer() {
56 public void update(Observable o, Object data) { 50 public void update(Observable o, Object data) {
57 initialize(VM.getVM().getTypeDataBase()); 51 initialize(VM.getVM().getTypeDataBase());
67 placeholdersField = type.getAddressField("_placeholders"); 61 placeholdersField = type.getAddressField("_placeholders");
68 loaderConstraintTableField = type.getAddressField("_loader_constraints"); 62 loaderConstraintTableField = type.getAddressField("_loader_constraints");
69 javaSystemLoaderField = type.getOopField("_java_system_loader"); 63 javaSystemLoaderField = type.getOopField("_java_system_loader");
70 nofBuckets = db.lookupIntConstant("SystemDictionary::_nof_buckets").intValue(); 64 nofBuckets = db.lookupIntConstant("SystemDictionary::_nof_buckets").intValue();
71 65
72 wellKnownKlasses = type.getOopField("_well_known_klasses[0]"); 66 objectKlassField = type.getOopField(WK_KLASS("object_klass"));
73 objectKlassField = findWellKnownKlass("object_klass", type, db); 67 classLoaderKlassField = type.getOopField(WK_KLASS("classloader_klass"));
74 classLoaderKlassField = findWellKnownKlass("classloader_klass", type, db); 68 stringKlassField = type.getOopField(WK_KLASS("string_klass"));
75 stringKlassField = findWellKnownKlass("string_klass", type, db); 69 systemKlassField = type.getOopField(WK_KLASS("system_klass"));
76 systemKlassField = findWellKnownKlass("system_klass", type, db); 70 threadKlassField = type.getOopField(WK_KLASS("thread_klass"));
77 threadKlassField = findWellKnownKlass("thread_klass", type, db); 71 threadGroupKlassField = type.getOopField(WK_KLASS("threadGroup_klass"));
78 threadGroupKlassField = findWellKnownKlass("threadGroup_klass", type, db); 72 }
79 } 73
80 74 // This WK functions must follow the definitions in systemDictionary.hpp:
81 private static OopField findWellKnownKlass(String indexName, Type type, TypeDataBase db) { 75 private static String WK_KLASS(String name) {
82 Address wkk = wellKnownKlasses.getStaticFieldAddress(); 76 //#define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]
83 int index = db.lookupIntConstant("SystemDictionary::#"+indexName).intValue(); 77 return ("_well_known_klasses[SystemDictionary::"+WK_KLASS_ENUM_NAME(name)+"]");
84 return new BasicOopField((BasicTypeDataBase)db, type, indexName, type, 78 }
85 true, index * db.getAddressSize(), wkk); 79 private static String WK_KLASS_ENUM_NAME(String kname) {
80 //#define WK_KLASS_ENUM_NAME(kname) kname##_knum
81 return (kname+"_knum");
86 } 82 }
87 83
88 public Dictionary dictionary() { 84 public Dictionary dictionary() {
89 Address tmp = dictionaryField.getValue(); 85 Address tmp = dictionaryField.getValue();
90 return (Dictionary) VMObjectFactory.newObject(Dictionary.class, tmp); 86 return (Dictionary) VMObjectFactory.newObject(Dictionary.class, tmp);