Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (102)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (322)
Collections:
Other Resources:
JDK 17 jdk.hotspot.agent.jmod - Hotspot Agent Module
JDK 17 jdk.hotspot.agent.jmod is the JMOD file for JDK 17 Hotspot Agent module.
JDK 17 Hotspot Agent module compiled class files are stored in \fyicenter\jdk-17.0.5\jmods\jdk.hotspot.agent.jmod.
JDK 17 Hotspot Agent module compiled class files are also linked and stored in the \fyicenter\jdk-17.0.5\lib\modules JImage file.
JDK 17 Hotspot Agent module source code files are stored in \fyicenter\jdk-17.0.5\lib\src.zip\jdk.hotspot.agent.
You can click and view the content of each source code file in the list below.
✍: FYIcenter
⏎ sun/jvm/hotspot/debugger/cdbg/basic/BasicCDebugInfoDataBase.java
/*
* Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package sun.jvm.hotspot.debugger.cdbg.basic;
import java.util.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.debugger.cdbg.*;
import sun.jvm.hotspot.utilities.AddressOps;
import sun.jvm.hotspot.utilities.Assert;
public class BasicCDebugInfoDataBase implements CDebugInfoDataBase {
private static final int INITIALIZED_STATE = 0;
private static final int CONSTRUCTION_STATE = 1;
private static final int RESOLVED_STATE = 2;
private static final int COMPLETE_STATE = 3;
private int state = INITIALIZED_STATE;
///////////
// Types //
///////////
// Used only during construction
private Map<Object, Type> lazyTypeMap;
// Used during construction and at run time for iteration
private List<Type> types;
// Used only during runtime
private Map<String, Type> nameToTypeMap;
/////////////
// Symbols //
/////////////
// Used only during construction
private Map<Object, BlockSym> lazySymMap;
// List of blocks in increasing order by starting address. These can
// then be binary searched.
private List<BlockSym> blocks;
// Name-to-global symbol table
private Map<String, GlobalSym> nameToSymMap;
//////////////////
// Line numbers //
//////////////////
private BasicLineNumberMapping lineNumbers;
/** Supports lazy instantiation and references between types and
symbols via insertion using arbitrary Object keys that are
wrapped by LazyTypes. Once the database has been fully
constructed and all types are present, one should call
resolveTypes(), which will resolve all LazyTypes down to
concrete types (and signal an error if some lazy types were
unresolved). */
public void beginConstruction() {
if (Assert.ASSERTS_ENABLED) {
Assert.that(state == INITIALIZED_STATE, "wrong state");
}
state = CONSTRUCTION_STATE;
// Types
lazyTypeMap = new HashMap<>();
types = new ArrayList<>();
// Symbols
lazySymMap = new HashMap<>();
blocks = new ArrayList<>();
nameToSymMap = new HashMap<>();
// Line numbers
lineNumbers = new BasicLineNumberMapping();
}
/** Add a type which may later in construction be referred to via a
LazyType with this key. lazyKey may be null. */
public void addType(Object lazyKey, Type type) {
if (Assert.ASSERTS_ENABLED) {
Assert.that(state == CONSTRUCTION_STATE, "wrong state");
}
if (lazyKey != null) {
if (lazyTypeMap.put(lazyKey, type) != null) {
throw new RuntimeException("Type redefined for lazy key " + lazyKey);
}
} else {
types.add(type);
}
}
public void resolve(ResolveListener listener) {
if (Assert.ASSERTS_ENABLED) {
Assert.that(state == CONSTRUCTION_STATE, "wrong state");
}
// Go through all types in lazyTypeMap and types.
// Resolve all LazyTypes.
resolveLazyMap(listener);
for (ListIterator<Type> iter = types.listIterator(); iter.hasNext(); ) {
BasicType t = (BasicType) iter.next();
BasicType t2 = (BasicType) t.resolveTypes(this, listener);
if (t != t2) {
iter.set(t2);
}
}
// Go through all symbols and resolve references to types and
// references to other symbols
for (Iterator iter = blocks.iterator(); iter.hasNext(); ) {
((BasicSym) iter.next()).resolve(this, listener);
}
for (Iterator iter = nameToSymMap.values().iterator(); iter.hasNext(); ) {
((BasicSym) iter.next()).resolve(this, listener);
}
// Sort blocks in ascending order of starting address (but do not
// change ordering among blocks with the same starting address)
Collections.sort(blocks, new Comparator<>() {
public int compare(BlockSym b1, BlockSym b2) {
Address a1 = b1.getAddress();
Address a2 = b2.getAddress();
if (AddressOps.lt(a1, a2)) { return -1; }
if (AddressOps.gt(a1, a2)) { return 1; }
return 0;
}
});
state = RESOLVED_STATE;
}
public void endConstruction() {
if (Assert.ASSERTS_ENABLED) {
Assert.that(state == RESOLVED_STATE, "wrong state");
}
// Move all types to type list
for (Iterator<Type> iter = lazyTypeMap.values().iterator(); iter.hasNext(); ) {
types.add(iter.next());
}
// Build name-to-type map
nameToTypeMap = new HashMap<>();
for (Iterator iter = types.iterator(); iter.hasNext(); ) {
Type t = (Type) iter.next();
if (!t.isConst() && !t.isVolatile()) {
nameToTypeMap.put(t.getName(), t);
}
}
// Lose lazy maps
lazyTypeMap = null;
lazySymMap = null;
// Sort and finish line number information
lineNumbers.sort();
// FIXME: on some platforms it might not be necessary to call
// recomputeEndPCs(). Will have to see what stabs information
// looks like. Should make configurable whether we make this call
// or not.
lineNumbers.recomputeEndPCs();
state = COMPLETE_STATE;
}
public Type lookupType(String name) {
return lookupType(name, 0);
}
public Type lookupType(String name, int cvAttributes) {
if (Assert.ASSERTS_ENABLED) {
Assert.that(state == COMPLETE_STATE, "wrong state");
}
BasicType t = (BasicType) nameToTypeMap.get(name);
if (t != null) {
if (cvAttributes != 0) {
t = (BasicType) t.getCVVariant(cvAttributes);
}
}
return t;
}
public void iterate(TypeVisitor v) {
if (Assert.ASSERTS_ENABLED) {
Assert.that(state == COMPLETE_STATE, "wrong state");
}
for (Iterator iter = types.iterator(); iter.hasNext(); ) {
BasicType t = (BasicType) iter.next();
t.visit(v);
}
}
/** Add a BlockSym to the debug information database. The given
BlockSym may be referred to by a LazyBlockSym wrapping the given
Object key, which must be non-null. Any references to other
blocks (for example, the parent scope) should be made with
LazyBlockSyms. These references will be resolved after the
database is built. */
public void addBlock(Object key, BlockSym block) {
if (Assert.ASSERTS_ENABLED) {
Assert.that(key != null, "key must be non-null");
}
lazySymMap.put(key, block);
blocks.add(block);
}
public void addGlobalSym(GlobalSym sym) {
nameToSymMap.put(sym.getName(), sym);
}
public BlockSym debugInfoForPC(Address pc) {
return searchBlocks(pc, 0, blocks.size() - 1);
}
public GlobalSym lookupSym(String name) {
return (GlobalSym) nameToSymMap.get(name);
}
public void addLineNumberInfo(BasicLineNumberInfo info) {
lineNumbers.addLineNumberInfo(info);
}
public LineNumberInfo lineNumberForPC(Address pc) throws DebuggerException {
return lineNumbers.lineNumberForPC(pc);
}
public void iterate(LineNumberVisitor v) {
lineNumbers.iterate(v);
}
//----------------------------------------------------------------------
// Internals only below this point
//
/** Intended only to be used by the BasicType implementation. */
public Type resolveType(Type containingType, Type targetType, ResolveListener listener, String detail) {
BasicType basicTargetType = (BasicType) targetType;
if (Assert.ASSERTS_ENABLED) {
Assert.that(state == CONSTRUCTION_STATE, "wrong state");
}
if (basicTargetType.isLazy()) {
BasicType resolved = (BasicType) lazyTypeMap.get(((LazyType) targetType).getKey());
// FIXME: would like to have an assert here that the target is
// non-null, but apparently have bugs here with forward
// references of pointer types
if (resolved == null) {
listener.resolveFailed(containingType, (LazyType) targetType, detail + " because target type was not found");
return targetType;
}
if (resolved.isLazy()) {
// Might happen for const/var variants for forward references
if (resolved.isConst() || resolved.isVolatile()) {
resolved = (BasicType) resolved.resolveTypes(this, listener);
}
if (resolved.isLazy()) {
listener.resolveFailed(containingType, (LazyType) targetType,
detail + " because target type (with key " +
((Integer) ((LazyType) resolved).getKey()).intValue() +
(resolved.isConst() ? ", const" : ", not const") +
(resolved.isVolatile() ? ", volatile" : ", not volatile") +
") was lazy");
}
}
return resolved;
}
return targetType;
}
/** Intended only to be usd by the BasicSym implementation. */
public Type resolveType(Sym containingSymbol, Type targetType, ResolveListener listener, String detail) {
BasicType basicTargetType = (BasicType) targetType;
if (Assert.ASSERTS_ENABLED) {
Assert.that(state == CONSTRUCTION_STATE, "wrong state");
}
if (basicTargetType.isLazy()) {
BasicType resolved = (BasicType) lazyTypeMap.get(((LazyType) targetType).getKey());
// FIXME: would like to have an assert here that the target is
// non-null, but apparently have bugs here
if (resolved == null) {
listener.resolveFailed(containingSymbol, (LazyType) targetType, detail);
return targetType;
}
if (resolved.isLazy()) {
// Might happen for const/var variants for forward references
if (resolved.isConst() || resolved.isVolatile()) {
resolved = (BasicType) resolved.resolveTypes(this, listener);
}
if (resolved.isLazy()) {
listener.resolveFailed(containingSymbol, (LazyType) targetType, detail);
}
}
return resolved;
}
return targetType;
}
/** Intended only to be usd by the BasicSym implementation. */
public Sym resolveSym(Sym containingSymbol, Sym targetSym, ResolveListener listener, String detail) {
if (targetSym == null) return null;
BasicSym basicTargetSym = (BasicSym) targetSym;
if (Assert.ASSERTS_ENABLED) {
Assert.that(state == CONSTRUCTION_STATE, "wrong state");
}
if (basicTargetSym.isLazy()) {
BasicSym resolved = (BasicSym) lazySymMap.get(((LazyBlockSym) targetSym).getKey());
// FIXME: would like to have an assert here that the target is
// non-null, but apparently have bugs here
if (resolved == null) {
listener.resolveFailed(containingSymbol, (LazyBlockSym) targetSym, detail);
return targetSym;
}
if (resolved.isLazy()) {
listener.resolveFailed(containingSymbol, (LazyBlockSym) targetSym, detail);
}
return resolved;
}
return targetSym;
}
private void resolveLazyMap(ResolveListener listener) {
for (Iterator<Map.Entry<Object, Type>> iter = lazyTypeMap.entrySet().iterator(); iter.hasNext(); ) {
Map.Entry<Object, Type> entry = iter.next();
BasicType t = (BasicType) entry.getValue();
BasicType t2 = (BasicType) t.resolveTypes(this, listener);
if (t2 != t) {
entry.setValue(t2);
}
}
}
/** Find the block whose starting address is closest to but less
than the given address. */
private BlockSym searchBlocks(Address addr, int lowIdx, int highIdx) {
if (highIdx < lowIdx) return null;
if ((lowIdx == highIdx) || (lowIdx == highIdx - 1)) {
// Base case: start with highIdx and walk backward. See whether
// addr is greater than any of the blocks' starting addresses,
// and if so, return that block.
Address lastAddr = null;
BlockSym ret = null;
for (int i = highIdx; i >= 0; --i) {
BlockSym block = (BlockSym) blocks.get(i);
if (AddressOps.lte(block.getAddress(), addr)) {
if ((lastAddr == null) || (AddressOps.equal(block.getAddress(), lastAddr))) {
lastAddr = block.getAddress();
ret = block;
} else {
break;
}
}
}
return ret;
}
int midIdx = (lowIdx + highIdx) >> 1;
BlockSym block = (BlockSym) blocks.get(midIdx);
// See address relationship
if (AddressOps.lte(block.getAddress(), addr)) {
// Always move search up
return searchBlocks(addr, midIdx, highIdx);
} else {
// Always move search down
return searchBlocks(addr, lowIdx, midIdx);
}
}
}
⏎ sun/jvm/hotspot/debugger/cdbg/basic/BasicCDebugInfoDataBase.java
Or download all of them as a single archive file:
File name: jdk.hotspot.agent-17.0.5-src.zip File size: 1238587 bytes Release date: 2022-09-13 Download
⇒ JDK 17 jdk.httpserver.jmod - HTTP Server Module
2023-10-04, ≈167🔥, 0💬
Popular Posts:
What Is commons-logging-1.2.jar? commons-logging-1.2.jar is the JAR file for Apache Commons Logging ...
What Is poi-3.5.jar - Part 2? poi-3.5.jar is one of the JAR files for Apache POI 3.5, which provides...
What Is js.jar in Rhino JavaScript 1.7R5? js.jar in Rhino JavaScript 1.7R5 is the JAR file for Rhino...
What Is mail.jar of JavaMail 1.4? I got the JAR file from javamail-1_4.zip. mail.jar in javamail-1_4...
Where to get the Java source code for Connector/J 8.0 Protocol Impl module? Java source code files f...