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.kmdb.files3
-rw-r--r--usr/src/cmd/mdb/common/kmdb/kmdb_dpi_impl.h12
-rw-r--r--usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c17
-rw-r--r--usr/src/cmd/mdb/common/kmdb/kvm.h8
-rw-r--r--usr/src/cmd/mdb/common/kmdb/kvm_cpu.c98
-rw-r--r--usr/src/cmd/mdb/common/kmdb/kvm_cpu.h64
-rw-r--r--usr/src/cmd/mdb/common/kmdb/kvm_cpu_impl.h64
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_cmds.c7
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_kproc.c5
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_proc.c3
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_rawfile.c5
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_target.c46
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_target.h16
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_target_impl.h3
-rw-r--r--usr/src/cmd/mdb/common/mdb/mdb_value.c5
-rw-r--r--usr/src/cmd/mdb/i86pc/modules/unix/unix.c34
-rw-r--r--usr/src/cmd/mdb/i86pc/modules/unix/unix_sup.h4
-rw-r--r--usr/src/cmd/mdb/i86pc/modules/unix/unix_sup.s22
-rw-r--r--usr/src/cmd/mdb/intel/Makefile.kmdb4
-rw-r--r--usr/src/cmd/mdb/intel/ia32/Makefile.kmdb6
-rw-r--r--usr/src/cmd/mdb/intel/kmdb/kaif.c80
-rw-r--r--usr/src/cmd/mdb/intel/kmdb/kmdb_dpi_isadep.c22
-rw-r--r--usr/src/cmd/mdb/intel/kmdb/kmdb_dpi_isadep.h8
-rw-r--r--usr/src/cmd/mdb/intel/kmdb/kmdb_kdi_isadep.c10
-rw-r--r--usr/src/cmd/mdb/intel/kmdb/kmdb_kdi_isadep.h5
-rw-r--r--usr/src/cmd/mdb/intel/kmdb/kvm_cpu_amd.c213
-rw-r--r--usr/src/cmd/mdb/intel/kmdb/kvm_cpu_p4.c418
-rw-r--r--usr/src/cmd/mdb/intel/kmdb/kvm_isadep.c26
-rw-r--r--usr/src/cmd/mdb/intel/kmdb/kvm_isadep.h5
-rw-r--r--usr/src/cmd/mdb/intel/mdb/kvm_amd64dep.c5
-rw-r--r--usr/src/cmd/mdb/intel/mdb/kvm_ia32dep.c5
-rw-r--r--usr/src/cmd/mdb/sparc/kmdb/kvm_isadep.c11
-rw-r--r--usr/src/cmd/mdb/sparc/mdb/kvm_v7dep.c5
-rw-r--r--usr/src/cmd/mdb/sparc/mdb/kvm_v9dep.c5
34 files changed, 120 insertions, 1124 deletions
diff --git a/usr/src/cmd/mdb/Makefile.kmdb.files b/usr/src/cmd/mdb/Makefile.kmdb.files
index a82206d42c..ca10ca72a1 100644
--- a/usr/src/cmd/mdb/Makefile.kmdb.files
+++ b/usr/src/cmd/mdb/Makefile.kmdb.files
@@ -25,7 +25,7 @@
#
# Copyright (c) 2012 by Delphix. All rights reserved.
-# Copyright (c) 2012 Joyent, Inc. All rights reserved.
+# Copyright (c) 2018 Joyent, Inc. All rights reserved.
#
KMDBSRCS += \
@@ -37,7 +37,6 @@ KMDBSRCS += \
mdb_callb.c \
mdb_cmdbuf.c \
mdb_cmds.c \
- kvm_cpu.c \
kmdb_conf.c \
kmdb_context.c \
kmdb_create.c \
diff --git a/usr/src/cmd/mdb/common/kmdb/kmdb_dpi_impl.h b/usr/src/cmd/mdb/common/kmdb/kmdb_dpi_impl.h
index a94cfae990..f07a40cd5f 100644
--- a/usr/src/cmd/mdb/common/kmdb/kmdb_dpi_impl.h
+++ b/usr/src/cmd/mdb/common/kmdb/kmdb_dpi_impl.h
@@ -21,13 +21,13 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
#ifndef _KMDB_DPI_IMPL_H
#define _KMDB_DPI_IMPL_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <setjmp.h>
#ifdef __sparc
#include <sys/regset.h>
@@ -86,19 +86,11 @@ struct dpi_ops {
int (*dpo_wapt_match)(kmdb_wapt_t *);
int (*dpo_step)(void);
-#if defined(__i386) || defined(__amd64)
- void (*dpo_step_branch)(void);
-#endif
uintptr_t (*dpo_call)(uintptr_t, uint_t, const uintptr_t *);
void (*dpo_dump_crumbs)(uintptr_t, int);
-#if defined(__i386) || defined(__amd64)
- void (*dpo_msr_add)(const kdi_msr_t *);
- uint64_t (*dpo_msr_get)(int, uint_t);
-#endif
-
#ifdef __sparc
void (*dpo_kernpanic)(int);
#endif
diff --git a/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c b/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c
index c14261f0ae..316ed77e8e 100644
--- a/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c
+++ b/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c
@@ -21,6 +21,8 @@
/*
* Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013 by Delphix. All rights reserved.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
#include <kmdb/kmdb_kvm.h>
@@ -549,7 +551,6 @@ kmt_dmod_status(char *msg, int state)
static int
kmt_status_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
- kmt_data_t *kmt = mdb.m_target->t_data;
struct utsname uts;
char uuid[37];
kreg_t tt;
@@ -578,11 +579,6 @@ kmt_status_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
}
mdb_printf("image uuid: %s\n", uuid);
- if (kmt->kmt_cpu != NULL) {
- mdb_printf("CPU-specific support: %s\n",
- kmt_cpu_name(kmt->kmt_cpu));
- }
-
mdb_printf("DTrace state: %s\n", (kmdb_kdi_dtrace_get_state() ==
KDI_DTSTATE_DTRACE_ACTIVE ? "active (debugger breakpoints cannot "
"be armed)" : "inactive"));
@@ -2392,9 +2388,6 @@ kmt_destroy(mdb_tgt_t *t)
if (kmt->kmt_trapmap != NULL)
mdb_free(kmt->kmt_trapmap, BT_SIZEOFMAP(kmt->kmt_trapmax));
- if (kmt->kmt_cpu != NULL)
- kmt_cpu_destroy(kmt->kmt_cpu);
-
if (kmt != NULL)
mdb_free(kmt, sizeof (kmt_data_t));
}
@@ -2435,7 +2428,6 @@ static const mdb_tgt_ops_t kmt_ops = {
(int (*)()) mdb_tgt_notsup, /* t_run */
kmt_step, /* t_step */
kmt_step_out, /* t_step_out */
- kmt_step_branch, /* t_step_branch */
kmt_next, /* t_next */
kmt_continue, /* t_cont */
(int (*)()) mdb_tgt_notsup, /* t_signal */
@@ -2504,10 +2496,6 @@ kmt_sync(mdb_tgt_t *t)
(void) mdb_tgt_sespec_activate_all(t);
}
- if (kmt->kmt_cpu_retry && ((kmt->kmt_cpu = kmt_cpu_create(t)) !=
- NULL || errno != EAGAIN))
- kmt->kmt_cpu_retry = FALSE;
-
(void) mdb_tgt_status(t, &t->t_status);
}
@@ -2536,7 +2524,6 @@ kmdb_kvm_create(mdb_tgt_t *t, int argc, const char *argv[])
kmt_init_isadep(t);
kmt->kmt_symavail = FALSE;
- kmt->kmt_cpu_retry = TRUE;
bzero(&kmt_defbp_list, sizeof (mdb_list_t));
diff --git a/usr/src/cmd/mdb/common/kmdb/kvm.h b/usr/src/cmd/mdb/common/kmdb/kvm.h
index 414a79eca9..ccd906048a 100644
--- a/usr/src/cmd/mdb/common/kmdb/kvm.h
+++ b/usr/src/cmd/mdb/common/kmdb/kvm.h
@@ -21,13 +21,13 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
#ifndef _KVM_H
#define _KVM_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* The kmdb target
*/
@@ -36,7 +36,6 @@
#include <mdb/mdb_target.h>
#include <kmdb/kmdb_dpi.h>
#include <kmdb/kvm_isadep.h>
-#include <kmdb/kvm_cpu.h>
#include <sys/kobj.h>
@@ -86,8 +85,6 @@ typedef struct kmt_data {
mdb_map_t kmt_map; /* Persistant map for callers */
ulong_t *kmt_trapmap;
size_t kmt_trapmax;
- kmt_cpu_t *kmt_cpu; /* CPU-specific plugin */
- int kmt_cpu_retry; /* Try CPU detect again? */
int kmt_symavail; /* Symbol resolution allowed */
uint_t kmt_narmedbpts; /* Number of armed brkpts */
#if defined(__i386) || defined(__amd64)
@@ -143,7 +140,6 @@ extern ssize_t kmt_ioread(mdb_tgt_t *, void *, size_t, uintptr_t);
extern ssize_t kmt_iowrite(mdb_tgt_t *, const void *, size_t, uintptr_t);
extern int kmt_step_out(mdb_tgt_t *, uintptr_t *);
-extern int kmt_step_branch(mdb_tgt_t *);
extern int kmt_next(mdb_tgt_t *, uintptr_t *);
extern int kmt_stack(uintptr_t, uint_t, int, const mdb_arg_t *);
diff --git a/usr/src/cmd/mdb/common/kmdb/kvm_cpu.c b/usr/src/cmd/mdb/common/kmdb/kvm_cpu.c
deleted file mode 100644
index ad4ecf4c13..0000000000
--- a/usr/src/cmd/mdb/common/kmdb/kvm_cpu.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * CPU-specific target implementation
- *
- * Each CPU provides a set of debugging facilities. We have per-CPU "modules",
- * each of which exposes a kmt_cpu_t. When initialized, these modules will
- * install dcmds, walkers, and the like in order to allow the user to take
- * advantage of features specific to the CPU being used.
- */
-
-#include <kmdb/kmdb_kdi.h>
-#include <kmdb/kvm_cpu_impl.h>
-#include <mdb/mdb_target.h>
-#include <mdb/mdb_err.h>
-#include <mdb/mdb.h>
-
-static kmt_cpu_ctor_f *const kmt_cpu_ctors[] = {
-#if defined(__i386) || defined(__amd64)
- kmt_cpu_amd_create,
- kmt_cpu_p4_create,
-#if defined(__i386)
- kmt_cpu_p6_create,
-#endif /* __i386 */
-#endif /* __i386 || __amd64 */
- NULL
-};
-
-kmt_cpu_t *
-kmt_cpu_create(mdb_tgt_t *t)
-{
- kmt_cpu_t *cpu;
- int retry = 0;
- int i;
-
- for (i = 0; kmt_cpu_ctors[i] != NULL; i++) {
- if ((cpu = kmt_cpu_ctors[i](t)) != NULL)
- return (cpu);
- else if (errno == EAGAIN)
- retry = 1;
- }
-
- if (retry)
- (void) set_errno(EAGAIN);
-
- return (NULL);
-}
-
-void
-kmt_cpu_destroy(kmt_cpu_t *cpu)
-{
- if (cpu != NULL)
- cpu->kmt_cpu_ops->kco_destroy(cpu);
-}
-
-int
-kmt_cpu_step_branch(mdb_tgt_t *t, kmt_cpu_t *cpu)
-{
- if (cpu == NULL || cpu->kmt_cpu_ops->kco_step_branch == NULL)
- return (set_errno(EMDB_TGTHWNOTSUP));
-
- return (cpu->kmt_cpu_ops->kco_step_branch(cpu, t));
-}
-
-const char *
-kmt_cpu_name(kmt_cpu_t *cpu)
-{
- if (cpu == NULL)
- return ("none");
- else
- return (cpu->kmt_cpu_ops->kco_name(cpu));
-}
diff --git a/usr/src/cmd/mdb/common/kmdb/kvm_cpu.h b/usr/src/cmd/mdb/common/kmdb/kvm_cpu.h
deleted file mode 100644
index 3a315a2329..0000000000
--- a/usr/src/cmd/mdb/common/kmdb/kvm_cpu.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _KVM_CPU_H
-#define _KVM_CPU_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * CPU-specific target implementation
- *
- * Each CPU provides a set of debugging facilities. We have per-CPU "modules",
- * each of which exposes a kmt_cpu_t. When initialized, these modules will
- * install dcmds, walkers, and the like in order to allow the user to take
- * advantage of features specific to the CPU being used.
- */
-
-#include <mdb/mdb_target.h>
-
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct kmt_cpu kmt_cpu_t;
-
-extern kmt_cpu_t *kmt_cpu_create(mdb_tgt_t *);
-extern void kmt_cpu_destroy(kmt_cpu_t *);
-
-extern const char *kmt_cpu_name(kmt_cpu_t *);
-
-#if defined(__i386) || defined(__amd64)
-extern int kmt_cpu_step_branch(mdb_tgt_t *, kmt_cpu_t *);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _KVM_CPU_H */
diff --git a/usr/src/cmd/mdb/common/kmdb/kvm_cpu_impl.h b/usr/src/cmd/mdb/common/kmdb/kvm_cpu_impl.h
deleted file mode 100644
index a22b8c973d..0000000000
--- a/usr/src/cmd/mdb/common/kmdb/kvm_cpu_impl.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _KVM_CPU_IMPL_H
-#define _KVM_CPU_IMPL_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <kmdb/kvm_cpu.h>
-#include <mdb/mdb_target.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct kmt_cpu_ops {
- void (*kco_destroy)(kmt_cpu_t *);
- const char *(*kco_name)(kmt_cpu_t *);
- int (*kco_step_branch)(kmt_cpu_t *, mdb_tgt_t *);
-} kmt_cpu_ops_t;
-
-struct kmt_cpu {
- kmt_cpu_ops_t *kmt_cpu_ops; /* Pointer to ops vector */
- void *kmt_cpu_data; /* Private storage */
-};
-
-typedef kmt_cpu_t *kmt_cpu_ctor_f(mdb_tgt_t *);
-
-#if defined(__i386) || defined(__amd64)
-extern kmt_cpu_ctor_f kmt_cpu_amd_create;
-extern kmt_cpu_ctor_f kmt_cpu_p4_create;
-#if defined(__i386)
-extern kmt_cpu_ctor_f kmt_cpu_p6_create;
-#endif /* __i386 */
-#endif /* __i386 || __amd64 */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _KVM_CPU_IMPL_H */
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_cmds.c b/usr/src/cmd/mdb/common/mdb/mdb_cmds.c
index 4314902056..063a8eb765 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_cmds.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_cmds.c
@@ -26,7 +26,7 @@
/*
* Copyright (c) 2012 by Delphix. All rights reserved.
- * Copyright (c) 2015 Joyent, Inc. All rights reserved.
+ * Copyright (c) 2018 Joyent, Inc. All rights reserved.
* Copyright (c) 2013 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
* Copyright (c) 2015, 2017 by Delphix. All rights reserved.
*/
@@ -2743,11 +2743,6 @@ cmd_step(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
name = "step (out)";
argv++;
argc--;
- } else if (strcmp(argv->a_un.a_str, "branch") == 0) {
- func = &mdb_tgt_step_branch;
- name = "step (branch)";
- argv++;
- argc--;
} else if (strcmp(argv->a_un.a_str, "over") == 0) {
func = &mdb_tgt_next;
name = "step (over)";
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_kproc.c b/usr/src/cmd/mdb/common/mdb/mdb_kproc.c
index 41e57b60b5..b61b0a2b0b 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_kproc.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_kproc.c
@@ -21,10 +21,10 @@
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Kernel Process View Target
*
@@ -919,7 +919,6 @@ static const mdb_tgt_ops_t kproc_ops = {
(int (*)()) mdb_tgt_notsup, /* t_run */
(int (*)()) mdb_tgt_notsup, /* t_step */
(int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_step_branch */
(int (*)()) mdb_tgt_notsup, /* t_next */
(int (*)()) mdb_tgt_notsup, /* t_cont */
(int (*)()) mdb_tgt_notsup, /* t_signal */
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_proc.c b/usr/src/cmd/mdb/common/mdb/mdb_proc.c
index 0b061d26a6..6c9f0aa5f4 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_proc.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_proc.c
@@ -24,7 +24,7 @@
* Use is subject to license terms.
*/
/*
- * Copyright 2015 Joyent, Inc.
+ * Copyright 2018 Joyent, Inc.
* Copyright (c) 2014 by Delphix. All rights reserved.
*/
@@ -4695,7 +4695,6 @@ static const mdb_tgt_ops_t proc_ops = {
pt_run, /* t_run */
pt_step, /* t_step */
pt_step_out, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_step_branch */
pt_next, /* t_next */
pt_continue, /* t_cont */
pt_signal, /* t_signal */
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_rawfile.c b/usr/src/cmd/mdb/common/mdb/mdb_rawfile.c
index affd518083..d2857a6579 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_rawfile.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_rawfile.c
@@ -21,10 +21,10 @@
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Raw File Target
*
@@ -391,7 +391,6 @@ static const mdb_tgt_ops_t rawfile_ops = {
(int (*)()) mdb_tgt_notsup, /* t_run */
(int (*)()) mdb_tgt_notsup, /* t_step */
(int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_step_branch */
(int (*)()) mdb_tgt_notsup, /* t_next */
(int (*)()) mdb_tgt_notsup, /* t_cont */
(int (*)()) mdb_tgt_notsup, /* t_signal */
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_target.c b/usr/src/cmd/mdb/common/mdb/mdb_target.c
index 4319f6b27c..edeac638e9 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_target.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_target.c
@@ -21,6 +21,8 @@
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
/*
@@ -182,8 +184,7 @@
* Define convenience macro for referencing target flag pending continue bits.
*/
#define T_CONT_BITS \
- (MDB_TGT_F_STEP | MDB_TGT_F_STEP_OUT | MDB_TGT_F_STEP_BRANCH | \
- MDB_TGT_F_NEXT | MDB_TGT_F_CONT)
+ (MDB_TGT_F_STEP | MDB_TGT_F_STEP_OUT | MDB_TGT_F_NEXT | MDB_TGT_F_CONT)
mdb_tgt_t *
mdb_tgt_create(mdb_tgt_ctor_f *ctor, int flags, int argc, const char *argv[])
@@ -390,7 +391,7 @@ mdb_tgt_auxv(mdb_tgt_t *t, const auxv_t **auxvp)
ssize_t
mdb_tgt_aread(mdb_tgt_t *t, mdb_tgt_as_t as,
- void *buf, size_t n, mdb_tgt_addr_t addr)
+ void *buf, size_t n, mdb_tgt_addr_t addr)
{
if (t->t_flags & MDB_TGT_F_ASIO)
return (t->t_ops->t_aread(t, as, buf, n, addr));
@@ -410,7 +411,7 @@ mdb_tgt_aread(mdb_tgt_t *t, mdb_tgt_as_t as,
ssize_t
mdb_tgt_awrite(mdb_tgt_t *t, mdb_tgt_as_t as,
- const void *buf, size_t n, mdb_tgt_addr_t addr)
+ const void *buf, size_t n, mdb_tgt_addr_t addr)
{
if (!(t->t_flags & MDB_TGT_F_RDWR))
return (set_errno(EMDB_TGTRDONLY));
@@ -499,7 +500,7 @@ mdb_tgt_vtop(mdb_tgt_t *t, mdb_tgt_as_t as, uintptr_t va, physaddr_t *pap)
ssize_t
mdb_tgt_readstr(mdb_tgt_t *t, mdb_tgt_as_t as, char *buf,
- size_t nbytes, mdb_tgt_addr_t addr)
+ size_t nbytes, mdb_tgt_addr_t addr)
{
ssize_t n, nread = mdb_tgt_aread(t, as, buf, nbytes, addr);
char *p;
@@ -533,7 +534,7 @@ done:
ssize_t
mdb_tgt_writestr(mdb_tgt_t *t, mdb_tgt_as_t as,
- const char *buf, mdb_tgt_addr_t addr)
+ const char *buf, mdb_tgt_addr_t addr)
{
ssize_t nwritten = mdb_tgt_awrite(t, as, buf, strlen(buf) + 1, addr);
return (nwritten > 0 ? nwritten - 1 : nwritten);
@@ -541,7 +542,7 @@ mdb_tgt_writestr(mdb_tgt_t *t, mdb_tgt_as_t as,
int
mdb_tgt_lookup_by_name(mdb_tgt_t *t, const char *obj,
- const char *name, GElf_Sym *symp, mdb_syminfo_t *sip)
+ const char *name, GElf_Sym *symp, mdb_syminfo_t *sip)
{
mdb_syminfo_t info;
GElf_Sym sym;
@@ -572,7 +573,7 @@ found:
int
mdb_tgt_lookup_by_addr(mdb_tgt_t *t, uintptr_t addr, uint_t flags,
- char *buf, size_t len, GElf_Sym *symp, mdb_syminfo_t *sip)
+ char *buf, size_t len, GElf_Sym *symp, mdb_syminfo_t *sip)
{
mdb_syminfo_t info;
GElf_Sym sym;
@@ -603,7 +604,7 @@ mdb_tgt_lookup_by_addr(mdb_tgt_t *t, uintptr_t addr, uint_t flags,
*/
int
mdb_tgt_lookup_by_scope(mdb_tgt_t *t, const char *s, GElf_Sym *symp,
- mdb_syminfo_t *sip)
+ mdb_syminfo_t *sip)
{
const char *object = MDB_TGT_OBJ_EVERY;
const char *name = s;
@@ -633,7 +634,7 @@ mdb_tgt_lookup_by_scope(mdb_tgt_t *t, const char *s, GElf_Sym *symp,
int
mdb_tgt_symbol_iter(mdb_tgt_t *t, const char *obj, uint_t which,
- uint_t type, mdb_tgt_sym_f *cb, void *p)
+ uint_t type, mdb_tgt_sym_f *cb, void *p)
{
if ((which != MDB_TGT_SYMTAB && which != MDB_TGT_DYNSYM) ||
(type & ~(MDB_TGT_BIND_ANY | MDB_TGT_TYPE_ANY)) != 0)
@@ -644,7 +645,7 @@ mdb_tgt_symbol_iter(mdb_tgt_t *t, const char *obj, uint_t which,
ssize_t
mdb_tgt_readsym(mdb_tgt_t *t, mdb_tgt_as_t as, void *buf, size_t nbytes,
- const char *obj, const char *name)
+ const char *obj, const char *name)
{
GElf_Sym sym;
@@ -656,7 +657,7 @@ mdb_tgt_readsym(mdb_tgt_t *t, mdb_tgt_as_t as, void *buf, size_t nbytes,
ssize_t
mdb_tgt_writesym(mdb_tgt_t *t, mdb_tgt_as_t as, const void *buf,
- size_t nbytes, const char *obj, const char *name)
+ size_t nbytes, const char *obj, const char *name)
{
GElf_Sym sym;
@@ -1088,8 +1089,6 @@ tgt_continue(mdb_tgt_t *t, mdb_tgt_status_t *tsp,
t_cont = t->t_ops->t_step;
else if (t->t_flags & MDB_TGT_F_NEXT)
t_cont = t->t_ops->t_step;
- else if (t->t_flags & MDB_TGT_F_STEP_BRANCH)
- t_cont = t->t_ops->t_cont;
else if (t->t_flags & MDB_TGT_F_STEP_OUT)
t_cont = t->t_ops->t_cont;
@@ -1121,16 +1120,6 @@ tgt_continue(mdb_tgt_t *t, mdb_tgt_status_t *tsp,
return (-1); /* errno is set for us */
}
- /*
- * To handle step-branch, we ask the target to enable it for the coming
- * continue. Step-branch is incompatible with step, so don't enable it
- * if we're going to be stepping.
- */
- if (t->t_flags & MDB_TGT_F_STEP_BRANCH && t_cont == t->t_ops->t_cont) {
- if (t->t_ops->t_step_branch(t) == -1)
- return (-1); /* errno is set for us */
- }
-
(void) mdb_signal_block(SIGHUP);
(void) mdb_signal_block(SIGTERM);
mdb_intr_disable();
@@ -1396,13 +1385,6 @@ mdb_tgt_step_out(mdb_tgt_t *t, mdb_tgt_status_t *tsp)
}
int
-mdb_tgt_step_branch(mdb_tgt_t *t, mdb_tgt_status_t *tsp)
-{
- t->t_flags |= MDB_TGT_F_STEP_BRANCH; /* set flag even if tgt not busy */
- return (tgt_request_continue(t, tsp, 0, t->t_ops->t_cont));
-}
-
-int
mdb_tgt_next(mdb_tgt_t *t, mdb_tgt_status_t *tsp)
{
t->t_flags |= MDB_TGT_F_NEXT; /* set flag even if tgt not busy */
@@ -1864,7 +1846,7 @@ mdb_tgt_nop()
int
mdb_tgt_xdata_insert(mdb_tgt_t *t, const char *name, const char *desc,
- ssize_t (*copy)(mdb_tgt_t *, void *, size_t))
+ ssize_t (*copy)(mdb_tgt_t *, void *, size_t))
{
mdb_xdata_t *xdp;
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_target.h b/usr/src/cmd/mdb/common/mdb/mdb_target.h
index b511ba07c3..c36b85e2f3 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_target.h
+++ b/usr/src/cmd/mdb/common/mdb/mdb_target.h
@@ -22,6 +22,8 @@
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
#ifndef _MDB_TARGET_H
@@ -79,13 +81,12 @@ extern int kmdb_kvm_create(mdb_tgt_t *, int, const char *[]);
#define MDB_TGT_F_NOSTOP 0x0020 /* Do not stop target on attach */
#define MDB_TGT_F_STEP 0x0040 /* Single-step is pending */
#define MDB_TGT_F_STEP_OUT 0x0080 /* Step-out is pending */
-#define MDB_TGT_F_STEP_BRANCH 0x0100 /* Step-branch is pending */
-#define MDB_TGT_F_NEXT 0x0200 /* Step-over is pending */
-#define MDB_TGT_F_CONT 0x0400 /* Continue is pending */
-#define MDB_TGT_F_BUSY 0x0800 /* Target is busy executing */
-#define MDB_TGT_F_ASIO 0x1000 /* Use t_aread and t_awrite for i/o */
-#define MDB_TGT_F_UNLOAD 0x2000 /* Unload has been requested */
-#define MDB_TGT_F_ALL 0x3fff /* Mask of all valid flags */
+#define MDB_TGT_F_NEXT 0x0100 /* Step-over is pending */
+#define MDB_TGT_F_CONT 0x0200 /* Continue is pending */
+#define MDB_TGT_F_BUSY 0x0400 /* Target is busy executing */
+#define MDB_TGT_F_ASIO 0x0800 /* Use t_aread and t_awrite for i/o */
+#define MDB_TGT_F_UNLOAD 0x1000 /* Unload has been requested */
+#define MDB_TGT_F_ALL 0x1fff /* Mask of all valid flags */
typedef int mdb_tgt_ctor_f(mdb_tgt_t *, int, const char *[]);
@@ -352,7 +353,6 @@ extern int mdb_tgt_status(mdb_tgt_t *, mdb_tgt_status_t *);
extern int mdb_tgt_run(mdb_tgt_t *, int, const struct mdb_arg *);
extern int mdb_tgt_step(mdb_tgt_t *, mdb_tgt_status_t *);
extern int mdb_tgt_step_out(mdb_tgt_t *, mdb_tgt_status_t *);
-extern int mdb_tgt_step_branch(mdb_tgt_t *, mdb_tgt_status_t *);
extern int mdb_tgt_next(mdb_tgt_t *, mdb_tgt_status_t *);
extern int mdb_tgt_continue(mdb_tgt_t *, mdb_tgt_status_t *);
extern int mdb_tgt_signal(mdb_tgt_t *, int);
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_target_impl.h b/usr/src/cmd/mdb/common/mdb/mdb_target_impl.h
index 7f78bc4879..28e42234ea 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_target_impl.h
+++ b/usr/src/cmd/mdb/common/mdb/mdb_target_impl.h
@@ -23,7 +23,7 @@
* Use is subject to license terms.
*/
/*
- * Copyright (c) 2012, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2018, Joyent, Inc. All rights reserved.
*/
#ifndef _MDB_TARGET_IMPL_H
@@ -104,7 +104,6 @@ typedef struct mdb_tgt_ops {
int (*t_run)(mdb_tgt_t *, int, const struct mdb_arg *);
int (*t_step)(mdb_tgt_t *, mdb_tgt_status_t *);
int (*t_step_out)(mdb_tgt_t *, uintptr_t *);
- int (*t_step_branch)(mdb_tgt_t *);
int (*t_next)(mdb_tgt_t *, uintptr_t *);
int (*t_cont)(mdb_tgt_t *, mdb_tgt_status_t *);
int (*t_signal)(mdb_tgt_t *, int);
diff --git a/usr/src/cmd/mdb/common/mdb/mdb_value.c b/usr/src/cmd/mdb/common/mdb/mdb_value.c
index 2292b0cf03..c50d971a49 100644
--- a/usr/src/cmd/mdb/common/mdb/mdb_value.c
+++ b/usr/src/cmd/mdb/common/mdb/mdb_value.c
@@ -21,10 +21,10 @@
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Immediate Value Target
*
@@ -142,7 +142,6 @@ static const mdb_tgt_ops_t value_ops = {
(int (*)()) mdb_tgt_notsup, /* t_run */
(int (*)()) mdb_tgt_notsup, /* t_step */
(int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_step_branch */
(int (*)()) mdb_tgt_notsup, /* t_next */
(int (*)()) mdb_tgt_notsup, /* t_cont */
(int (*)()) mdb_tgt_notsup, /* t_signal */
diff --git a/usr/src/cmd/mdb/i86pc/modules/unix/unix.c b/usr/src/cmd/mdb/i86pc/modules/unix/unix.c
index 4bce7100ef..a168eef2e3 100644
--- a/usr/src/cmd/mdb/i86pc/modules/unix/unix.c
+++ b/usr/src/cmd/mdb/i86pc/modules/unix/unix.c
@@ -20,7 +20,7 @@
*/
/*
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2015 Joyent, Inc.
+ * Copyright 2018 Joyent, Inc.
*/
#include <mdb/mdb_modapi.h>
@@ -409,6 +409,7 @@ static struct {
typedef struct ttrace_dcmd {
processorid_t ttd_cpu;
uint_t ttd_extended;
+ uintptr_t ttd_kthread;
trap_trace_ctl_t ttd_ttc[NCPU];
} ttrace_dcmd_t;
@@ -478,6 +479,10 @@ ttrace_walk(uintptr_t addr, trap_trace_rec_t *rec, ttrace_dcmd_t *dcmd)
if (dcmd->ttd_cpu != -1 && cpu != dcmd->ttd_cpu)
return (WALK_NEXT);
+ if (dcmd->ttd_kthread != 0 &&
+ dcmd->ttd_kthread != rec->ttr_curthread)
+ return (WALK_NEXT);
+
mdb_printf("%3d %15llx ", cpu, rec->ttr_stamp);
for (i = 0; ttrace_hdlr[i].t_hdlr != NULL; i++) {
@@ -537,7 +542,8 @@ ttrace(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
}
if (mdb_getopts(argc, argv,
- 'x', MDB_OPT_SETBITS, TRUE, &dcmd.ttd_extended, NULL) != argc)
+ 'x', MDB_OPT_SETBITS, TRUE, &dcmd.ttd_extended,
+ 't', MDB_OPT_UINTPTR, &dcmd.ttd_kthread, NULL) != argc)
return (DCMD_USAGE);
if (DCMD_HDRSPEC(flags)) {
@@ -886,7 +892,7 @@ x86_featureset_cmd(uintptr_t addr, uint_t flags, int argc,
static int
crregs_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
- ulong_t cr0, cr4;
+ ulong_t cr0, cr2, cr3, cr4;
static const mdb_bitmask_t cr0_flag_bits[] = {
{ "PE", CR0_PE, CR0_PE },
{ "MP", CR0_MP, CR0_MP },
@@ -902,6 +908,12 @@ crregs_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{ NULL, 0, 0 }
};
+ static const mdb_bitmask_t cr3_flag_bits[] = {
+ { "PCD", CR3_PCD, CR3_PCD },
+ { "PWT", CR3_PWT, CR3_PWT },
+ { NULL, 0, 0, }
+ };
+
static const mdb_bitmask_t cr4_flag_bits[] = {
{ "VME", CR4_VME, CR4_VME },
{ "PVI", CR4_PVI, CR4_PVI },
@@ -916,6 +928,7 @@ crregs_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{ "OSXMMEXCPT", CR4_OSXMMEXCPT, CR4_OSXMMEXCPT },
{ "VMXE", CR4_VMXE, CR4_VMXE },
{ "SMXE", CR4_SMXE, CR4_SMXE },
+ { "PCIDE", CR4_PCIDE, CR4_PCIDE },
{ "OSXSAVE", CR4_OSXSAVE, CR4_OSXSAVE },
{ "SMEP", CR4_SMEP, CR4_SMEP },
{ "SMAP", CR4_SMAP, CR4_SMAP },
@@ -923,9 +936,22 @@ crregs_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
};
cr0 = kmdb_unix_getcr0();
+ cr2 = kmdb_unix_getcr2();
+ cr3 = kmdb_unix_getcr3();
cr4 = kmdb_unix_getcr4();
mdb_printf("%%cr0 = 0x%08x <%b>\n", cr0, cr0, cr0_flag_bits);
+ mdb_printf("%%cr2 = 0x%08x <%a>\n", cr2, cr2);
+
+ if ((cr4 & CR4_PCIDE)) {
+ mdb_printf("%%cr3 = 0x%08x <pfn:%lu pcid:%u>\n",
+ cr3 >> MMU_PAGESHIFT, cr3 & MMU_PAGEOFFSET);
+ } else {
+ mdb_printf("%%cr3 = 0x%08x <pfn:%lu flags:%b>\n", cr3,
+ cr3 >> MMU_PAGESHIFT, cr3, cr3_flag_bits);
+ }
+
mdb_printf("%%cr4 = 0x%08x <%b>\n", cr4, cr4, cr4_flag_bits);
+
return (DCMD_OK);
}
#endif
@@ -933,7 +959,7 @@ crregs_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
static const mdb_dcmd_t dcmds[] = {
{ "gate_desc", ":", "dump a gate descriptor", gate_desc },
{ "idt", ":[-v]", "dump an IDT", idt },
- { "ttrace", "[-x]", "dump trap trace buffers", ttrace },
+ { "ttrace", "[-x] [-t kthread]", "dump trap trace buffers", ttrace },
{ "vatopfn", ":[-a as]", "translate address to physical page",
va2pfn_dcmd },
{ "report_maps", ":[-m]",
diff --git a/usr/src/cmd/mdb/i86pc/modules/unix/unix_sup.h b/usr/src/cmd/mdb/i86pc/modules/unix/unix_sup.h
index b272baaf59..4c155373ea 100644
--- a/usr/src/cmd/mdb/i86pc/modules/unix/unix_sup.h
+++ b/usr/src/cmd/mdb/i86pc/modules/unix/unix_sup.h
@@ -10,7 +10,7 @@
*/
/*
- * Copyright 2015 Joyent, Inc.
+ * Copyright 2018 Joyent, Inc.
*/
#ifndef _UNIX_SUP_H
@@ -27,6 +27,8 @@ extern "C" {
#endif
extern ulong_t kmdb_unix_getcr0(void);
+extern ulong_t kmdb_unix_getcr2(void);
+extern ulong_t kmdb_unix_getcr3(void);
extern ulong_t kmdb_unix_getcr4(void);
#ifdef __cplusplus
diff --git a/usr/src/cmd/mdb/i86pc/modules/unix/unix_sup.s b/usr/src/cmd/mdb/i86pc/modules/unix/unix_sup.s
index f7d4e168c0..407123c7e0 100644
--- a/usr/src/cmd/mdb/i86pc/modules/unix/unix_sup.s
+++ b/usr/src/cmd/mdb/i86pc/modules/unix/unix_sup.s
@@ -10,7 +10,7 @@
*/
/*
- * Copyright 2015 Joyent, Inc.
+ * Copyright 2018 Joyent, Inc.
*/
#if !defined(__lint)
@@ -43,6 +43,16 @@ kmdb_unix_getcr4(void)
ret
SET_SIZE(kmdb_unix_getcr0)
+ ENTRY(kmdb_unix_getcr2)
+ movq %cr2, %rax
+ ret
+ SET_SIZE(kmdb_unix_getcr2)
+
+ ENTRY(kmdb_unix_getcr3)
+ movq %cr3, %rax
+ ret
+ SET_SIZE(kmdb_unix_getcr3)
+
ENTRY(kmdb_unix_getcr4)
movq %cr4, %rax
ret
@@ -54,6 +64,16 @@ kmdb_unix_getcr4(void)
ret
SET_SIZE(kmdb_unix_getcr0)
+ ENTRY(kmdb_unix_getcr2)
+ movl %cr2, %eax
+ ret
+ SET_SIZE(kmdb_unix_getcr2)
+
+ ENTRY(kmdb_unix_getcr3)
+ movl %cr3, %eax
+ ret
+ SET_SIZE(kmdb_unix_getcr3)
+
ENTRY(kmdb_unix_getcr4)
movl %cr4, %eax
ret
diff --git a/usr/src/cmd/mdb/intel/Makefile.kmdb b/usr/src/cmd/mdb/intel/Makefile.kmdb
index f0b2e9cac7..0a2a5e8581 100644
--- a/usr/src/cmd/mdb/intel/Makefile.kmdb
+++ b/usr/src/cmd/mdb/intel/Makefile.kmdb
@@ -22,6 +22,8 @@
# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
+# Copyright 2018 Joyent, Inc.
+#
PROMSRCS += \
prom_env.c \
@@ -36,8 +38,6 @@ KMDBSRCS += \
kmdb_fault_isadep.c \
kmdb_kdi_isadep.c \
kmdb_promif_isadep.c \
- kvm_cpu_amd.c \
- kvm_cpu_p4.c \
kvm_isadep.c
KMDBML += \
diff --git a/usr/src/cmd/mdb/intel/ia32/Makefile.kmdb b/usr/src/cmd/mdb/intel/ia32/Makefile.kmdb
index 53b19b535d..03ea80eb9e 100644
--- a/usr/src/cmd/mdb/intel/ia32/Makefile.kmdb
+++ b/usr/src/cmd/mdb/intel/ia32/Makefile.kmdb
@@ -22,8 +22,7 @@
# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-#ident "%Z%%M% %I% %E% SMI"
-#
+# Copyright 2018 Joyent, Inc.
KMDBML += \
kaif_invoke.s \
@@ -31,7 +30,6 @@ KMDBML += \
KMDBSRCS += \
mdb_ia32util.c \
- kmdb_makecontext.c \
- kvm_cpu_p6.c
+ kmdb_makecontext.c
SACPPFLAGS = -D__$(MACH)
diff --git a/usr/src/cmd/mdb/intel/kmdb/kaif.c b/usr/src/cmd/mdb/intel/kmdb/kaif.c
index 207ddca12a..c1be6aae0f 100644
--- a/usr/src/cmd/mdb/intel/kmdb/kaif.c
+++ b/usr/src/cmd/mdb/intel/kmdb/kaif.c
@@ -21,10 +21,10 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* The debugger/"PROM" interface layer
*
@@ -603,38 +603,6 @@ kaif_step(void)
}
}
-/*
- * The target has already configured the chip for branch step, leaving us to
- * actually make the machine go. Due to a number of issues involving
- * the potential alteration of system state via instructions like sti, cli,
- * pushfl, and popfl, we're going to treat this like a normal system resume.
- * All CPUs will be released, on the kernel's IDT. Our primary concern is
- * the alteration/storage of our TF'd EFLAGS via pushfl and popfl. There's no
- * real workaround - we don't have opcode breakpoints - so the best we can do is
- * to ensure that the world won't end if someone does bad things to EFLAGS.
- *
- * Two things can happen:
- * 1. EFLAGS.TF may be cleared, either maliciously or via a popfl from saved
- * state. The CPU will continue execution beyond the branch, and will not
- * reenter the debugger unless brought/sent in by other means.
- * 2. Someone may pushlf the TF'd EFLAGS, and may stash a copy of it somewhere.
- * When the saved version is popfl'd back into place, the debugger will be
- * re-entered on a single-step trap.
- */
-static void
-kaif_step_branch(void)
-{
- kreg_t fl;
-
- (void) kmdb_dpi_get_register(FLAGS_REG_NAME, &fl);
- (void) kmdb_dpi_set_register(FLAGS_REG_NAME,
- (fl | (1 << KREG_EFLAGS_TF_SHIFT)));
-
- kmdb_dpi_resume_master();
-
- (void) kmdb_dpi_set_register(FLAGS_REG_NAME, fl);
-}
-
/*ARGSUSED*/
static uintptr_t
kaif_call(uintptr_t funcva, uint_t argc, const uintptr_t argv[])
@@ -724,47 +692,6 @@ kaif_modchg_cancel(void)
kaif_modchg_cb = NULL;
}
-static void
-kaif_msr_add(const kdi_msr_t *msrs)
-{
- kdi_msr_t *save;
- size_t nr_msrs = 0;
- size_t i;
-
- while (msrs[nr_msrs].msr_num != 0)
- nr_msrs++;
- /* we want to copy the terminating kdi_msr_t too */
- nr_msrs++;
-
- save = mdb_zalloc(sizeof (kdi_msr_t) * nr_msrs * kaif_ncpusave,
- UM_SLEEP);
-
- for (i = 0; i < kaif_ncpusave; i++)
- bcopy(msrs, &save[nr_msrs * i], sizeof (kdi_msr_t) * nr_msrs);
-
- kmdb_kdi_set_debug_msrs(save);
-}
-
-static uint64_t
-kaif_msr_get(int cpuid, uint_t num)
-{
- kdi_cpusave_t *save;
- kdi_msr_t *msr;
- int i;
-
- if ((save = kaif_cpuid2save(cpuid)) == NULL)
- return (-1); /* errno is set for us */
-
- msr = save->krs_msr;
-
- for (i = 0; msr[i].msr_num != 0; i++) {
- if (msr[i].msr_num == num && (msr[i].msr_type & KDI_MSR_READ))
- return (msr[i].kdi_msr_val);
- }
-
- return (0);
-}
-
void
kaif_trap_set_debugger(void)
{
@@ -884,9 +811,6 @@ dpi_ops_t kmdb_dpi_ops = {
kaif_wapt_disarm,
kaif_wapt_match,
kaif_step,
- kaif_step_branch,
kaif_call,
kaif_dump_crumbs,
- kaif_msr_add,
- kaif_msr_get,
};
diff --git a/usr/src/cmd/mdb/intel/kmdb/kmdb_dpi_isadep.c b/usr/src/cmd/mdb/intel/kmdb/kmdb_dpi_isadep.c
index 719e36b8dc..100cbe4be1 100644
--- a/usr/src/cmd/mdb/intel/kmdb/kmdb_dpi_isadep.c
+++ b/usr/src/cmd/mdb/intel/kmdb/kmdb_dpi_isadep.c
@@ -21,10 +21,10 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Intel-specific portions of the DPI
*/
@@ -142,21 +142,3 @@ kmdb_dpi_reboot(void)
*/
longjmp(kmdb_dpi_entry_pcb, KMDB_DPI_CMD_REBOOT);
}
-
-void
-kmdb_dpi_msr_add(const kdi_msr_t *msrs)
-{
- mdb.m_dpi->dpo_msr_add(msrs);
-}
-
-uint64_t
-kmdb_dpi_msr_get(uint_t msr)
-{
- return (mdb.m_dpi->dpo_msr_get(DPI_MASTER_CPUID, msr));
-}
-
-uint64_t
-kmdb_dpi_msr_get_by_cpu(int cpuid, uint_t msr)
-{
- return (mdb.m_dpi->dpo_msr_get(cpuid, msr));
-}
diff --git a/usr/src/cmd/mdb/intel/kmdb/kmdb_dpi_isadep.h b/usr/src/cmd/mdb/intel/kmdb/kmdb_dpi_isadep.h
index 2565c1f843..b2dce29712 100644
--- a/usr/src/cmd/mdb/intel/kmdb/kmdb_dpi_isadep.h
+++ b/usr/src/cmd/mdb/intel/kmdb/kmdb_dpi_isadep.h
@@ -21,13 +21,13 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
#ifndef _KMDB_DPI_ISADEP_H
#define _KMDB_DPI_ISADEP_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifndef _ASM
#include <mdb/mdb_isautil.h>
#include <sys/kdi_machimpl.h>
@@ -43,10 +43,6 @@ extern void kmdb_dpi_handle_fault(kreg_t, kreg_t, kreg_t, int);
extern void kmdb_dpi_reboot(void) __NORETURN;
-extern void kmdb_dpi_msr_add(const kdi_msr_t *);
-extern uint64_t kmdb_dpi_msr_get(uint_t);
-extern uint64_t kmdb_dpi_msr_get_by_cpu(int, uint_t);
-
#endif /* _ASM */
#ifdef __cplusplus
diff --git a/usr/src/cmd/mdb/intel/kmdb/kmdb_kdi_isadep.c b/usr/src/cmd/mdb/intel/kmdb/kmdb_kdi_isadep.c
index a556c90041..2214c7c0ce 100644
--- a/usr/src/cmd/mdb/intel/kmdb/kmdb_kdi_isadep.c
+++ b/usr/src/cmd/mdb/intel/kmdb/kmdb_kdi_isadep.c
@@ -21,10 +21,10 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/types.h>
#include <sys/kdi_impl.h>
#include <sys/segments.h>
@@ -104,12 +104,6 @@ kmdb_kdi_update_drreg(kdi_drreg_t *drreg)
}
void
-kmdb_kdi_set_debug_msrs(kdi_msr_t *msrs)
-{
- mdb.m_kdi->mkdi_set_debug_msrs(msrs);
-}
-
-void
kmdb_kdi_memrange_add(caddr_t base, size_t len)
{
mdb.m_kdi->mkdi_memrange_add(base, len);
diff --git a/usr/src/cmd/mdb/intel/kmdb/kmdb_kdi_isadep.h b/usr/src/cmd/mdb/intel/kmdb/kmdb_kdi_isadep.h
index 1813b382e3..a4ebf625b6 100644
--- a/usr/src/cmd/mdb/intel/kmdb/kmdb_kdi_isadep.h
+++ b/usr/src/cmd/mdb/intel/kmdb/kmdb_kdi_isadep.h
@@ -21,13 +21,13 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
#ifndef _KMDB_KDI_ISADEP_H
#define _KMDB_KDI_ISADEP_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/types.h>
#include <sys/kdi_machimpl.h>
@@ -45,7 +45,6 @@ extern void kmdb_kdi_deactivate(void);
extern void kmdb_kdi_idt_switch(kdi_cpusave_t *);
extern void kmdb_kdi_update_drreg(kdi_drreg_t *);
-extern void kmdb_kdi_set_debug_msrs(kdi_msr_t *);
extern uintptr_t kmdb_kdi_get_userlimit(void);
diff --git a/usr/src/cmd/mdb/intel/kmdb/kvm_cpu_amd.c b/usr/src/cmd/mdb/intel/kmdb/kvm_cpu_amd.c
deleted file mode 100644
index 6b67853220..0000000000
--- a/usr/src/cmd/mdb/intel/kmdb/kvm_cpu_amd.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * Debugging functionality unique to 64-bit AMD processors.
- */
-
-#include <kmdb/kvm_cpu_impl.h>
-#include <kmdb/kmdb_dpi.h>
-#include <kmdb/kmdb_kdi.h>
-#include <kmdb/kvm.h>
-#include <mdb/mdb_err.h>
-#include <mdb/mdb.h>
-
-#include <sys/x86_archext.h>
-
-typedef struct kmt_cpu_amd {
- uint64_t amd_debugctl; /* value for debugctl MSR */
- const kdi_msr_t *amd_msrs; /* MSR r/w list */
- uint_t amd_family; /* CPUID family */
- uint_t amd_model; /* CPUID model */
-} kmt_cpu_amd_t;
-
-/*
- * The debugctl value in this struct needs to outlive the destruction of the
- * kmt_cpu_t. It needs to be around for the final exit from the debugger so
- * we can do the final write of the debugctl MSR.
- */
-static kmt_cpu_amd_t kmt_cpu_amd;
-
-static void
-kmt_amd_branch(uint_t cpuid, const char *label, uint_t msr)
-{
- char buf[BUFSIZ];
- uintptr_t addr;
-
- addr = (uintptr_t)kmdb_dpi_msr_get_by_cpu(cpuid, msr);
-
- mdb_printf("%s: %p %A\n", label, addr, addr);
-
- if (mdb_dis_ins2str(mdb.m_disasm, mdb.m_target,
- MDB_TGT_AS_VIRT, buf, sizeof (buf), addr) != addr)
- mdb_printf("%*s %s\n", strlen(label), "", buf);
-}
-
-/*
- * MSRs for AMD processors with simple branch tracing facilities. We'll use
- * this array if we can access listed LBR/LEX MSRs.
- */
-static const kdi_msr_t kmt_amd_msrs[] = {
- { MSR_DEBUGCTL, KDI_MSR_CLEARENTRY },
- { MSR_DEBUGCTL, KDI_MSR_WRITEDELAY, &kmt_cpu_amd.amd_debugctl },
- { MSR_LBR_TO, KDI_MSR_READ },
- { MSR_LBR_FROM, KDI_MSR_READ },
- { MSR_LEX_TO, KDI_MSR_READ },
- { MSR_LEX_FROM, KDI_MSR_READ },
- { NULL }
-};
-
-/*
- * Fallback MSR list for use if we can't read the LBR/LEX MSRs.
- */
-static const kdi_msr_t kmt_amdunk_msrs[] = {
- { MSR_DEBUGCTL, KDI_MSR_CLEARENTRY },
- { MSR_DEBUGCTL, KDI_MSR_WRITEDELAY, &kmt_cpu_amd.amd_debugctl },
- { NULL }
-};
-
-/*ARGSUSED*/
-static void
-kmt_amd_destroy(kmt_cpu_t *cpu)
-{
- /* Leave LBR on */
-
- mdb_free(cpu, sizeof (kmt_cpu_t));
-}
-
-/*ARGSUSED*/
-static const char *
-kmt_amd_name(kmt_cpu_t *cpu)
-{
- return ("AMD");
-}
-
-/*ARGSUSED*/
-static void
-kmt_amd_btf_clear(mdb_tgt_t *t, int id, void *arg)
-{
- kmt_cpu_amd_t *amd = arg;
- kreg_t efl;
-
- amd->amd_debugctl &= ~DEBUGCTL_BTF;
-
- (void) kmdb_dpi_get_register("rflags", &efl);
- efl &= ~(1 << KREG_EFLAGS_TF_SHIFT);
- (void) kmdb_dpi_set_register("rflags", efl);
-}
-
-/* Enable branch stepping, to be disabled on the next debugger entry */
-static int
-kmt_amd_step_branch(kmt_cpu_t *cpu, mdb_tgt_t *t)
-{
- kmt_cpu_amd_t *amd = cpu->kmt_cpu_data;
- kreg_t efl;
-
- (void) kmdb_dpi_get_register("rflags", &efl);
- (void) kmdb_dpi_set_register("rflags",
- (efl | (1 << KREG_EFLAGS_TF_SHIFT)));
-
- amd->amd_debugctl |= DEBUGCTL_BTF;
-
- return (mdb_tgt_add_fault(t, KMT_TRAP_ALL,
- MDB_TGT_SPEC_HIDDEN | MDB_TGT_SPEC_TEMPORARY,
- kmt_amd_btf_clear, amd));
-}
-
-static kmt_cpu_ops_t kmt_amd_ops = {
- kmt_amd_destroy,
- kmt_amd_name,
- kmt_amd_step_branch
-};
-
-/*ARGSUSED*/
-static int
-kmt_amd_branches(uintptr_t addr, uint_t flags, int argc,
- const mdb_arg_t *argv)
-{
- intptr_t cpuid = DPI_MASTER_CPUID;
-
- if (kmt_cpu_amd.amd_msrs == kmt_amdunk_msrs) {
- warn("branch tracing unavailable on unknown AMD CPU "
- "(id: %x/%x)\n", kmt_cpu_amd.amd_family,
- kmt_cpu_amd.amd_model);
- return (DCMD_ERR);
- }
-
- if (mdb_getopts(argc, argv,
- 'c', MDB_OPT_UINTPTR, &cpuid,
- NULL) != argc)
- return (DCMD_USAGE);
-
- kmt_amd_branch(cpuid, "LastBranchToIP ", MSR_LBR_TO);
- kmt_amd_branch(cpuid, "LastBranchFromIP ", MSR_LBR_FROM);
- kmt_amd_branch(cpuid, "LastExceptionToIP ", MSR_LEX_TO);
- kmt_amd_branch(cpuid, "LastExceptionFromIP", MSR_LEX_FROM);
-
- return (0);
-}
-
-static const mdb_dcmd_t kmt_amd_dcmds[] = {
- { "branches", NULL, "describe the recently-taken branches",
- kmt_amd_branches },
- { NULL }
-};
-
-kmt_cpu_t *
-kmt_cpu_amd_create(mdb_tgt_t *t)
-{
- uint_t vendor, family, model;
- kmt_cpu_t *cpu;
-
- if (kmdb_kdi_get_cpuinfo(&vendor, &family, &model) < 0)
- return (NULL); /* errno is set for us */
-
- if (vendor != X86_VENDOR_AMD) {
- (void) set_errno(ENOTSUP);
- return (NULL);
- }
-
- kmt_cpu_amd.amd_family = family;
- kmt_cpu_amd.amd_model = model;
- kmt_cpu_amd.amd_msrs = kmt_amdunk_msrs;
- kmt_cpu_amd.amd_debugctl = DEBUGCTL_LBR; /* Enable LBR on resume */
-
- cpu = mdb_zalloc(sizeof (kmt_cpu_t), UM_SLEEP);
- cpu->kmt_cpu_ops = &kmt_amd_ops;
- cpu->kmt_cpu_data = &kmt_cpu_amd;
-
- /*
- * Use the LBR/LEX MSRs if this CPU supports them.
- */
- if (kmt_msr_validate(kmt_amd_msrs))
- kmt_cpu_amd.amd_msrs = kmt_amd_msrs;
-
- (void) mdb_tgt_register_dcmds(t, kmt_amd_dcmds, MDB_MOD_FORCE);
- kmdb_dpi_msr_add(kmt_cpu_amd.amd_msrs);
-
- return (cpu);
-}
diff --git a/usr/src/cmd/mdb/intel/kmdb/kvm_cpu_p4.c b/usr/src/cmd/mdb/intel/kmdb/kvm_cpu_p4.c
deleted file mode 100644
index 50694fe76e..0000000000
--- a/usr/src/cmd/mdb/intel/kmdb/kvm_cpu_p4.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * This plugin supports debugging functionality unique to Intel processors based
- * on the NetBurst (P4) microarchitecture. It also supports the Pentium M, a
- * processor which uses the P6 family code but provides a P4-style branch
- * tracing stack.
- */
-
-#include <kmdb/kvm_cpu_impl.h>
-#include <kmdb/kmdb_dpi.h>
-#include <kmdb/kmdb_kdi.h>
-#include <kmdb/kvm.h>
-#include <mdb/mdb_err.h>
-#include <mdb/mdb_debug.h>
-#include <mdb/mdb.h>
-
-#include <sys/x86_archext.h>
-
-/*
- * As of this writing, Intel has three different flavors of branch stack.
- * They're essentially the same, but the MSR addresses, stack size, and access
- * methods differ. We've got one kmt_p4_flavor_t for each type of branch
- * stack.
- */
-typedef struct kmt_p4_flavor {
- const char *p4f_name; /* name for CPU support */
- const kdi_msr_t *p4f_msrs; /* MSR r/w list */
- int (*p4f_branches)(const struct kmt_p4_flavor *, uint_t,
- intptr_t, int); /* dumper for CPU branch stk */
- uint_t p4f_msr_tos; /* branch stk index MSR */
- uint_t p4f_lbrstk_from_base; /* low "from" branch stk MSR */
- uint_t p4f_lbrstk_to_base; /* low "to" branch stk MSR */
- size_t p4f_lbrstk_num; /* number of entries in stk */
-} kmt_p4_flavor_t;
-
-typedef struct kmt_cpu_p4 {
- uint64_t p4_debugctl; /* value for debugctl MSR */
- const kmt_p4_flavor_t *p4_flavor; /* parameters for this proc */
- uint_t p4_model; /* CPUID model */
-} kmt_cpu_p4_t;
-
-/* See 07/04 AP-485 Intel Processor Identification and the CPUID Instruction */
-#define KMT_CPU_FAMILY_P6 0x6 /* For this plugin, the Pentium M */
-#define KMT_CPU_FAMILY_P4 0xf /* "Netburst" CPUs (P4s) */
-#define KMT_CPU_MODEL_PM_9 0x9 /* Pentium M, model 9 */
-#define KMT_CPU_MODEL_PM_D 0xd /* Pentium M, model d */
-
-
-static kmt_cpu_p4_t kmt_cpu_p4;
-
-static void
-kmt_p4_branch(uintptr_t from, uintptr_t to, int verbose)
-{
- if (verbose) {
- uintptr_t addr = mdb_dis_previns(mdb.m_disasm, mdb.m_target,
- MDB_TGT_AS_VIRT, from, 3);
-
- mdb_printf("%<b>%-39a %-39a%</b>\n", from, to);
-
- while (addr <= from) {
- char buf[80];
- uintptr_t next;
- char *c;
-
- if ((next = mdb_dis_ins2str(mdb.m_disasm, mdb.m_target,
- MDB_TGT_AS_VIRT, buf, sizeof (buf), addr)) == addr)
- (void) strcpy(buf, "???");
-
- for (c = buf + strlen(buf) - 1;
- c > buf && (*c == ' ' || *c == '\t');
- c--)
- ;
-
- if (*c == '>') {
- while (c > buf && *c != '<')
- c--;
-
- if (*c == '<')
- *c = '\0';
- }
-
- if (addr == from) {
- mdb_printf("\t%<b>%-#32a%8T%s%</b>\n",
- addr, buf);
- } else {
- mdb_printf("\t%-#32a%8T%s\n", addr, buf);
- }
-
- if (next == addr)
- break;
-
- addr = next;
- }
- mdb_printf("\n");
- } else {
- mdb_printf("%-39a %-39a\n", from, to);
- }
-}
-
-#ifndef __amd64
-static int
-kmt_p4_branches_unified(const kmt_p4_flavor_t *p4f, uint_t tos, intptr_t cpuid,
- int verbose)
-{
- uint_t cur;
- int i;
-
- for (cur = tos, i = 0; i < p4f->p4f_lbrstk_num;
- i++, cur = (cur + p4f->p4f_lbrstk_num - 1) % p4f->p4f_lbrstk_num) {
- uint64_t rec = kmdb_dpi_msr_get_by_cpu(cpuid,
- p4f->p4f_lbrstk_from_base + cur);
-
- kmt_p4_branch((rec & 0xffffffff), rec >> 32, verbose);
- }
-
- return (0);
-}
-#endif /* !__amd64 */
-
-static int
-kmt_p4_branches_split(const kmt_p4_flavor_t *p4f, uint_t tos, intptr_t cpuid,
- int verbose)
-{
- uint_t cur;
- int i;
-
- for (cur = tos, i = 0; i < p4f->p4f_lbrstk_num;
- i++, cur = (cur + p4f->p4f_lbrstk_num - 1) % p4f->p4f_lbrstk_num) {
- uintptr_t from = (uintptr_t)kmdb_dpi_msr_get_by_cpu(cpuid,
- p4f->p4f_lbrstk_from_base + cur);
- uintptr_t to = (uintptr_t)kmdb_dpi_msr_get_by_cpu(cpuid,
- p4f->p4f_lbrstk_to_base + cur);
-
- kmt_p4_branch(from, to, verbose);
- }
-
- return (0);
-}
-
-#ifndef __amd64
-static const kdi_msr_t kmt_p4orig_msrs[] = {
- { MSR_DEBUGCTL, KDI_MSR_CLEARENTRY },
- { MSR_DEBUGCTL, KDI_MSR_WRITEDELAY, &kmt_cpu_p4.p4_debugctl },
- { MSR_P4_LBSTK_TOS, KDI_MSR_READ },
- { MSR_P4_LBSTK_0, KDI_MSR_READ },
- { MSR_P4_LBSTK_1, KDI_MSR_READ },
- { MSR_P4_LBSTK_2, KDI_MSR_READ },
- { MSR_P4_LBSTK_3, KDI_MSR_READ },
- { NULL }
-};
-
-static const kmt_p4_flavor_t kmt_p4_original = {
- "Intel Pentium 4 (pre-Prescott)",
- kmt_p4orig_msrs, kmt_p4_branches_unified, MSR_P4_LBSTK_TOS,
- MSR_P4_LBSTK_0, MSR_P4_LBSTK_0, 4
-};
-
-static const kdi_msr_t kmt_p6m_msrs[] = {
- { MSR_DEBUGCTL, KDI_MSR_CLEARENTRY },
- { MSR_DEBUGCTL, KDI_MSR_WRITEDELAY, &kmt_cpu_p4.p4_debugctl },
- { MSR_P6M_LBSTK_TOS, KDI_MSR_READ },
- { MSR_P6M_LBSTK_0, KDI_MSR_READ },
- { MSR_P6M_LBSTK_1, KDI_MSR_READ },
- { MSR_P6M_LBSTK_2, KDI_MSR_READ },
- { MSR_P6M_LBSTK_3, KDI_MSR_READ },
- { MSR_P6M_LBSTK_4, KDI_MSR_READ },
- { MSR_P6M_LBSTK_5, KDI_MSR_READ },
- { MSR_P6M_LBSTK_6, KDI_MSR_READ },
- { MSR_P6M_LBSTK_7, KDI_MSR_READ },
- { NULL }
-};
-
-static const kmt_p4_flavor_t kmt_p6_m = {
- "Intel Pentium M",
- kmt_p6m_msrs, kmt_p4_branches_unified, MSR_P6M_LBSTK_TOS,
- MSR_P6M_LBSTK_0, MSR_P6M_LBSTK_0, 8
-};
-#endif /* __amd64 */
-
-static const kdi_msr_t kmt_prp4_msrs[] = {
- { MSR_DEBUGCTL, KDI_MSR_CLEARENTRY },
- { MSR_DEBUGCTL, KDI_MSR_WRITEDELAY, &kmt_cpu_p4.p4_debugctl },
- { MSR_PRP4_LBSTK_TOS, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_0, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_1, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_2, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_3, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_4, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_5, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_6, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_7, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_8, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_9, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_10, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_11, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_12, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_13, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_14, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_FROM_15, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_0, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_1, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_2, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_3, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_4, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_5, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_6, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_7, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_8, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_9, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_10, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_11, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_12, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_13, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_14, KDI_MSR_READ },
- { MSR_PRP4_LBSTK_TO_15, KDI_MSR_READ },
- { NULL }
-};
-
-static const kmt_p4_flavor_t kmt_p4_prescott = {
- "Intel Pentium 4 (Prescott)",
- kmt_prp4_msrs, kmt_p4_branches_split, MSR_PRP4_LBSTK_TOS,
- MSR_PRP4_LBSTK_FROM_0, MSR_PRP4_LBSTK_TO_0, 16
-};
-
-static const kdi_msr_t kmt_p4unk_msrs[] = {
- { MSR_DEBUGCTL, KDI_MSR_CLEARENTRY },
- { MSR_DEBUGCTL, KDI_MSR_WRITEDELAY, &kmt_cpu_p4.p4_debugctl },
- { NULL }
-};
-
-static const kmt_p4_flavor_t kmt_p4_unknown = {
- "Unrecognized Intel Pentium 4",
- kmt_p4unk_msrs, NULL, 0,
- 0, 0, 0
-};
-
-/*ARGSUSED*/
-static void
-kmt_p4_destroy(kmt_cpu_t *cpu)
-{
- /* Leave LBR on */
-
- mdb_free(cpu, sizeof (kmt_cpu_t));
-}
-
-/*ARGSUSED*/
-static const char *
-kmt_p4_name(kmt_cpu_t *cpu)
-{
- return (kmt_cpu_p4.p4_flavor->p4f_name);
-}
-
-/*ARGSUSED*/
-static void
-kmt_p4_btf_clear(mdb_tgt_t *t, int id, void *arg)
-{
- kmt_cpu_p4_t *p4 = arg;
- kreg_t efl;
-
- p4->p4_debugctl &= ~DEBUGCTL_BTF;
-
- (void) kmdb_dpi_get_register("eflags", &efl);
- efl &= ~(1 << KREG_EFLAGS_TF_SHIFT);
- (void) kmdb_dpi_set_register("eflags", efl);
-}
-
-static int
-kmt_p4_step_branch(kmt_cpu_t *cpu, mdb_tgt_t *t)
-{
- kmt_cpu_p4_t *p4 = cpu->kmt_cpu_data;
- kreg_t efl;
-
- (void) kmdb_dpi_get_register("eflags", &efl);
- (void) kmdb_dpi_set_register("eflags",
- (efl | (1 << KREG_EFLAGS_TF_SHIFT)));
-
- p4->p4_debugctl |= DEBUGCTL_BTF;
-
- return (mdb_tgt_add_fault(t, KMT_TRAP_ALL,
- MDB_TGT_SPEC_HIDDEN | MDB_TGT_SPEC_TEMPORARY,
- kmt_p4_btf_clear, p4));
-}
-
-static kmt_cpu_ops_t kmt_p4_ops = {
- kmt_p4_destroy,
- kmt_p4_name,
- kmt_p4_step_branch
-};
-
-/*ARGSUSED*/
-static int
-kmt_p4_branches(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
-{
- const kmt_p4_flavor_t *p4f = kmt_cpu_p4.p4_flavor;
- intptr_t cpuid = DPI_MASTER_CPUID;
- uint_t tos;
- int verbose = FALSE;
-
- if (p4f->p4f_branches == NULL) {
- warn("branch tracing unavailable on unknown P4 CPU "
- "(model %x)\n", kmt_cpu_p4.p4_model);
- return (DCMD_ERR);
- }
-
- if (mdb_getopts(argc, argv,
- 'c', MDB_OPT_UINTPTR, &cpuid,
- 'v', MDB_OPT_SETBITS, TRUE, &verbose,
- NULL) != argc)
- return (DCMD_USAGE);
-
- ASSERT(!(p4f->p4f_lbrstk_num & (p4f->p4f_lbrstk_num - 1)));
-
- tos = (uintptr_t)kmdb_dpi_msr_get_by_cpu(cpuid, p4f->p4f_msr_tos);
- tos &= p4f->p4f_lbrstk_num - 1;
-
- mdb_printf("%<u>%-39s %-39s%</u>\n", "FROM", "TO");
-
- return (p4f->p4f_branches(p4f, tos, cpuid, verbose));
-}
-
-static const mdb_dcmd_t kmt_p4_dcmds[] = {
- { "branches", NULL, "describe the recently-taken branches",
- kmt_p4_branches },
- { NULL }
-};
-
-/*ARGSUSED*/
-const kmt_p4_flavor_t *
-cpu2flavor(uint_t vendor, uint_t family, uint_t model)
-{
- if (vendor != X86_VENDOR_Intel)
- return (NULL);
-
-#ifndef __amd64
- if (family == KMT_CPU_FAMILY_P6) {
- if (model == KMT_CPU_MODEL_PM_9 || model == KMT_CPU_MODEL_PM_D)
- return (&kmt_p6_m);
- else
- return (NULL);
- }
-
- if (family == KMT_CPU_FAMILY_P4 && model < 3)
- return (&kmt_p4_original);
-#endif /* !__amd64 */
-
- if (family == KMT_CPU_FAMILY_P4) {
- /*
- * If this is a model 3, then we've got a Prescott. On the
- * other hand, this could be the future, and Intel could have
- * released a whizzy new processor. Users shouldn't have to
- * wait for us to patch the debugger for each new P4 model,
- * so we'll try to use this CPU as a Prescott. In the past,
- * when Intel has changed the branch stack, they've done it by
- * moving the MSRs, returning #gp's for the old ones. Our
- * Prescott check will therefore be an attempt to read the
- * Prescott MSRs. This attempt should fail if Intel has changed
- * the branch stack again.
- */
- if (kmt_msr_validate(kmt_prp4_msrs))
- return (&kmt_p4_prescott);
- else
- return (&kmt_p4_unknown);
- }
-
- return (NULL);
-}
-
-kmt_cpu_t *
-kmt_cpu_p4_create(mdb_tgt_t *t)
-{
- uint_t vendor, family, model;
- kmt_cpu_t *cpu;
-
- if (kmdb_kdi_get_cpuinfo(&vendor, &family, &model) < 0)
- return (NULL); /* errno is set for us */
-
- if ((kmt_cpu_p4.p4_flavor = cpu2flavor(vendor, family, model)) ==
- NULL) {
- (void) set_errno(ENOTSUP);
- return (NULL);
- }
-
- kmt_cpu_p4.p4_model = model;
- kmt_cpu_p4.p4_debugctl = DEBUGCTL_LBR; /* enable LBR on resume */
-
- cpu = mdb_zalloc(sizeof (kmt_cpu_t), UM_SLEEP);
- cpu->kmt_cpu_ops = &kmt_p4_ops;
- cpu->kmt_cpu_data = &kmt_cpu_p4;
-
- kmdb_dpi_msr_add(kmt_cpu_p4.p4_flavor->p4f_msrs);
- (void) mdb_tgt_register_dcmds(t, kmt_p4_dcmds, MDB_MOD_FORCE);
-
- return (cpu);
-}
diff --git a/usr/src/cmd/mdb/intel/kmdb/kvm_isadep.c b/usr/src/cmd/mdb/intel/kmdb/kvm_isadep.c
index a76cc5ba3d..cc25f355f1 100644
--- a/usr/src/cmd/mdb/intel/kmdb/kvm_isadep.c
+++ b/usr/src/cmd/mdb/intel/kmdb/kvm_isadep.c
@@ -21,16 +21,15 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* isa-dependent portions of the kmdb target
*/
#include <kmdb/kvm.h>
-#include <kmdb/kvm_cpu.h>
#include <kmdb/kmdb_kdi.h>
#include <kmdb/kmdb_asmutil.h>
#include <mdb/mdb_debug.h>
@@ -101,14 +100,6 @@ kmt_step_out(mdb_tgt_t *t, uintptr_t *p)
return (mdb_isa_step_out(t, p, pc, fp, sp, instr));
}
-int
-kmt_step_branch(mdb_tgt_t *t)
-{
- kmt_data_t *kmt = t->t_data;
-
- return (kmt_cpu_step_branch(t, kmt->kmt_cpu));
-}
-
/*
* Return the address of the next instruction following a call, or return -1
* and set errno to EAGAIN if the target should just single-step.
@@ -356,19 +347,6 @@ kmt_wrmsr(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
return (DCMD_OK);
}
-int
-kmt_msr_validate(const kdi_msr_t *msr)
-{
- uint64_t val;
-
- for (/* */; msr->msr_num != 0; msr++) {
- if (kmt_rwmsr(msr->msr_num, &val, rdmsr) < 0)
- return (0);
- }
-
- return (1);
-}
-
/*ARGSUSED*/
ssize_t
kmt_write(mdb_tgt_t *t, const void *buf, size_t nbytes, uintptr_t addr)
diff --git a/usr/src/cmd/mdb/intel/kmdb/kvm_isadep.h b/usr/src/cmd/mdb/intel/kmdb/kvm_isadep.h
index e944c6ca8b..0f9f5f1935 100644
--- a/usr/src/cmd/mdb/intel/kmdb/kvm_isadep.h
+++ b/usr/src/cmd/mdb/intel/kmdb/kvm_isadep.h
@@ -21,13 +21,13 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
#ifndef _KVM_ISADEP_H
#define _KVM_ISADEP_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -45,7 +45,6 @@ extern int kmt_wrmsr(uintptr_t, uint_t, int, const mdb_arg_t *);
extern int kmt_rdpcicfg(uintptr_t, uint_t, int, const mdb_arg_t *);
extern int kmt_wrpcicfg(uintptr_t, uint_t, int, const mdb_arg_t *);
-extern int kmt_msr_validate(const kdi_msr_t *);
#ifdef __cplusplus
}
diff --git a/usr/src/cmd/mdb/intel/mdb/kvm_amd64dep.c b/usr/src/cmd/mdb/intel/mdb/kvm_amd64dep.c
index b3ecd9caed..b878fef855 100644
--- a/usr/src/cmd/mdb/intel/mdb/kvm_amd64dep.c
+++ b/usr/src/cmd/mdb/intel/mdb/kvm_amd64dep.c
@@ -21,10 +21,10 @@
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Libkvm Kernel Target Intel 64-bit component
*
@@ -138,7 +138,6 @@ const mdb_tgt_ops_t kt_amd64_ops = {
(int (*)()) mdb_tgt_notsup, /* t_run */
(int (*)()) mdb_tgt_notsup, /* t_step */
(int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_step_branch */
(int (*)()) mdb_tgt_notsup, /* t_next */
(int (*)()) mdb_tgt_notsup, /* t_cont */
(int (*)()) mdb_tgt_notsup, /* t_signal */
diff --git a/usr/src/cmd/mdb/intel/mdb/kvm_ia32dep.c b/usr/src/cmd/mdb/intel/mdb/kvm_ia32dep.c
index 3850fddd89..64cbaff939 100644
--- a/usr/src/cmd/mdb/intel/mdb/kvm_ia32dep.c
+++ b/usr/src/cmd/mdb/intel/mdb/kvm_ia32dep.c
@@ -21,10 +21,10 @@
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Libkvm Kernel Target Intel 32-bit component
*
@@ -138,7 +138,6 @@ const mdb_tgt_ops_t kt_ia32_ops = {
(int (*)()) mdb_tgt_notsup, /* t_run */
(int (*)()) mdb_tgt_notsup, /* t_step */
(int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_step_branch */
(int (*)()) mdb_tgt_notsup, /* t_next */
(int (*)()) mdb_tgt_notsup, /* t_cont */
(int (*)()) mdb_tgt_notsup, /* t_signal */
diff --git a/usr/src/cmd/mdb/sparc/kmdb/kvm_isadep.c b/usr/src/cmd/mdb/sparc/kmdb/kvm_isadep.c
index ad9fa6d940..2ee4aad89d 100644
--- a/usr/src/cmd/mdb/sparc/kmdb/kvm_isadep.c
+++ b/usr/src/cmd/mdb/sparc/kmdb/kvm_isadep.c
@@ -22,10 +22,10 @@
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* isa-dependent portions of the kmdb target
*/
@@ -377,13 +377,6 @@ kmt_step_out(mdb_tgt_t *t, uintptr_t *p)
return (0);
}
-/*ARGSUSED*/
-int
-kmt_step_branch(mdb_tgt_t *t)
-{
- return (set_errno(EMDB_TGTHWNOTSUP));
-}
-
static const char *
regno2name(int idx)
{
diff --git a/usr/src/cmd/mdb/sparc/mdb/kvm_v7dep.c b/usr/src/cmd/mdb/sparc/mdb/kvm_v7dep.c
index dcf9dd7ae3..fe0e7dc8a6 100644
--- a/usr/src/cmd/mdb/sparc/mdb/kvm_v7dep.c
+++ b/usr/src/cmd/mdb/sparc/mdb/kvm_v7dep.c
@@ -21,10 +21,10 @@
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Libkvm Kernel Target SPARC v7 component
*
@@ -404,7 +404,6 @@ const mdb_tgt_ops_t kt_sparcv7_ops = {
(int (*)()) mdb_tgt_notsup, /* t_run */
(int (*)()) mdb_tgt_notsup, /* t_step */
(int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_step_branch */
(int (*)()) mdb_tgt_notsup, /* t_next */
(int (*)()) mdb_tgt_notsup, /* t_cont */
(int (*)()) mdb_tgt_notsup, /* t_signal */
diff --git a/usr/src/cmd/mdb/sparc/mdb/kvm_v9dep.c b/usr/src/cmd/mdb/sparc/mdb/kvm_v9dep.c
index 68a3b8fb1e..c551fa6714 100644
--- a/usr/src/cmd/mdb/sparc/mdb/kvm_v9dep.c
+++ b/usr/src/cmd/mdb/sparc/mdb/kvm_v9dep.c
@@ -21,10 +21,10 @@
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Libkvm Kernel Target SPARC v9 component
*
@@ -217,7 +217,6 @@ const mdb_tgt_ops_t kt_sparcv9_ops = {
(int (*)()) mdb_tgt_notsup, /* t_run */
(int (*)()) mdb_tgt_notsup, /* t_step */
(int (*)()) mdb_tgt_notsup, /* t_step_out */
- (int (*)()) mdb_tgt_notsup, /* t_step_branch */
(int (*)()) mdb_tgt_notsup, /* t_next */
(int (*)()) mdb_tgt_notsup, /* t_cont */
(int (*)()) mdb_tgt_notsup, /* t_signal */