Commit Graph

9650 Commits

Author SHA1 Message Date
Greg Clayton e5bbe10d9e Don't lock the IOHandlerList::m_mutex in Debugger::RunIOHandler(...) since if a process is resumed or halted, it will try to push/pop the process IOHandler and it will deadlock.
<rdar://problem/18610852>

llvm-svn: 219620
2014-10-13 16:54:26 +00:00
Todd Fiala 75f47c3a5d llgs: fixes to PTY/gdb-remote inferior stdout/stderr handling, logging addtions.
With this change, both local-process llgs and remote-target llgs stdout/stderr
handling from inferior work correctly.

Several log lines have been added around PTY and stdout/stderr redirection
logic on the lldb client side.

Regarding remote llgs execution, see the following:

With these changes, remote llgs with $O now works properly:

$ lldb
(lldb) platform select remote-linux
(lldb) target create ~/some/inferior/exe
(lldb) gdb-remote {some-target}:{port}
(lldb) run

The sequence above will correctly redirect stdout/stderr over gdb-remote $O,
as is needed for remote debugging.  That sequence assumes there is a lldb-gdbserver
exe running on the target with {some-host}:{port}.

You can replace the gdb-remote command with a '(lldb) platform connect
connect://{target-ip}:{target-port}'.  If you do this and have a
lldb-platform running on the remote end, it will go ahead and launch
llgs for lldb for each target instance that is run/attached.

For local debugging with llgs, the following sequence also works, and
uses local PTYs instead to avoid $O and extra gdb-remote messages:

$ lldb
(lldb) settings set platform.plugin.linux.use-llgs true
(lldb) target create ~/some/inferior/exe
(lldb) run

The above will run the inferior using llgs on the local host, and
will use PTYs rather than $O redirection.

This change also removes the logging that happened after the fork but
before the exec when llgs is launching a new inferior process.  Some
aspect of the file handling during that portion of code would not do
the right thing with log handling.  We might want to go back later
and have that communicate over a pipe from the child to parent to pass
along any messages that previously were logged in that section of code.

llvm-svn: 219578
2014-10-11 21:42:09 +00:00
Todd Fiala 41d96d2d03 Fix cmake build for PluginInstrumentationRuntimeAddressSanitizer.
llvm-svn: 219576
2014-10-11 20:11:18 +00:00
Kuba Brecka 6392754839 Add a IsInstrumentationRuntimePresent SB API
Reviewed at http://reviews.llvm.org/D5738

This adds an SB API into SBProcess:
  bool SBProcess::IsInstrumentationRuntimePresent(InstrumentationRuntimeType type);
which simply tells whether a particular InstrumentationRuntime (read "ASan") plugin is present and active.

llvm-svn: 219560
2014-10-11 01:59:32 +00:00
Kuba Brecka 9b7f36b521 include compiler-rt in build-llvm.pl
Reviewed at http://reviews.llvm.org/D5736

The new test cases for ASan fail if the llvm build that is used with LLDB doesn't have compiler-rt (because the resulting compiler then cannot build with -fsanitize=address). Let's include compiler-rt in build-llvm.pl script and make sure we actually *build* it by removing the NO_RUNTIME_LIBS=1 argument used in the make line. After this, the ASan tests pass on a fresh svn checkout.

llvm-svn: 219555
2014-10-11 00:53:32 +00:00
Eric Christopher e709821359 Fix the build after the recent plugin additions for
AddressSanitizer by adding dependencies and definitions.

llvm-svn: 219554
2014-10-11 00:38:55 +00:00
Jim Ingham 26c7bf9312 Rework the way we pass "run multiple command" options to the various API's that
do that (RunCommandInterpreter, HandleCommands, HandleCommandsFromFile) to gather
the options into an options class.  Also expose that to the SB API's.

Change the way the "-o" options to the lldb driver are processed so:
1) They are run synchronously - didn't really make any sense to run the asynchronously.
2) The stop on error
3) "quit" in one of the -o commands will not quit lldb - not the command interpreter
that was running the -o commands.

I added an entry to the run options to stop-on-crash, but I haven't implemented that yet.

llvm-svn: 219553
2014-10-11 00:38:27 +00:00
Eric Christopher fd1a9362be Reinstate setting addr_width to the result of the computation,
but in the conditional rather than at initialization time.

llvm-svn: 219549
2014-10-11 00:04:42 +00:00
Eric Christopher 53b293e447 Remove default case from a fully covered switch.
llvm-svn: 219548
2014-10-11 00:00:08 +00:00
Eric Christopher baaf079423 Fix unused variable warning from r219544.
llvm-svn: 219547
2014-10-10 23:58:30 +00:00
Kuba Brecka afdf842b3f LLDB AddressSanitizer instrumentation runtime plugin, breakpint on error and report data extraction
Reviewed at http://reviews.llvm.org/D5592

This patch gives LLDB some ability to interact with AddressSanitizer runtime library, on top of what we already have (historical memory stack traces provided by ASan). Namely, that's the ability to stop on an error caught by ASan, and access the report information that are associated with it. The report information is also exposed into SB API.

More precisely this patch...

adds a new plugin type, InstrumentationRuntime, which should serve as a generic superclass for other instrumentation runtime libraries, these plugins get notified when modules are loaded, so they get a chance to "activate" when a specific dynamic library is loaded
an instance of this plugin type, AddressSanitizerRuntime, which activates itself when it sees the ASan dynamic library or founds ASan statically linked in the executable
adds a collection of these plugins into the Process class
AddressSanitizerRuntime sets an internal breakpoint on __asan::AsanDie(), and when this breakpoint gets hit, it retrieves the report information from ASan
this breakpoint is then exposed as a new StopReason, eStopReasonInstrumentation, with a new StopInfo subclass, InstrumentationRuntimeStopInfo
the StopInfo superclass is extended with a m_extended_info field (it's a StructuredData::ObjectSP), that can hold arbitrary JSON-like data, which is the way the new plugin provides the report data
the "thread info" command now accepts a "-s" flag that prints out the JSON data of a stop reason (same way the "-j" flag works now)
SBThread has a new API, GetStopReasonExtendedInfoAsJSON, which dumps the JSON string into a SBStream
adds a test case for all of this
I plan to also get rid of the original ASan plugin (memory history stack traces) and use an instance of AddressSanitizerRuntime for that purpose.

Kuba

llvm-svn: 219546
2014-10-10 23:43:03 +00:00
Jason Molenda aff1b357b0 Add a new disassembly-format specification so that the disassembler
output style can be customized.  Change the built-in default to be
more similar to gdb's disassembly formatting.

The disassembly-format for a gdb-like output is

${addr-file-or-load} <${function.name-without-args}${function.concrete-only-addr-offset-no-padding}>: 

The disassembly-format for the lldb style output is

{${function.initial-function}{${module.file.basename}`}{${function.name-without-args}}:\n}{${function.changed}\n{${module.file.basename}`}{${function.name-without-args}}:\n}{${current-pc-arrow} }{${addr-file-or-load}}: 

The two backticks in the lldb style formatter triggers the sub-expression evaluation in
CommandInterpreter::PreprocessCommand() so you can't use that one as-is ... changing to
use ' characters instead of ` would work around that.

<rdar://problem/9885398> 

llvm-svn: 219544
2014-10-10 23:07:36 +00:00
Enrico Granata 0aa6926d0b When parsing ObjC types from encoded strings (and disallowing any-type), the ^? combination gets resolved to no type, while we could resolve it to void*
I don't think on any of the platforms where ObjC matters sizeof(T*) depends on T, so even if we never figured out the pointee type, the pointer type should still be sane
This might also allow some limited inspection where previously none was possible, so a win

llvm-svn: 219540
2014-10-10 22:45:38 +00:00
Andrew MacPherson 1d33e8d38f Update assertion in DYLDRendezvous.
This accounts for the case where a dlopen() call fails when loading a library with a missing dependency.

llvm-svn: 219520
2014-10-10 17:47:00 +00:00
Todd Fiala 2c77a427ab Reverse out r219169 related to quote handling.
Addresses pr/21190 (http://llvm.org/bugs/show_bug.cgi?id=21190).

r219169 implemented this change list:
http://reviews.llvm.org/D5472 for more details.

llvm-svn: 219461
2014-10-10 01:11:39 +00:00
Todd Fiala 348fb385d5 Enable local llgs debugging on Linux when the use-llgs-for-local setting is enabled.
See http://reviews.llvm.org/D5695 for details.

This change does the following:

Enable lldb-gdbserver (llgs) usage for local-process Linux debugging.
To turn on local llgs debugging support, which is disabled by default, enable this setting:

(lldb) settings set platform.plugin.linux.use-llgs-for-local true
Adds a stream-based Dump() function to FileAction.
Pushes some platform methods that Linux (and FreeBSD) will want to share with MacOSX from PlatformDarwin into PlatformPOSIX.

Reviewed by Greg Clayton.

llvm-svn: 219457
2014-10-10 00:09:16 +00:00
Enrico Granata ca0e5ad3d3 In cases where you'd use an expression to get a value to insert in a command, be ready to use synthetic children if they are there. Those are now a source of values, so worth checking for
llvm-svn: 219452
2014-10-09 23:09:40 +00:00
Enrico Granata 6030e04591 Enhance the libc++ list data formatter so that it does not start looking for loops until asked to actually fetch children. Also, if you're going to read child X, only look for a loop in the first X nodes. Loops further down the road won't really matter. This should speed things up for large lists and fix rdar://18583790
llvm-svn: 219447
2014-10-09 21:56:30 +00:00
Zachary Turner 8ada0b9713 Correctly fix ScriptInterpreterPython::ExecuteOneLine for windows.
llvm-svn: 219435
2014-10-09 20:17:53 +00:00
Enrico Granata ddac7611ee If a ValueObject has a child that vends synthetic children, but only does so to generate a value for itself, that's not a disqualifier from one-line printing. Also, fetch synthetic values if available and requested for children as well while printing them
llvm-svn: 219427
2014-10-09 18:47:36 +00:00
Enrico Granata 538a88aac7 Add an API on ValueObject to retrieve the desired dynamic/synthetic combination all at once, if available, working somewhat hard to avoid returning an invalid ValueObject in the process
llvm-svn: 219423
2014-10-09 18:24:30 +00:00
Todd Fiala 7aafc4a5ff thread state coordinator: fixed bug in thread running state book-keeping.
Adds a test to verify that a thread resume request marks the thread as running
after doing the resume callback.  This test fails without the corresponding
ThreadStateCoordinator.cpp change.

Fixes the code where that state was not maintained.

llvm-svn: 219412
2014-10-09 17:00:55 +00:00
Todd Fiala ac33cc9ce7 logging: added more logging to the Target/Platform launch & attach sequence.
llvm-svn: 219377
2014-10-09 01:02:08 +00:00
Todd Fiala 616b827ad0 Added a bit of logging around GDBRemoteCommunicationClient::SendGDBStoppointTypePacket.
llvm-svn: 219374
2014-10-09 00:55:04 +00:00
Todd Fiala c85d6f741c Fix MacOSX Xcode build for Pipe changes.
Also cleans up the lldb Xcode project's Source > Host > posix directory
to use group-relative file naming.  Also alphabetizes file entries.

llvm-svn: 219373
2014-10-09 00:52:05 +00:00
Todd Fiala 952bccd212 POSIX dynamic loader: add more logging around launch/attach, fix breakpoint handling on entry callback.
This change adds some logging around dynamic loader handling.
It also fixes an issue where the dynamic loader entry breakpoint can end
up being re-inserted, showing the wrong (i.e. software breakpoint) instruction
at the stop location when a backtrace is displayed at program startup.

I discussed with Jim Ingham a few weeks back.  Essentially the
one-hit breakpoints need to make it back to public state handling before
the software breakpoint gets cleared.  The flow I was hitting was that
the breakpoint would get set, it would get hit, it would get cleared to
step over, then it would get reapplied, when we never wanted it reapplied.
Stops at the beginning of execution would then show backtraces with
software breakpoint instructions in it, erroneously.  This change fixes it.
There might be a more elegant way to do this, or a flow change somewhere else
to avoid, but it does fix an issue I experienced in startup breakpoint handling.

llvm-svn: 219371
2014-10-09 00:11:43 +00:00
Enrico Granata f4c1242bd9 Add a SyntheticValueProviderFrontEnd that serves internally the same purpose as lldb.SBSyntheticValueProvider serves on the API layer
llvm-svn: 219352
2014-10-08 22:53:01 +00:00
Zachary Turner 57cfe3405b Fix compile error on posix.
llvm-svn: 219340
2014-10-08 20:59:55 +00:00
Zachary Turner b2df30d652 Fix deadlock in Python one-line execution.
Python one-line execution was using ConnectionFileDescriptor to do
a non-blocking read against a pipe.  This won't work on Windows,
as CFD is implemented using select(), and select() only works with
sockets on Windows.

The solution is to use ConnectionGenericFile on Windows, which uses
the native API to do overlapped I/O on the pipe.  This in turn
requires re-implementing Host::Pipe on Windows using native OS
handles instead of the more portable _pipe CRT api.

Reviewed by: Greg Clayton
Differential Revision: http://reviews.llvm.org/D5679

llvm-svn: 219339
2014-10-08 20:38:41 +00:00
Enrico Granata 8387e2fafe Add a (Python only) lldb.SBSyntheticValueProvider class to our API surface
On a suggestion from Jim Ingham, this class allows you to very easily define synthetic child providers that return a synthetic value (in the sense of r219330), but no children

Also, document this new feature in our www docs

llvm-svn: 219337
2014-10-08 20:10:09 +00:00
Enrico Granata d07cfd3ae4 Extend synthetic children to produce synthetic values (as in, those that GetValueAsUnsigned(), GetValueAsCString() would return)
The way to do this is to write a synthetic child provider for your type, and have it vend the (optional) get_value function.
If get_value is defined, and it returns a valid SBValue, that SBValue's value (as in lldb_private::Value) will be used as the synthetic ValueObject's Value

The rationale for doing things this way is twofold:

- there are many possible ways to define a "value" (SBData, a Python number, ...) but SBValue seems general enough as a thing that stores a "value", so we just trade values that way and that keeps our currency trivial
- we could introduce a new level of layering (ValueObjectSyntheticValue), a new kind of formatter (synthetic value producer), but that would complicate the model (can I have a dynamic with no synthetic children but synthetic value? synthetic value with synthetic children but no dynamic?), and I really couldn't see much benefit to be reaped from this added complexity in the matrix
On the other hand, just defining a synthetic child provider with a get_value but returning no actual children is easy enough that it's not a significant road-block to adoption of this feature

Comes with a test case

llvm-svn: 219330
2014-10-08 18:27:36 +00:00
Ed Maste ef9bc3d857 Add decorator for FreeBSD failure
llvm.org/pr21211

llvm-svn: 219329
2014-10-08 18:16:24 +00:00
Ed Maste c6bd742aed Skip asan test on FreeBSD
The build fails due to missing asan runtime in the FreeBSD base system.
Instead of marking it expected fail, just skip until we have the runtime
available.

llvm.org/pr21136

llvm-svn: 219328
2014-10-08 18:15:48 +00:00
Todd Fiala e231efaee5 llgs: add logging to Native*Protocol breakpoints around byte values replaced and restored.
Useful for verifying what bytes a software breakpoint clobbers/restores.

llvm-svn: 219318
2014-10-08 17:14:53 +00:00
Shawn Best 1ded74a8c4 Minor comment change to test out svn access
llvm-svn: 219269
2014-10-08 01:50:37 +00:00
Jim Ingham 8b91d0cd01 Fix stepping over the inserted breakpoint trap when the NEXT instruction
also contains a breakpoint.

<rdar://problem/18519712>

llvm-svn: 219263
2014-10-08 01:03:54 +00:00
Jason Molenda ac18ea7abb Update TestInlinedBreakpoints to reflect the fact that
the default search method is "always" as of r218405.

For the purposes of this test, set it back to "headers"
to confirm that the file+line breakpoint doesn't work,
then verify that it does work with "always".  Leave it
in "always" setting.
<rdar://problem/18564244> 

llvm-svn: 219251
2014-10-07 23:37:28 +00:00
Enrico Granata 95c39ce2f3 Change this test case so that it no longer fails in the face of Bug 21190. The failure and the bug are entirely unrelated, and it's trivial to write a repro case for that bug anyway, so no need to use this complicated test case
llvm-svn: 219248
2014-10-07 22:57:57 +00:00
Jason Molenda a410679ed6 When we detect a stack unwind loop, before we abort
the backtrace, try falling back to the architecture default
unwind plan and see if we can backtrace a little further.
<rdar://problem/18556719> 

llvm-svn: 219247
2014-10-07 22:55:13 +00:00
Enrico Granata 29551955a9 The type category enable * was implemented assuming a previous disable * had happened. While that will most likely be true in practice, the consequences of this not being the case will be a crash. I fix the crash by doing two things: 1) don't let already-enabled categories be enabled anyway; 2) if a category were disabled but with a bogus last-enabled position - highly highly unlikely - just put it in the first empty slot. I am not so sure 2) is bulletproof perfect, but I also don't think 2) will practically ever happen
llvm-svn: 219245
2014-10-07 22:15:27 +00:00
Jim Ingham b7bee50062 This test case was incorrect, it was relying on the fact
that the function we were calling would continue to sleep
for the requested time even if it was interrupted.  That is
not true of std::this_thread::sleep_for, at least not on OS X.

Fix the test case so that if it wakes up early, it goes back
to sleep till the time is actually greater than the end point.

<rdar://problem/18523742>

llvm-svn: 219234
2014-10-07 20:59:00 +00:00
Zachary Turner 5cbeb850fb Fix compile error on Windows.
llvm-svn: 219232
2014-10-07 20:34:36 +00:00
Greg Clayton 2f547177f8 Improved the TreeItem delegate which simplifies making tree items:
- tree items can define any number of key/value pairs
- creating a tree you specify which columns you want to display and it will pick out the right key/value pairs from the new tree item dictionaries
- added new "tk-target" command to explore the target's images, sections, symbols, compile units and line tables.

llvm-svn: 219219
2014-10-07 17:30:23 +00:00
Todd Fiala f72fa67fc3 Fix spurious output to command line when launching a process on Linux.
See http://reviews.llvm.org/D5632 for details.

Change by Shawn Best.

llvm-svn: 219213
2014-10-07 16:05:21 +00:00
Ed Maste 59cca5dc29 Fix exception text to match function name
llvm-svn: 219181
2014-10-07 01:57:52 +00:00
Todd Fiala a9ae365b2d Add "target.expr-parser-compiler-args" setting.
This setting contains the following:
A list containing all the arguments to be passed to the expression parser compiler.

This change also ensures quoted arguments are handled appropriately.

See http://reviews.llvm.org/D5472 for more details.

Change by Tong Shen.

llvm-svn: 219169
2014-10-06 23:13:30 +00:00
Jason Molenda 7dd293904d Add another address to check for the kernel's load addr in debug configs.
<rdar://problem/18560328> 

llvm-svn: 219152
2014-10-06 22:23:30 +00:00
Jason Molenda 02ad9378d7 Update xcode project file to match zach's move of connetionfiledescriptor in r219143.
llvm-svn: 219151
2014-10-06 22:15:29 +00:00
Enrico Granata b2c59e9faa And here's another test case that uses the SB API. Skip it too
llvm-svn: 219148
2014-10-06 22:00:35 +00:00
Enrico Granata 91c2d6d642 This test also relies on the SB API headers. Same logic
llvm-svn: 219147
2014-10-06 21:42:22 +00:00