Search in sources :

Example 1 with ArrayInstruction

use of org.apache.bcel.generic.ArrayInstruction in project jop by jop-devel.

the class SymbolicPointsTo method printResult.

public void printResult(DFATool program) {
    Map<String, String> getFields = new TreeMap<String, String>();
    for (InstructionHandle instr : usedRefs.keySet()) {
        ContextMap<CallString, BoundedSet<SymbolicAddress>> r = usedRefs.get(instr);
        Context c = r.getContext();
        MethodInfo method = c.getMethodInfo();
        if (method == null) {
            throw new AssertionError("Internal Error: No method '" + c.method() + "'");
        }
        LineNumberTable lines = method.getCode().getLineNumberTable();
        int sourceLine = lines.getSourceLine(instr.getPosition());
        for (CallString callString : r.keySet()) {
            System.out.println(c.method() + ":" + sourceLine + ":" + callString + ": " + instr);
            BoundedSet<SymbolicAddress> symAddr = r.get(callString);
            String infoStr;
            if (instr.getInstruction() instanceof GETFIELD) {
                GETFIELD gfInstr = (GETFIELD) instr.getInstruction();
                infoStr = String.format("GETFIELD %s %s %s", symAddr.toString(), gfInstr.getFieldName(c.constPool()), gfInstr.getFieldType(c.constPool()));
            } else if (instr.getInstruction() instanceof ARRAYLENGTH) {
                infoStr = String.format("ARRAYLENGTH %s", symAddr.toString());
            } else if (instr.getInstruction() instanceof ArrayInstruction) {
                ArrayInstruction aInstr = (ArrayInstruction) instr.getInstruction();
                infoStr = String.format("%s %s %s[]", aInstr.getName().toUpperCase(), symAddr.toString(), aInstr.getType(c.constPool()));
            } else {
                infoStr = String.format("%s %s", instr.getInstruction().getName().toUpperCase(), symAddr.toString());
            }
            if (infoStr != null) {
                String infoKey = String.format("%s:%04d:%s", c.method(), sourceLine, callString);
                while (getFields.containsKey(infoKey)) infoKey += "'";
                getFields.put(infoKey, infoStr);
            }
        }
    }
    for (Entry<String, String> entry : getFields.entrySet()) {
        System.out.println(entry.getKey());
        System.out.println("  " + entry.getValue());
    }
}
Also used : Context(com.jopdesign.dfa.framework.Context) ARRAYLENGTH(org.apache.bcel.generic.ARRAYLENGTH) CallString(com.jopdesign.common.code.CallString) TreeMap(java.util.TreeMap) InstructionHandle(org.apache.bcel.generic.InstructionHandle) LineNumberTable(org.apache.bcel.classfile.LineNumberTable) CallString(com.jopdesign.common.code.CallString) BoundedSet(com.jopdesign.dfa.framework.BoundedSetFactory.BoundedSet) GETFIELD(org.apache.bcel.generic.GETFIELD) ArrayInstruction(org.apache.bcel.generic.ArrayInstruction) MethodInfo(com.jopdesign.common.MethodInfo)

Example 2 with ArrayInstruction

use of org.apache.bcel.generic.ArrayInstruction in project jop by jop-devel.

the class ObjectCacheAnalysis method getHandleType.

public static String getHandleType(WCETTool project, ControlFlowGraph cfg, InstructionHandle ih) {
    ConstantPoolGen constPool = cfg.getMethodInfo().getConstantPoolGen();
    Instruction instr = ih.getInstruction();
    if (instr instanceof GETFIELD) {
        GETFIELD gf = (GETFIELD) instr;
        ReferenceType refty = gf.getReferenceType(constPool);
        return refty.toString();
    }
    if (!ALL_HANDLE_ACCESSES)
        return null;
    if (instr instanceof PUTFIELD) {
        PUTFIELD pf = (PUTFIELD) instr;
        ReferenceType refty = pf.getReferenceType(constPool);
        return refty.toString();
    }
    if (instr instanceof ArrayInstruction) {
        //ArrayInstruction ainstr = (ArrayInstruction) instr;
        return "[]";
    }
    if (instr instanceof ARRAYLENGTH) {
        //ARRAYLENGTH ainstr = (ARRAYLENGTH) instr;
        return "[]";
    }
    if (instr instanceof INVOKEINTERFACE || instr instanceof INVOKEVIRTUAL) {
        return "$header";
    }
    return null;
}
Also used : ConstantPoolGen(org.apache.bcel.generic.ConstantPoolGen) GETFIELD(org.apache.bcel.generic.GETFIELD) ArrayInstruction(org.apache.bcel.generic.ArrayInstruction) ARRAYLENGTH(org.apache.bcel.generic.ARRAYLENGTH) INVOKEINTERFACE(org.apache.bcel.generic.INVOKEINTERFACE) PUTFIELD(org.apache.bcel.generic.PUTFIELD) Instruction(org.apache.bcel.generic.Instruction) FieldInstruction(org.apache.bcel.generic.FieldInstruction) ArrayInstruction(org.apache.bcel.generic.ArrayInstruction) ReferenceType(org.apache.bcel.generic.ReferenceType) INVOKEVIRTUAL(org.apache.bcel.generic.INVOKEVIRTUAL)

Aggregations

ARRAYLENGTH (org.apache.bcel.generic.ARRAYLENGTH)2 ArrayInstruction (org.apache.bcel.generic.ArrayInstruction)2 GETFIELD (org.apache.bcel.generic.GETFIELD)2 MethodInfo (com.jopdesign.common.MethodInfo)1 CallString (com.jopdesign.common.code.CallString)1 BoundedSet (com.jopdesign.dfa.framework.BoundedSetFactory.BoundedSet)1 Context (com.jopdesign.dfa.framework.Context)1 TreeMap (java.util.TreeMap)1 LineNumberTable (org.apache.bcel.classfile.LineNumberTable)1 ConstantPoolGen (org.apache.bcel.generic.ConstantPoolGen)1 FieldInstruction (org.apache.bcel.generic.FieldInstruction)1 INVOKEINTERFACE (org.apache.bcel.generic.INVOKEINTERFACE)1 INVOKEVIRTUAL (org.apache.bcel.generic.INVOKEVIRTUAL)1 Instruction (org.apache.bcel.generic.Instruction)1 InstructionHandle (org.apache.bcel.generic.InstructionHandle)1 PUTFIELD (org.apache.bcel.generic.PUTFIELD)1 ReferenceType (org.apache.bcel.generic.ReferenceType)1