Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/agent/test/jdi/SASanityChecker.java
38764 views
1
/*
2
* Copyright (c) 2003, 2005, 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.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
import sun.jvm.hotspot.tools.*;
26
import sun.jvm.hotspot.runtime.*;
27
import java.io.*;
28
import java.util.*;
29
import java.util.jar.*;
30
31
/**
32
This is a sanity checking tool for Serviceability Agent. To use this class,
33
refer to sasanity.sh script in the current directory.
34
*/
35
36
public class SASanityChecker extends Tool {
37
private static final String saJarName;
38
private static final Map c2types;
39
40
static {
41
saJarName = System.getProperty("SASanityChecker.SAJarName", "sa-jdi.jar");
42
c2types = new HashMap();
43
Object value = new Object();
44
c2types.put("sun.jvm.hotspot.code.ExceptionBlob", value);
45
c2types.put("sun.jvm.hotspot.code.DeoptimizationBlob", value);
46
c2types.put("sun.jvm.hotspot.code.UncommonTrapBlob", value);
47
48
}
49
50
public void run() {
51
String classPath = System.getProperty("java.class.path");
52
StringTokenizer st = new StringTokenizer(classPath, File.pathSeparator);
53
String saJarPath = null;
54
while (st.hasMoreTokens()) {
55
saJarPath = st.nextToken();
56
if (saJarPath.endsWith(saJarName)) {
57
break;
58
}
59
}
60
61
if (saJarPath == null) {
62
throw new RuntimeException(saJarName + " is not the CLASSPATH");
63
}
64
65
String cpuDot = "." + VM.getVM().getCPU() + ".";
66
String platformDot = "." + VM.getVM().getOS() + "_" + VM.getVM().getCPU() + ".";
67
boolean isClient = VM.getVM().isClientCompiler();
68
69
try {
70
FileInputStream fis = new FileInputStream(saJarPath);
71
JarInputStream jis = new JarInputStream(fis);
72
JarEntry je = null;
73
while ( (je = jis.getNextJarEntry()) != null) {
74
String entryName = je.getName();
75
int dotClassIndex = entryName.indexOf(".class");
76
if (dotClassIndex == -1) {
77
// skip non-.class stuff
78
continue;
79
}
80
81
entryName = entryName.substring(0, dotClassIndex).replace('/', '.');
82
83
// skip debugger, asm classes, type classes and jdi binding classes
84
if (entryName.startsWith("sun.jvm.hotspot.debugger.") ||
85
entryName.startsWith("sun.jvm.hotspot.asm.") ||
86
entryName.startsWith("sun.jvm.hotspot.type.") ||
87
entryName.startsWith("sun.jvm.hotspot.jdi.") ) {
88
continue;
89
}
90
91
String runtimePkgPrefix = "sun.jvm.hotspot.runtime.";
92
int runtimeIndex = entryName.indexOf(runtimePkgPrefix);
93
if (runtimeIndex != -1) {
94
// look for further dot. if there, it has to be sub-package.
95
// in runtime sub-packages include only current platform classes.
96
if (entryName.substring(runtimePkgPrefix.length() + 1, entryName.length()).indexOf('.') != -1) {
97
if (entryName.indexOf(cpuDot) == -1 &&
98
entryName.indexOf(platformDot) == -1) {
99
continue;
100
}
101
}
102
}
103
104
if (isClient) {
105
if (c2types.get(entryName) != null) {
106
continue;
107
}
108
} else {
109
if (entryName.equals("sun.jvm.hotspot.c1.Runtime1")) {
110
continue;
111
}
112
}
113
114
System.out.println("checking " + entryName + " ..");
115
// force init of the class to uncover any vmStructs mismatch
116
Class.forName(entryName);
117
}
118
} catch (Exception exp) {
119
System.out.println();
120
System.out.println("FAILED");
121
System.out.println();
122
throw new RuntimeException(exp.getMessage());
123
}
124
System.out.println();
125
System.out.println("PASSED");
126
System.out.println();
127
}
128
129
public static void main(String[] args) {
130
SASanityChecker checker = new SASanityChecker();
131
checker.start(args);
132
checker.stop();
133
}
134
}
135
136