#
ef9e2f62 |
|
22-Sep-2023 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel/arch: Make arch_debug_get_caller() a macro implemented by a builtin. Only the x86 and PPC implementations look like they would have worked, while the builtin is available and will work across all architectures. We already use it unconditionally in some parts of libroot. Change-Id: I2dffb3b2c7cdd605092382b9d649151adb921bb4 Reviewed-on: https://review.haiku-os.org/c/haiku/+/6942 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
24df6592 |
|
11-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged signals-merge branch into trunk with the following changes: * Reorganized the kernel locking related to threads and teams. * We now discriminate correctly between process and thread signals. Signal handlers have been moved to teams. Fixes #5679. * Implemented real-time signal support, including signal queuing, SA_SIGINFO support, sigqueue(), sigwaitinfo(), sigtimedwait(), waitid(), and the addition of the real-time signal range. Closes #1935 and #2695. * Gave SIGBUS a separate signal number. Fixes #6704. * Implemented <time.h> clock and timer support, and fixed/completed alarm() and [set]itimer(). Closes #5682. * Implemented support for thread cancellation. Closes #5686. * Moved send_signal() from <signal.h> to <OS.h>. Fixes #7554. * Lots over smaller more or less related changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42116 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9536ec02 |
|
03-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Reimplemented the gdb stub support for the 'g' command (read registers): * Added an arch_debug_gdb_get_registers() interface that is supposed to provide the register values in the format expected by gdb and implemented it for x86. * Reimplemented gdb_regreply() to use that. Also made it buffer overflow safe. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41880 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4535495d |
|
10-Jan-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged the signals branch into trunk, with these changes: * The team and thread kernel structures have been renamed to Team and Thread respectively and moved into the new BKernel namespace. * Several (kernel add-on) sources have been converted from C to C++ since private kernel headers are included that are no longer C compatible. Changes after merging: * Fixed gcc 2 build (warnings mainly in the scary firewire bus manager). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7656ad6b |
|
27-Jun-2010 |
Andreas Färber <andreas.faerber@web.de> |
kernel_ppc: Use saved register state for stack trace of current thread Suggested by Ingo in ticket #6139. This shortens the stack trace and makes it independent of whether called implicitly on KDL entry or manually from the kernel debugger prompt. For a kernel panic, "panic" is now the top-most frame printed. Closes ticket #6160. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37282 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d46ce4d6 |
|
27-Jun-2010 |
Andreas Färber <andreas.faerber@web.de> |
kernel_ppc: Save caller's stack pointer in arch_debug_save_registers Suggested by Ingo in ticket #6139. Code is adapted from x86. Note that on ppc64 GPR1 needs to be 64-bit, thus the choice of addr_t. Resolves part of ticket #6160. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37281 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e845f05e |
|
06-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Patch by Andreas Faerber: stack_trace(): Skip stack_trace() itself in the stack trace. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37033 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
48f2523d |
|
06-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Patch by Andreas Faerber: Implemented arch_debug_get_caller(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37032 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3329d8c0 |
|
05-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Patch by Andreas Faerber: Implemented arch_debug_call_with_fault_handler(). That makes the automatic stack traces in case of kernel panics work. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37021 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c3676b54 |
|
13-Apr-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added vm_debug_copy_page_memory() which copies memory from a potentially not mapped page. * debug_{mem,strl}cpy(): - Added "team" parameter for specifying the address space the address are to be interpreted in. - When the standard memcpy() (with fault handler) fails, fall back to vm_debug_copy_page_memory(). * Added debug_is_debugged_team(): Predicate returning true, if the supplied team_id refers to the same team debug_get_debugged_thread() belongs to. * Added DebuggedThreadSetter class for scope-based debug_set_debugged_thread(). Made use of it in several debugger functions. * print_demangled_call() (x86): Fixed unsafe memory access. Allows KDL stack traces to work correctly again, even if the page daemon has already unmapped the concerned pages. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36230 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
cfefeee3 |
|
18-Mar-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Changed arch_debug_save_registers() to take an arch-specific structure arch_debug_registers instead. * Call arch_debug_save_registers() on all CPUs when entering the kernel debugger. * Added debug_get_debug_registers() to return a specified CPU's saved registers. * x86: - Replaced the previous arch_debug_save_registers() implementation. Disabled getting the registers via the gdb interface for the time being. - Fixed the "sc", "call", and "calling" commands to also work for threads running on another CPU. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35907 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a38f8503 |
|
22-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* arch_debug_get_stack_trace(): - Replaced the "userOnly" parameter by a "flags" parameter, that allows to specify kernel and userland stack traces individually. - x86, m68k: Don't always skip the first frame as that prevents the caller from being able to record its own address. * capture_tracing_stack_trace(): Replaced the "userOnly" parameter by "kernelOnly", since one is probably always interested in the kernel stack trace, but might not want the userland stack trace. * Added stack trace support for VM cache kernel tracing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34742 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b2a7fcb4 |
|
18-Oct-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Added an arch_debug_stack_trace() function that is called from the KDL loop in case there aren't any KDL commands available yet. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33642 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ea2abd11 |
|
02-Aug-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed the ROUNDOWN macro to ROUNDDOWN. Also changed the implementation of ROUNDUP to use '*' and '/' -- the compiler will optimize that for powers of two anyway and this implementation works for other numbers as well. * The thread::fault_handler use in C[++] code was broken with gcc 4. At least when other functions were invoked. Trying to trick the compiler wasn't a particularly good idea anyway, since the next compiler version could break the trick again. So the general policy is to use the fault handlers only in assembly code where we have full control. Changed that for x86 (save for the vm86 mode, which has a similar mechanism), but not for the other architectures. * Introduced fault_handler, fault_handler_stack_pointer, and fault_jump_buffer fields in the cpu_ent structure, which must be used instead of thread::fault_handler in the kernel debugger. Consequently user_memcpy() must not be used in the kernel debugger either. Introduced a debug_memcpy() instead. * Introduced debug_call_with_fault_handler() function which calls a function in a setjmp() and fault handler context. The architecture specific backend arch_debug_call_with_fault_handler() has only been implemented for x86 yet. * Introduced debug_is_kernel_memory_accessible() for use in the kernel debugger. It determines whether a range of memory can be accessed in the way specified. The architecture specific back end arch_vm_translation_map_is_kernel_page_accessible() has only been implemented for x86 yet. * Added arch_debug_unset_current_thread() (only implemented for x86) to unset the current thread pointer in the kernel debugger. When entering the kernel debugger we do some basic sanity checks of the currently set thread structure and unset it, if they fail. This allows certain commands (most importantly the stack trace command) to avoid accessing the thread structure. * x86: When handling a double fault, we do now install a special handler for page faults. This allows us to gracefully catch faulting commands, even if e.g. the thread structure is toast. We are now in much better shape to deal with double faults. Hopefully avoiding the triple faults that some people have been experiencing on their hardware and ideally even allowing to use the kernel debugger normally. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32073 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6a1f462e |
|
24-Jun-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* arch_debug_get_interrupt_pc() does now optionally return whether the iframe is a syscall iframe. * User debugger support: Don't to call BreakpointManager::PrepareToContinue(), if the thread returns from a syscall. We don't want to skip breakpoints in that case. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31223 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e670fc6f |
|
15-Sep-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added new parameter "skipIframes" to arch_debug_get_stack_trace(). That many iframes are supposed to be skipped before recording the stack trace. Currently implemented for x86 only. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27529 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
18f2a9c1 |
|
24-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added support for architecture specific debug variables, e.g. for referencing iframe registers. Their prefix is "$". E.g. "$eax" refers to the eax register of the current iframe. The features cooperates with the "in_context" command, i.e. "in_context 92 $eip = 0" will set the eip register of thread 92 to 0 (thus sealing its fate ;-)). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27192 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0739b87e |
|
22-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added arch_debug_get_interrupt_pc(), which is supposed to return the PC of the innermost iframe. * The "in_context" command does now set the currently debugged thread respectively. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27166 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
57f2b5a0 |
|
05-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Changed the meaning of the {KERNEL,USER}_STACK_SIZE macros to not include the guard pages. Adjusted the kernel and boot loader code accordingly -- the guard pages size is added/not removed respectively. The stack size passed to _kern_spawn_thread() is now the actually usable size, and it is no longer possible to specify a size smaller than or equal to the guard pages size. * vm_create_anonymous_area(): Precommit two pages maximum -- a stack with only one page usable size obviously doesn't need two pages. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26819 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
758962ec |
|
26-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added arch_debug_contains_call() function that returns wether or not a call chain contains a specific symbol (or address). * Added a new KDL command "calling" that you can use to get a list of threads that have a specific function in their call chain. * Removed extraneous white space. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24594 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
962b0b88 |
|
01-Apr-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added a wrapper function for the invocation of debugger commands. It sets a fault handler, so that an invalid memory access while executing the command (address typos always do the trick :-) won't result in another KDL session on top of the current one, which wouldn't even be "cont"able. All pieces of code setting a fault handler do now save and reset the previous one, so that e.g. a user_memcpy() in a debugger command doesn't disturb the mechanism. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20500 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7afc16f0 |
|
12-Jan-2006 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Fixed a bug regarding storing/restoring FPSCR in the interrupt code. The stack pointer was not adjusted, hence we were overwriting the previous register value. But it looks like I missed to check in the arch_cpu.h with the iframe structure including the floating point registers anyway. * Backported the ELF PPC relocation code from the boot loader to the kernel. * Fixed the PPC version of arch_thread_switch_kstack_and_call(). Apparently the signature had changed, but the assembly implementation was not adjusted accordingly. * sc prints more registers now (LR, CR, CTR, XER,...). * Fixed several occurences of not-working fault handlers. Apparently the compiler realized, that the "error" label was never jumped to (by the code it knew), and optimized the respective code away. Now we use a trick to make it think the error label might actually be jumped to. I wonder whether the x86 version has the same problem when being compiled with GCC4. * Adopted the x86 page fault handling interrupt code. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15933 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6c678c57 |
|
09-Jan-2006 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* The exception vector offset is now also part of the iframe. * Cloned iframe stack management from x86. * Reimplemented arch_thread_{get,set}_current_thread(). The thread structure is stored in SPRG2. It is set to NULL in arch_cpu_preboot_init(), now. A non-null current thread causes all kinds of undesired behavior in early boot code. * We establish the address space mappings we know from the Open Firmware as areas. At least those in kernel address space. The ones in userland address space are tougher. Fortunately on my Mac mini there aren't any save the boot_loader stack, which is not needed any longer anyway. * Added stack trace support to the kernel debugger. Mostly cloned and adjusted the x86 code. Some bits are still missing, like stack traces for other threads. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15890 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
48fe700d |
|
08-Jan-2006 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
arch_debug.c -> arch_debug.cpp git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15882 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
24df65921befcd0ad0c5c7866118f922da61cb96 |
|
11-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged signals-merge branch into trunk with the following changes: * Reorganized the kernel locking related to threads and teams. * We now discriminate correctly between process and thread signals. Signal handlers have been moved to teams. Fixes #5679. * Implemented real-time signal support, including signal queuing, SA_SIGINFO support, sigqueue(), sigwaitinfo(), sigtimedwait(), waitid(), and the addition of the real-time signal range. Closes #1935 and #2695. * Gave SIGBUS a separate signal number. Fixes #6704. * Implemented <time.h> clock and timer support, and fixed/completed alarm() and [set]itimer(). Closes #5682. * Implemented support for thread cancellation. Closes #5686. * Moved send_signal() from <signal.h> to <OS.h>. Fixes #7554. * Lots over smaller more or less related changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42116 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9536ec02971d96e1941af928eb3645bc6e3133e3 |
|
03-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Reimplemented the gdb stub support for the 'g' command (read registers): * Added an arch_debug_gdb_get_registers() interface that is supposed to provide the register values in the format expected by gdb and implemented it for x86. * Reimplemented gdb_regreply() to use that. Also made it buffer overflow safe. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41880 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4535495d80c86e19e2610e7444a4fcefe3e0f8e6 |
|
10-Jan-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Merged the signals branch into trunk, with these changes: * The team and thread kernel structures have been renamed to Team and Thread respectively and moved into the new BKernel namespace. * Several (kernel add-on) sources have been converted from C to C++ since private kernel headers are included that are no longer C compatible. Changes after merging: * Fixed gcc 2 build (warnings mainly in the scary firewire bus manager). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40196 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7656ad6be1c6b2c2ebf6542bdc97b91837b80867 |
|
27-Jun-2010 |
Andreas Färber <andreas.faerber@web.de> |
kernel_ppc: Use saved register state for stack trace of current thread Suggested by Ingo in ticket #6139. This shortens the stack trace and makes it independent of whether called implicitly on KDL entry or manually from the kernel debugger prompt. For a kernel panic, "panic" is now the top-most frame printed. Closes ticket #6160. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37282 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d46ce4d62a2ee27d0d6b531cadb3134538ba48c8 |
|
27-Jun-2010 |
Andreas Färber <andreas.faerber@web.de> |
kernel_ppc: Save caller's stack pointer in arch_debug_save_registers Suggested by Ingo in ticket #6139. Code is adapted from x86. Note that on ppc64 GPR1 needs to be 64-bit, thus the choice of addr_t. Resolves part of ticket #6160. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37281 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e845f05e28be1b06a73e7bcc870d53c4d110b6ca |
|
06-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Patch by Andreas Faerber: stack_trace(): Skip stack_trace() itself in the stack trace. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37033 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
48f2523d158c6680c729cbbd1f16b33991aa562a |
|
06-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Patch by Andreas Faerber: Implemented arch_debug_get_caller(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37032 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3329d8c055fb687746e3c0bafedccb108a8930f1 |
|
05-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Patch by Andreas Faerber: Implemented arch_debug_call_with_fault_handler(). That makes the automatic stack traces in case of kernel panics work. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37021 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c3676b54bfd2e06b73646d1846b2ab0272cb96e2 |
|
13-Apr-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added vm_debug_copy_page_memory() which copies memory from a potentially not mapped page. * debug_{mem,strl}cpy(): - Added "team" parameter for specifying the address space the address are to be interpreted in. - When the standard memcpy() (with fault handler) fails, fall back to vm_debug_copy_page_memory(). * Added debug_is_debugged_team(): Predicate returning true, if the supplied team_id refers to the same team debug_get_debugged_thread() belongs to. * Added DebuggedThreadSetter class for scope-based debug_set_debugged_thread(). Made use of it in several debugger functions. * print_demangled_call() (x86): Fixed unsafe memory access. Allows KDL stack traces to work correctly again, even if the page daemon has already unmapped the concerned pages. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36230 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
cfefeee3f81bd3ed97243986cdd6bf710d16d0bc |
|
18-Mar-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Changed arch_debug_save_registers() to take an arch-specific structure arch_debug_registers instead. * Call arch_debug_save_registers() on all CPUs when entering the kernel debugger. * Added debug_get_debug_registers() to return a specified CPU's saved registers. * x86: - Replaced the previous arch_debug_save_registers() implementation. Disabled getting the registers via the gdb interface for the time being. - Fixed the "sc", "call", and "calling" commands to also work for threads running on another CPU. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35907 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a38f85036021b7ccaffa47fd8584afff473acf3d |
|
22-Dec-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* arch_debug_get_stack_trace(): - Replaced the "userOnly" parameter by a "flags" parameter, that allows to specify kernel and userland stack traces individually. - x86, m68k: Don't always skip the first frame as that prevents the caller from being able to record its own address. * capture_tracing_stack_trace(): Replaced the "userOnly" parameter by "kernelOnly", since one is probably always interested in the kernel stack trace, but might not want the userland stack trace. * Added stack trace support for VM cache kernel tracing. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34742 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b2a7fcb4045ff77189f7431fde83e16e21258736 |
|
18-Oct-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Added an arch_debug_stack_trace() function that is called from the KDL loop in case there aren't any KDL commands available yet. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33642 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ea2abd110bd6a4518a954477562e2dd94a5fef9d |
|
02-Aug-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Renamed the ROUNDOWN macro to ROUNDDOWN. Also changed the implementation of ROUNDUP to use '*' and '/' -- the compiler will optimize that for powers of two anyway and this implementation works for other numbers as well. * The thread::fault_handler use in C[++] code was broken with gcc 4. At least when other functions were invoked. Trying to trick the compiler wasn't a particularly good idea anyway, since the next compiler version could break the trick again. So the general policy is to use the fault handlers only in assembly code where we have full control. Changed that for x86 (save for the vm86 mode, which has a similar mechanism), but not for the other architectures. * Introduced fault_handler, fault_handler_stack_pointer, and fault_jump_buffer fields in the cpu_ent structure, which must be used instead of thread::fault_handler in the kernel debugger. Consequently user_memcpy() must not be used in the kernel debugger either. Introduced a debug_memcpy() instead. * Introduced debug_call_with_fault_handler() function which calls a function in a setjmp() and fault handler context. The architecture specific backend arch_debug_call_with_fault_handler() has only been implemented for x86 yet. * Introduced debug_is_kernel_memory_accessible() for use in the kernel debugger. It determines whether a range of memory can be accessed in the way specified. The architecture specific back end arch_vm_translation_map_is_kernel_page_accessible() has only been implemented for x86 yet. * Added arch_debug_unset_current_thread() (only implemented for x86) to unset the current thread pointer in the kernel debugger. When entering the kernel debugger we do some basic sanity checks of the currently set thread structure and unset it, if they fail. This allows certain commands (most importantly the stack trace command) to avoid accessing the thread structure. * x86: When handling a double fault, we do now install a special handler for page faults. This allows us to gracefully catch faulting commands, even if e.g. the thread structure is toast. We are now in much better shape to deal with double faults. Hopefully avoiding the triple faults that some people have been experiencing on their hardware and ideally even allowing to use the kernel debugger normally. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32073 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6a1f462e722992471836c74232c6eb8c8125751b |
|
24-Jun-2009 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* arch_debug_get_interrupt_pc() does now optionally return whether the iframe is a syscall iframe. * User debugger support: Don't to call BreakpointManager::PrepareToContinue(), if the thread returns from a syscall. We don't want to skip breakpoints in that case. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31223 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e670fc6f6346a09cd96a8ef01742e835086bb458 |
|
15-Sep-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added new parameter "skipIframes" to arch_debug_get_stack_trace(). That many iframes are supposed to be skipped before recording the stack trace. Currently implemented for x86 only. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27529 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
18f2a9c17d2b2439b9acbcca4cf99069b9b17e6e |
|
24-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added support for architecture specific debug variables, e.g. for referencing iframe registers. Their prefix is "$". E.g. "$eax" refers to the eax register of the current iframe. The features cooperates with the "in_context" command, i.e. "in_context 92 $eip = 0" will set the eip register of thread 92 to 0 (thus sealing its fate ;-)). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27192 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0739b87ee9bca1155746e659d4c24ec902646386 |
|
22-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added arch_debug_get_interrupt_pc(), which is supposed to return the PC of the innermost iframe. * The "in_context" command does now set the currently debugged thread respectively. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27166 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
57f2b5a0137be29081ab719ae33ebabddc95b78b |
|
05-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Changed the meaning of the {KERNEL,USER}_STACK_SIZE macros to not include the guard pages. Adjusted the kernel and boot loader code accordingly -- the guard pages size is added/not removed respectively. The stack size passed to _kern_spawn_thread() is now the actually usable size, and it is no longer possible to specify a size smaller than or equal to the guard pages size. * vm_create_anonymous_area(): Precommit two pages maximum -- a stack with only one page usable size obviously doesn't need two pages. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26819 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
758962ec3b8fe7a5d9c7463fb5d22c469734b527 |
|
26-Mar-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added arch_debug_contains_call() function that returns wether or not a call chain contains a specific symbol (or address). * Added a new KDL command "calling" that you can use to get a list of threads that have a specific function in their call chain. * Removed extraneous white space. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24594 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
962b0b887d830b7f7bfd47de10112609302bbd82 |
|
01-Apr-2007 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added a wrapper function for the invocation of debugger commands. It sets a fault handler, so that an invalid memory access while executing the command (address typos always do the trick :-) won't result in another KDL session on top of the current one, which wouldn't even be "cont"able. All pieces of code setting a fault handler do now save and reset the previous one, so that e.g. a user_memcpy() in a debugger command doesn't disturb the mechanism. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20500 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7afc16f05918c55f8e6aae8c2b4bd15789d32116 |
|
12-Jan-2006 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Fixed a bug regarding storing/restoring FPSCR in the interrupt code. The stack pointer was not adjusted, hence we were overwriting the previous register value. But it looks like I missed to check in the arch_cpu.h with the iframe structure including the floating point registers anyway. * Backported the ELF PPC relocation code from the boot loader to the kernel. * Fixed the PPC version of arch_thread_switch_kstack_and_call(). Apparently the signature had changed, but the assembly implementation was not adjusted accordingly. * sc prints more registers now (LR, CR, CTR, XER,...). * Fixed several occurences of not-working fault handlers. Apparently the compiler realized, that the "error" label was never jumped to (by the code it knew), and optimized the respective code away. Now we use a trick to make it think the error label might actually be jumped to. I wonder whether the x86 version has the same problem when being compiled with GCC4. * Adopted the x86 page fault handling interrupt code. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15933 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6c678c57c736f4688c9bab047bed3fe00fd27a13 |
|
09-Jan-2006 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* The exception vector offset is now also part of the iframe. * Cloned iframe stack management from x86. * Reimplemented arch_thread_{get,set}_current_thread(). The thread structure is stored in SPRG2. It is set to NULL in arch_cpu_preboot_init(), now. A non-null current thread causes all kinds of undesired behavior in early boot code. * We establish the address space mappings we know from the Open Firmware as areas. At least those in kernel address space. The ones in userland address space are tougher. Fortunately on my Mac mini there aren't any save the boot_loader stack, which is not needed any longer anyway. * Added stack trace support to the kernel debugger. Mostly cloned and adjusted the x86 code. Some bits are still missing, like stack traces for other threads. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15890 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
48fe700d70dddc38f291287a220926eea0ad8178 |
|
08-Jan-2006 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
arch_debug.c -> arch_debug.cpp git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15882 a95241bf-73f2-0310-859d-f6bbb57e9c96
|