use of com.ibm.dtfj.image.ImagePointer in project openj9 by eclipse.
the class JavaRuntimeBuilder method addJavaStackFrame.
/**
*/
public JavaStackFrame addJavaStackFrame(JavaThread javaThread, String className, String classFileName, String methodName, String methodType, String compilationLevel, int lineNumber) throws BuilderFailureException {
try {
JCJavaThread jThread = (JCJavaThread) javaThread;
JCJavaClass jclass = getJavaRuntime().findJavaClass(className);
if (jclass == null) {
jclass = new JCJavaClass(getJavaRuntime(), className);
}
JCJavaMethod method = new JCJavaMethod(methodName, jclass);
JCJavaLocation location = new JCJavaLocation(method);
location.setFilename(classFileName);
location.setCompilation(compilationLevel);
location.setLineNumber(lineNumber);
JCJavaStackFrame stackFrame = new JCJavaStackFrame(jThread, location);
if ("run".equals(methodName)) {
/*
* Perhaps the type of the thread is the type of the last run() method.
* Not strictly accurate if the class was extended without overriding run().
* Add the object only if the object ID is valid.
*/
try {
JavaObject jo = jThread.getObject();
if (jo != null) {
ImagePointer tid = jo.getID();
if (fAddressSpace.isValidAddressID(tid.getAddress())) {
JCJavaObject jobject = new JCJavaObject(tid, jclass);
jThread.setObject(jobject);
}
}
} catch (CorruptDataException e) {
// Ignore
}
}
return stackFrame;
} catch (JCInvalidArgumentsException e) {
throw new BuilderFailureException(e);
}
}
use of com.ibm.dtfj.image.ImagePointer in project openj9 by eclipse.
the class JavaRuntimeBuilder method addClassLoader.
/**
* Must pass a valid class loader ID in order to generate a class loader object. Else exception
* is thrown.
*
* @param classLoaderName optional
* @param clID required, or else exception is throw and class loader is not created.
* @param objectID optional (although generally this is the same as the clID for most javacores)
* @return successfully created JavaClassLoader
* @throws BuilderFailureException if class loader ID is invalid.
*/
public JavaClassLoader addClassLoader(String classLoaderName, long clID, long objectID) throws BuilderFailureException {
try {
JCJavaClassLoader classLoader = getJavaRuntime().findJavaClassLoader(clID);
if (classLoader == null) {
classLoader = new JCJavaClassLoader(getJavaRuntime(), clID);
}
JCJavaObject javaObject = classLoader.getInternalObject();
if (javaObject == null) {
JCJavaClass javaClass = getJavaRuntime().findJavaClass(classLoaderName);
if (javaClass == null) {
javaClass = new JCJavaClass(getJavaRuntime(), classLoaderName);
}
ImagePointer objectPointer = fAddressSpace.getPointer(objectID);
javaObject = new JCJavaObject(objectPointer, javaClass);
classLoader.setObject(javaObject);
}
return classLoader;
} catch (JCInvalidArgumentsException e) {
throw new BuilderFailureException(e);
}
}
use of com.ibm.dtfj.image.ImagePointer in project openj9 by eclipse.
the class ImageProcessBuilder method addImageThread.
/**
* @param Properties with String key and String value
*/
public ImageThread addImageThread(long nativeThreadID, long systemThreadID, Properties properties) throws BuilderFailureException {
try {
ImagePointer pointer = fImageAddressSpace.getPointer(nativeThreadID);
JCImageThread thread = fImageProcess.getImageThread(pointer);
if (thread == null) {
thread = new JCImageThread(pointer);
if (registers != null) {
// Add the registers to the first thread
for (Iterator it = registers.entrySet().iterator(); it.hasNext(); ) {
Map.Entry me = (Map.Entry) it.next();
ImageRegister ir = new JCImageRegister((String) me.getKey(), (Number) me.getValue());
thread.addRegister(ir);
}
registers = null;
}
fImageProcess.addImageThread(thread);
}
for (Iterator it = properties.entrySet().iterator(); it.hasNext(); ) {
Map.Entry me = (Map.Entry) it.next();
thread.addProperty(me.getKey(), me.getValue());
}
if (systemThreadID != IBuilderData.NOT_AVAILABLE) {
pointer = fImageAddressSpace.getPointer(systemThreadID);
thread.setSystemThreadID(pointer);
}
return thread;
} catch (JCInvalidArgumentsException e) {
throw new BuilderFailureException(e);
}
}
use of com.ibm.dtfj.image.ImagePointer in project openj9 by eclipse.
the class ImageProcessBuilder method addRoutine.
public ImageSymbol addRoutine(ImageModule library, String name, long address) {
ImagePointer addr = fImageAddressSpace.getPointer(address);
ImageSymbol symbol = new JCImageSymbol(name, addr);
JCImageModule mod = (JCImageModule) library;
mod.addSymbol(symbol);
return symbol;
}
use of com.ibm.dtfj.image.ImagePointer in project openj9 by eclipse.
the class JavaRuntimeBuilder method addClass.
/**
* Note that even if a class was already registered with a class loader previously, it may contain incomplete data,
* so this case has to be considered.
*/
public JavaClass addClass(JavaClassLoader jClassLoader, String name, long classID, long superClassID, String fileName) throws BuilderFailureException {
try {
JCJavaClassLoader classLoader = (JCJavaClassLoader) jClassLoader;
JCJavaClass jClass = generateJavaClass(getJavaRuntime(), name, classID);
jClass.setJavaSuperClass(superClassID);
jClass.setClassLoader(classLoader);
ImagePointer ip = jClass.getID();
if (ip != null) {
classLoader.addClass(name, ip);
} else {
if (classLoader.internalGetClass(name) == null) {
classLoader.addClass(name);
}
}
return jClass;
} catch (JCInvalidArgumentsException e) {
throw new BuilderFailureException(e);
}
}
Aggregations