Commit Graph
100 Commits
Author SHA1 Message Date
Ingo Weinhold ea2abd110b * 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
2009-08-03 12:39:56 +00:00
Ingo Weinhold 16357dea6b Don't lock when the debugger is running.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32072 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-03 11:54:25 +00:00
Ingo Weinhold 885b7b4a85 Removed unsupported architectures.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32071 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-03 11:32:08 +00:00
Ingo Weinhold 671a2442d9 More work towards making our double fault handler less triple fault prone:
* SMP:
  - Added smp_send_broadcast_ici_interrupts_disabled(), which is basically
    equivalent to smp_send_broadcast_ici(), but is only called with interrupts
    disabled and gets the CPU index, so it doesn't have to use
    smp_get_current_cpu() (which dereferences the current thread).
  - Added cpu index parameter to smp_intercpu_int_handler().
* x86:
  - arch_int.c -> arch_int.cpp
  - Set up an IDT per CPU. We were using a single IDT for all CPUs, but that
    can't work, since we need different tasks for the double fault interrupt
    vector.
  - Set the per CPU double fault task gates correctly.
  - Renamed set_intr_gate() to set_interrupt_gate and set_system_gate() to
    set_trap_gate() and documented them a bit.
  - Renamed double_fault_exception() x86_double_fault_exception() and fixed
    it not to use smp_get_current_cpu(). Instead we have the new
    x86_double_fault_get_cpu() that deducts the CPU index from the used stack.
  - Fixed the double_fault interrupt handler: It no longer calls int_bottom to
    avoid accessing the current thread.
* debug.cpp:
  - Introduced explicit debug_double_fault() to enter the kernel debugger from
    a double fault handler.
  - Avoid using smp_get_current_cpu().
  - Don't use kprintf() before sDebuggerOnCPU is set. Otherwise
    acquire_spinlock() is invoked by arch_debug_serial_puts().

Things look a bit better when the current thread pointer is broken -- we run
into kernel_debugger_loop() and successfully print the "Welcome to KDL"
message -- but we still dereference the thread pointer afterwards, so that we
don't get a usable kernel debugger yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32050 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-01 01:53:54 +00:00
Ingo Weinhold 1af695be01 Automatic whitespace cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32044 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-01 01:18:39 +00:00
Ingo Weinhold cc77aba101 * Allocate a separate double fault stack for each CPU.
* Added x86_double_fault_get_cpu(), a save way to get the CPU index when in
  the double fault handler. smp_get_current_cpu() requires at least a somewhat
  intact thread structure, so we rather want to avoid it when handling a double
  fault. There are a lot more of those dependencies in the KDL entry code.
  Working on it...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32028 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-31 16:14:18 +00:00
Ingo Weinhold 7f1bf82c6e We need full update on resize.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32007 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-31 01:21:49 +00:00
Ingo Weinhold ce50cdc3ed When recovering a tracing buffer from a previous session we do now check the
tracing buffer entry list at least. Eventually we should check the entries
themselves, too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31999 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 22:00:16 +00:00
Ingo Weinhold 3fccf0679f C++ified the code. Introduced new trace entry flags, which will eventually be
used to mark entries after recovering a tracing log from a previous session.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31991 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 19:50:50 +00:00
Ingo Weinhold 57a25014b0 Statically initialize sTracingMetaData to sDummyTracingMetaData. This causes
tracing use before real initialization to be ignored gracefully again. Fixes
#4158.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31973 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 15:12:21 +00:00
Ingo Weinhold 07745f2a0b Added support for new notify_io_request() function.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31970 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 14:12:47 +00:00
Ingo Weinhold 567c7b1055 Added kernel_debugger command for entering the kernel debugger.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31966 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 12:36:34 +00:00
Ingo Weinhold 213d2d8f9d Added syscall _kern_kernel_debugger() to enter the kernel debugger.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31965 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 12:35:42 +00:00
Ingo Weinhold e9ff085cfe Added rendering of the time line in the header view. Still has some glitches.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31961 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 02:54:40 +00:00
Ingo Weinhold d4dd240b99 Moved DrawHeaderBackground() implementation from DefaultHeaderRenderer to
base class HeaderRenderer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31960 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 02:50:13 +00:00
Ingo Weinhold cdcacd7f9f * Added missing ToReferenceable().
* _SetTo(const BVariant&): Acquire a reference for the wrong object.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31959 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 02:34:41 +00:00
Ingo Weinhold d829579dc0 mmlr + bonefish:
Moved the static variables for managing the tracing buffer into a separate
area. The area is mapped at one of a few possible physical addresses and can
be found again when rebooting. This allows us to resurrect the tracing buffer
from the previous session, which could help tremendously when tracking certain
bugs (like triple faults). There's very little checking done yet, so it is
probably not as robust as we would wish it to be.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31942 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 21:34:51 +00:00
Ingo Weinhold d3b44ccb14 Added explicit physical address parameter to vm_create_anonymous_area() and
create_area_etc(). 0 for the default behavior.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31941 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 21:30:35 +00:00
Ingo Weinhold 069b477dd7 * Introduced CREATE_AREA_DONT_CLEAR create_area_etc() flag, which allows the
call to fetch non-clear pages.
* B_PHYSICAL_BASE_ADDRESS does now imply B_CONTIGUOUS.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31932 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 18:57:21 +00:00
Ingo Weinhold 00e22bae44 Use B_SYSTEM_TEAM instead of the hard-coded 1.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31931 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 18:53:38 +00:00
Ingo Weinhold 2ea893b2a0 Patch by Bryce Groff: Style cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31907 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 13:15:12 +00:00
Ingo Weinhold 53ef70a0df Patch by Bryce Groff: Fixed return values of the identify() hook.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31906 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 13:12:48 +00:00
Ingo Weinhold 265aebfa26 Fixed build after BOpenHashTable change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31905 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 13:10:04 +00:00
Ingo Weinhold e558530ebb HeaderListener: Replaced the generic hook by more detailed ones.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31884 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 01:01:20 +00:00
Ingo Weinhold c654cca5b4 Use the new header view. Not quite fitting yet.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31879 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 00:13:48 +00:00
Ingo Weinhold c97796c267 Added beginnings of a generic header view.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31878 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 00:12:42 +00:00
Ingo Weinhold aaa7c62f4d Added -Werror.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31877 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 00:11:16 +00:00
Ingo Weinhold d4d63490af * Moved ThreadInfo from ModelLoader to Model. And renamed it to
ThreadSchedulingState. Also moved the management of the thread scheduling
  states into a new model class SchedulingState, which is now used by
  ModelLoader.
* Added scheduling state snapshots to Model. The ModelLoader adds a complete
  snapshot every 1024 events, so that seeking to scheduling state at a time
  can be done quickly.
* [Featuring stippi] Added actual functionality to the scheduling page. It
  shows the scheduling activity of all threads and one can zoom in and out.
  Looks somewhat ugly and is work in progress.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31856 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-28 18:57:57 +00:00
Ingo Weinhold 86e89f1207 Added BDebugEventInputStream::Seek() to seek in the stream. Works for data
buffer based stream only ATM.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31855 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-28 18:51:38 +00:00
Ingo Weinhold 64ccb6b58a Synced the different definitions of BUFSIZ with the internal one. What a mess...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31776 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-26 15:28:33 +00:00
Ingo Weinhold c31af1b060 Turned the view into a tree view. Still only the top level is shown, though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31746 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-25 00:22:41 +00:00
Ingo Weinhold 20e4297b61 Added TreeTablePath::RemoveLastComponent().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31745 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-25 00:21:14 +00:00
Ingo Weinhold d8c41ef38f Added support for containing BReferenceables of arbitrary actual type.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31744 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-25 00:20:53 +00:00
Ingo Weinhold 6feb776265 Alias Referenceable as BReferenceable.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31743 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-25 00:20:06 +00:00
Ingo Weinhold 2bf55b39a5 * Made FunctionID abstract. There are now two implementing subclasses,
SourceFunctionID (where we know the souce location of the function) and
  ImageFunctionID (where we don't know the source location). Made the
  classes archivable.
* Added support to find functions by ID.
* Improved user breakpoint handling. We can now "install" a breakpoint before we
  even know the function instances in which to install it. Whenever image debug
  information become available, breakpoints are installed in the concerned
  function instances of the respective image.
* Always trigger loading image debug info as soon as we become aware of an
  image.
* Implemented a settings management mechanism. ATM only the breakpoint
  locations for debugged teams are persisted. This seriously improves the
  debugging fun, though. :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31728 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-24 02:35:30 +00:00
Ingo Weinhold 2d350c1010 Utility functionality for archiving/unarchiving.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31726 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-24 02:21:06 +00:00
Ingo Weinhold a5e1e7ceba Refactoring: Moved TeamDebugModel functionality into Team and got rid of the
former.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31705 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-22 19:20:06 +00:00
Ingo Weinhold a8d54837a8 Patch by Bryce Groff: Use the same name for BFS as <DiskDeviceTypes.h> does.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31690 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-22 14:59:27 +00:00
Ingo Weinhold c1dd2f540d Patch by Jens Arm: Fixed swapped arguments in _kern_create_[sym]link()
invocations.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31689 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-22 13:50:28 +00:00
Ingo Weinhold 0e8b72b130 * Fixed spurious IP and breakpoint markers in disassembled code.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31686 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-22 01:59:52 +00:00
Ingo Weinhold 25598171b1 GetStatementAtAddress(): Terminate, if we couldn't get the statement from the
disassembled code of the function.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31685 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-22 01:53:59 +00:00
Ingo Weinhold ae8f22407a GetStatement(): 0 is a valid source location line, so rather init to -1.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31684 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-22 01:52:21 +00:00
Ingo Weinhold e78744554e Domain::_LocateDirectory(): We first want to check whether the directory exists
before trying to map its parent. This is what _LocateEntry() already does, so
things can be simplified. Should fix problems with finding local source files
for good. Or so I hope. :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31683 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-22 01:10:45 +00:00
Ingo Weinhold 0b11ecb18c * Always include the public arch_debugger.h headers. The structures defined
there are prefixed with the respective architecture name. Useful for remote
  debugging a different architecture.
* <x86/arch_debugger.h>: Introduced a structure for the FPU state, so that it
  isn't left to the debugger.
* Removed the _kern_get_thread_cpu_state() syscall. Was originally intended for
  bdb compatiblity, but isn't really needed.
* Kernel x86 arch_get_debug_cpu_state(): The use of fnsave was broken, since
  it reinits the FPU after saving the state. This resulted in weird results
  when debugging functions using the FPU. We now use fxsave, if available.
  Otherwise fnsave + frstor should be used -- not fully implemented yet.
  Same for arch_set_debug_cpu_state().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31682 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 22:18:39 +00:00
Ingo Weinhold 8536312038 * ExpressionEvaluationContext::GetFrameBaseAddress(): Fixed incorrect error
return values (bool vs. status_t).
* _FindLocationExpression(): The base address was completely ignored, thus
  if one was needed, the correct location expression wouldn't be found.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31675 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 16:15:39 +00:00
Ingo Weinhold c90f9b9ef3 Correctly recognize the "call r/m32" opcode. There are three opcode bits in the
second byte, which we didn't check, thus incorrectly identifying some other
instructions as calls.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31674 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 15:10:58 +00:00
Ingo Weinhold b1ce728479 * Added some debug output for stepping.
* Fixed incorrect "step over" handling after hitting the temporary breakpoint.
  Could cause stepping into functions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31673 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 15:08:55 +00:00
Ingo Weinhold 67d0b0790a Added TODO regarding issues with recursive functions.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31665 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 01:50:01 +00:00
Ingo Weinhold b1a835d13b Domain::_LocateDirectory(): Fixed incorrect check. If the directory's name
doesn't match, we don't locate it implicitly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31664 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 01:49:17 +00:00
Ingo Weinhold 6b56c0d739 _CreateCompoundType(): Insert the type into the hash table before resolving data
members. Otherwise we could run into infinite recursion.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31663 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 00:43:42 +00:00
Ingo Weinhold 1746066cde * Made _Allocate() static.
* Moved the private inline methods up in the source file, so they can actually
  be inlined.
* UnlockBuffer(): Removed superfluous "if". Maybe the one who wrote it can have
  a look and check whether something else was intended originally.
* _MakeWritable() (both versions): Removed the superfluous ref count increment
  and the matching decrements.
* _Resize(): Fixed ref count ASSERT. It would always be triggered when called
  from UnlockBuffer(), since the ref count is -1 in that case.
* Clarified some comments.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31662 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 00:04:46 +00:00
Ingo Weinhold 520cf2669f HaikuInstall rule: Allow optional list of target names.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31661 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-20 23:03:28 +00:00
Ingo Weinhold 7f96148cac Patch by Bryce Groff with changes by myself:
* Added missing name parameter to the partitioning system module child creation
  and child creation validation hooks. Pass the name to them.
* Added BPartitionParameterEditor interface, which is/will be used for editing
  disk system specific parameters.
* Implemented partition parameter editors for BFS initialization and Intel
  partition map child creation.
* Fixed the incorrect supported child partition type iteration in the Intel
  partition map add-on. It does now return actual types.
* Handle the "active" flag parameter in the Intel partitioning system module.
* DriveSetup:
  - Replaced the "Create" submenu by a simple menu item. The type can now by
    chosen in the dialog.
  - Make use of initialization and child creation parameter editors. Some
    non-generic code has been moved to the respective editor implementations
    (BFS, intel partitioning system).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31658 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-20 20:29:16 +00:00
Ingo Weinhold 8fad39df43 Also get the local variables for a stack frame. Apparently gcc doesn't add a
DW_AT_start_scope attribute to any variable entries, so the variables already
appear at the beginning of the block. I suppose we'll have to guess from the
source location when the variables become active.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31649 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-20 01:12:52 +00:00
Ingo Weinhold 905860f5b4 The DWARF specs were a bit fuzzy on this one. Apparently only the low pc
attribute serves as base address for address range and location lists.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31648 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-20 01:07:00 +00:00
Ingo Weinhold fad43e5283 Removed some debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31647 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-20 01:05:34 +00:00
Ingo Weinhold 8d716cdba3 Added support for several variable and lexical block entry attributes and
child handling for lexical blocks (at least for nesting and variables).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31646 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-20 01:05:10 +00:00
Ingo Weinhold 502fcbcc5b Added Contains() method.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31645 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-20 01:03:02 +00:00
Ingo Weinhold da4d62db94 * Worker:
- Made Job Referenceable.
  - Turned JobKey into an abstract base class to add flexibility. The new
    SimpleJobKey is a subclass with the former functionality.
* TeamWindow: Removed the TeamWindow* parameter from the listener hooks. The
  TeamDebugger knows anyway.
* Added IDs to Variable, Function, and FunctionInstance. The latter two generate
  the ID on the fly, Variable stores it.
* SpecificImageDebugInfo::CreateFrame(): Changed FunctionDebugInfo* debug
  parameter to FunctionInstance* to provide more info (the function ID).
* DwarfInterfaceFactory/DwarfImageDebugInfo:
  - Added class DwarfFunctionParameterID, an ID class implementation for
    function parameters and set the IDs on the parameter objects.
  - Retrieve the size of a type (i.e. the size of its objects) and store it in
    DwarfType.
  - If a parameter's ValueLocation doesn't have a size, set that of the
    respective type.
  - Map the register indicies in the parameters' ValueLocations from DWARF to
    our indices.
* Added class TypeComponentPath for identifying subcomponents in types.
* Added class StackFrameValues, a container associating variables and their
  subcomponents with values.
* StackFrame does now have a StackFrameValues object for parameters and local
  variables and a mechanism to notify listeners when values have been retrieved.
* Added GetStackFrameValueJob to retrieve variable values. Lots of functionality
  is missing yet. Most notably it doesn't retrieves values for subcomponents.
* Wired everything to trigger loading of variable values and getting notified
  when done.
* VariablesView: Added a value column. This is all very basic and has to be
  done differently, but at least values for the parameters can be seen already.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31636 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:52:16 +00:00
Ingo Weinhold bcbd46eba3 Added SetPieceAt() and Dump() methods.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31635 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:19:08 +00:00
Ingo Weinhold f3516af2ca Added AddressSize(), IsBigEndian, IsHostEndian().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31634 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:18:06 +00:00
Ingo Weinhold e3eda50984 Made ByteSize() a virtual method in DIEType and implemented in all subclasses
that potentially have that attribute.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31633 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:16:51 +00:00
Ingo Weinhold b312b9ff83 Moved the implementation of ExpressionEvaluationContext. No functional changed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31632 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:15:22 +00:00
Ingo Weinhold 81ad27df05 * More debug output.
* Fixed _PushRegister(). It was ignoring the offset.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31631 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:13:06 +00:00
Ingo Weinhold d26889cca5 Base classes for IDs for various objects. The idea is to use them to uniquely
identify the respective objects without actually holding a pointer to them.
They will eventually also become persistable which will allow e.g. to associate
(and store) settings with the objects.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31630 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:11:20 +00:00
Ingo Weinhold 72e9c66b4d Class helping with assembling data from chunks of byte unaligned bit arrays.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31629 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:06:33 +00:00
Ingo Weinhold 6de84d6d8d Added AddUninitialized(), appending the given number of uninitialized elements.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31628 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:03:01 +00:00
Ingo Weinhold b5d6fc7173 * Added missing bool type support.
* Added Bytes(), returning a pointer to the "raw" data, and Size(), returning
  the data size.
* Added SetToTypedData(), which initializes the object from a data buffer and a
  type code.
* Added SwapEndianess() to swap the endianess of the contained data (if
  possible).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31627 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:01:48 +00:00
Ingo Weinhold d315bfd510 * Added class ValueLocation to represent a location of a value on the target
machine.
* DWARF:
  - Various additions to the DIE classes.
  - DwarfExpressionEvaluationContext:
    - Added support for location expressions and thus the missing DW_OP_piece
      and DW_OP_bit_piece operations.
    - Fixed some deviations from the specs.
    - Added debug output.
  - DwarfFile:
    - Added missing evaluation of CFA expression rules.
    - Added service methods to evaluate expressions, location expressions,
      and constant and dynamic values.
* Added model classes for representing types and variables. Particularly the
  types part is not finished yet.
* StackFrame does now contain parameters and local variables.
* Added DwarfInterfaceFactory, which creates implementation objects for the
  types, as well as variables objects. It's even less finished.
* DwarfImageDebugInfo::CreateFrame(): Resolve function parameters and add them
  to the stack frame. No local variables yet.
* Added the beginnings of a variables view. Only lists the names of parameters
  and local variables (of understood types) ATM.
* Renamed RegisterView to RegistersView.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31614 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-17 01:54:43 +00:00
Ingo Weinhold fbe19a11f8 * Fixed several build issues.
* Removed the broken character conversion functions of the Haiku "port".
  Instead map the 4 unused wchar/locale support functions to panic().
  Eventually we might want to provide minimalistic wchar support in the kernel
  instead, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31596 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 21:17:17 +00:00
Ingo Weinhold 050b103c26 Don't SubInclude the libntfs subdir again.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31595 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 21:12:04 +00:00
Ingo Weinhold d24e0386a3 * Added LocationDescription class.
* Handle DW_AT_location attributes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31591 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 16:49:08 +00:00
Ingo Weinhold dec24704e1 * Moved the outer dependencies for the expression evaluation into new class
DwarfExpressionEvaluationContext.
* Implemented the remaining operations save DW_OP_piece and DW_OP_bit_piece.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31590 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 16:21:33 +00:00
Ingo Weinhold 3c33a74c01 Rather resolve range lists lazily. We need them for all functions, but there
are a lot more DIEs that have range lists.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31586 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 12:37:56 +00:00
Ingo Weinhold ecece29dd8 thread_hit_serious_debug_event(): Incorrect return value. Fixes #4098.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31584 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 11:37:04 +00:00
Ingo Weinhold ca38af4c2b Implemented interpretation of most of the DWARF expression operations. A few
are still missing. And everything is still utterly untested.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31578 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 02:12:03 +00:00
Ingo Weinhold 460f6b3e73 Added DwarfTargetInterface::ReadValueFromMemory() version with address
space + address pair.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31577 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 02:08:47 +00:00
Ingo Weinhold ade8662ece Added ReadValueFromMemory() version taking an "address space" + address pair as
used by DWARF. Not needed/supported for x86.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31576 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 02:07:42 +00:00
Ingo Weinhold ab3c00eef3 The beginnings of a DWARF expression evaluator.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31548 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-13 23:54:32 +00:00
Ingo Weinhold e355492924 Missing include.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31547 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-13 23:53:55 +00:00
Ingo Weinhold 106c4d4020 * Got rid of dwarf_{addr,off,size}_t. Consequently use 64 bit types instead.
* Made the DWARF code fully 64 bit aware (hopefully).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31546 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-13 23:03:36 +00:00
Ingo Weinhold fd1f509330 Skeleton for source language abstraction. There's SourceLanguage with several
subclasses, though they don't do much yet. SourceCode is now associated with a
SourceLanguage.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31544 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-13 20:45:15 +00:00
Ingo Weinhold 5bf75a6f2b Last minute change that, of course, broke the build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31543 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-13 20:05:17 +00:00
Ingo Weinhold f7526300d9 * DWARF: Implemented parsing the DWARF frame info and evaluating it (save for
DWARF expressions). Several related new classes: CfaRule[Set], CfaContext,
  DwarfTargetInterface (for accessing target registers and memory).
* Implemented DwarfImageDebugInfo::CreateFrame(), so the DWARF frame info is
  used for unwinding the stack.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31540 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-13 18:54:11 +00:00
Ingo Weinhold 614e1dc42f * Register:
- Added a type constant describing the format of the register value.
  - Added flag "is callee-preserved" indicating whether the ABI requires the
    register to be preserved by a called function.
* CpuState: Added SetRegisterValue(), made GetRegisterValue() const.
* Added RegisterMap interface for mapping register indices between different
  models.
* Architecture:
  - Added CreateCpuState() version to create a clean CpuState.
  - Added GetDwarfRegisterMaps(), which returns to RegisterMaps, converting
    from and to DWARF register indices.
  - Added ReadValueFromMemory() reading a value from the target team's memory.
    The value type is specified by a type constant and the value return via a
    BVariant.
  - CreateStackTrace: No longer decide whether to adjust the instruction pointer
    of the previous CPU state depending on who created the CPU state. Instead
    compare it with the return address of the next frame. If they are equal it
    obviously has to be adjusted.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31539 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-13 18:45:49 +00:00
Ingo Weinhold 3b859de22e Added handy static method SizeOfType().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31538 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-13 18:33:06 +00:00
Ingo Weinhold 50ffb0b27e Fixed Includes invocation for .def files. The wrong variable was used.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31524 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-11 20:27:44 +00:00
Ingo Weinhold 6cba4149a1 Announce y.tab.h inclusion of parse.h to jam.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31523 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-11 20:25:39 +00:00
Ingo Weinhold 31af373488 Patch by Bryce Groff with small changes by myself:
* Fixed _Create(): Now it correctly supports nested partitions and uses the
  selected partitionable space.
* Fixed _Delete(): Should also work for nested partitions, now.
* Changes to keep the disk view and menu item state in sync.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31522 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-11 16:50:57 +00:00
Ingo Weinhold a365e1cfbb Patch by Bryce Groff, some changes by myself:
* devfs:
  - devfs_[un]publish_partition(): They no longer get the partition path as
    parameter, but rather the device path and the partition name.
  - Added devfs_rename_partition(), which renames an already published
    partition node.
* KPartition/KDiskDevice:
  - Replaced the fPublished flag by fPublishedName, the name under which the
    partition is published. This simplifies UnpublishDevice() and makes it
    practically infallible.
  - Added GetFileName(), which only returns the partition's file name.
    Simplified GetPath() by using it.
  - When a partition is added/removed the subsequent sibling partitions get a
    new index. Now we also rename their published device nodes (and those of
    their descendents). When something goes wrong we unpublish the concerned
    partition's device to be on the safe side. Would be a shame to accidentally
    format the wrong partition, eh? :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31520 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-11 14:35:04 +00:00
Ingo Weinhold 37e2eea0d8 Remove duplicates in the function list view.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31515 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-11 00:15:39 +00:00
Ingo Weinhold 18ca318a3d * Since disassembled code is actually function instance specific,
FunctionInstance does now also have a (DisassembledCode) source code
  attribute. Function keeps its attribute, but it explicitly is a
  FileSourceCode now.
* SourceCode:
  - Removed GetStatementAtLocation(). Instead DisassembledCode has a
    StatementAtLocation() now. As well as a StatementAtAddress() and
    StatementAddressRange(). Rather cast to the subclass (in two instances)
    instead of having those methods in the base class. In most cases we already
    have the subclasses now, anyway.
  - Added Lock()/Unlock(), which are implemented in FileSourceCode. The
    statement ranges are no longer immutable, so we have to lock.
* TeamDebugModel:
  - Revived GetBreakpointsInAddressRange().
  - GetBreakpointsForSourceCode(): Optimized for DisassembledCode and fixed
    in the FileSourceCode case. We need to compare with the functions' source
    file instead of their source code, since they might not have the source
    code set yet. Fixed two instances of the same problem in SourceView. Setting
    breakpoints in functions that have no associated source code yet, works now.
* Team:
  - GetStatementAtAddress(): Optimized by using the DisassembledCode, if
    available.
  - GetStatementAtSourceLocation(): If the supplied source code is
    DisassembledCode, we have to get the statement from it directly, since
    we can't get that information from the image debug info.
* TeamDebugInfo: Added LoadSourceCode() and DisassembleFunction(), the new way
  to get FileSourceCode respectively DisassembledCode. SpecificTeamDebugInfo
  has lost LoadSourceCode() and gained service methods AddSourceCodeInfo() and
  ReadCode(). This avoids unnecessary code duplication in the subclasses.
  Moreover it allows for joining source location info source files from
  different images (and compilation units) -- interesting for inline functions
  in headers.
* Adjusted LoadSourceCodeJob and TeamDebugger::FunctionSourceCodeRequested()
  accordingly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31514 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-11 00:05:26 +00:00
Ingo Weinhold a4b0c19209 * Finished the transformation of the SourceCode interface:
- Replaced StatementAtLine() by GetStatementLocationRange(), which doesn't
    return a statement (i.e. also target addresses), but just a range in the
    source code. This can also be implemented by FileSourceCode, which can
    therefore be used for more than one instance of a function.
  - Added GetStatementAtLocation() which kind of is also a replacement for
    StatementAtLine(), but is optional and only provided by
    DisassembledSourceCode.
  - Added GetSourceFile(), which has to be provided when
    GetStatementAtLocation() is not implemented.
  - Kicked the statement stuff out of FileSourceCode. It only knows source
    ranges, now.
* Team: Added GetStatementAtSourceLocation(), which is the real replacement for
  SourceCode::StatementAtLine() in cases where a statement is actually
  needed. It uses SourceCode::GetStatementAtLocation(), if available and
  otherwise finds a function at the source location, and gets a statement for
  one of its instances.
* TeamDebugInfo: Does now manage a source file -> functions map allowing to
  look up functions at source file locations.
* DwarfImageDebugInfo:
  - Switched the path in the source code hash table key for a LocatableFile,
    which is cheaper to hash and to compare.
  - Fixed bugs where the relocation delta was ignored.
  - Replace a -1 in the SourceLocation column component by 0 to avoid
    mismatches.
* SourceLocation: Changed component types from uint32 to int32. Otherwise -1 is
  not representable.

Things mostly work as before starting the refactoring to support function
instances. All is not well yet, though. E.g. we don't merge the source code
information for common source files (like headers) provided by different
compilation units (or even images) yet. We need to do that, since the debug
info for a compilation unit only contains line number information for inline
functions (in headers) that are actually used.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31495 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-10 00:08:45 +00:00
Ingo Weinhold 7d095b893a Incorrect check -- user-defined breakpoints would be ignored.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31494 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-09 23:34:34 +00:00
Ingo Weinhold c5056cd86d * DebugInfoEntry: Allow access to the individual declaration location
attributes returning for each whether it was set on the entry.
* DwarfUtils::GetDeclarationLocation(): Entries can just override individual
  declaration location attributes. E.g. for a specification entry file, line,
  and column can be given, while the entry for the implementation could just
  override the line, if it is implemented in the same file (like inline methods
  in a header).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31493 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-09 23:33:32 +00:00
Ingo Weinhold 2e064580d6 Fixed broken Insert().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31492 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-09 23:27:21 +00:00
Ingo Weinhold 3edae90975 Added BinarySearchIndexByKey().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31491 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-09 23:24:55 +00:00
Ingo Weinhold 5d0e14e988 Link bfs_fuse against the static host libroot.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31487 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-09 18:06:53 +00:00
Ingo Weinhold 4d12369dce Use unsafe character access to avoid a gcc 4 warning. We check the range
ourselves anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31469 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-08 21:55:12 +00:00
Ingo Weinhold 1cc5e46925 Added offset and size parameters to create_child_partition() and
KPartition::CreateChild(). CreateChild() calls AddChild(), which publishes
the new partition, though at that point offset and size were not set, so that
the published devices would not be usable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31463 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-08 20:26:43 +00:00