Print this page
9210 remove KMDB branch debugging support
9211 ::crregs could do with cr2/cr3 support
9209 ::ttrace should be able to filter by thread
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
*** 20,33 ****
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
- #pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Debugger entry for both master and slave CPUs
*/
#if defined(__lint)
--- 20,33 ----
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
*/
/*
* Debugger entry for both master and slave CPUs
*/
#if defined(__lint)
*** 75,92 ****
1:
/*
* Given the address of the current CPU's cpusave area in %edi, the following
* macro restores the debugging state to said CPU. Restored state includes
! * the debug registers from the global %dr variables, and debugging MSRs from
! * the CPU save area. This code would be in a separate routine, but for the
! * fact that some of the MSRs are jump-sensitive. As such, we need to minimize
! * the number of jumps taken subsequent to the update of said MSRs. We can
! * remove one jump (the ret) by using a macro instead of a function for the
! * debugging state restoration code.
! *
! * Takes the cpusave area in %edi as a parameter, clobbers %eax-%edx
*/
#define KDI_RESTORE_DEBUGGING_STATE \
leal kdi_drreg, %ebx; \
\
pushl DR_CTL(%ebx); \
--- 75,85 ----
1:
/*
* Given the address of the current CPU's cpusave area in %edi, the following
* macro restores the debugging state to said CPU. Restored state includes
! * the debug registers from the global %dr variables.
*/
#define KDI_RESTORE_DEBUGGING_STATE \
leal kdi_drreg, %ebx; \
\
pushl DR_CTL(%ebx); \
*** 115,166 ****
addl $8, %esp; \
\
pushl DRADDR_OFF(3)(%ebx); \
pushl $3; \
call kdi_dreg_set; \
! addl $8, %esp; \
! \
! /* \
! * Write any requested MSRs. \
! */ \
! movl KRS_MSR(%edi), %ebx; \
! cmpl $0, %ebx; \
! je 3f; \
! 1: \
! movl MSR_NUM(%ebx), %ecx; \
! cmpl $0, %ecx; \
! je 3f; \
! \
! movl MSR_TYPE(%ebx), %edx; \
! cmpl $KDI_MSR_WRITE, %edx; \
! jne 2f; \
! \
! movl MSR_VALP(%ebx), %edx; \
! movl 0(%edx), %eax; \
! movl 4(%edx), %edx; \
! wrmsr; \
! 2: \
! addl $MSR_SIZE, %ebx; \
! jmp 1b; \
! 3: \
! /* \
! * We must not branch after re-enabling LBR. If \
! * kdi_wsr_wrexit_msr is set, it contains the number \
! * of the MSR that controls LBR. kdi_wsr_wrexit_valp \
! * contains the value that is to be written to enable \
! * LBR. \
! */ \
! movl kdi_msr_wrexit_msr, %ecx; \
! cmpl $0, %ecx; \
! je 1f; \
! \
! movl kdi_msr_wrexit_valp, %edx; \
! movl 0(%edx), %eax; \
! movl 4(%edx), %edx; \
! \
! wrmsr; \
! 1:
#define KDI_RESTORE_REGS() \
/* Discard savfp and savpc */ \
addl $8, %esp; \
popl %ss; \
--- 108,118 ----
addl $8, %esp; \
\
pushl DRADDR_OFF(3)(%ebx); \
pushl $3; \
call kdi_dreg_set; \
! addl $8, %esp;
#define KDI_RESTORE_REGS() \
/* Discard savfp and savpc */ \
addl $8, %esp; \
popl %ss; \
*** 372,396 ****
* for the slaves - they'll be sent here in response to a cross-call sent by the
* master.
*/
#if defined(__lint)
- char kdi_slave_entry_patch;
-
void
kdi_slave_entry(void)
{
}
#else /* __lint */
- .globl kdi_slave_entry_patch;
-
ENTRY_NP(kdi_slave_entry)
- /* kdi_msr_add_clrentry knows where this is */
- kdi_slave_entry_patch:
- KDI_MSR_PATCH;
-
/*
* Cross calls are implemented as function calls, so our stack
* currently looks like one you'd get from a zero-argument function
* call. There's an %eip at %esp, and that's about it. We want to
* make it look like the master CPU's stack. By doing this, we can
--- 324,340 ----
*** 540,579 ****
movl %eax, KRS_DROFF(3)(%edi)
movl %edi, %eax
popl %edi
- /*
- * Save any requested MSRs.
- */
- movl KRS_MSR(%eax), %ecx
- cmpl $0, %ecx
- je no_msr
-
- pushl %eax /* rdmsr clobbers %eax */
- movl %ecx, %ebx
- 1:
- movl MSR_NUM(%ebx), %ecx
- cmpl $0, %ecx
- je msr_done
-
- movl MSR_TYPE(%ebx), %edx
- cmpl $KDI_MSR_READ, %edx
- jne msr_next
-
- rdmsr /* addr in %ecx, value into %edx:%eax */
- movl %eax, MSR_VAL(%ebx)
- movl %edx, _CONST(MSR_VAL + 4)(%ebx)
-
- msr_next:
- addl $MSR_SIZE, %ebx
- jmp 1b
-
- msr_done:
- popl %eax
-
- no_msr:
clr %ebp /* stack traces should end here */
pushl %eax
call kdi_debugger_entry
popl %eax
--- 484,493 ----