예제 #1
0
  public void addMethod(final SootMethod soot_method) {
    SootClass soot_class = soot_method.getDeclaringClass();

    OpenCLClass ocl_class = getOpenCLClass(soot_class);
    ocl_class.addMethod(new OpenCLMethod(soot_method, soot_class));

    // add the method
    m_methodHierarchies.addMethod(soot_method);
    m_methods.add(soot_method);
  }
예제 #2
0
 private void cloneRefType(StringBuilder ret, String key, OpenCLClass ocl_class) {
   SootClass soot_class = Scene.v().getSootClass(key);
   String address_qual = Tweaks.v().getGlobalAddressSpaceQualifier();
   int type = RootbeerClassLoader.v().getDfsInfo().getClassNumber(soot_class);
   ret.append("  else if(type == " + type + "){\n");
   ret.append("    int size = " + ocl_class.getSize() + ";\n");
   ret.append("    long long new_ref = edu_syr_pcpratts_gc_malloc(gc_info, size);\n");
   ret.append("    if(new_ref == -1){\n");
   ret.append("      *exception = -1;\n");
   ret.append("      return -1;\n");
   ret.append("    }\n");
   ret.append(
       "    "
           + address_qual
           + " char * dest_deref = edu_syr_pcpratts_gc_deref(gc_info, new_ref);\n");
   ret.append("    edu_syr_pcpratts_gc_memcpy(dest_deref, src_deref, size);\n");
   ret.append("    edu_syr_pcpratts_gc_set_ctor_used(dest_deref, 1);\n");
   ret.append("    return new_ref;\n");
   ret.append("  }\n");
 }
예제 #3
0
 private String getRuntimeBasicBlockClassName() {
   SootClass soot_class = m_rootSootClass;
   OpenCLClass ocl_class = getOpenCLClass(soot_class);
   return ocl_class.getName();
 }