diff options
Diffstat (limited to 'usr/src/cmd')
| -rw-r--r-- | usr/src/cmd/mdb/Makefile.common | 2 | ||||
| -rw-r--r-- | usr/src/cmd/mdb/common/mdb/mdb_module_load.c | 11 | ||||
| -rw-r--r-- | usr/src/cmd/mdb/common/modules/libproc/libproc.c | 52 | ||||
| -rw-r--r-- | usr/src/cmd/mdb/common/modules/list/listmod.c (renamed from usr/src/cmd/mdb/common/modules/libcmdutils/libcmdutils.c) | 0 | ||||
| -rw-r--r-- | usr/src/cmd/mdb/intel/amd64/list/Makefile (renamed from usr/src/cmd/mdb/intel/amd64/libcmdutils/Makefile) | 4 | ||||
| -rw-r--r-- | usr/src/cmd/mdb/intel/ia32/list/Makefile (renamed from usr/src/cmd/mdb/intel/ia32/libcmdutils/Makefile) | 4 | ||||
| -rw-r--r-- | usr/src/cmd/mdb/sparc/v7/list/Makefile (renamed from usr/src/cmd/mdb/sparc/v7/libcmdutils/Makefile) | 4 | ||||
| -rw-r--r-- | usr/src/cmd/mdb/sparc/v9/list/Makefile (renamed from usr/src/cmd/mdb/sparc/v9/libcmdutils/Makefile) | 4 |
8 files changed, 29 insertions, 52 deletions
diff --git a/usr/src/cmd/mdb/Makefile.common b/usr/src/cmd/mdb/Makefile.common index be0f680194..5616038726 100644 --- a/usr/src/cmd/mdb/Makefile.common +++ b/usr/src/cmd/mdb/Makefile.common @@ -34,7 +34,6 @@ COMMON_MODULES_PROC = \ dof \ libavl \ libc \ - libcmdutils \ libfknsmb \ libfksmbfs \ libfksmbsrv \ @@ -47,6 +46,7 @@ COMMON_MODULES_PROC = \ libumem \ libuutil \ libzpool \ + list \ mdb_ds \ mdb_test diff --git a/usr/src/cmd/mdb/common/mdb/mdb_module_load.c b/usr/src/cmd/mdb/common/mdb/mdb_module_load.c index 141aa3a5cd..37f0109663 100644 --- a/usr/src/cmd/mdb/common/mdb/mdb_module_load.c +++ b/usr/src/cmd/mdb/common/mdb/mdb_module_load.c @@ -23,6 +23,7 @@ * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012 by Delphix. All rights reserved. * Copyright 2019 Joyent, Inc. + * Copyright 2021 Oxide Computer Company */ #include <sys/param.h> @@ -182,6 +183,16 @@ module_load(void *fp, const mdb_map_t *map, const char *fullname) return (module_load(fp, map, "libc.so.1")); } + if (strstr(fullname, "ld.so") != NULL) { + /* + * This is even more of a kludge. But if we find something has + * basically tried to load ld, we will always implicitly load + * the list dmod because several binaries and libraries just + * build it as a .o and include it in their ELF object. + */ + (void) mdb_module_load("list", mld->mld_mode); + } + return (0); } diff --git a/usr/src/cmd/mdb/common/modules/libproc/libproc.c b/usr/src/cmd/mdb/common/modules/libproc/libproc.c index 09530ea322..5ec551d5b1 100644 --- a/usr/src/cmd/mdb/common/modules/libproc/libproc.c +++ b/usr/src/cmd/mdb/common/modules/libproc/libproc.c @@ -22,6 +22,9 @@ * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ +/* + * Copyright 2021 Oxide Computer Company + */ #include <libproc.h> #include <Pcontrol.h> @@ -221,64 +224,28 @@ pr_addr2map(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv) * * Given a ps_prochandle_t, walk all its file_info_t structures. */ -typedef struct { - uintptr_t fiw_next; - int fiw_count; -} file_info_walk_t; - static int pr_file_info_walk_init(mdb_walk_state_t *wsp) { - ps_prochandle_t psp; - file_info_walk_t *fiw; - if (wsp->walk_addr == 0) { mdb_warn("pr_file_info doesn't support global walks\n"); return (WALK_ERR); } - if (mdb_vread(&psp, sizeof (ps_prochandle_t), wsp->walk_addr) == -1) { - mdb_warn("failed to read ps_prochandle at %p", wsp->walk_addr); + wsp->walk_addr += offsetof(ps_prochandle_t, file_head); + if (mdb_layered_walk("list", wsp) == -1) { + mdb_warn("failed to walk layered 'list'"); return (WALK_ERR); } - fiw = mdb_alloc(sizeof (file_info_walk_t), UM_SLEEP); - - fiw->fiw_next = (uintptr_t)psp.file_head.list_forw; - fiw->fiw_count = psp.num_files; - wsp->walk_data = fiw; - return (WALK_NEXT); } static int pr_file_info_walk_step(mdb_walk_state_t *wsp) { - file_info_walk_t *fiw = wsp->walk_data; - file_info_t f; - int status; - - if (fiw->fiw_count == 0) - return (WALK_DONE); - - if (mdb_vread(&f, sizeof (file_info_t), fiw->fiw_next) == -1) { - mdb_warn("failed to read file_info_t at %p", fiw->fiw_next); - return (WALK_ERR); - } - - status = wsp->walk_callback(fiw->fiw_next, &f, wsp->walk_cbdata); - - fiw->fiw_next = (uintptr_t)f.file_list.list_forw; - fiw->fiw_count--; - - return (status); -} - -static void -pr_file_info_walk_fini(mdb_walk_state_t *wsp) -{ - file_info_walk_t *fiw = wsp->walk_data; - mdb_free(fiw, sizeof (file_info_walk_t)); + return (wsp->walk_callback(wsp->walk_addr, wsp->walk_layer, + wsp->walk_cbdata)); } /* @@ -358,8 +325,7 @@ static const mdb_dcmd_t dcmds[] = { static const mdb_walker_t walkers[] = { { "pr_file_info", "given a ps_prochandle, walk its file_info " - "structures", pr_file_info_walk_init, pr_file_info_walk_step, - pr_file_info_walk_fini }, + "structures", pr_file_info_walk_init, pr_file_info_walk_step }, { "pr_map_info", "given a ps_prochandle, walk its map_info structures", pr_map_info_walk_init, pr_map_info_walk_step, pr_map_info_walk_fini }, diff --git a/usr/src/cmd/mdb/common/modules/libcmdutils/libcmdutils.c b/usr/src/cmd/mdb/common/modules/list/listmod.c index bff3f1b733..bff3f1b733 100644 --- a/usr/src/cmd/mdb/common/modules/libcmdutils/libcmdutils.c +++ b/usr/src/cmd/mdb/common/modules/list/listmod.c diff --git a/usr/src/cmd/mdb/intel/amd64/libcmdutils/Makefile b/usr/src/cmd/mdb/intel/amd64/list/Makefile index 8ca2a87ffe..145b59fa91 100644 --- a/usr/src/cmd/mdb/intel/amd64/libcmdutils/Makefile +++ b/usr/src/cmd/mdb/intel/amd64/list/Makefile @@ -22,10 +22,10 @@ # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # -MODULE = libcmdutils.so +MODULE = list.so MDBTGT = proc -MODSRCS = libcmdutils.c \ +MODSRCS = listmod.c \ list.c include ../../../../Makefile.cmd diff --git a/usr/src/cmd/mdb/intel/ia32/libcmdutils/Makefile b/usr/src/cmd/mdb/intel/ia32/list/Makefile index de337c3563..d2f6c709ce 100644 --- a/usr/src/cmd/mdb/intel/ia32/libcmdutils/Makefile +++ b/usr/src/cmd/mdb/intel/ia32/list/Makefile @@ -22,10 +22,10 @@ # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # -MODULE = libcmdutils.so +MODULE = list.so MDBTGT = proc -MODSRCS = libcmdutils.c \ +MODSRCS = listmod.c \ list.c include ../../../../Makefile.cmd diff --git a/usr/src/cmd/mdb/sparc/v7/libcmdutils/Makefile b/usr/src/cmd/mdb/sparc/v7/list/Makefile index d41231e3e0..88c634f575 100644 --- a/usr/src/cmd/mdb/sparc/v7/libcmdutils/Makefile +++ b/usr/src/cmd/mdb/sparc/v7/list/Makefile @@ -22,10 +22,10 @@ # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # -MODULE = libcmdutils.so +MODULE = list.so MDBTGT = proc -MODSRCS = libcmdutils.c \ +MODSRCS = listmod.c \ list.c include ../../../../Makefile.cmd diff --git a/usr/src/cmd/mdb/sparc/v9/libcmdutils/Makefile b/usr/src/cmd/mdb/sparc/v9/list/Makefile index 9e1f58c3bf..db1490f81f 100644 --- a/usr/src/cmd/mdb/sparc/v9/libcmdutils/Makefile +++ b/usr/src/cmd/mdb/sparc/v9/list/Makefile @@ -22,10 +22,10 @@ # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # -MODULE = libcmdutils.so +MODULE = list.so MDBTGT = proc -MODSRCS = libcmdutils.c \ +MODSRCS = listmod.c \ list.c include ../../../../Makefile.cmd |
