Commit Graph

831 Commits

Author SHA1 Message Date
Greg Clayton 877aaa589b Made FuncUnwinders threadsafe.
Other small cleanups as well.

llvm-svn: 123088
2011-01-08 21:19:00 +00:00
Greg Clayton 710dd5aebf Spelling changes applied from lldb_spelling.diffs from Bruce Mitchener.
Thanks Bruce!

llvm-svn: 123083
2011-01-08 20:28:42 +00:00
Greg Clayton de9d0494ef Modified the stop reply packet to be able to send the thread name using the
new "hexname" key for the "key:value;" duple that is part of the packet. This
allows for thread names to contain special characters such as $ # : ; + -

Debugserver now detects if the thread name contains special characters and
sends the chars in hex format if needed.

llvm-svn: 123053
2011-01-08 03:17:57 +00:00
Greg Clayton 671cabeeb5 Fixed an issue with the UnwindLLDB code where if there were inlined stack
frames, UnwindLLDB could create the incorrect RegisterContext for a given
stack frame because it was using the frame index (not the concrete frame
index). This was causing crashes when doing backtraces through the 
SBFrame::GetFP() because a NULL register context was being returned for the
deepest stack frame.

llvm-svn: 123052
2011-01-08 01:53:06 +00:00
Greg Clayton b0848c5d91 Fixed issues with the unwinding code where the collection of FuncUnwinders
was being searched and sorted using a shared pointer as the value which means
the pointer value was what was being searched for. This means that anytime
you did a stack backtrace, the collection of FuncUnwinders doubled and then
the array or shared pointer got sorted (by pointer value), so you had an ever
increasing collection of shared pointer where a match was never found. This
means we had a ton of duplicates in this table and would cause issues after
one had been debugging for a long time.

llvm-svn: 123045
2011-01-08 00:05:12 +00:00
Greg Clayton 58be07b28c Added memory caching to lldb_private::Process. All lldb_private::Process
subclasses will automatically be able to take advantage of caching. The
cache line size is set to 512 by default.

This greatly speeds up stack backtraces on MacOSX when using the 
ProcessGDBRemote process plug-in since only about 6300 packets per second
can be sent.

Initial speedups show:

Prior to caching: 10,000 stack frames took 5.2 seconds
After caching: 10,000 stack frames in 240 ms!

About a 20x speedup!

llvm-svn: 122996
2011-01-07 06:08:19 +00:00
Greg Clayton db59823068 Added the ability for Target::ReadMemory to prefer to read from the file
cache even when a valid process exists. Previously, Target::ReadMemory would
read from the process if there was a valid one and then fallback to the
object file cache.

llvm-svn: 122989
2011-01-07 01:57:07 +00:00
Stephen Wilson 6c0cece252 Fix a few small issues in r122981 to ensure compilation on Linux.
Also, call GetProcess instead of CalculateProcess as the latter is morally part
of the ExecutionContextScope API.

llvm-svn: 122984
2011-01-07 00:10:43 +00:00
Greg Clayton 43b4e213cb First try at patching linux for the recent RegisterContext patch. Can someone
try and build this and let me know how it goes?

llvm-svn: 122981
2011-01-06 22:35:55 +00:00
Greg Clayton 5ccbd294b2 Fixed issues with RegisterContext classes and the subclasses. There was
an issue with the way the UnwindLLDB was handing out RegisterContexts: it
was making shared pointers to register contexts and then handing out just
the pointers (which would get put into shared pointers in the thread and
stack frame classes) and cause double free issues. MallocScribble helped to
find these issues after I did some other cleanup. To help avoid any
RegisterContext issue in the future, all code that deals with them now
returns shared pointers to the register contexts so we don't end up with
multiple deletions. Also now that the RegisterContext class doesn't require
a stack frame, we patched a memory leak where a StackFrame object was being
created and leaked.

Made the RegisterContext class not have a pointer to a StackFrame object as
one register context class can be used for N inlined stack frames so there is
not a 1 - 1 mapping. Updates the ExecutionContextScope part of the 
RegisterContext class to never return a stack frame to indicate this when it
is asked to recreate the execution context. Now register contexts point to the
concrete frame using a concrete frame index. Concrete frames are all of the
frames that are actually formed on the stack of a thread. These concrete frames
can be turned into one or more user visible frames due to inlining. Each 
inlined stack frame has the exact same register context (shared via shared
pointers) as any parent inlined stack frames all the way up to the concrete 
frame itself.

So now the stack frames and the register contexts should behave much better.

llvm-svn: 122976
2011-01-06 22:15:06 +00:00
Stephen Wilson 842a9bac48 Makefile updates.
Update lib/Makefile to use current LLVM and Clang components and add the
PluginUtility library to the build.

llvm-svn: 122975
2011-01-06 22:11:47 +00:00
Greg Clayton dc4e9637ac Added the ability to get an set the desired format for SBValue objects.
Fixed the display of complex numbers in lldb_private::DataExtractor::Dump(...)
and also fixed other edge display cases in lldb_private::ClangASTType::DumpTypeValue(...).

llvm-svn: 122895
2011-01-05 18:43:15 +00:00
Stephen Wilson 87f457057f Fix typo (presumably carried over from the MacOSX plugin).
llvm-svn: 122842
2011-01-04 21:46:35 +00:00
Stephen Wilson 47bcdf3526 Provide LinuxThread with an implementation of Thread::GetUnwinder.
llvm-svn: 122841
2011-01-04 21:45:57 +00:00
Stephen Wilson f6c8120cba Remove LinuxThread::GetRawStopReason and implement Thread::GetPrivateStopReason.
llvm-svn: 122840
2011-01-04 21:45:02 +00:00
Stephen Wilson dd3a948527 StopInfo now lives in the lldb_private namespace. Qualify.
llvm-svn: 122839
2011-01-04 21:44:13 +00:00
Stephen Wilson 905d814977 Use default implementation of Thread::GetStackFrameCount and Thread::GetStackFrameAtIndex.
llvm-svn: 122838
2011-01-04 21:43:19 +00:00
Stephen Wilson 20d1cfd717 Do not load sections manually when launching a Linux process.
This code was a temporary workaround due to the lack of a dynamic loader plugin
for the Linux platform that has bit rotted over time.  Instead of replacing this
hack with another a proper plugin will be developed instead.

llvm-svn: 122837
2011-01-04 21:42:31 +00:00
Stephen Wilson 8c7795d26a Update ProcessLinux method signatures to be in line with LLDB's current API.
llvm-svn: 122836
2011-01-04 21:41:31 +00:00
Stephen Wilson 9212d7f7ae Host::StopMonitoringChildProcess has been removed. Provide a substitute.
llvm-svn: 122835
2011-01-04 21:40:25 +00:00
Stephen Wilson 5a8feeaf8a Replace old "CurrentThread" calls with equivalent "SelectedThread" calls.
llvm-svn: 122834
2011-01-04 21:39:27 +00:00
Sean Callanan e4f98722be Fixed a problem where constant results of expressions
were not being created in the proper way, meaning
results were getting lost.

llvm-svn: 122800
2011-01-04 02:41:41 +00:00
Johnny Chen 31c39dac6d Add a simple command: 'version' to the command interpreter, and an accompanying
test case test_help_version().

llvm-svn: 122515
2010-12-23 20:21:44 +00:00
Jim Ingham a2cf2637da For the language check in GetObjectDescription, if we can't find a language runtime for the value we're looking at, BUT it IS at least a pointer, try the ObjCRuntime language. That's currently the only language runtime that has an object description method anyway...
llvm-svn: 122465
2010-12-23 02:29:54 +00:00
Jim Ingham ff471a9402 "frame variable" requires that the process be running and paused or there aren't any frames... So mark the command properly as such.
llvm-svn: 122464
2010-12-23 02:17:54 +00:00
Johnny Chen d161a85700 Broadcaster::AddListener(): Bail out early if the passed in Listener pointer is
NULL, instead of registering a NULL listener and to crash later.

llvm-svn: 122429
2010-12-22 19:29:31 +00:00
Jason Molenda f830e481c2 RegisterContextLLDB.cpp (InitializeNonZerothFrame): If we get a
0 mid-stack, stop backtracing.

SectionLoadList.cpp (ResolveLoadAddress): Don't assert on an
out-of-range address, just return an invalid Address object.
The unwinder may be passing in invalid addresses on the final
stack frame and the assert is a problem.

llvm-svn: 122386
2010-12-22 02:02:45 +00:00
Greg Clayton bdea7cee67 Remove an assertion that is causing crashes. We do need to find a way to reproduce when this assertion asserts, but we should crash our debug session because of it. For now we log to stderr in hope of tracking it down.
llvm-svn: 122290
2010-12-20 23:42:12 +00:00
Johnny Chen 592b50e9dc Patch from Stephen:
Provide a missing resolve_path argument in calls to FileSpec's
constructor for both Linux and FreeBSD code fragments.

llvm-svn: 122275
2010-12-20 21:52:18 +00:00
Johnny Chen 8c46c6fee1 Patch from Stephen Wilson:
Provide full qualification for #include's.

llvm-svn: 122274
2010-12-20 21:45:22 +00:00
Johnny Chen a6846833ea Patch from Stephen Wilson:
POSIX does not define sockaddr_un.sun_len.  Set only when required by
the platform.

llvm-svn: 122266
2010-12-20 21:07:54 +00:00
Greg Clayton af67cecd47 The LLDB API (lldb::SB*) is now thread safe!
llvm-svn: 122262
2010-12-20 20:49:23 +00:00
Johnny Chen 508265afa5 Patch from Stephen Wilson:
Fix a typo where a qualification was being interpreted as a label.

llvm-svn: 122260
2010-12-20 20:33:26 +00:00
Caroline Tice 3d6086f628 Add code to make sure InputReaders finish and are cleaned up when
a Debugger object is destroyed or re-set. (Thus making sure that, for
example, the Python interpreter finishes and exits cleanly rather than
being left in an undefined state.)

llvm-svn: 122255
2010-12-20 18:35:50 +00:00
Greg Clayton fff42e6241 Line tables were trying to be too clever and only use 24 bits for a line
table offset where the offset is within a section. Increased the section
offset for line table entries to be 32 bits (from 24 bits), giving each 
section a 4G offset, and increased the section index to 32 bits (from 8 bits).

llvm-svn: 122200
2010-12-19 22:07:39 +00:00
Greg Clayton 9906250fe2 Removed logging code that I accidentally left in after recent changes.
llvm-svn: 122198
2010-12-19 21:36:12 +00:00
Greg Clayton 6ad07dd9e9 Improved our argument parsing abilities to be able to handle stuff more like
a shell would interpret it. A few examples that we now handle correctly

INPUT: "Hello "world
OUTPUT: "Hello World"

INPUT: "Hello "' World'
OUTPUT: "Hello World"

INPUT: Hello" World"
OUTPUT: "Hello World"

This broke the setting of dictionary values for the "settings set" command
for things like:

(lldb) settings set target.process.env-vars ["MY_ENV_VAR"]=YES

since we would drop the quotes. I fixed the user settings controller to use
a regular expression so it can accept any of the following inputs for
dictionary setting:

settings set target.process.env-vars ["MY_ENV_VAR"]=YES
settings set target.process.env-vars [MY_ENV_VAR]=YES
settings set target.process.env-vars MY_ENV_VAR=YES

We might want to eventually drop the first two syntaxes, but I won't make
that decision right now.

This allows more natural setting of the envirorment variables:

settings set target.process.env-vars MY_ENV_VAR=YES ABC=DEF CWD=/tmp

llvm-svn: 122166
2010-12-19 03:41:24 +00:00
Greg Clayton 3b14763356 Linux patches from Stephen Wilson.
llvm-svn: 122130
2010-12-18 01:54:34 +00:00
Greg Clayton 082bb00bc4 Linux patches from Stephen Wilson.
llvm-svn: 122125
2010-12-18 01:48:09 +00:00
Sean Callanan ed85f908d6 Fixed the handling of the _cmd parameter in the i386
ABI.

llvm-svn: 122118
2010-12-18 00:32:25 +00:00
Greg Clayton 8ac365cc4e Removed darwin specific CPU type defines to make UnwindAssemblyProfiler_x86 able to compile on linux (patch from Stephen Wilson).
llvm-svn: 122060
2010-12-17 15:54:09 +00:00
Greg Clayton 442d7544ac Removed libunwind sources as we aren't using them anymore.
llvm-svn: 122059
2010-12-17 15:50:20 +00:00
Greg Clayton f028a1fb84 Added access to set the current stack frame within a thread so any command
line commands can use the current thread/frame.

Fixed an issue with expressions that get sandboxed in an objective C method
where unichar wasn't being passed down.

Added a "static size_t Scalar::GetMaxByteSize();" function in case we need
to know the max supported by size of something within a Scalar object.

llvm-svn: 122027
2010-12-17 02:26:24 +00:00
Greg Clayton 3c310a1a79 Fixes for linux building from Stephen Wilson.
llvm-svn: 122002
2010-12-16 21:36:30 +00:00
Greg Clayton ce6d19a732 Fixes for linux building from Stephen Wilson.
llvm-svn: 122001
2010-12-16 21:33:41 +00:00
Greg Clayton 58a4c46766 Added the ability to read unsigned integers from the Process:
uint64_t Process::ReadUnsignedInteger (addr_t addr, size_t int_byte_size, Error &error);

llvm-svn: 121996
2010-12-16 20:01:20 +00:00
Jason Molenda 4f75c691a5 Remove #include of non-existant lldb/Expression/ASTSplitConsumer.h
(from Sean's commit a minute ago)

llvm-svn: 121954
2010-12-16 03:23:53 +00:00
Sean Callanan e4ec90e990 Implemented a feature where the expression parser
can avoid running the code in the target if the
expression's result is known and the expression
has no side effects.

Right now this feature is quite conservative in
its guess about side effects, and it only computes
integer results, but the machinery to make it more
sophisticated is there.

llvm-svn: 121952
2010-12-16 03:17:46 +00:00
Johnny Chen 13eb0eaea7 Patch from Stephen Wilson:
Extend Swig's include search path.

   Cover both /usr/include and /usr/local/include.  This should allow Swig to find
   system headers such as stdint.h on all platforms we currently support.

llvm-svn: 121943
2010-12-16 02:03:06 +00:00
Johnny Chen 4b33209a04 Patch by Stephen Wilson to make Swig happy building on linux.
Pass the test suite on Mac OS X Snow Leopard.

llvm-svn: 121924
2010-12-16 00:01:06 +00:00