diff options
Diffstat (limited to 'src/audit.c')
-rw-r--r-- | src/audit.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/audit.c b/src/audit.c index 3adfa3e..7a83b56 100644 --- a/src/audit.c +++ b/src/audit.c @@ -81,9 +81,11 @@ static void free_argbuf(int argret, char *argbuf, char *argdbuf) } static int sym_entry(const char *symname, void *ptr, - char *lib_from, char *lib_to, La_regs *regs) + struct link_map *lr, struct link_map *ld, + La_regs *regs) { - int argret = -1; + char *lib_to = ld ? ld->l_name : NULL; + int argret = -1; char *argbuf = "", *argdbuf = ""; struct timeval tv; struct lt_symbol *sym = NULL; @@ -130,10 +132,12 @@ static int sym_entry(const char *symname, void *ptr, } static int sym_exit(const char *symname, void *ptr, - char *lib_from, char *lib_to, - const La_regs *inregs, La_retval *outregs) + struct link_map *lr, struct link_map *ld, + const La_regs *inregs, La_retval *outregs) { - int argret = -1; + char *lib_from = lr ? lr->l_name : NULL; + char *lib_to = ld ? ld->l_name : NULL; + int argret = -1; char *argbuf = "", *argdbuf = ""; struct timeval tv; struct lt_symbol *sym = NULL; @@ -149,8 +153,10 @@ static int sym_exit(const char *symname, void *ptr, if (lt_sh(&cfg, global_symbols)) sym = lt_symbol_get(cfg.sh, ptr, symname); +#ifdef CONFIG_ARCH_HAVE_ERROR_SIM if (lt_sh(&cfg, error_sim)) - lt_error_sym_exit(&cfg, sym, &tv, outregs); + lt_error_sym_exit(&cfg, sym, &tv, lr, inregs, outregs); +#endif #ifdef CONFIG_ARCH_HAVE_ARGS argret = lt_sh(&cfg, args_enabled) ? @@ -329,9 +335,7 @@ pltenter(ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, CHECK_PID(sym->st_value); sym_entry(symname, (void*) sym->st_value, - lr ? lr->l_name : NULL, - ld ? ld->l_name : NULL, - regs); + lr, ld, regs); } while(0); @@ -351,9 +355,7 @@ unsigned int pltexit(ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, CHECK_PID(0); sym_exit(symname, (void*) sym->st_value, - lr ? lr->l_name : NULL, - ld ? ld->l_name : NULL, - inregs, outregs); + lr, ld, inregs, outregs); } while(0); |