static int load_plugins(char *path) { int fail = 0; DIR *dp; struct dirent *entry; if (!silent) print_desc("Loading plugins", NULL); dp = opendir(path); if (!dp) { _e("Failed, cannot open plugin directory %s: %s", path, strerror(errno)); return 1; } plugpath = path; while ((entry = readdir(dp))) { if (entry->d_name[0] == '.') continue; /* Skip . and .. directories */ if (load_one(path, entry->d_name)) fail++; } closedir(dp); return fail; }
static int load_kvsdir (flux_conf_t cf, kvsdir_t *dir) { kvsitr_t *itr; const char *name; int rc = -1; itr = kvsitr_create (dir); while ((name = kvsitr_next (itr))) { if (kvsdir_isdir (dir, name)) { kvsdir_t *ndir; if (kvsdir_get_dir (dir, &ndir, "%s", name) < 0) goto done; if (load_kvsdir (cf, ndir) < 0) goto done; kvsdir_destroy (ndir); } else { if (load_one (cf, dir, name) < 0) goto done; } } rc = 0; done: kvsitr_destroy (itr); return rc; }
int plugin_load_all(char *path) { int fail = 0; DIR *dp = opendir(path); struct dirent *entry; if (!dp) { _e("Failed, cannot open plugin directory %s: %s", path, strerror(errno)); return 1; } plugpath = path; while ((entry = readdir(dp))) { if (entry->d_name[0] == '.') continue; /* Skip . and .. directories */ // print_desc(" Loading plugin ", basename(plugin)); if (load_one(path, entry->d_name)) fail++; // print_result(result); } closedir(dp); init_plugins(); return fail; }
/** * check_plugin_depends - Check and load any plugins this one depends on. * @plugin: Plugin with possible depends to check * * Very simple dependency resolver, should actually load the plugin of * the correct .name, but currently loads a matching filename. * * Works, but only for now. A better way might be to have a try_load() * that actually loads all plugins and checks their &plugin_t for the * correct .name. */ static void check_plugin_depends(plugin_t *plugin) { int i; for (i = 0; i < PLUGIN_DEP_MAX && plugin->depends[i]; i++) { // _d("Plugin %s depends on %s ...", plugin->name, plugin->depends[i]); if (plugin_find(plugin->depends[i])) { // _d("OK plugin %s was already loaded.", plugin->depends[i]); continue; } load_one(plugpath, plugin->depends[i]); } }
int plugin_load_all(char *path) { int fail = 0; DIR *dp = opendir(path); struct dirent *entry; if (!dp) { logit(LOG_ERR, "Failed, cannot open plugin directory %s: %s", path, strerror(errno)); return 1; } plugpath = path; while ((entry = readdir(dp))) { if (entry->d_name[0] == '.') continue; /* Skip . and .. directories */ if (load_one(path, entry->d_name)) fail++; } closedir(dp); return fail; }
void MethodLiveness::BasicBlock::load_two(int local) { load_one(local); load_one(local+1); }
void MethodLiveness::BasicBlock::compute_gen_kill_single(ciBytecodeStream *instruction) { int localNum; // We prohibit _gen and _kill from having locals in common. If we // know that one is definitely going to be applied before the other, // we could save some computation time by relaxing this prohibition. switch (instruction->cur_bc()) { case Bytecodes::_nop: case Bytecodes::_goto: case Bytecodes::_goto_w: case Bytecodes::_aconst_null: case Bytecodes::_new: case Bytecodes::_iconst_m1: case Bytecodes::_iconst_0: case Bytecodes::_iconst_1: case Bytecodes::_iconst_2: case Bytecodes::_iconst_3: case Bytecodes::_iconst_4: case Bytecodes::_iconst_5: case Bytecodes::_fconst_0: case Bytecodes::_fconst_1: case Bytecodes::_fconst_2: case Bytecodes::_bipush: case Bytecodes::_sipush: case Bytecodes::_lconst_0: case Bytecodes::_lconst_1: case Bytecodes::_dconst_0: case Bytecodes::_dconst_1: case Bytecodes::_ldc2_w: case Bytecodes::_ldc: case Bytecodes::_ldc_w: case Bytecodes::_iaload: case Bytecodes::_faload: case Bytecodes::_baload: case Bytecodes::_caload: case Bytecodes::_saload: case Bytecodes::_laload: case Bytecodes::_daload: case Bytecodes::_aaload: case Bytecodes::_iastore: case Bytecodes::_fastore: case Bytecodes::_bastore: case Bytecodes::_castore: case Bytecodes::_sastore: case Bytecodes::_lastore: case Bytecodes::_dastore: case Bytecodes::_aastore: case Bytecodes::_pop: case Bytecodes::_pop2: case Bytecodes::_dup: case Bytecodes::_dup_x1: case Bytecodes::_dup_x2: case Bytecodes::_dup2: case Bytecodes::_dup2_x1: case Bytecodes::_dup2_x2: case Bytecodes::_swap: case Bytecodes::_iadd: case Bytecodes::_fadd: case Bytecodes::_isub: case Bytecodes::_fsub: case Bytecodes::_imul: case Bytecodes::_fmul: case Bytecodes::_idiv: case Bytecodes::_fdiv: case Bytecodes::_irem: case Bytecodes::_frem: case Bytecodes::_ishl: case Bytecodes::_ishr: case Bytecodes::_iushr: case Bytecodes::_iand: case Bytecodes::_ior: case Bytecodes::_ixor: case Bytecodes::_l2f: case Bytecodes::_l2i: case Bytecodes::_d2f: case Bytecodes::_d2i: case Bytecodes::_fcmpl: case Bytecodes::_fcmpg: case Bytecodes::_ladd: case Bytecodes::_dadd: case Bytecodes::_lsub: case Bytecodes::_dsub: case Bytecodes::_lmul: case Bytecodes::_dmul: case Bytecodes::_ldiv: case Bytecodes::_ddiv: case Bytecodes::_lrem: case Bytecodes::_drem: case Bytecodes::_land: case Bytecodes::_lor: case Bytecodes::_lxor: case Bytecodes::_ineg: case Bytecodes::_fneg: case Bytecodes::_i2f: case Bytecodes::_f2i: case Bytecodes::_i2c: case Bytecodes::_i2s: case Bytecodes::_i2b: case Bytecodes::_lneg: case Bytecodes::_dneg: case Bytecodes::_l2d: case Bytecodes::_d2l: case Bytecodes::_lshl: case Bytecodes::_lshr: case Bytecodes::_lushr: case Bytecodes::_i2l: case Bytecodes::_i2d: case Bytecodes::_f2l: case Bytecodes::_f2d: case Bytecodes::_lcmp: case Bytecodes::_dcmpl: case Bytecodes::_dcmpg: case Bytecodes::_ifeq: case Bytecodes::_ifne: case Bytecodes::_iflt: case Bytecodes::_ifge: case Bytecodes::_ifgt: case Bytecodes::_ifle: case Bytecodes::_tableswitch: case Bytecodes::_ireturn: case Bytecodes::_freturn: case Bytecodes::_if_icmpeq: case Bytecodes::_if_icmpne: case Bytecodes::_if_icmplt: case Bytecodes::_if_icmpge: case Bytecodes::_if_icmpgt: case Bytecodes::_if_icmple: case Bytecodes::_lreturn: case Bytecodes::_dreturn: case Bytecodes::_if_acmpeq: case Bytecodes::_if_acmpne: case Bytecodes::_jsr: case Bytecodes::_jsr_w: case Bytecodes::_getstatic: case Bytecodes::_putstatic: case Bytecodes::_getfield: case Bytecodes::_putfield: case Bytecodes::_invokevirtual: case Bytecodes::_invokespecial: case Bytecodes::_invokestatic: case Bytecodes::_invokeinterface: case Bytecodes::_invokedynamic: case Bytecodes::_newarray: case Bytecodes::_anewarray: case Bytecodes::_checkcast: case Bytecodes::_arraylength: case Bytecodes::_instanceof: case Bytecodes::_athrow: case Bytecodes::_areturn: case Bytecodes::_monitorenter: case Bytecodes::_monitorexit: case Bytecodes::_ifnull: case Bytecodes::_ifnonnull: case Bytecodes::_multianewarray: case Bytecodes::_lookupswitch: // These bytecodes have no effect on the method's locals. break; case Bytecodes::_return: if (instruction->method()->intrinsic_id() == vmIntrinsics::_Object_init) { // return from Object.init implicitly registers a finalizer // for the receiver if needed, so keep it alive. load_one(0); } break; case Bytecodes::_lload: case Bytecodes::_dload: load_two(instruction->get_index()); break; case Bytecodes::_lload_0: case Bytecodes::_dload_0: load_two(0); break; case Bytecodes::_lload_1: case Bytecodes::_dload_1: load_two(1); break; case Bytecodes::_lload_2: case Bytecodes::_dload_2: load_two(2); break; case Bytecodes::_lload_3: case Bytecodes::_dload_3: load_two(3); break; case Bytecodes::_iload: case Bytecodes::_iinc: case Bytecodes::_fload: case Bytecodes::_aload: case Bytecodes::_ret: load_one(instruction->get_index()); break; case Bytecodes::_iload_0: case Bytecodes::_fload_0: case Bytecodes::_aload_0: load_one(0); break; case Bytecodes::_iload_1: case Bytecodes::_fload_1: case Bytecodes::_aload_1: load_one(1); break; case Bytecodes::_iload_2: case Bytecodes::_fload_2: case Bytecodes::_aload_2: load_one(2); break; case Bytecodes::_iload_3: case Bytecodes::_fload_3: case Bytecodes::_aload_3: load_one(3); break; case Bytecodes::_lstore: case Bytecodes::_dstore: store_two(localNum = instruction->get_index()); break; case Bytecodes::_lstore_0: case Bytecodes::_dstore_0: store_two(0); break; case Bytecodes::_lstore_1: case Bytecodes::_dstore_1: store_two(1); break; case Bytecodes::_lstore_2: case Bytecodes::_dstore_2: store_two(2); break; case Bytecodes::_lstore_3: case Bytecodes::_dstore_3: store_two(3); break; case Bytecodes::_istore: case Bytecodes::_fstore: case Bytecodes::_astore: store_one(instruction->get_index()); break; case Bytecodes::_istore_0: case Bytecodes::_fstore_0: case Bytecodes::_astore_0: store_one(0); break; case Bytecodes::_istore_1: case Bytecodes::_fstore_1: case Bytecodes::_astore_1: store_one(1); break; case Bytecodes::_istore_2: case Bytecodes::_fstore_2: case Bytecodes::_astore_2: store_one(2); break; case Bytecodes::_istore_3: case Bytecodes::_fstore_3: case Bytecodes::_astore_3: store_one(3); break; case Bytecodes::_wide: fatal("Iterator should skip this bytecode"); break; default: tty->print("unexpected opcode: %d\n", instruction->cur_bc()); ShouldNotReachHere(); break; } }
/* * LD_PRELOAD objects. */ static int preload(const char *str, Rt_map *mlmp, Rt_map **clmp) { Alist *palp = NULL; char *objs, *ptr, *next; Word lmflags = lml_main.lm_flags; int lddstub; DBG_CALL(Dbg_util_nl(&lml_main, DBG_NL_STD)); if ((objs = strdup(str)) == NULL) return (0); /* * Determine if we've been called from lddstub. */ lddstub = (lmflags & LML_FLG_TRC_ENABLE) && (FLAGS1(*clmp) & FL1_RT_LDDSTUB); for (ptr = strtok_r(objs, MSG_ORIG(MSG_STR_DELIMIT), &next); ptr != NULL; ptr = strtok_r(NULL, MSG_ORIG(MSG_STR_DELIMIT), &next)) { Rt_map *nlmp = NULL; uint_t flags; DBG_CALL(Dbg_file_preload(&lml_main, ptr)); /* * Establish the flags for loading each object. If we're * called via lddstub, then the first preloaded object is the * object being inspected by ldd(1). This object should not be * marked as an interposer, as this object is intended to act * as the target object of the process. */ if (lddstub) flags = FLG_RT_PRELOAD; else flags = (FLG_RT_PRELOAD | FLG_RT_OBJINTPO); /* * If this a secure application, then preload errors are * reduced to warnings, as the errors are non-fatal. */ if (rtld_flags & RT_FL_SECURE) rtld_flags2 |= RT_FL2_FTL2WARN; if (expand_paths(*clmp, ptr, &palp, AL_CNT_NEEDED, PD_FLG_EXTLOAD, 0) != 0) nlmp = load_one(&lml_main, ALIST_OFF_DATA, palp, *clmp, MODE(mlmp), flags, 0, NULL); remove_alist(&palp, 0); if (rtld_flags & RT_FL_SECURE) rtld_flags2 &= ~RT_FL2_FTL2WARN; if (nlmp && (bind_one(*clmp, nlmp, BND_NEEDED) == 0)) nlmp = NULL; if (lddstub && nlmp) { lddstub = 0; /* * Fabricate a binding between the target shared object * and lddstub so that the target object isn't called * out from unused() processing. */ if (lmflags & (LML_FLG_TRC_UNREF | LML_FLG_TRC_UNUSED)) { if (bind_one(*clmp, nlmp, BND_REFER) == 0) nlmp = NULL; } /* * By identifying lddstub as the caller, several * confusing ldd() diagnostics get suppressed. These * diagnostics would reveal how the target shared object * was found from lddstub. Now that the real target is * loaded, identify the target as the caller so that all * ldd() diagnostics are enabled for subsequent objects. */ if (nlmp) *clmp = nlmp; } /* * If no error occurred with loading this object, indicate that * this link-map list contains an interposer. */ if (nlmp == NULL) { if ((lmflags & LML_FLG_TRC_ENABLE) || (rtld_flags & RT_FL_SECURE)) continue; else return (0); } if (flags & FLG_RT_OBJINTPO) lml_main.lm_flags |= LML_FLG_INTRPOSE; } free(palp); free(objs); return (1); }