Commit Graph

31 Commits

Author SHA1 Message Date
Johnny Chen 870f4f4213 The r139982 patch has a bug by using the constant "x86_AVX_STATE64".
Patch by Filipe.

llvm-svn: 140037
2011-09-19 18:54:01 +00:00
Greg Clayton 747bcb03d2 Convert lldb::ModuleSP to use an instrusive ref counted pointer.
We had some cases where getting the shared pointer for a module from
the global module list was causing a performance issue when debugging
with DWARF in .o files. Now that the module uses intrusive ref counts,
we can easily convert any pointer to a shared pointer.

llvm-svn: 139983
2011-09-17 06:21:20 +00:00
Greg Clayton 5631ebce5e Added more logging, and renamed FPR to FPU in a the register set/flavor enum.
llvm-svn: 139982
2011-09-17 05:59:37 +00:00
Johnny Chen 236888d026 Foe x86_64/i386, piggyback the hardware index of the fired watchpoint in the exception
data sent back to the debugger.  On the debugger side, use the opportunity during the
StopInfoMachException::CreateStopReasonWithMachException() method to set the hardware index
for the very watchpoint location.

llvm-svn: 139975
2011-09-17 01:05:03 +00:00
Johnny Chen 3c53258964 Watchpoint WIP:
o WatchpointLocationList:
  Add a GetListMutex() method.
o WatchpointLocation:
  Fix Dump() method where there was an extra % in the format string.
o Target.cpp:
  Add implementation to CreateWatchpointLocation() to create and enable a watchpoint.

o DNBArchImplX86_64.cpp:
  Fix bugs in SetWatchpoint()/ClearWatchpoint() where '==' was used, instead of '=',
  to assign/reset the data break address to a debug register.

  Also fix bugs where a by reference debug_state should have been used, not by value.

llvm-svn: 139666
2011-09-13 23:29:31 +00:00
Johnny Chen 67b20bbbee Reset the debug status register, only if necessary, before we resume,
which saves unnecessary traffic to the kernel.

llvm-svn: 139410
2011-09-09 21:11:25 +00:00
Johnny Chen f8f68a132a Added comments about exception code.
llvm-svn: 139294
2011-09-08 17:07:22 +00:00
Johnny Chen af3d4af4eb Add logic to the DNBArchImplX86_64/DNBArchImplI386::NotifyException() callback method
in order to distinguish the real single step exception from a watchpoint exception
which uses the same exc_type of EXC_BREAKPOINT and exc_code of EXC_I386_SGL.

This is done by checking the debug status register to find out whether the watchpoint
data break event has fired, and, if yes, stuff the data break address into the exception's
exc_sub_code field on the debugserver side for lldb to consume on the other end.

llvm-svn: 139274
2011-09-08 01:16:50 +00:00
Johnny Chen 1bd08dd878 Watchpoint work in progress:
Add a virtual method GetHardwareWatchpointHit() to the DNBArchProtocol base class
which consults the architecture to return the watchpoint hit; otherwise return an
invalid index.

Add impl. of the method to X86_64 and I386 subclasses, plus reset the debug status
register before we resume execution of the inferior thread.

llvm-svn: 139034
2011-09-02 21:13:07 +00:00
Johnny Chen 8d31e5eac5 Renaming: from IsVacantWatchpoint() to IsWatchpointVacant().
llvm-svn: 138907
2011-08-31 21:44:56 +00:00
Johnny Chen a18460635a Renamed the helper method to ClearWatchpointHits() for clarity of its purpose.
llvm-svn: 138899
2011-08-31 21:19:39 +00:00
Johnny Chen e0d4208a8b Add a couple of helper methods to check/clear the debug status register
which contains the watchpoint hit information.

llvm-svn: 138881
2011-08-31 19:05:55 +00:00
Johnny Chen 205395e7e0 Fix the shift amount applied to size_and_rw_bits() for debug control register,
which did not take into account the hardware index.

llvm-svn: 138867
2011-08-31 17:51:43 +00:00
Johnny Chen edce1f3f7d Update comments.
llvm-svn: 138863
2011-08-31 17:29:29 +00:00
Johnny Chen 0399ec26c0 Watchpoint work in progress: add helper methods to DNB arch impl for I386 to implment Enable/DisableHardwareWatchpoint.
llvm-svn: 138847
2011-08-31 00:50:10 +00:00
Johnny Chen ebb9bb4175 Watchpoint work in progress: add helper methods to DNB arch impl for X86_64 to implment Enable/DisableHardwareWatchpoint.
llvm-svn: 138844
2011-08-31 00:27:53 +00:00
Johnny Chen 2cf3222029 Add stubs of incomplete watchpoint implementation with "FIXME" markers.
llvm-svn: 138790
2011-08-30 01:30:03 +00:00
Greg Clayton 9414a367a1 Added the debug registers for i386 and x86_64 in preparation for watchpoints.
llvm-svn: 138770
2011-08-29 21:49:22 +00:00
Sean Callanan 677f2a263a Fixed a problem where the HasAVX() code in
debugserver did not back up %ebx/%rbx, even
though it was being clobbered by the CPUID
instruction.

llvm-svn: 137131
2011-08-09 18:10:15 +00:00
Greg Clayton dee205a31e The "bool HasAVX()" function doesn't backup and restore the
cpu registers it uses and it crashes the release version of 
debugserver. We just get lucky in Debug builds. Until this 
is fixed I am disabling AVX detection to avoid the crashes. 

llvm-svn: 137113
2011-08-09 05:27:14 +00:00
Sean Callanan c4ffe37cf1 Added support for dynamic detection of AVX, and
fixed a few bugs that revealed.  Now the "register
read" command should show AVX registers
(ymm0-ymm15) on Mac OS X platforms that support
them.

When testing this on Mac OS X, run debugserver
manually, like this:

debugserver --native-regs localhost:1111 /path/to/executable

Then

lldb /path/to/executable
...
(lldb) process connect connect://localhost:1111

llvm-svn: 135331
2011-07-16 00:49:19 +00:00
Greg Clayton c749eb89ad Added the ability to see block variables when looking up addresses
with the "target modules lookup --address <addr>" command. The variable
ID's, names, types, location for the address, and declaration is
displayed.

This can really help with crash logs since we get, on MacOSX at least,
the registers for the thread that crashed so it is often possible to
figure out some of the variable contents. 

llvm-svn: 134886
2011-07-11 05:12:02 +00:00
Greg Clayton 9a8fa9161f Added generic register numbers for simple ABI argument registers and defined
the appropriate registers for arm and x86_64. The register names for the
arguments that are the size of a pointer or less are all named "arg1", "arg2",
etc. This allows you to read these registers by name:

(lldb) register read arg1 arg2 arg3
...

You can also now specify you want to see alternate register names when executing
the read register command:

(lldb) register read --alternate
(lldb) register read -A

llvm-svn: 131376
2011-05-15 04:12:07 +00:00
Jim Ingham 1a414cfb5d Change an unconditional log to a conditional one.
llvm-svn: 131079
2011-05-09 01:06:45 +00:00
Greg Clayton effe5c956b Added new OptionGroup classes for UInt64, UUID, File and Boolean values.
Removed the "image" command and moved it to "target modules". Added an alias
for "image" to "target modules". 

Added some new target commands to be able to add and load modules to a target:
(lldb) target modules add <path>
(lldb) target modules load [--file <path>] [--slide <offset>] [<sect-name> <sect-load-addr> ...]

So you can load individual sections without running a target:

(lldb) target modules load --file /usr/lib/libSystem.B.dylib __TEXT 0x7fccc80000 __DATA 0x1234000000

Or you can rigidly slide an entire shared library:

(lldb) target modules load --file /usr/lib/libSystem.B.dylib --slid 0x7fccc80000

This should improve bare board debugging when symbol files need to be slid around manually.

llvm-svn: 130796
2011-05-03 22:09:39 +00:00
Sean Callanan c530af05fe Added AVX support to the Intel portion of debugserver. AVX
autodetection is not yet implemented, but the structures and
register reading/writing code are there.

llvm-svn: 128111
2011-03-22 21:45:30 +00:00
Greg Clayton e2d4f0d7ce Took the timeout for a ClangUserExpression down from a 10 second timeout to
500 ms.

Make MachThreadList more threadsafe.

Added code to make sure the thread register state was properly flushed for x86_64.

Fixed an missing return code for the current thread in the new thread suffix code.

Improved debugserver logging.

llvm-svn: 123815
2011-01-19 07:54:15 +00:00
Greg Clayton c4e411ffc0 Thread safety changes in debugserver and also in the process GDB remote plugin.
I added support for asking if the GDB remote server supports thread suffixes
for packets that should be thread specific (register read/write packets) because
the way the GDB remote protocol does it right now is to have a notion of a
current thread for register and memory reads/writes (set via the "$Hg%x" packet)
and a current thread for running ("$Hc%x"). Now we ask the remote GDB server
if it supports adding the thread ID to the register packets and we enable
that feature in LLDB if supported. This stops us from having to send a bunch
of packets that update the current thread ID to some value which is prone to
error, or extra packets.

llvm-svn: 123762
2011-01-18 19:36:39 +00:00
Greg Clayton 3af9ea56d3 Fixed Process::Halt() as it was broken for "process halt" after recent changes
to the DoHalt down in ProcessGDBRemote. I also moved the functionality that
was in ProcessGDBRemote::DoHalt up into Process::Halt so not every class has
to implement a tricky halt/resume on the internal state thread. The 
functionality is the same as it was before with two changes:
- when we eat the event we now just reuse the event we consume when the private
  state thread is paused and set the interrupted bool on the event if needed
- we also properly update the Process::m_public_state with the state of the
  event we consume.
  
Prior to this, if you issued a "process halt" it would eat the event, not 
update the process state, and then produce a new event with the interrupted
bit set and send it. Anyone listening to the event would get the stopped event
with a process that whose state was set to "running".

Fixed debugserver to not have to be spawned with the architecture of the
inferior process. This worked fine for launching processes, but when attaching
to processes by name or pid without a file in lldb, it would fail.

Now debugserver can support multiple architectures for a native debug session
on the current host. This currently means i386 and x86_64 are supported in
the same binary and a x86_64 debugserver can attach to a i386 executable.
This change involved a lot of changes to make sure we dynamically detect the
correct registers for the inferior process.

llvm-svn: 119680
2010-11-18 05:57:03 +00:00
Johnny Chen c0cd18d1f7 Another patch from Jean-Daniel. Thanks.
Error in dbg server -> MachProcess::SetProcessID() and misc changes to make clang++ happy.

llvm-svn: 114962
2010-09-28 16:34:56 +00:00
Chris Lattner 30fdc8d841 Initial checkin of lldb code from internal Apple repo.
llvm-svn: 105619
2010-06-08 16:52:24 +00:00