static void fbt_provide_function(struct modctl *mp, par_module_t *pmp, char *modname, char *name, uint8_t *st_value, uint8_t *instr, uint8_t *limit, int symndx) { pf_info_t inf; int io_prov_sdt(pf_info_t *infp, uint8_t *instr, int size, int modrm); /***********************************************/ /* Ignore these - they tend to result in a */ /* lot of dups, and also tend to be in the */ /* same reusable and unmapped page. */ /***********************************************/ if (strncmp(name, "cleanup_module", 14) == 0) return; memset(&inf, 0, sizeof inf); inf.mp = mp; inf.pmp = pmp; inf.modname = modname; inf.name = name; inf.symndx = symndx; inf.st_value = st_value; inf.do_print = FALSE; inf.func_entry = fbt_prov_entry; inf.func_return = fbt_prov_return; inf.func_sdt = io_prov_sdt; dtrace_parse_function(&inf, instr, limit); }
static void io_prov_create(char *func, char *name, int flags) { pf_info_t inf; uint8_t *start; int size; if (dtrace_function_size(func, &start, &size) == 0) { printk("sdt_linux: cannot locate %s\n", func); return; } memset(&inf, 0, sizeof inf); inf.modname = "io"; inf.func = func; inf.name = name; inf.name2 = "done"; inf.func_entry = io_prov_entry; inf.func_return = io_prov_return; inf.flags = flags; dtrace_parse_function(&inf, start, start + size); }
static void fbt_provide_function(struct modctl *mp, par_module_t *pmp, char *modname, char *name, uint8_t *st_value, uint8_t *instr, uint8_t *limit, int symndx) { pf_info_t inf; int io_prov_sdt(pf_info_t *infp, uint8_t *instr, int size, int modrm); memset(&inf, 0, sizeof inf); inf.mp = mp; inf.pmp = pmp; inf.modname = modname; inf.name = name; inf.symndx = symndx; inf.st_value = st_value; inf.do_print = FALSE; inf.func_entry = fbt_prov_entry; inf.func_return = fbt_prov_return; inf.func_sdt = io_prov_sdt; dtrace_parse_function(&inf, instr, limit); }