Mercurial > hg > truffle
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); |