comparison agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java @ 12322:72b7e96c1922

8024545: make develop and notproduct flag values available in product builds Reviewed-by: dholmes, kvn
author twisti
date Thu, 26 Sep 2013 12:07:53 -0700
parents 7944aba7ba41
children de6a9e811145
comparison
equal deleted inserted replaced
12295:1b64d46620a3 12322:72b7e96c1922
132 // command line flags supplied to VM - see struct Flag in globals.hpp 132 // command line flags supplied to VM - see struct Flag in globals.hpp
133 public static final class Flag { 133 public static final class Flag {
134 private String type; 134 private String type;
135 private String name; 135 private String name;
136 private Address addr; 136 private Address addr;
137 private String kind; 137 private int flags;
138 private int origin; 138
139 139 private Flag(String type, String name, Address addr, int flags) {
140 private Flag(String type, String name, Address addr, String kind, int origin) {
141 this.type = type; 140 this.type = type;
142 this.name = name; 141 this.name = name;
143 this.addr = addr; 142 this.addr = addr;
144 this.kind = kind; 143 this.flags = flags;
145 this.origin = origin;
146 } 144 }
147 145
148 public String getType() { 146 public String getType() {
149 return type; 147 return type;
150 } 148 }
155 153
156 public Address getAddress() { 154 public Address getAddress() {
157 return addr; 155 return addr;
158 } 156 }
159 157
160 public String getKind() {
161 return kind;
162 }
163
164 public int getOrigin() { 158 public int getOrigin() {
165 return origin; 159 return flags & 0xF; // XXX can we get the mask bits from somewhere?
166 } 160 }
167 161
168 public boolean isBool() { 162 public boolean isBool() {
169 return type.equals("bool"); 163 return type.equals("bool");
170 } 164 }
171 165
172 public boolean getBool() { 166 public boolean getBool() {
173 if (Assert.ASSERTS_ENABLED) { 167 if (Assert.ASSERTS_ENABLED) {
174 Assert.that(isBool(), "not a bool flag!"); 168 Assert.that(isBool(), "not a bool flag!");
175 } 169 }
176 return addr.getCIntegerAt(0, boolType.getSize(), boolType.isUnsigned()) 170 return addr.getCIntegerAt(0, boolType.getSize(), boolType.isUnsigned()) != 0;
177 != 0;
178 } 171 }
179 172
180 public boolean isIntx() { 173 public boolean isIntx() {
181 return type.equals("intx"); 174 return type.equals("intx");
182 } 175 }
841 // NOTE: last flag contains null values. 834 // NOTE: last flag contains null values.
842 commandLineFlags = new Flag[numFlags - 1]; 835 commandLineFlags = new Flag[numFlags - 1];
843 836
844 Address flagAddr = flagType.getAddressField("flags").getValue(); 837 Address flagAddr = flagType.getAddressField("flags").getValue();
845 838
846 AddressField typeFld = flagType.getAddressField("type"); 839 AddressField typeFld = flagType.getAddressField("_type");
847 AddressField nameFld = flagType.getAddressField("name"); 840 AddressField nameFld = flagType.getAddressField("_name");
848 AddressField addrFld = flagType.getAddressField("addr"); 841 AddressField addrFld = flagType.getAddressField("_addr");
849 AddressField kindFld = flagType.getAddressField("kind"); 842 CIntField flagsFld = new CIntField(flagType.getCIntegerField("_flags"), 0);
850 CIntField originFld = new CIntField(flagType.getCIntegerField("origin"), 0);
851 843
852 long flagSize = flagType.getSize(); // sizeof(Flag) 844 long flagSize = flagType.getSize(); // sizeof(Flag)
853 845
854 // NOTE: last flag contains null values. 846 // NOTE: last flag contains null values.
855 for (int f = 0; f < numFlags - 1; f++) { 847 for (int f = 0; f < numFlags - 1; f++) {
856 String type = CStringUtilities.getString(typeFld.getValue(flagAddr)); 848 String type = CStringUtilities.getString(typeFld.getValue(flagAddr));
857 String name = CStringUtilities.getString(nameFld.getValue(flagAddr)); 849 String name = CStringUtilities.getString(nameFld.getValue(flagAddr));
858 Address addr = addrFld.getValue(flagAddr); 850 Address addr = addrFld.getValue(flagAddr);
859 String kind = CStringUtilities.getString(kindFld.getValue(flagAddr)); 851 int flags = (int)flagsFld.getValue(flagAddr);
860 int origin = (int)originFld.getValue(flagAddr); 852 commandLineFlags[f] = new Flag(type, name, addr, flags);
861 commandLineFlags[f] = new Flag(type, name, addr, kind, origin);
862 flagAddr = flagAddr.addOffsetTo(flagSize); 853 flagAddr = flagAddr.addOffsetTo(flagSize);
863 } 854 }
864 855
865 // sort flags by name 856 // sort flags by name
866 Arrays.sort(commandLineFlags, new Comparator() { 857 Arrays.sort(commandLineFlags, new Comparator() {