Mercurial > hg > graal-jvmci-8
comparison src/share/vm/services/attachListener.cpp @ 1067:ba7ea42fc66e
6898160: Need serviceability support for new vm argument type 'uint64_t'
Summary: Add serviceability support for uint64_t. Flags of unknown type assert in debug builds and are ignored in product builds.
Reviewed-by: never, xlu, mchung, dcubed
author | phh |
---|---|
date | Wed, 04 Nov 2009 16:49:23 -0500 |
parents | c6c601a0f2d6 |
children | 4ce7240d622c |
comparison
equal
deleted
inserted
replaced
1065:c4ecde2f6b3c | 1067:ba7ea42fc66e |
---|---|
205 const char* arg1; | 205 const char* arg1; |
206 if ((arg1 = op->arg(1)) != NULL) { | 206 if ((arg1 = op->arg(1)) != NULL) { |
207 int tmp; | 207 int tmp; |
208 int n = sscanf(arg1, "%d", &tmp); | 208 int n = sscanf(arg1, "%d", &tmp); |
209 if (n != 1) { | 209 if (n != 1) { |
210 out->print_cr("flag value has to be boolean (1 or 0)"); | 210 out->print_cr("flag value must be a boolean (1 or 0)"); |
211 return JNI_ERR; | 211 return JNI_ERR; |
212 } | 212 } |
213 value = (tmp != 0); | 213 value = (tmp != 0); |
214 } | 214 } |
215 bool res = CommandLineFlags::boolAtPut((char*)name, &value, ATTACH_ON_DEMAND); | 215 bool res = CommandLineFlags::boolAtPut((char*)name, &value, ATTACH_ON_DEMAND); |
224 intx value; | 224 intx value; |
225 const char* arg1; | 225 const char* arg1; |
226 if ((arg1 = op->arg(1)) != NULL) { | 226 if ((arg1 = op->arg(1)) != NULL) { |
227 int n = sscanf(arg1, INTX_FORMAT, &value); | 227 int n = sscanf(arg1, INTX_FORMAT, &value); |
228 if (n != 1) { | 228 if (n != 1) { |
229 out->print_cr("flag value has to be integer"); | 229 out->print_cr("flag value must be an integer"); |
230 return JNI_ERR; | 230 return JNI_ERR; |
231 } | 231 } |
232 } | 232 } |
233 bool res = CommandLineFlags::intxAtPut((char*)name, &value, ATTACH_ON_DEMAND); | 233 bool res = CommandLineFlags::intxAtPut((char*)name, &value, ATTACH_ON_DEMAND); |
234 if (! res) { | 234 if (! res) { |
235 out->print_cr("setting flag %s failed", name); | 235 out->print_cr("setting flag %s failed", name); |
236 } | 236 } |
237 | 237 |
238 return res? JNI_OK : JNI_ERR; | 238 return res? JNI_OK : JNI_ERR; |
243 uintx value; | 243 uintx value; |
244 const char* arg1; | 244 const char* arg1; |
245 if ((arg1 = op->arg(1)) != NULL) { | 245 if ((arg1 = op->arg(1)) != NULL) { |
246 int n = sscanf(arg1, UINTX_FORMAT, &value); | 246 int n = sscanf(arg1, UINTX_FORMAT, &value); |
247 if (n != 1) { | 247 if (n != 1) { |
248 out->print_cr("flag value has to be integer"); | 248 out->print_cr("flag value must be an unsigned integer"); |
249 return JNI_ERR; | 249 return JNI_ERR; |
250 } | 250 } |
251 } | 251 } |
252 bool res = CommandLineFlags::uintxAtPut((char*)name, &value, ATTACH_ON_DEMAND); | 252 bool res = CommandLineFlags::uintxAtPut((char*)name, &value, ATTACH_ON_DEMAND); |
253 if (! res) { | |
254 out->print_cr("setting flag %s failed", name); | |
255 } | |
256 | |
257 return res? JNI_OK : JNI_ERR; | |
258 } | |
259 | |
260 // set a uint64_t global flag using value from AttachOperation | |
261 static jint set_uint64_t_flag(const char* name, AttachOperation* op, outputStream* out) { | |
262 uint64_t value; | |
263 const char* arg1; | |
264 if ((arg1 = op->arg(1)) != NULL) { | |
265 int n = sscanf(arg1, UINT64_FORMAT, &value); | |
266 if (n != 1) { | |
267 out->print_cr("flag value must be an unsigned 64-bit integer"); | |
268 return JNI_ERR; | |
269 } | |
270 } | |
271 bool res = CommandLineFlags::uint64_tAtPut((char*)name, &value, ATTACH_ON_DEMAND); | |
253 if (! res) { | 272 if (! res) { |
254 out->print_cr("setting flag %s failed", name); | 273 out->print_cr("setting flag %s failed", name); |
255 } | 274 } |
256 | 275 |
257 return res? JNI_OK : JNI_ERR; | 276 return res? JNI_OK : JNI_ERR; |
259 | 278 |
260 // set a string global flag using value from AttachOperation | 279 // set a string global flag using value from AttachOperation |
261 static jint set_ccstr_flag(const char* name, AttachOperation* op, outputStream* out) { | 280 static jint set_ccstr_flag(const char* name, AttachOperation* op, outputStream* out) { |
262 const char* value; | 281 const char* value; |
263 if ((value = op->arg(1)) == NULL) { | 282 if ((value = op->arg(1)) == NULL) { |
264 out->print_cr("flag value has to be a string"); | 283 out->print_cr("flag value must be a string"); |
265 return JNI_ERR; | 284 return JNI_ERR; |
266 } | 285 } |
267 bool res = CommandLineFlags::ccstrAtPut((char*)name, &value, ATTACH_ON_DEMAND); | 286 bool res = CommandLineFlags::ccstrAtPut((char*)name, &value, ATTACH_ON_DEMAND); |
268 if (res) { | 287 if (res) { |
269 FREE_C_HEAP_ARRAY(char, value); | 288 FREE_C_HEAP_ARRAY(char, value); |
270 } else { | 289 } else { |
271 out->print_cr("setting flag %s failed", name); | 290 out->print_cr("setting flag %s failed", name); |
272 } | 291 } |
289 return set_bool_flag(name, op, out); | 308 return set_bool_flag(name, op, out); |
290 } else if (f->is_intx()) { | 309 } else if (f->is_intx()) { |
291 return set_intx_flag(name, op, out); | 310 return set_intx_flag(name, op, out); |
292 } else if (f->is_uintx()) { | 311 } else if (f->is_uintx()) { |
293 return set_uintx_flag(name, op, out); | 312 return set_uintx_flag(name, op, out); |
313 } else if (f->is_uint64_t()) { | |
314 return set_uint64_t_flag(name, op, out); | |
294 } else if (f->is_ccstr()) { | 315 } else if (f->is_ccstr()) { |
295 return set_ccstr_flag(name, op, out); | 316 return set_ccstr_flag(name, op, out); |
296 } else { | 317 } else { |
297 ShouldNotReachHere(); | 318 ShouldNotReachHere(); |
298 return JNI_ERR; | 319 return JNI_ERR; |