summaryrefslogtreecommitdiff
path: root/usr/src/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd')
-rw-r--r--usr/src/cmd/mdb/Makefile.common2
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_module_load.c11
-rw-r--r--usr/src/cmd/mdb/common/modules/libproc/libproc.c52
-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