Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/back/error_messages.c
38765 views
1
/*
2
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
/* Error message and general message handling functions. */
27
28
/* NOTE: We assume that most strings passed around this library are
29
* UTF-8 (modified or standard) and not platform encoding.
30
* Before sending any strings to the "system" (e.g. OS system
31
* calls, or system input/output functions like fprintf) we need
32
* to make sure that the strings are transformed from UTF-8 to
33
* the platform encoding accepted by the system.
34
* UTF-8 and most encodings have simple ASCII or ISO-Latin
35
* characters as a subset, so in most cases the strings really
36
* don't need to be converted, but we don't know that easily.
37
* Parts of messages can be non-ASCII in some cases, so they may
38
* include classnames, methodnames, signatures, or other pieces
39
* that could contain non-ASCII characters, either from JNI or
40
* JVMTI (which both return modified UTF-8 strings).
41
* (It's possible that the platform encoding IS UTF-8, but we
42
* assume not, just to be safe).
43
*
44
*/
45
46
#include <stdarg.h>
47
#include <errno.h>
48
49
#include "util.h"
50
#include "proc_md.h"
51
52
/* Maximim length of a message */
53
#define MAX_MESSAGE_LEN MAXPATHLEN*2+512
54
55
/* Print message in platform encoding (assume all input is UTF-8 safe)
56
* NOTE: This function is at the lowest level of the call tree.
57
* Do not use the ERROR* macros here.
58
*/
59
static void
60
vprint_message(FILE *fp, const char *prefix, const char *suffix,
61
const char *format, va_list ap)
62
{
63
jbyte utf8buf[MAX_MESSAGE_LEN+1];
64
int len;
65
char pbuf[MAX_MESSAGE_LEN+1];
66
67
/* Fill buffer with single UTF-8 string */
68
(void)vsnprintf((char*)utf8buf, MAX_MESSAGE_LEN, format, ap);
69
utf8buf[MAX_MESSAGE_LEN] = 0;
70
len = (int)strlen((char*)utf8buf);
71
72
/* Convert to platform encoding (ignore errors, dangerous area) */
73
if (gdata->npt != NULL) {
74
(void)(gdata->npt->utf8ToPlatform)(gdata->npt->utf,
75
utf8buf, len, pbuf, MAX_MESSAGE_LEN);
76
} else {
77
/* May be called before NPT is initialized so don't fault */
78
strncpy(pbuf, (char*)utf8buf, len);
79
}
80
(void)fprintf(fp, "%s%s%s", prefix, pbuf, suffix);
81
}
82
83
/* Print message in platform encoding (assume all input is UTF-8 safe)
84
* NOTE: This function is at the lowest level of the call tree.
85
* Do not use the ERROR* macros here.
86
*/
87
void
88
print_message(FILE *fp, const char *prefix, const char *suffix,
89
const char *format, ...)
90
{
91
va_list ap;
92
93
va_start(ap, format);
94
vprint_message(fp, prefix, suffix, format, ap);
95
va_end(ap);
96
}
97
98
/* Generate error message */
99
void
100
error_message(const char *format, ...)
101
{
102
va_list ap;
103
104
va_start(ap, format);
105
vprint_message(stderr, "ERROR: ", "\n", format, ap);
106
va_end(ap);
107
if ( gdata->doerrorexit ) {
108
EXIT_ERROR(AGENT_ERROR_INTERNAL,"Requested errorexit=y exit()");
109
}
110
}
111
112
/* Print plain message to stdout. */
113
void
114
tty_message(const char *format, ...)
115
{
116
va_list ap;
117
118
va_start(ap, format);
119
vprint_message(stdout, "", "\n", format, ap);
120
va_end(ap);
121
(void)fflush(stdout);
122
}
123
124
/* Print assertion error message to stderr. */
125
void
126
jdiAssertionFailed(char *fileName, int lineNumber, char *msg)
127
{
128
LOG_MISC(("ASSERT FAILED: %s : %d - %s\n", fileName, lineNumber, msg));
129
print_message(stderr, "ASSERT FAILED: ", "\n",
130
"%s : %d - %s", fileName, lineNumber, msg);
131
if (gdata && gdata->assertFatal) {
132
EXIT_ERROR(AGENT_ERROR_INTERNAL,"Assertion Failed");
133
}
134
}
135
136
/* Macro for case on switch, returns string for name. */
137
#define CASE_RETURN_TEXT(name) case name: return #name;
138
139
/* Mapping of JVMTI errors to their name */
140
const char *
141
jvmtiErrorText(jvmtiError error)
142
{
143
switch (error) {
144
CASE_RETURN_TEXT(JVMTI_ERROR_NONE)
145
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_THREAD)
146
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_THREAD_GROUP)
147
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_PRIORITY)
148
CASE_RETURN_TEXT(JVMTI_ERROR_THREAD_NOT_SUSPENDED)
149
CASE_RETURN_TEXT(JVMTI_ERROR_THREAD_SUSPENDED)
150
CASE_RETURN_TEXT(JVMTI_ERROR_THREAD_NOT_ALIVE)
151
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_OBJECT)
152
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_CLASS)
153
CASE_RETURN_TEXT(JVMTI_ERROR_CLASS_NOT_PREPARED)
154
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_METHODID)
155
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_LOCATION)
156
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_FIELDID)
157
CASE_RETURN_TEXT(JVMTI_ERROR_NO_MORE_FRAMES)
158
CASE_RETURN_TEXT(JVMTI_ERROR_OPAQUE_FRAME)
159
CASE_RETURN_TEXT(JVMTI_ERROR_TYPE_MISMATCH)
160
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_SLOT)
161
CASE_RETURN_TEXT(JVMTI_ERROR_DUPLICATE)
162
CASE_RETURN_TEXT(JVMTI_ERROR_NOT_FOUND)
163
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_MONITOR)
164
CASE_RETURN_TEXT(JVMTI_ERROR_NOT_MONITOR_OWNER)
165
CASE_RETURN_TEXT(JVMTI_ERROR_INTERRUPT)
166
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_CLASS_FORMAT)
167
CASE_RETURN_TEXT(JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION)
168
CASE_RETURN_TEXT(JVMTI_ERROR_FAILS_VERIFICATION)
169
CASE_RETURN_TEXT(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED)
170
CASE_RETURN_TEXT(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED)
171
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_TYPESTATE)
172
CASE_RETURN_TEXT(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED)
173
CASE_RETURN_TEXT(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED)
174
CASE_RETURN_TEXT(JVMTI_ERROR_UNSUPPORTED_VERSION)
175
CASE_RETURN_TEXT(JVMTI_ERROR_NAMES_DONT_MATCH)
176
CASE_RETURN_TEXT(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED)
177
CASE_RETURN_TEXT(JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED)
178
CASE_RETURN_TEXT(JVMTI_ERROR_NOT_AVAILABLE)
179
CASE_RETURN_TEXT(JVMTI_ERROR_MUST_POSSESS_CAPABILITY)
180
CASE_RETURN_TEXT(JVMTI_ERROR_NULL_POINTER)
181
CASE_RETURN_TEXT(JVMTI_ERROR_ABSENT_INFORMATION)
182
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_EVENT_TYPE)
183
CASE_RETURN_TEXT(JVMTI_ERROR_ILLEGAL_ARGUMENT)
184
CASE_RETURN_TEXT(JVMTI_ERROR_OUT_OF_MEMORY)
185
CASE_RETURN_TEXT(JVMTI_ERROR_ACCESS_DENIED)
186
CASE_RETURN_TEXT(JVMTI_ERROR_WRONG_PHASE)
187
CASE_RETURN_TEXT(JVMTI_ERROR_INTERNAL)
188
CASE_RETURN_TEXT(JVMTI_ERROR_UNATTACHED_THREAD)
189
CASE_RETURN_TEXT(JVMTI_ERROR_INVALID_ENVIRONMENT)
190
191
CASE_RETURN_TEXT(AGENT_ERROR_INTERNAL)
192
CASE_RETURN_TEXT(AGENT_ERROR_VM_DEAD)
193
CASE_RETURN_TEXT(AGENT_ERROR_NO_JNI_ENV)
194
CASE_RETURN_TEXT(AGENT_ERROR_JNI_EXCEPTION)
195
CASE_RETURN_TEXT(AGENT_ERROR_JVMTI_INTERNAL)
196
CASE_RETURN_TEXT(AGENT_ERROR_JDWP_INTERNAL)
197
CASE_RETURN_TEXT(AGENT_ERROR_NOT_CURRENT_FRAME)
198
CASE_RETURN_TEXT(AGENT_ERROR_OUT_OF_MEMORY)
199
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_TAG)
200
CASE_RETURN_TEXT(AGENT_ERROR_ALREADY_INVOKING)
201
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_INDEX)
202
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_LENGTH)
203
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_STRING)
204
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_CLASS_LOADER)
205
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_ARRAY)
206
CASE_RETURN_TEXT(AGENT_ERROR_TRANSPORT_LOAD)
207
CASE_RETURN_TEXT(AGENT_ERROR_TRANSPORT_INIT)
208
CASE_RETURN_TEXT(AGENT_ERROR_NATIVE_METHOD)
209
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_COUNT)
210
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_FRAMEID)
211
CASE_RETURN_TEXT(AGENT_ERROR_NULL_POINTER)
212
CASE_RETURN_TEXT(AGENT_ERROR_ILLEGAL_ARGUMENT)
213
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_THREAD)
214
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_EVENT_TYPE)
215
CASE_RETURN_TEXT(AGENT_ERROR_INVALID_OBJECT)
216
CASE_RETURN_TEXT(AGENT_ERROR_NO_MORE_FRAMES)
217
218
default: return "ERROR_unknown";
219
}
220
}
221
222
const char *
223
eventText(int i)
224
{
225
switch ( i ) {
226
CASE_RETURN_TEXT(EI_SINGLE_STEP)
227
CASE_RETURN_TEXT(EI_BREAKPOINT)
228
CASE_RETURN_TEXT(EI_FRAME_POP)
229
CASE_RETURN_TEXT(EI_EXCEPTION)
230
CASE_RETURN_TEXT(EI_THREAD_START)
231
CASE_RETURN_TEXT(EI_THREAD_END)
232
CASE_RETURN_TEXT(EI_CLASS_PREPARE)
233
CASE_RETURN_TEXT(EI_CLASS_LOAD)
234
CASE_RETURN_TEXT(EI_FIELD_ACCESS)
235
CASE_RETURN_TEXT(EI_FIELD_MODIFICATION)
236
CASE_RETURN_TEXT(EI_EXCEPTION_CATCH)
237
CASE_RETURN_TEXT(EI_METHOD_ENTRY)
238
CASE_RETURN_TEXT(EI_METHOD_EXIT)
239
CASE_RETURN_TEXT(EI_VM_INIT)
240
CASE_RETURN_TEXT(EI_VM_DEATH)
241
CASE_RETURN_TEXT(EI_GC_FINISH)
242
default: return "EVENT_unknown";
243
}
244
}
245
246
/* Macro for case on switch, returns string for name. */
247
#define CASE_RETURN_JDWP_ERROR_TEXT(name) case JDWP_ERROR(name): return #name;
248
249
const char *
250
jdwpErrorText(jdwpError serror)
251
{
252
switch ( serror ) {
253
CASE_RETURN_JDWP_ERROR_TEXT(NONE)
254
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_THREAD)
255
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_THREAD_GROUP)
256
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_PRIORITY)
257
CASE_RETURN_JDWP_ERROR_TEXT(THREAD_NOT_SUSPENDED)
258
CASE_RETURN_JDWP_ERROR_TEXT(THREAD_SUSPENDED)
259
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_OBJECT)
260
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_CLASS)
261
CASE_RETURN_JDWP_ERROR_TEXT(CLASS_NOT_PREPARED)
262
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_METHODID)
263
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_LOCATION)
264
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_FIELDID)
265
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_FRAMEID)
266
CASE_RETURN_JDWP_ERROR_TEXT(NO_MORE_FRAMES)
267
CASE_RETURN_JDWP_ERROR_TEXT(OPAQUE_FRAME)
268
CASE_RETURN_JDWP_ERROR_TEXT(NOT_CURRENT_FRAME)
269
CASE_RETURN_JDWP_ERROR_TEXT(TYPE_MISMATCH)
270
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_SLOT)
271
CASE_RETURN_JDWP_ERROR_TEXT(DUPLICATE)
272
CASE_RETURN_JDWP_ERROR_TEXT(NOT_FOUND)
273
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_MONITOR)
274
CASE_RETURN_JDWP_ERROR_TEXT(NOT_MONITOR_OWNER)
275
CASE_RETURN_JDWP_ERROR_TEXT(INTERRUPT)
276
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_CLASS_FORMAT)
277
CASE_RETURN_JDWP_ERROR_TEXT(CIRCULAR_CLASS_DEFINITION)
278
CASE_RETURN_JDWP_ERROR_TEXT(FAILS_VERIFICATION)
279
CASE_RETURN_JDWP_ERROR_TEXT(ADD_METHOD_NOT_IMPLEMENTED)
280
CASE_RETURN_JDWP_ERROR_TEXT(SCHEMA_CHANGE_NOT_IMPLEMENTED)
281
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_TYPESTATE)
282
CASE_RETURN_JDWP_ERROR_TEXT(HIERARCHY_CHANGE_NOT_IMPLEMENTED)
283
CASE_RETURN_JDWP_ERROR_TEXT(DELETE_METHOD_NOT_IMPLEMENTED)
284
CASE_RETURN_JDWP_ERROR_TEXT(UNSUPPORTED_VERSION)
285
CASE_RETURN_JDWP_ERROR_TEXT(NAMES_DONT_MATCH)
286
CASE_RETURN_JDWP_ERROR_TEXT(CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED)
287
CASE_RETURN_JDWP_ERROR_TEXT(METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED)
288
CASE_RETURN_JDWP_ERROR_TEXT(NOT_IMPLEMENTED)
289
CASE_RETURN_JDWP_ERROR_TEXT(NULL_POINTER)
290
CASE_RETURN_JDWP_ERROR_TEXT(ABSENT_INFORMATION)
291
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_EVENT_TYPE)
292
CASE_RETURN_JDWP_ERROR_TEXT(ILLEGAL_ARGUMENT)
293
CASE_RETURN_JDWP_ERROR_TEXT(OUT_OF_MEMORY)
294
CASE_RETURN_JDWP_ERROR_TEXT(ACCESS_DENIED)
295
CASE_RETURN_JDWP_ERROR_TEXT(VM_DEAD)
296
CASE_RETURN_JDWP_ERROR_TEXT(INTERNAL)
297
CASE_RETURN_JDWP_ERROR_TEXT(UNATTACHED_THREAD)
298
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_TAG)
299
CASE_RETURN_JDWP_ERROR_TEXT(ALREADY_INVOKING)
300
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_INDEX)
301
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_LENGTH)
302
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_STRING)
303
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_CLASS_LOADER)
304
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_ARRAY)
305
CASE_RETURN_JDWP_ERROR_TEXT(TRANSPORT_LOAD)
306
CASE_RETURN_JDWP_ERROR_TEXT(TRANSPORT_INIT)
307
CASE_RETURN_JDWP_ERROR_TEXT(NATIVE_METHOD)
308
CASE_RETURN_JDWP_ERROR_TEXT(INVALID_COUNT)
309
default: return "JDWP_ERROR_unknown";
310
}
311
}
312
313
static int p = 1;
314
315
void
316
do_pause(void)
317
{
318
THREAD_T tid = GET_THREAD_ID();
319
PID_T pid = GETPID();
320
int timeleft = 600; /* 10 minutes max */
321
int interval = 10; /* 10 second message check */
322
323
/*LINTED*/
324
tty_message("DEBUGGING: JDWP pause for PID %d, THREAD %d (0x%x)",
325
/*LINTED*/
326
(int)(intptr_t)pid, (int)(intptr_t)tid, (int)(intptr_t)tid);
327
while ( p && timeleft > 0 ) {
328
(void)sleep(interval); /* 'assign p = 0;' to get out of loop */
329
timeleft -= interval;
330
}
331
if ( timeleft <= 0 ) {
332
tty_message("DEBUGGING: JDWP pause got tired of waiting and gave up.");
333
}
334
}
335
336