Mercurial > hg > graal-compiler
comparison src/share/vm/services/diagnosticArgument.cpp @ 10405:f2110083203d
8005849: JEP 167: Event-Based JVM Tracing
Reviewed-by: acorn, coleenp, sla
Contributed-by: Karen Kinnear <karen.kinnear@oracle.com>, Bengt Rutisson <bengt.rutisson@oracle.com>, Calvin Cheung <calvin.cheung@oracle.com>, Erik Gahlin <erik.gahlin@oracle.com>, Erik Helin <erik.helin@oracle.com>, Jesper Wilhelmsson <jesper.wilhelmsson@oracle.com>, Keith McGuigan <keith.mcguigan@oracle.com>, Mattias Tobiasson <mattias.tobiasson@oracle.com>, Markus Gronlund <markus.gronlund@oracle.com>, Mikael Auno <mikael.auno@oracle.com>, Nils Eliasson <nils.eliasson@oracle.com>, Nils Loodin <nils.loodin@oracle.com>, Rickard Backman <rickard.backman@oracle.com>, Staffan Larsen <staffan.larsen@oracle.com>, Stefan Karlsson <stefan.karlsson@oracle.com>, Yekaterina Kantserova <yekaterina.kantserova@oracle.com>
author | sla |
---|---|
date | Mon, 10 Jun 2013 11:30:51 +0200 |
parents | b0301c02f38e |
children | ef57c43512d6 |
comparison
equal
deleted
inserted
replaced
10404:d0add7016434 | 10405:f2110083203d |
---|---|
22 * | 22 * |
23 */ | 23 */ |
24 | 24 |
25 #include "precompiled.hpp" | 25 #include "precompiled.hpp" |
26 #include "memory/allocation.inline.hpp" | 26 #include "memory/allocation.inline.hpp" |
27 #include "memory/resourceArea.hpp" | |
27 #include "runtime/thread.hpp" | 28 #include "runtime/thread.hpp" |
28 #include "services/diagnosticArgument.hpp" | 29 #include "services/diagnosticArgument.hpp" |
29 | 30 |
30 void GenDCmdArgument::read_value(const char* str, size_t len, TRAPS) { | 31 void GenDCmdArgument::read_value(const char* str, size_t len, TRAPS) { |
31 /* NOTE:Some argument types doesn't require a value, | 32 /* NOTE:Some argument types doesn't require a value, |
84 } | 85 } |
85 } | 86 } |
86 | 87 |
87 template <> void DCmdArgument<jlong>::parse_value(const char* str, | 88 template <> void DCmdArgument<jlong>::parse_value(const char* str, |
88 size_t len, TRAPS) { | 89 size_t len, TRAPS) { |
89 if (str == NULL || sscanf(str, JLONG_FORMAT, &_value) != 1) { | 90 int scanned = -1; |
90 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), | 91 if (str == NULL |
91 "Integer parsing error in diagnostic command arguments\n"); | 92 || sscanf(str, JLONG_FORMAT"%n", &_value, &scanned) != 1 |
93 || (size_t)scanned != len) | |
94 { | |
95 ResourceMark rm; | |
96 | |
97 char* buf = NEW_RESOURCE_ARRAY(char, len + 1); | |
98 strncpy(buf, str, len); | |
99 buf[len] = '\0'; | |
100 Exceptions::fthrow(THREAD_AND_LOCATION, vmSymbols::java_lang_IllegalArgumentException(), | |
101 "Integer parsing error in command argument '%s'. Could not parse: %s.", _name, buf); | |
92 } | 102 } |
93 } | 103 } |
94 | 104 |
95 template <> void DCmdArgument<jlong>::init_value(TRAPS) { | 105 template <> void DCmdArgument<jlong>::init_value(TRAPS) { |
96 if (has_default()) { | 106 if (has_default()) { |
97 this->parse_value(_default_string, strlen(_default_string), THREAD); | 107 this->parse_value(_default_string, strlen(_default_string), THREAD); |
98 if (HAS_PENDING_EXCEPTION) { | 108 if (HAS_PENDING_EXCEPTION) { |
99 fatal("Default string must be parsable"); | 109 fatal("Default string must be parseable"); |
100 } | 110 } |
101 } else { | 111 } else { |
102 set_value(0); | 112 set_value(0); |
103 } | 113 } |
104 } | 114 } |
114 if (len == strlen("true") && strncasecmp(str, "true", len) == 0) { | 124 if (len == strlen("true") && strncasecmp(str, "true", len) == 0) { |
115 set_value(true); | 125 set_value(true); |
116 } else if (len == strlen("false") && strncasecmp(str, "false", len) == 0) { | 126 } else if (len == strlen("false") && strncasecmp(str, "false", len) == 0) { |
117 set_value(false); | 127 set_value(false); |
118 } else { | 128 } else { |
119 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), | 129 ResourceMark rm; |
120 "Boolean parsing error in diagnostic command arguments"); | 130 |
131 char* buf = NEW_RESOURCE_ARRAY(char, len + 1); | |
132 strncpy(buf, str, len); | |
133 buf[len] = '\0'; | |
134 Exceptions::fthrow(THREAD_AND_LOCATION, vmSymbols::java_lang_IllegalArgumentException(), | |
135 "Boolean parsing error in command argument '%s'. Could not parse: %s.", _name, buf); | |
121 } | 136 } |
122 } | 137 } |
123 } | 138 } |
124 | 139 |
125 template <> void DCmdArgument<bool>::init_value(TRAPS) { | 140 template <> void DCmdArgument<bool>::init_value(TRAPS) { |
166 | 181 |
167 template <> void DCmdArgument<NanoTimeArgument>::parse_value(const char* str, | 182 template <> void DCmdArgument<NanoTimeArgument>::parse_value(const char* str, |
168 size_t len, TRAPS) { | 183 size_t len, TRAPS) { |
169 if (str == NULL) { | 184 if (str == NULL) { |
170 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), | 185 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), |
171 "Integer parsing error nanotime value: syntax error"); | 186 "Integer parsing error nanotime value: syntax error, value is null"); |
172 } | 187 } |
173 | 188 |
174 int argc = sscanf(str, JLONG_FORMAT, &_value._time); | 189 int argc = sscanf(str, JLONG_FORMAT, &_value._time); |
175 if (argc != 1) { | 190 if (argc != 1) { |
176 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), | 191 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), |