diff --git a/debugus.c b/debugus.c index dce4bbc..798da8e 100644 --- a/debugus.c +++ b/debugus.c @@ -660,6 +660,58 @@ done: js_pushundefined(js); } +void dbg_js_ebfn(js_State *js) +{ + Dbg *dbg = getdbg(); + const char *fn_name = js_tostring(js, 1); + + for (int i = 0; i < dbg->funcs.count; i++) { + Func *f = &dbg->funcs.items[i]; + if (strcmp(fn_name, f->name) == 0) { + char addr_str2[20]; + snprintf(addr_str2, sizeof(addr_str2), "0x%"PRIxPTR, + libelfin_wrap_func_addr(dbg->plibelfin, f)); + + Brk *brk = (Brk *)hashtable_get(&dbg->brks, addr_str2); + if (brk == NULL) { + LOG_ERR("No breakpoint at function: %s\n", fn_name); + goto done; + } + brk_enable(brk); + break; + } + } + +done: + js_pushundefined(js); +} + +void dbg_js_dbfn(js_State *js) +{ + Dbg *dbg = getdbg(); + const char *fn_name = js_tostring(js, 1); + + for (int i = 0; i < dbg->funcs.count; i++) { + Func *f = &dbg->funcs.items[i]; + if (strcmp(fn_name, f->name) == 0) { + char addr_str2[20]; + snprintf(addr_str2, sizeof(addr_str2), "0x%"PRIxPTR, + libelfin_wrap_func_addr(dbg->plibelfin, f)); + + Brk *brk = (Brk *)hashtable_get(&dbg->brks, addr_str2); + if (brk == NULL) { + LOG_ERR("No breakpoint at function: %s\n", fn_name); + goto done; + } + brk_disable(brk); + break; + } + } + +done: + js_pushundefined(js); +} + void dbg_init_js(Dbg *dbg) { dbg->js = js_newstate(NULL, NULL, JS_STRICT); @@ -692,6 +744,8 @@ void dbg_init_js(Dbg *dbg) make_js_func(rmbfn, 1, "Remove breakpoint at function, ARGS=Function name:string"); make_js_func(ebaddr, 1, "Enable breakpoint at address, ARGS=Address:hex string"); make_js_func(dbaddr, 1, "Disable breakpoint at address, ARGS=Address:hex string"); + make_js_func(ebfn, 1, "Enable breakpoint at function, ARGS=Function name:string"); + make_js_func(dbfn, 1, "Disable breakpoint at function, ARGS=Function name:string"); #undef make_js_func }