diff options
Diffstat (limited to 'usr/src/cmd/mdb/common/modules/hook/hook.c')
| -rw-r--r-- | usr/src/cmd/mdb/common/modules/hook/hook.c | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/usr/src/cmd/mdb/common/modules/hook/hook.c b/usr/src/cmd/mdb/common/modules/hook/hook.c index ec9679b2f9..353a592c64 100644 --- a/usr/src/cmd/mdb/common/modules/hook/hook.c +++ b/usr/src/cmd/mdb/common/modules/hook/hook.c @@ -19,12 +19,10 @@ * CDDL HEADER END */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include <sys/types.h> #include <sys/rwlock.h> #include <mdb/mdb_modapi.h> @@ -47,6 +45,8 @@ hooklist(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv) char hrstr[MAX_LENGTH]; GElf_Sym sym; char buf[MDB_SYM_NAMLEN + 1]; + char *hintname; + hook_t *h; if (argc) return (DCMD_USAGE); @@ -56,8 +56,9 @@ hooklist(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv) return (DCMD_ERR); } - mdb_printf("%<u>%?s %10s %20s %?s%</u>\n", - "ADDR", "FLAG", "FUNC", "NAME"); + mdb_printf("%<u>%?s %8s %20s %4s %24s %24s%</u>\n", + "ADDR", "FLAG", "FUNC", "HINT", "NAME", "HINTVALUE"); + h = &hl.hi_hook; hlp = TAILQ_FIRST(&hr.hei_head); while (hlp) { if (mdb_vread((void *)&hl, sizeof (hl), @@ -66,30 +67,39 @@ hooklist(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv) hlp); return (DCMD_ERR); } - if (!hl.hi_hook.h_name) { - mdb_warn("hook list at %p has null role", - hl.hi_hook); + if (!h->h_name) { + mdb_warn("hook list at %p has null role", h); return (DCMD_ERR); } if (mdb_readstr((char *)hrstr, sizeof (hrstr), - (uintptr_t)hl.hi_hook.h_name) == -1) { - mdb_warn("couldn't read list role at %p", - hl.hi_hook.h_name); + (uintptr_t)h->h_name) == -1) { + mdb_warn("couldn't read list role at %p", h->h_name); return (DCMD_ERR); } - if (mdb_lookup_by_addr((uintptr_t)hl.hi_hook.h_func, + switch (h->h_hint) { + case HH_BEFORE : + case HH_AFTER : + hintname = h->h_hintvalue ? + (char *)h->h_hintvalue : ""; + break; + default : + hintname = ""; + break; + } + if (mdb_lookup_by_addr((uintptr_t)h->h_func, MDB_SYM_EXACT, buf, sizeof (buf), &sym) == -1) - mdb_printf("%0?p %10x %0?p %10s\n", - hlp, hl.hi_hook.h_flags, hl.hi_hook.h_func, hrstr); + mdb_printf("%0?p %8x %0?p %4d %24s %24s\n", + hlp, h->h_flags, h->h_func, + h->h_hint, hrstr, hintname); else - mdb_printf("%0?p %10x %20s %10s\n", - hlp, hl.hi_hook.h_flags, buf, hrstr); + mdb_printf("%0?p %8x %20s %4d %24s %24s\n", + hlp, h->h_flags, buf, + h->h_hint, hrstr, hintname); hlp = TAILQ_NEXT(&hl, hi_entry); } return (DCMD_OK); } - /* * List pfhooks event information. * List the hooks information in verbose mode as well. @@ -217,7 +227,7 @@ hookevent_stack_walk_init(mdb_walk_state_t *wsp) } wsp->walk_addr = (uintptr_t)SLIST_FIRST(&hf.hfi_head); return (wsp->walk_callback(wsp->walk_addr, wsp->walk_data, - wsp->walk_cbdata)); + wsp->walk_cbdata)); } static int @@ -234,7 +244,7 @@ hookevent_stack_walk_step(mdb_walk_state_t *wsp) if (wsp->walk_addr == NULL) return (WALK_DONE); return (wsp->walk_callback(wsp->walk_addr, wsp->walk_data, - wsp->walk_cbdata)); + wsp->walk_cbdata)); } static const mdb_dcmd_t dcmds[] = { |
