aboutsummaryrefslogtreecommitdiff
path: root/sys/i386/i386/db_trace.c
Commit message (Collapse)AuthorAgeFilesLines
* Create sys/reg.h for the common code previously in machine/reg.hAndrew Turner2021-08-301-1/+1
| | | | | | | | | | Move the common kernel function signatures from machine/reg.h to a new sys/reg.h. This is in preperation for adding PT_GETREGSET to ptrace(2). Reviewed by: imp, markj Sponsored by: DARPA, AFRL (original work) Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D19830
* ddb: replace watchpoint set/clear functionsMitchell Horne2021-03-291-14/+0
| | | | | | | | | | Use the new kdb variants. Print more specific error messages. Reviewed by: jhb, markj MFC after: 3 weeks Sponsored by: NetApp, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D29156
* x86: consolidate hw watchpoint logic into new fileMitchell Horne2021-03-191-168/+5
| | | | | | | | | | | | | | | | | | | This is a prerequisite to using these functions outside of ddb, but also provides some cleanup and minor refactoring. This code is almost entirely duplicated between the two implementations, the only significant difference being the lack of dbreg synchronization on i386. Cleanups are: - demote some internal functions to static - use the constant NDBREGS instead of a '4' literal - remove K&R definitions - some added comments Reviewed by: kib, jhb Sponsored by: NetApp, Inc. Sponsored by: Klara, Inc. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D29153
* i386: clean up empty lines in .c and .h filesMateusz Guzik2020-09-011-6/+0
| | | | Notes: svn path=/head/; revision=365072
* i386: stop guessing the address of the trap frame in ddb backtrace.Konstantin Belousov2019-11-121-24/+30
| | | | | | | | | | | | | | | Save the address of the trap frame in %ebp on kernel entry. This automatically provides it in struct i386_frame.f_frame to unwinder. While there, more accurately handle the terminating frames, Reviewed by: avg, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D22321 Notes: svn path=/head/; revision=354647
* teach db_nextframe/x86 about [X]xen_intr_upcall interrupt handlerAndriy Gapon2019-11-121-1/+2
| | | | | | | | | Discussed with: kib, royger MFC after: 3 weeks Sponsored by: Panzura Notes: svn path=/head/; revision=354638
* db_nextframe/i386: reduce the number of special frame typesAndriy Gapon2019-11-111-20/+25
| | | | | | | | | | | | | | | | | | | | | | | | | This change removes TRAP_INTERRUPT and TRAP_TIMERINT frame types. Their names are a bit confusing: trap + interrupt, what is that? The TRAP_TIMERINT name is too specific -- can it only be used for timer "trap-interrupts"? What is so special about them? My understanding of the code is that INTERRUPT, TRAP_INTERRUPT and TRAP_TIMERINT differ only in how an offset from callee's frame pointer to a trap frame on the stack is calculated. And that depends on a number of arguments that a special handler passes to a callee (a function with a normal C calling convention). So, this change makes that logic explicit and collapses all interrupt frame types into the INTERRUPT type. Reviewed by: markj Discussed with: kib, jhb MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D22303 Notes: svn path=/head/; revision=354627
* Use bool instead of boolean_t here. No reason to use boolean_t.Warner Losh2018-04-161-13/+13
| | | | | | | Also, stop passing FALSE to a bool parameter. Notes: svn path=/head/; revision=332564
* i386 4/4G split.Konstantin Belousov2018-04-131-31/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The change makes the user and kernel address spaces on i386 independent, giving each almost the full 4G of usable virtual addresses except for one PDE at top used for trampoline and per-CPU trampoline stacks, and system structures that must be always mapped, namely IDT, GDT, common TSS and LDT, and process-private TSS and LDT if allocated. By using 1:1 mapping for the kernel text and data, it appeared possible to eliminate assembler part of the locore.S which bootstraps initial page table and KPTmap. The code is rewritten in C and moved into the pmap_cold(). The comment in vmparam.h explains the KVA layout. There is no PCID mechanism available in protected mode, so each kernel/user switch forth and back completely flushes the TLB, except for the trampoline PTD region. The TLB invalidations for userspace becomes trivial, because IPI handlers switch page tables. On the other hand, context switches no longer need to reload %cr3. copyout(9) was rewritten to use vm_fault_quick_hold(). An issue for new copyout(9) is compatibility with wiring user buffers around sysctl handlers. This explains two kind of locks for copyout ptes and accounting of the vslock() calls. The vm_fault_quick_hold() AKA slow path, is only tried after the 'fast path' failed, which temporary changes mapping to the userspace and copies the data to/from small per-cpu buffer in the trampoline. If a page fault occurs during the copy, it is short-circuit by exception.s to not even reach C code. The change was motivated by the need to implement the Meltdown mitigation, but instead of KPTI the full split is done. The i386 architecture already shows the sizing problems, in particular, it is impossible to link clang and lld with debugging. I expect that the issues due to the virtual address space limits would only exaggerate and the split gives more liveness to the platform. Tested by: pho Discussed with: bde Sponsored by: The FreeBSD Foundation MFC after: 1 month Differential revision: https://reviews.freebsd.org/D14633 Notes: svn path=/head/; revision=332489
* Revert r323722. A better fix will be committed shortly, as well asKonstantin Belousov2017-09-281-1/+2
| | | | | | | | | | | | | | | | | | | | | | some still useful bits of the reverted revision. The problem with the committed fix is that there are still issues with returning from NMI, when NMI interrupted kernel in a moment where the kernel segments selectors were still not loaded into registers. If this happens, the NMI return would loose the userspace selectors because r323722 does not reload segment registers on return to kernel mode. Fixing the problem is complicated. Since an alternative approach to handle the original bug exists, it makes sence to stop adding more complexity. Discussed with: bde Sponsored by: The FreeBSD Foundation MFC after: 1 week Notes: svn path=/head/; revision=324078
* Fix handling of the segment registers on i386.Konstantin Belousov2017-09-181-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Suppose that userspace is executing with the non-standard segment descriptors. Then, until exception or interrupt handler executed SET_KERNEL_SEGS, kernel is still executing with user %ds, %es and %fs. If an interrupt occurs in this window, the interrupt handler is executed unsafely, relying on usability of the usermode registers. If the interrupt results in the context switch on return, the contamination of the kernel state spreads to the thread we switched to. As result, kernel data accesses might fault or, if only the base is changed, completely messed up. More, if the user segment was allocated in LDT, another thread might mark the descriptor as invalid before doreti code tried to reload them. In this case kernel panics. The issue exists for all exception entry points which use trap gate, and thus do not automatically disable interrupts on entry, and for lcall_handler. Fix is two-fold: first, we need to disable interrupts for all kernel entries, changing the IDT descriptor types from trap gate to interrupt gate. Interrupts are re-enabled not earlier than the kernel segments are loaded into the segment registers. Second, we only load the segment registers from the trap frame when returning to usermode. For the later, all interrupt return paths must happen through the doreti common code. There is no way to disable interrupts on call gate, which is the supposed mode of servicing for lcall $7,$0 syscalls. Change the LDT descriptor 0 into a code segment type and point it to the userspace trampoline which redirects the syscall to int $0x80. All the measures make the segment register handling similar to that of amd64. We do not apply amd64 optimizations of not reloading segment registers on return from the syscall. Reported by: Maxime Villard <max@m00nbsd.net> Tested by: pho (the non-lcall part) Reviewed by: jhb Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D12402 Notes: svn path=/head/; revision=323722
* Don't access the reserved registers %dr4 and %dr5 on i386.Bruce Evans2017-03-171-7/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On the original i386, %dr[4-5] were unimplemented but not very clearly reserved, so debuggers read them to print them. i386 was still doing this. On the original athlon64, %dr[4-5] are documented as reserved but are aliased to %dr[6-7] unless CR4_DE is set, when accessing them traps. On 2 of my systems, accessing %dr[4-5] trapped sometimes. On my Haswell system, the apparent randomness was because the boot CPU starts with CR4_DE set while all other CPUs start with CR4_DE clear. FreeBSD doesn't support the data breakpoints enabled by CR4_DE and it never changes this flag, so the flag remains different across CPUs and the behaviour seemed inconsistent except while booting when the CPU doesn't change. The invalid accesses broke: - read access for printing the registers in ddb "show watches" on CPUs with CR4_DE set - read accesses in fill_dbregs() on CPUs with CR4_DE set. This didn't implement panic(3) since the user case always skipped %dr[4-5]. - write accesses in set_dbregs(). This also didn't affect userland. When it didn't trap, the aliasing made it fragile. Don't print the dummy (zero) values of %dr[4-5] in "show watches" for i386 or amd64. Fix style bugs near this printing. amd64 also has space in the dbregs struct for the reserved %dr[8-15] and already didn't print the dummy values for these, and never accessed any of the 10 reserved debug registers. Remove cpufuncs for making the invalid accesses. Even amd64 had these. Notes: svn path=/head/; revision=315454
* Determine the operand/address size of %cs in a new functionBruce Evans2016-09-251-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | db_segsize(). Use db_segsize() to set the default operand/address size for disassembling. Allow overriding this with the "alternate" display format /I. The API of db_disasm() should be debooleanized to pass a more general request (amd64 needs overrides to sizes of 16, 32, and 64, but this commit doesn't implement anything for amd64 since much larger changes are needed to restore the amd64 disassmbler's support for non-default sizes). Fix db_print_loc_and_inst() to ask for the normal format and not the alternate in normal operation. This is most useful for vm86 mode, but also works for 16-bit protected mode. Use db_segsize() to avoid trying to print a garbage stack trace if %cs is 16 bits. Print something like the stack trace termination message for a trap boundary instead. Document that the alternate format is now useful on i386. Notes: svn path=/head/; revision=306311
* Use the MI macro TRAPF_USERMODE() instead of open-coded checks forBruce Evans2016-09-141-7/+6
| | | | | | | | | | | | | | | | | | | | | | | | | SEL_UPL and sometimes PSL_VM. This is just a style change on amd64, but on i386 it fixes 1 unimportant place where the PSL_VM check was missing and starts fixing 1 important place where the PSL_VM check had a logic error. Fix logic errors in treating vm86 bioscall mode as kernel mode. The main place checked all the necessary flags, but put the necessary parentheses for the PSL_VM and PCB_VM86CALL checks in the wrong place. The broken case is only reached if a vm86 bioscall uses a %cs which is nonzero mod 4, but that is unusual -- most bios calls start with %cs = 0xc000 or 0xf000 and rarely change it. Another place was missing the check for PCB_VM86CALL, but was only reachable if there are bugs virtualizing PSL_I. Add a macro TF_HAS_STACKREGS() and use this instead of converting open-coded checks of SEL_UPL, etc. to TRAPF_USERMODE() when we only care about whether the frame has stack registers. This fixes 3 places in my recent fix for register variables in vm86 mode where I messed up the PSL_VM check and cleans up other places. Notes: svn path=/head/; revision=305807
* Fix the variables $esp, $ds, $es, $fs, $gs and $ss in vm86 mode.Bruce Evans2016-08-141-5/+36
| | | | | | | | | | | | | | | | Fix PC_REGS() so that printing of instructions works in some useful cases. ddb only understands a single flat address space, but this macro allows mapping $cs:$eip into vm86's flat address space well enough for the MI parts of ddb. This doesn't work for the MD parts that do stack traces, and there are no similar macros for data addresses. PC_REGS() has to use the trapframe pointer instead of the pcb for this. For other CPUs, the trapframe pointer is not available except by tracing back to it. But tracing back through vm86 trapframes is broken even starting with one. Notes: svn path=/head/; revision=304085
* Various changes to the registers displayed in DDB for x86.John Baldwin2015-07-221-45/+35
| | | | | | | | | | | | | | | | | | | - Fix segment registers to only display the low 16 bits. - Remove unused handlers and entries for the debug registers. - Display xcr0 (if valid) in 'show sysregs'. - Add '0x' prefix to MSR values to match other values in 'show sysregs'. - MFamd64: Display various MSRs in 'show sysregs'. - Add a 'show dbregs' to display the value of debug registers. - Dynamically size the column width for register values to properly align columns on 64-bit platforms. - Display %gs for i386 in 'show registers'. Differential Revision: https://reviews.freebsd.org/D2784 Reviewed by: kib, markj MFC after: 2 weeks Notes: svn path=/head/; revision=285783
* Let the unwinder handle faults during function prologues or epilogues.Mark Johnston2015-07-211-1/+3
| | | | | | | | | | | | | | | | | | | | | The i386 and amd64 DDB stack unwinders contain code to detect and handle the case where the first frame is not completely set up or torn down. This code was accidentally unused however, since db_backtrace() was never called with a non-NULL trap frame. This change fixes that. Also remove get_rsp() from the amd64 code. It appears to have come from i386, which needs to take into account whether the exception triggered a CPL switch, since SS:ESP is only pushed onto the stack if so. On amd64, SS:RSP is pushed regardless, so get_rsp() was doing the wrong thing for kernel-mode exceptions. As a result, we can also remove custom print functions for these registers. Reviewed by: jhb Sponsored by: EMC / Isilon Storage Division Differential Revision: https://reviews.freebsd.org/D2881 Notes: svn path=/head/; revision=285776
* Improve stack unwinding on i386 and amd64 after an IP fault.Mark Johnston2015-07-211-5/+18
| | | | | | | | | | | | | | | | If we can't find a symbol corresponding to the faulting instruction, assume that the previously-executed function is a call and attempt to find the calling function using the return address on the stack. Otherwise we end up associating the last stack frame with the current call, which is incorrect and causes the unwinder to skip printing of the calling function, resulting in a confusing backtrace. Reviewed by: jhb Sponsored by: EMC / Isilon Storage Division Differential Revision: https://reviews.freebsd.org/D2859 Notes: svn path=/head/; revision=285775
* Remove lazy pmap switch code from i386. Naive benchmark with md(4)Konstantin Belousov2015-04-181-2/+1
| | | | | | | | | | | | | | shows no difference with the code removed. On both amd64 and i386, assert that a released pmap is not active. Proposed and reviewed by: alc Discussed with: Svatopluk Kraus <onwahe@gmail.com>, peter Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Notes: svn path=/head/; revision=281707
* Print the frame addresses for the backtraces on i386 and amd64. ItKonstantin Belousov2012-12-031-6/+11
| | | | | | | | | | | allows both to inspect the frame sizes and to manually peek into the frames from ddb, if needed. Reviewed by: dim MFC after: 2 weeks Notes: svn path=/head/; revision=243836
* Frames created by the Xcpustop, Xrendezvous, Xipi_intr_bitmap_handlerKonstantin Belousov2008-09-271-2/+7
| | | | | | | | | | | | | | and Xlazypmap differ from the frame for Xtimerint. The Xtimerint puts pointer to the frame between return address and frame body, while rest of the functions listed above do not. Correct offset calculation to allow the ddb backtrace to step over such frames. Noted and reviewed by: tegge Tested by: pho MFC after: 1 week Notes: svn path=/head/; revision=183413
* Break out stack(9) from ddb(4):Robert Watson2007-12-021-39/+1
| | | | | | | | | | | | | | | | | | | | | | | - Introduce per-architecture stack_machdep.c to hold stack_save(9). - Introduce per-architecture machine/stack.h to capture any common definitions required between db_trace.c and stack_machdep.c. - Add new kernel option "options STACK"; we will build in stack(9) if it is defined, or also if "options DDB" is defined to provide compatibility with existing users of stack(9). Add new stack_save_td(9) function, which allows the capture of a stacktrace of another thread rather than the current thread, which the existing stack_save(9) was limited to. It requires that the thread be neither swapped out nor running, which is the responsibility of the consumer to enforce. Update stack(9) man page. Build tested: amd64, arm, i386, ia64, powerpc, sparc64, sun4v Runtime tested: amd64 (rwatson), arm (cognet), i386 (rwatson) Notes: svn path=/head/; revision=174195
* Unbreak ddb stepping over special frames after the following commit:Konstantin Belousov2007-02-191-2/+2
| | | | | | | | | | | | | | | | | | | | Revision Changes Path 1.113 +4 -2 src/sys/i386/i386/apic_vector.s 1.117 +7 -1 src/sys/i386/i386/exception.s 1.36 +7 -7 src/sys/i386/i386/local_apic.c 1.298 +61 -63 src/sys/i386/i386/trap.c 1.62 +15 -22 src/sys/i386/i386/vm86.c 1.32 +4 -2 src/sys/i386/i386/vm86bios.s 1.21 +2 -2 src/sys/i386/include/apicvar.h 1.27 +2 -2 src/sys/i386/isa/atpic.c 1.50 +2 -1 src/sys/i386/isa/atpic_vector.s 1.35 +1 -1 src/sys/i386/isa/icu.h Tested by: kris, Peter Holm No objections from: kmacy Notes: svn path=/head/; revision=166825
* - Add macro constants for the various fields in %dr7 and use them in placeJohn Baldwin2006-11-171-28/+31
| | | | | | | | | | of various scattered magic values. - Pretty print the address of hardware watchpoints in 'show watch' rather than just displaying hex. - Expand address field width on amd64 for 64-bit pointers. Notes: svn path=/head/; revision=164362
* A few more style fixes.John Baldwin2006-11-171-5/+4
| | | | Notes: svn path=/head/; revision=164357
* Various whitespace and style fixes.John Baldwin2006-11-151-36/+35
| | | | Notes: svn path=/head/; revision=164303
* Don't show debug registers in "show registers". Special registers shouldBruce Evans2006-10-201-1/+2
| | | | | | | | | | be displayed specially, and debug registers are among of the least interesting special registers (far behind %cr3). The debug registers are still accessible as variables and displayed in another bogus place ("show watches"). Notes: svn path=/head/; revision=163534
* Simplify the pager support in DDB. Allowing different db commands toJohn Baldwin2006-07-121-4/+2
| | | | | | | | | | | | | | | | | | | install custom pager functions didn't actually happen in practice (they all just used the simple pager and passed in a local quit pointer). So, just hardcode the simple pager as the only pager and make it set a global db_pager_quit flag that db commands can check when the user hits 'q' (or a suitable variant) at the pager prompt. Also, now that it's easy to do so, enable paging by default for all ddb commands. Any command that wishes to honor the quit flag can do so by checking db_pager_quit. Note that the pager can also be effectively disabled by setting $lines to 0. Other fixes: - 'show idt' on i386 and pc98 now actually checks the quit flag and terminates early. - 'show intr' now actually checks the quit flag and terminates early. Notes: svn path=/head/; revision=160312
* The i386 "call" instruction works as follows: it pushesYaroslav Tykhiy2006-06-181-3/+25
| | | | | | | | | | | | | | | | | | | | | the return address on the stack and only then "dereferences" %pc. Therefore, in the case of a call to an invalid address, we arrive to the trap handler with the invalid value in tf_eip. This used to prevent db_backtrace() from assigning the most recent and interesting frame on the stack to the right spot in the right function, from which the invalid call was attempted. Try to detect and work around that by recovering the return address from the stack. The work-around requires the fault address be passed to db_backtrace(). Smuggle it as tf_err. MFC after: 1 month Sponsored by: RiNet (Cronyx Plus LLC) Notes: svn path=/head/; revision=159723
* Return -1 from db_numargs() if number of args couldn't be guessed.Yaroslav Tykhiy2006-06-161-4/+8
| | | | | | | | | | Use this later to indicate in backtrace output that args shown are uncertain. Sponsored by: RiNet (Cronyx Plus LLC) Notes: svn path=/head/; revision=159659
* Guess the number of arguments to a function somewhat better.Yaroslav Tykhiy2006-06-161-4/+8
| | | | | | | | | | | Now GCC likes to stick a "mov %eax, %FOO" instruction before "addl $BAR, %esp" if the function just called returns an int, which is a very common case in the kernel. Sponsored by: RiNet (Cronyx Plus LLC) Notes: svn path=/head/; revision=159657
* - Improve the INKERNEL macro such that it can no longer give false positives.Jeff Roberson2005-12-231-1/+6
| | | | | | | | | This fixes the stack(9) functionality. Submitted by: Antoine Brodin <antoine.brodin@laposte.net> Notes: svn path=/head/; revision=153694
* Change the i386 code to pass the interrupt vector as a separate argumentJohn Baldwin2005-12-051-0/+9
| | | | | | | | | | | | | | | | | | | | | | rather than embedding it in the intrframe as if_vec. This reduces diffs with amd64 somewhat. - Remove cf_vec from clockframe (it wasn't used anyway) and stop pushing dummy vector arguments for ipi_bitmap_handler() and lapic_handle_timer() since clockframe == trapframe now. - Fix ddb to handle stack traces across interrupt entry points that just have a trapframe on their stack and not a trapframe + vector. - Change intr_execute_handlers() to take a trapframe rather than an intrframe pointer. - Change lapic_handle_intr() and atpic_handle_intr() to take a vector and trapframe rather than an intrframe. - GC struct intrframe now that nothing uses it anymore. - GC CLOCK_TO_TRAPFRAME() and INTR_TO_TRAPFRAME(). Reviewed by: bde Requested by: peter Notes: svn path=/head/; revision=153146
* Move the prototypes of db_md_set_watchpoint(), db_md_clr_watchpoint()Marcel Moolenaar2005-09-101-3/+0
| | | | | | | and db_md_list_watchpoints() to ddb/ddb.h. Notes: svn path=/head/; revision=149925
* - Add support for saving stack traces and displaying them via printf(9)Jeff Roberson2005-08-031-0/+23
| | | | | | | | | | and KTR. Contributed by: Antoine Brodin <antoine.brodin@laposte.net> Concept code from: Neal Fachan <neal@isilon.com> Notes: svn path=/head/; revision=148666
* Unbreak stack traces across double faults. In a particular edge caseJohn Baldwin2005-01-181-2/+8
| | | | | | | | | | | | | | | (calling a __dead2 function such as panic() at the end of a function), the saved %eip on the stack will actually not be part of the function that executed a call instruction but instead will be the first instruction of the next function in the text. This happens with dblfault_handler() and syscall() for example. Work around this in the one place it matters by looking at the saved %eip - 1 to determine the calling function when we check for "magic" frames. MFC after: 2 weeks Notes: svn path=/head/; revision=140401
* Start all license/copyright notice comments with /*-, per traditionWarner Losh2005-01-051-1/+1
| | | | Notes: svn path=/head/; revision=139724
* - Change the ddb paging "support" to use a variable (db_lines_per_page) toJohn Baldwin2004-11-011-1/+1
| | | | | | | | | | | | | | | | | | | | control the number of lines per page rather than a constant. The variable can be examined and changed in ddb as '$lines'. Setting the variable to 0 will effectively turn off paging. - Change db_putchar() to force out pending whitespace before outputting newlines and carriage returns so that one can rub out content on the current line via '\r \r' type strings. - Change the simple pager to rub out the --More-- prompt explicitly when the routine exits. - Add some aliases to the simple pager to make it more compatible with more(1): 'e' and 'j' do a single line. 'd' does half a page, and 'f' does a full page. MFC after: 1 month Inspired by: kris Notes: svn path=/head/; revision=137117
* - Add support for "paging" in stack trace output. That is, when you doJohn Baldwin2004-09-201-2/+4
| | | | | | | | | | | | | | | | a stack trace from ddb, the output will pause with a '--More--' prompt every 18 lines. If you hit Enter, it will print another line and prompt again. If you hit space it will output another page and then prompt. If you hit 'q' or 'x' it will abort the rest of the stack trace. - Fix the sparc64 userland stack trace to honor the total count of lines to print. This is useful if your trace happens to walk back onto 0xdeadc0de and gets stuck in an endless loop. MFC after: 1 month Tested on: i386, alpha, sparc64 Notes: svn path=/head/; revision=135529
* Teach the stack trace code how to step across a double fault when steppingJohn Baldwin2004-09-091-0/+20
| | | | | | | | | | | | across frames. Basically, if the current frame is for the 'dblfault_handler' function, then get the next %eip and %ebp values to use from the original TSS of the thread that has the saved state when the double fault triggered. MFC after: 4 days Notes: svn path=/head/; revision=135008
* Unify db_stack_trace_cmd(). All it did was look up the thread givenMarcel Moolenaar2004-07-211-14/+0
| | | | | | | | | | | | | | | | | | the thread ID and call db_trace_thread(). Since arm has all the logic in db_stack_trace_cmd(), rename the new DB_COMMAND function to db_stack_trace to avoid conflicts on arm. While here, have db_stack_trace parse its own arguments so that we can use a more natural radix for IDs. If the ID is not a thread ID, or more precisely when no thread exists with the ID, try if there's a process with that ID and return the first thread in it. This makes it easier to print stack traces from the ps output. requested by: rwatson@ tested on: amd64, i386, ia64 Notes: svn path=/head/; revision=132482
* Mega update for the KDB framework: turn DDB into a KDB backend.Marcel Moolenaar2004-07-101-218/+181
| | | | | | | | | | | | | | | | | | | Most of the changes are a direct result of adding thread awareness. Typically, DDB_REGS is gone. All registers are taken from the trapframe and backtraces use the PCB based contexts. DDB_REGS was defined to be a trapframe on all platforms anyway. Thread awareness introduces the following new commands: thread X switch to thread X (where X is the TID), show threads list all threads. The backtrace code has been made more flexible so that one can create backtraces for any thread by giving the thread ID as an argument to trace. With this change, ia64 has support for breakpoints. Notes: svn path=/head/; revision=131952
* Update names of entry points for interrupt frames.John Baldwin2003-11-031-2/+2
| | | | Notes: svn path=/head/; revision=121989
* Fix copyright comment & FBSDID style nits.David E. O'Brien2003-08-251-1/+0
| | | | | | | Requested by: bde Notes: svn path=/head/; revision=119452
* Use __FBSDID().David E. O'Brien2003-06-021-1/+3
| | | | Notes: svn path=/head/; revision=115683
* Remove break after return;Poul-Henning Kamp2003-05-311-2/+2
| | | | | | | Found by: FlexeLint Notes: svn path=/head/; revision=115545
* Add code to ddb to allow backtracing an arbitrary thread.Julian Elischer2002-12-281-2/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | (show thread {address}) Remove the IDLE kse state and replace it with a change in the way threads sahre KSEs. Every KSE now has a thread, which is considered its "owner" however a KSE may also be lent to other threads in the same group to allow completion of in-kernel work. n this case the owner remains the same and the KSE will revert to the owner when the other work has been completed. All creations of upcalls etc. is now done from kse_reassign() which in turn is called from mi_switch or thread_exit(). This means that special code can be removed from msleep() and cv_wait(). kse_release() does not leave a KSE with no thread any more but converts the existing thread into teh KSE's owner, and sets it up for doing an upcall. It is just inhibitted from being scheduled until there is some reason to do an upcall. Remove all trace of the kse_idle queue since it is no-longer needed. "Idle" KSEs are now on the loanable queue. Notes: svn path=/head/; revision=108338
* Change the definition of the debugging registers to be an array, soPoul-Henning Kamp2002-10-201-10/+10
| | | | | | | | | | that we can index into it, rather than do pointer gymnastics on a structure containing 8 elements. Verified by: MD5 hash on the produced .o files. Notes: svn path=/head/; revision=105554
* fork_trampoline() marks a trap frame.John Baldwin2002-09-201-1/+2
| | | | | | | Submitted by: bde Notes: svn path=/head/; revision=103682
* Use proper type for a variable used as a DDB symbol.John Baldwin2002-09-201-1/+2
| | | | Notes: svn path=/head/; revision=103681