Commit Graph

8990 Commits

Author SHA1 Message Date
Todd Fiala f105f588b3 Fix a gdbremote bug in _M/_m stub support detection.
When a stub reported $#00 (unsupported) for _M and _m
packets, the unsupported response was not handled and
the client then marked the _M/_m commands as definitely
supported.  However, they would always fail, preventing
lldb's fallback InferiorCallMmap-based allocation strategy
from being used to attempt to allocate memory in the inferior
process space.

llvm-svn: 211425
2014-06-21 00:48:09 +00:00
Greg Clayton 06f09b58f7 Fixed the "log enable gdb-remote packets" to support dumping the binary memory read packet ('x') by printing out the binary data correctly using only printable characters and removing the 0x7d escapes so the memory is readable in the packet output.
llvm-svn: 211400
2014-06-20 20:41:07 +00:00
Todd Fiala 9846d45d97 Added gdb-remote tests for Q{Save,Restore}RegisterState.
Tests for both thread suffix and no thread suffix execution.

Moved some bit-flipping helper methods from TestLldbGdbServer
into the base GdbRemoteTestCaseBase class.

llvm-svn: 211381
2014-06-20 17:39:24 +00:00
Greg Clayton 577508df83 Command files that switch input handlers didn't work, now they do.
The issue was when we called Debugger::RunIOHandler(), it would run the current IOHandler by activating it, and running it and then try to pop it and exit regardless of wether it was on top or not.

The new code will push the IOHandler that was passed in, and run the IOHandlers until the one passed in is successfully popped. This allows files for the "command source" to switch input handlers:

% cat /tmp/commands
br s -S alignLeftEdges:
br command add
bt
frame var
po self
DONE
b s -n main
br command add
bt
frame var
DONE

Note above we set a breakpoint, then add commands do it. The "br command add" will push the breakpoint comment gatherer until it sees "DONE" and then pop itself off the stack. The a new breakpoint will be set and it does the same thing again.

Now this file can be sourced from the command line:

% lldb -s /tmp/commands /path/to/a.out

And your breakpoints will be correctly setup!

<rdar://problem/17081650>

llvm-svn: 211329
2014-06-20 00:23:57 +00:00
John Wolfe 6f5cb5f14b Test commit: Correct type in two comments.
llvm-svn: 211296
2014-06-19 19:21:53 +00:00
Jim Ingham e4ce44197c Switch over to using object_getClass to get the class of an object. Previously we were
directly accessing the isa pointer of a class object to get its meta-class, but the isa
pointers are not simple pointers on arm64, so this would cause the stepping to fail.
object_getClass does whatever magic needs doing in this case.

<rdar://problem/17239690>

llvm-svn: 211289
2014-06-19 18:25:51 +00:00
Todd Fiala 4c24eba778 Fixed up gdb-remote auxv regex issues with binary data.
Fixes two causes for https://github.com/tfiala/lldb/issues/7.

1. Ensures the inferior program has started executing, by printing
a message on output first thing (per the "message:" command line arg)
and waiting for that text to arrive before doing any checks related
to auxv support.

2. Fixes up auxv-related regex patterns to be compiled with the Python
re.MULTILINE and re.DOTALL options.  The multiline is needed because
the binary data can include what look like newlines when interpreted
as text, and the DOTALL is needed to have the (.*) content portion match
newlines.

Added interrupt packet helper methods to add interrupt test sequence
packets and parse the results from them.

llvm-svn: 211283
2014-06-19 17:35:40 +00:00
Jim Ingham 2dfa00f6f2 Actually make a real scoped locker rather than constructing one that gets immediately thrown away...
llvm-svn: 211242
2014-06-18 23:40:13 +00:00
Jason Molenda 5cba569c4b Add a lock in the UnwindTable class so two Targets won't try
to modify the same UnwindTable object simultaneously.  Fix
HistoryThread and HistoryUnwind's mutex lock acqusition to
retain the lock for the duration of the operation instead of
releasing the temporary immediately.
<rdar://problem/17055023>

llvm-svn: 211241
2014-06-18 23:32:53 +00:00
Greg Clayton 9e42e92e43 Don't allow multiple line entries with the same address to exist sequentially.
The compiler, when JIT'ing code, can emit illegal DWARF line tables (address is line table sequences must increase). This changes fixes that issue by replacing previous line entries whose start address is the same with the new line entry to avoid having multiple line entries with the same address. Since the address range of lines entries is determined by the delta between the current and next line entry, this shouldn't cause any issues.

llvm-svn: 211212
2014-06-18 19:55:34 +00:00
Greg Clayton ce1843bcd6 Add an option for debugserver to propagate its environment to programs it launches using the --forward-env or -F:
% ./debugserver --forward-env localhost:1234 -- /bin/ls
% ./debugserver -F localhost:1234 -- /bin/ls

Also allow new environment variables to be set using the "--env" or "-e":

% ./debugserver --env FOO=1 --env BAR=2 localhost:1234 -- /bin/ls
% ./debugserver -e FOO=1 -e BAR=2 localhost:1234 -- /bin/ls

<rdar://problem/17350654> 

llvm-svn: 211200
2014-06-18 18:26:50 +00:00
Jim Ingham 5799e291e1 Add locking around the m_owners collection in the breakpoint site. If we are in the middle of "BreakpointLocation::ShouldStop" we don't
want other commands (like "break disable") to mutate the owners of this breakpoint out from under us.

<rdar://problem/17255589>

llvm-svn: 211136
2014-06-18 01:04:40 +00:00
Todd Fiala 518867327f Added gdb-remote auxv test for chunked reads.
Verifies that a sum of offset,length auxv reads
matches a single large read, and that the auxv data
extracted from them match.

llvm-svn: 211127
2014-06-17 22:01:27 +00:00
Jim Ingham 0c7ebe9609 Those were not the right defines for memory errors, and the right defines aren't
available.  So going back to a generic error instead.

<rdar://problem/17058708>

llvm-svn: 211124
2014-06-17 21:02:44 +00:00
Todd Fiala aeddd8bb19 Fix up lldb cmake linker flags for MacOSX.
Change r210035 broke the Darwin cmake build.  The
initial change was intended to stop the --start-group/--end-group
linker flags from being passed to non-gcc/clang-looking compilers,
stopping MSVC from warning on linking.  That change, however,
caused MacOSX cmake-based builds to start using the --start-group/
--end-group flags, even though the MacOSX linker doesn't support
them.  That broke the MacOSX clang build.

The fix keeps the newer check for a gcc-compatible compiler, but
specifically excludes MacOSX.

llvm-svn: 211123
2014-06-17 20:54:56 +00:00
Todd Fiala 8d7ab8c617 Added gdb-remote auxv tests.
First batch of auxv-related tests from llgs branch.

Includes helpers for unescaping gdb-remote binary-escaped
data, converting binary data from inferior endian-ness to
integral values, etc.

Tests on debugserver are expected to be skipped since it
doesn't support auxv and the tests are geared to be skipped
on platforms that don't broadcast support for the feature
in qSupported.  (llgs is listed as XFAIL since qSupported
support in llgs upstream is not there, so the support check
cannot work in upstream llgs.)

llvm-svn: 211105
2014-06-17 16:04:45 +00:00
Ed Maste 2e940a11e7 Avoid crashing on invalid or unreadable ELF core
Issue discovered during the GSoC 2014 project implementing FreeBSD
kernel support.  The existing elf-core Process plugin crashed trying
to read from /dev/mem (the kernel memory device).

Patch by Mike Ma.

llvm-svn: 211102
2014-06-17 14:14:33 +00:00
Kuba Brecka 58bd5cfecd Don't hardcode path to codesign_allocate.
Building OS X debugserver assumes you have an Xcode installation at /Application/Xcode.app. Let's instead detect where Xcode is using xcrun.

See http://reviews.llvm.org/D4152

llvm-svn: 211074
2014-06-16 22:55:16 +00:00
Greg Clayton 38f9cc425a Correctly classify code sections as code sections by using the S_ATTR_PURE_INSTRUCTIONS and S_ATTR_SOME_INSTRUCTIONS section flags.
Also correctly set the symbol type of symbols for S_REGULAR and other section types.

<rdar://problem/16896734>

llvm-svn: 211073
2014-06-16 22:53:16 +00:00
Greg Clayton c72f713068 Don't allow two threads to create/use the section list before it has been fully populated.
<rdar://problem/16937203>

llvm-svn: 211043
2014-06-16 19:44:24 +00:00
Chandler Carruth 4c3376de0a [cmake] Switch python install to use an 'install(DIRECTORY...)' cmake
command instead of a script.

In addition to cleaning things up, this allows more easy access to the
variables. In the old version, it tried to pass variables as -D flags to
cmake, but this didn't actually work. CMake drops all of those arguments
on the floor (try passing garbage through them) and just picks up the
limited subset of pre-defined macros. So, for example, this fixes the
build with LLVM_LIBDIR_SUFFIX=64 which is how I ended up here. =]

llvm-svn: 211028
2014-06-16 15:02:21 +00:00
Todd Fiala 720cd3f689 Move x86-specific struct user code for Linux ProcessMonitor behind #define guards.
See http://reviews.llvm.org/D4092 for details.

Change by Paul Osmialowski.  (Minor tweaks to the comment by Todd.)

llvm-svn: 211026
2014-06-16 14:49:28 +00:00
Todd Fiala 43ab82c562 Minor gdb-remote test QListThreadsInStopReply changes from llgs branch.
llvm-svn: 211006
2014-06-15 23:33:09 +00:00
Todd Fiala 50a211bb86 Added several gdb-remote tests around QListThreadsInStopReply.
llvm-svn: 210982
2014-06-14 22:00:36 +00:00
Todd Fiala be03c36ef3 Properly terminated POSIX register sets with LLDB_INVALID_REGNUM.
RegisterSets are assumed to be terminated by this value.  Loops over
register set values would fail without LLDB_INVALID_REGNUM terminating
the list.  This change adjusts the static check to account for the
size of the register set regnum list being one larger than the expected
valid register set count.

llvm-svn: 210964
2014-06-14 03:13:01 +00:00
Todd Fiala c30281afbb Added gdb-remote expedited register dupe check.
The llgs branch had a bug where register sets were not terminated with
LLDB_INVALID_REGNUM so the expedite register loop was issuing duplicate
registers.  This test was added to catch the problem.

Enhanced the key-val collection method to optionally (and by default)
support capturing duplicate values for a given key.  When that happens
and if permitted, it promotes a single key to a list and appends values
to it.

llvm-svn: 210963
2014-06-14 03:03:23 +00:00
Todd Fiala 8aae4f4312 Sync accumulated minor diffs in llgs branch gdb-remote tests.
I've been making some subtle changes to the gdb-remote tests as I implement
them in the llgs branch.  This check-in rectifies the set of diffs that
have accumulated in the llgs branch that were not present upstream.

llvm-svn: 210957
2014-06-13 23:34:17 +00:00
Jason Molenda 821a21ea30 Add documentation about the jThreadExtendedInfo packet.
llvm-svn: 210949
2014-06-13 22:40:47 +00:00
Jason Molenda b51d5cd84f Add a check that we found an ABI plugin before calling a method on it.
llvm-svn: 210942
2014-06-13 22:04:15 +00:00
Greg Clayton fc56a0123b Don't dereference target if it is NULL.
Caught by the clang static analyzer by Jason Molenda.

llvm-svn: 210941
2014-06-13 21:57:58 +00:00
Todd Fiala e50b2e44ef Added gdb-remote stop packet expedited register tests.
Expedited registers currently checked for are pc, fp and sp.

Also broke out the gdb-remote base test case logic into
class gdbremote_testcase.GdbRemoteTestCaseBase in the new
gdbremote_testcase.py file.

TestGdbRemoteExpeditedRegisters.py is the first gdb-remote area
to be contained in its own test case class file.

The monolithic TestLldbGdbServer.py has been modified to derive
from gdbremote_testcase.GdbRemoteTestCaseBase.  Soon I will
pull out all the gdb-remote functional area tests from that class
into separate classes.

I'm intending to start all GdbRemote test cases with GdbRemote
so it is easy to run them all with a -p pattern match on the
test run infrastructure.

Also scanned and removed all cases of whitespace-only lines in
the files I touched.

llvm-svn: 210931
2014-06-13 19:11:33 +00:00
Saleem Abdulrasool 6ae82a66ac Interpreter: kill some dead code
Remove commented out code and an unnecessary associated scope.  No functional
change.

llvm-svn: 210882
2014-06-13 03:30:47 +00:00
Saleem Abdulrasool e014729d34 Interpreter: explicitly initialize base class
Initialise base class std::enable_shared_from_this explicitly.  Identified by
GCC.

llvm-svn: 210881
2014-06-13 03:30:45 +00:00
Saleem Abdulrasool e8e4ae9f78 Core: address comparison of signed and unsigned types
Add a cast to ensure that the comparison is done with the same sign type.
Identified by GCC.

llvm-svn: 210880
2014-06-13 03:30:42 +00:00
Saleem Abdulrasool 3924d754e5 Remove unused variables
Address the 'variable set but not used' warning from GCC.  In some cases a few
additional calls were removed where there should be no visible side effects of
the calls (i.e. should not effect any cached state).

llvm-svn: 210879
2014-06-13 03:30:39 +00:00
Jason Molenda 567b1546ac whitespace cleanup
llvm-svn: 210875
2014-06-13 02:44:21 +00:00
Jason Molenda 705b180964 Initial merge of some of the iOS 8 / Mac OS X Yosemite specific
lldb support.  I'll be doing more testing & cleanup but I wanted to
get the initial checkin done.

This adds a new SBExpressionOptions::SetLanguage API for selecting a
language of an expression.

I added adds a new SBThread::GetInfoItemByPathString for retriving
information about a thread from that thread's StructuredData.

I added a new StructuredData class for representing
key-value/array/dictionary information (e.g. JSON formatted data).
Helper functions to read JSON and create a StructuredData object,
and to print a StructuredData object in JSON format are included.

A few Cocoa / Cocoa Touch data formatters were updated by Enrico
to track changes in iOS 8 / Yosemite.

Before we query a thread's extended information, the system runtime may 
provide hints to the remote debug stub that it will use to retrieve values
out of runtime structures.  I added a new SystemRuntime method 
AddThreadExtendedInfoPacketHints which allows the SystemRuntime to add 
key-value type data to the initial request that we send to the remote stub.

The thread-format formatter string can now retrieve values out of a thread's
extended info structured data.  The default thread-format string picks up
two of these - thread.info.activity.name and thread.info.trace_messages.

I added a new "jThreadExtendedInfo" packet in debugserver; I will
add documentation to the lldb-gdb-remote.txt doc soon.  It accepts
JSON formatted arguments (most importantly, "thread":threadnum) and
it returns a variety of information regarding the thread to lldb
in JSON format.  This JSON return is scanned into a StructuredData
object that is associated with the thread; UI layers can query the
thread's StructuredData to see if key-values are present, and if
so, show them to the user.  These key-values are likely to be
specific to different targets with some commonality among many
targets.  For instance, many targets will be able to advertise the
pthread_t value for a thread.

I added an initial rough cut of "thread info" command which will print
the information about a thread from the jThreadExtendedInfo result.
I need to do more work to make this format reasonably.

Han Ming added calls into the pmenergy and pmsample libraries if
debugserver is run on Mac OS X Yosemite to get information about the
inferior's power use.

I added support to debugserver for gathering the Genealogy information
about threads, if it exists, and returning it in the jThreadExtendedInfo
JSON result.

llvm-svn: 210874
2014-06-13 02:37:02 +00:00
Greg Clayton a2715cf108 Added the ability to save core files:
(lldb) file /bin/ls
(lldb) b malloc
(lldb) run
(lldb) process save-core /tmp/ls.core

Each ObjectFile plug-in now has the option to save core files by registering a new static callback.

llvm-svn: 210864
2014-06-13 00:54:12 +00:00
Todd Fiala b03127d8a0 Fix up extra whitespace from previous commit.
llvm-svn: 210821
2014-06-12 20:50:30 +00:00
Todd Fiala 8895c52a63 Added gdb-remote P/p thread suffix test.
Improved the P writes all GPR register values test.  It now
limits itself to GPR registers that are not containers for
other registers.  Pulled in improvements from the llgs branch.

Note on Linux llgs I'm able to write a much wider range
of registers successfully with $P using the bitflip test than I am able
to write with debugserver.  Might be worth drilling into.

llvm-svn: 210818
2014-06-12 20:38:56 +00:00
Alp Toker 10933d1489 Track clang changes from r210764
llvm-svn: 210765
2014-06-12 11:14:32 +00:00
Greg Clayton bc88d938f7 Multi-line expressions in Xcode now have a space between the line number and the expression text.
<rdar://problem/17238093>

llvm-svn: 210718
2014-06-11 23:10:41 +00:00
Ed Maste a5fd299734 Restore select limitations comment for non-Apple platforms
llvm-svn: 210682
2014-06-11 18:10:41 +00:00
Todd Fiala 5cc2417532 Add gdb-remote P register write test.
Added test that attempts to write a value to each general
purpose register that is bit-flipped from the initial read
value.  It then reads it back to see if it takes.

Right now I just assert that at least one register bit flip
write succeeds.  I added a note that on the MacOSX x86_64
debugserver case, the only writes that succeed from the GPR
set are rax thru rdx, rdi, rsi and rbp.  The failures are E32
failure-at-write-attempt issues on the debugserver end.
I'll revisit this after implementing in the llgs linux-x86_64 branch.
The packet log looks good but I may have a subtle mistake in the code.

llvm-svn: 210681
2014-06-11 18:09:01 +00:00
Todd Fiala 712d1557a2 Fixed gdb-remote M test length parameter, added overwrite to test.
Initial check-in provided a nibble count instead of byte count for
the memory to write.  Fixed that.

Enhanced test to check for overwrite past the expected range of
writing to verify the correct amount is written.

llvm-svn: 210602
2014-06-10 23:12:28 +00:00
Todd Fiala 20e8edf5c7 Added gdb-remote test to verify M memory write.
llvm-svn: 210594
2014-06-10 22:15:56 +00:00
Ed Maste f57dcbb615 Remove duplicated code
We preivously had two copies of ::BytesAvailable with only trivial
differences between them, and fixes have been applied to only one of
them.

Instead of duplicating the whole function, hide the FD_SET differences
behind a macro.  This leaves only one small __APPLE__-specific #if
block, and fixes ^C on non-__APPLE__ platforms.

llvm-svn: 210592
2014-06-10 21:33:43 +00:00
Todd Fiala f9763874b7 Added gdb-remote tests around $qSupported.
Right now it just checks that qSupported returns at least
one recognized gdb stub feature.

llvm-svn: 210573
2014-06-10 20:16:31 +00:00
Todd Fiala 697bff9cb7 Added gdb-remote test for s packet, single stepping.
llvm-svn: 210481
2014-06-09 17:46:37 +00:00
Todd Fiala 58f770ffa4 Remove invalid comment from last commit.
llvm-svn: 210376
2014-06-06 21:59:19 +00:00