#
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>
|
#
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
|
#
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
|
#
4dd0a2c7 |
|
26-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added arch_debug_get_stack_trace() that can be used to get a stack trace (the list of return addresses) for the current stack. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25204 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
|
#
9a63135f |
|
29-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Cleanup of the debug stuff, prepared for blue screen debugging. kernel_debugger() didn't do enough before; panic() did all the work - but since the former is a public function as well, I moved all the functionality to it. Also fixed a possible buffer overrun in panic(). Renamed dbg_* to debug_*. "serial_debug_port" setting did not ignore negative values. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12889 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6d352d08 |
|
25-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Added an arch_get_caller() function that returns the caller of the calling function :-) Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12810 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c17f45d1 |
|
03-May-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Some header cleanups. Renamed dbg_save_registers() to arch_...() since it's arch dependent. Removed unnecessary dependencies to stage2.h. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3138 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5ca8da7a |
|
13-Aug-2002 |
Axel Dörfler <axeld@pinc-software.de> |
Backported the new stack crawl command ("sc", not "bt" like in NewOS) from NewOS. Untested yet, though. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@750 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
52a38012 |
|
08-Jul-2002 |
ejakowatz <ejakowatz@nowhere.fake> |
It is accomplished ... git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10 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
|
#
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
|
#
4dd0a2c7b6c006741e8a14fbe8a3a1817e10e1ad |
|
26-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Added arch_debug_get_stack_trace() that can be used to get a stack trace (the list of return addresses) for the current stack. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25204 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
|
#
9a63135f7c8ef1cbcb0893a118d4f4349c8f29c8 |
|
29-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Cleanup of the debug stuff, prepared for blue screen debugging. kernel_debugger() didn't do enough before; panic() did all the work - but since the former is a public function as well, I moved all the functionality to it. Also fixed a possible buffer overrun in panic(). Renamed dbg_* to debug_*. "serial_debug_port" setting did not ignore negative values. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12889 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6d352d08b36bfeb5ae8fa5440e48fff02d910906 |
|
25-May-2005 |
Axel Dörfler <axeld@pinc-software.de> |
Added an arch_get_caller() function that returns the caller of the calling function :-) Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12810 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c17f45d123e46467438e56fa001df91db9850917 |
|
03-May-2003 |
Axel Dörfler <axeld@pinc-software.de> |
Some header cleanups. Renamed dbg_save_registers() to arch_...() since it's arch dependent. Removed unnecessary dependencies to stage2.h. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3138 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5ca8da7a4b46342b22fa985c7813b558f831484f |
|
13-Aug-2002 |
Axel Dörfler <axeld@pinc-software.de> |
Backported the new stack crawl command ("sc", not "bt" like in NewOS) from NewOS. Untested yet, though. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@750 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
52a380120846174213ccce9c4aab0dda17c72083 |
|
08-Jul-2002 |
ejakowatz <ejakowatz@nowhere.fake> |
It is accomplished ... git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10 a95241bf-73f2-0310-859d-f6bbb57e9c96
|