| #
aa739093 |
| 18-May-2012 |
Johnny Chen <[email protected]> |
rdar://problem/11140741
For "process attach", make the success criterion as the inferior changes its state to eStateStopped. Otherwise, mark it as a failure and say so.
llvm-svn: 157036
|
|
Revision tags: llvmorg-3.1.0, llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1 |
|
| #
1517dd33 |
| 31-Mar-2012 |
Greg Clayton <[email protected]> |
Patch from Viktor Kutuzov: delete the temporary process we created when "process connect" fails.
llvm-svn: 153790
|
| #
4bddaeb5 |
| 16-Feb-2012 |
Jim Ingham <[email protected]> |
Add a general mechanism to wait on the debugger for Broadcasters of a given class/event bit set. Use this to allow the lldb Driver to emit notifications for breakpoint modifications. <rdar://problem/
Add a general mechanism to wait on the debugger for Broadcasters of a given class/event bit set. Use this to allow the lldb Driver to emit notifications for breakpoint modifications. <rdar://problem/10619974>
llvm-svn: 150665
show more ...
|
| #
c3776bf2 |
| 09-Feb-2012 |
Greg Clayton <[email protected]> |
First pass at mach-o core file support is in. It currently works for x86_64 user space programs. The core file support is implemented by making a process plug-in that will dress up the threads and s
First pass at mach-o core file support is in. It currently works for x86_64 user space programs. The core file support is implemented by making a process plug-in that will dress up the threads and stack frames by using the core file memory.
Added many default implementations for the lldb_private::Process functions so that plug-ins like the ProcessMachCore don't need to override many many functions only to have to return an error.
Added new virtual functions to the ObjectFile class for extracting the frozen thread states that might be stored in object files. The default implementations return no thread information, but any platforms that support core files that contain frozen thread states (like mach-o) can make a module using the core file and then extract the information. The object files can enumerate the threads and also provide the register state for each thread. Since each object file knows how the thread registers are stored, they are responsible for creating a suitable register context that can be used by the core file threads.
Changed the process CreateInstace callbacks to return a shared pointer and to also take an "const FileSpec *core_file" parameter to allow for core file support. This will also allow for lldb_private::Process subclasses to be made that could load crash logs. This should be possible on darwin where the crash logs contain all of the stack frames for all of the threads, yet the crash logs only contain the registers for the crashed thrad. It should also allow some variables to be viewed for the thread that crashed.
llvm-svn: 150154
show more ...
|
| #
ad9e828c |
| 29-Nov-2011 |
Greg Clayton <[email protected]> |
<rdar://problem/10429064>
Fixed an issue where if we are debugging on a remote platform and set a platform path for our executable, it was not being honored by the new launch functions that used the
<rdar://problem/10429064>
Fixed an issue where if we are debugging on a remote platform and set a platform path for our executable, it was not being honored by the new launch functions that used the ProcessLaunchInfo.
llvm-svn: 145371
show more ...
|
| #
c982b3d6 |
| 28-Nov-2011 |
Greg Clayton <[email protected]> |
CommandObjectProcess was recently changed to automatically use the platform to launch a process for debugging. Since this isn't supported on all platforms, we need to do what we used to do if this is
CommandObjectProcess was recently changed to automatically use the platform to launch a process for debugging. Since this isn't supported on all platforms, we need to do what we used to do if this isn't supported. I added:
bool Platform::CanDebugProcess (); This will get checked before trying to launch a process for debugging and then fall back to launching the process through the current host debugger. This should solve the issue for linux and keep the platform code clean.
Centralized logging code for logging errors, warnings and logs when reporting things for modules or symbol files. Both lldb_private::Module and lldb_private::SymbolFile now have the following member functions:
void LogMessage (Log *log, const char *format, ...);
void ReportWarning (const char *format, ...);
void ReportError (const char *format, ...);
These will all output the module name and object (if any) such as:
"error: lldb.so ...." "warning: my_archive.a(foo.o) ...." This will keep the output consistent and stop a lot of logging calls from having to try and output all of the information that uniquely identifies a module or symbol file. Many places in the code were grabbing the path to the object file manually and if the module represented a .o file in an archive, we would see log messages like:
error: foo.a - some error happened
llvm-svn: 145219
show more ...
|
| #
162b597c |
| 21-Nov-2011 |
Greg Clayton <[email protected]> |
Save the arguments for a process launch in the target.run-args so they can easily be used in the next run.
llvm-svn: 145051
|
| #
ee95ed50 |
| 17-Nov-2011 |
Greg Clayton <[email protected]> |
Use a pseudoterminal for local processes if no STDIO redirection or other file actions have been specified.
llvm-svn: 144922
|
|
Revision tags: llvmorg-3.0.0, llvmorg-3.0.0-rc4 |
|
| #
2637f825 |
| 17-Nov-2011 |
Greg Clayton <[email protected]> |
Fixed an issue with the pthread_setspecific() where we weren't NULL-ing out the thread specific data and were destroying the thread specfic data more than once.
Also added the ability to ask a lldb:
Fixed an issue with the pthread_setspecific() where we weren't NULL-ing out the thread specific data and were destroying the thread specfic data more than once.
Also added the ability to ask a lldb::StateType if it is stopped with an additional paramter of "must_exist" which means that the state must be a stopped state for a process that still exists. This means that eStateExited and eStateUnloaded will no longer return true if "must_exist" is set to true.
llvm-svn: 144875
show more ...
|
| #
144f3a9c |
| 15-Nov-2011 |
Greg Clayton <[email protected]> |
Added a new class to Process.h: ProcessAttachInfo. This class contains enough info for us to attach by pid, or by name and will also allow us to eventually do a lot more powerful attaches. If you loo
Added a new class to Process.h: ProcessAttachInfo. This class contains enough info for us to attach by pid, or by name and will also allow us to eventually do a lot more powerful attaches. If you look at the options for the "platform process list" command, there are many options which we should be able to specify. This will allow us to do things like "attach to a process named 'tcsh' that has a parent process ID of 123", or "attach to a process named 'x' which has an effective user ID of 345".
I finished up the --shell implementation so that it can be used without the --tty option in "process launch". The "--shell" option now can take an optional argument which is the path to the shell to use (or a partial name like "sh" which we will find using the current PATH environment variable).
Modified the Process::Attach to use the new ProcessAttachInfo as the sole argument and centralized a lot of code that was in the "process attach" Execute function so that everyone can take advantage of the powerful new attach functionality.
llvm-svn: 144615
show more ...
|
| #
c9ed478a |
| 12-Nov-2011 |
Greg Clayton <[email protected]> |
Added the ability to run a process in a shell on MacOSX currently when using the --tty option. So you can now get shell expansion and file redirection:
(lldb) process launch --tty --shell -- *.jpg <
Added the ability to run a process in a shell on MacOSX currently when using the --tty option. So you can now get shell expansion and file redirection:
(lldb) process launch --tty --shell -- *.jpg < in.txt > out.txt
Again, the "--tty" is mandatory for now until we hook this up to other functions. The shell is also currently hard coded to "/bin/bash" and not the "SHELL" variable. "/bin/tcsh" was causing problems which I need to dig into.
llvm-svn: 144443
show more ...
|
| #
1d885966 |
| 08-Nov-2011 |
Greg Clayton <[email protected]> |
Moved many of the "settings" that used to be in "target.process.*" to just be in the target. All of the environment, args, stdin/out/err files, etc have all been moved. Also re-enabled the ability to
Moved many of the "settings" that used to be in "target.process.*" to just be in the target. All of the environment, args, stdin/out/err files, etc have all been moved. Also re-enabled the ability to launch a process in a separate terminal on MacOSX.
llvm-svn: 144061
show more ...
|
|
Revision tags: llvmorg-3.0.0-rc3 |
|
| #
982c9762 |
| 03-Nov-2011 |
Greg Clayton <[email protected]> |
Modified all Process::Launch() calls to use a ProcessLaunchInfo structure on internal only (public API hasn't changed) to simplify the paramter list to the launch calls down into just one argument. A
Modified all Process::Launch() calls to use a ProcessLaunchInfo structure on internal only (public API hasn't changed) to simplify the paramter list to the launch calls down into just one argument. Also all of the argument, envronment and stdio things are now handled in a much more centralized fashion.
llvm-svn: 143656
show more ...
|
|
Revision tags: llvmorg-3.0.0-rc2 |
|
| #
86edbf41 |
| 26-Oct-2011 |
Greg Clayton <[email protected]> |
Cleaned up many error codes. For any who is filling in error strings into lldb_private::Error objects the rules are: - short strings that don't start with a capitol letter unless the name is a clas
Cleaned up many error codes. For any who is filling in error strings into lldb_private::Error objects the rules are: - short strings that don't start with a capitol letter unless the name is a class or anything else that is always capitolized - no trailing newline character - should be one line if possible
Implemented a first pass at adding "--gdb-format" support to anything that accepts format with optional size/count.
llvm-svn: 142999
show more ...
|
| #
81c22f61 |
| 19-Oct-2011 |
Greg Clayton <[email protected]> |
Moved lldb::user_id_t values to be 64 bit. This was going to be needed for process IDs, and thread IDs, but was mainly needed for for the UserID's for Types so that DWARF with debug map can work flaw
Moved lldb::user_id_t values to be 64 bit. This was going to be needed for process IDs, and thread IDs, but was mainly needed for for the UserID's for Types so that DWARF with debug map can work flawlessly. With DWARF in .o files the type ID was the DIE offset in the DWARF for the .o file which is not unique across all .o files, so now the SymbolFileDWARFDebugMap class will make the .o file index part (the high 32 bits) of the unique type identifier so it can uniquely identify the types.
llvm-svn: 142534
show more ...
|
|
Revision tags: llvmorg-3.0.0-rc1 |
|
| #
cac9c5f9 |
| 24-Sep-2011 |
Greg Clayton <[email protected]> |
Added to the public API to allow symbolication: - New SBSection objects that are object file sections which can be accessed through the SBModule classes. You can get the number of sections, get a
Added to the public API to allow symbolication: - New SBSection objects that are object file sections which can be accessed through the SBModule classes. You can get the number of sections, get a section at index, and find a section by name. - SBSections can contain subsections (first find "__TEXT" on darwin, then us the resulting SBSection to find "__text" sub section). - Set load addresses for a SBSection in the SBTarget interface - Set the load addresses of all SBSection in a SBModule in the SBTarget interface - Add a new module the an existing target in the SBTarget interface - Get a SBSection from a SBAddress object
This should get us a lot closer to being able to symbolicate using LLDB through the public API.
llvm-svn: 140437
show more ...
|
| #
c14ee32d |
| 22-Sep-2011 |
Greg Clayton <[email protected]> |
Converted the lldb_private::Process over to use the intrusive shared pointers.
Changed the ExecutionContext over to use shared pointers for the target, process, thread and frame since these objects
Converted the lldb_private::Process over to use the intrusive shared pointers.
Changed the ExecutionContext over to use shared pointers for the target, process, thread and frame since these objects can easily go away at any time and any object that was holding onto an ExecutionContext was running the risk of using a bad object.
Now that the shared pointers for target, process, thread and frame are just a single pointer (they all use the instrusive shared pointers) the execution context is much safer and still the same size.
Made the shared pointers in the the ExecutionContext class protected and made accessors for all of the various ways to get at the pointers, references, and shared pointers.
llvm-svn: 140298
show more ...
|
| #
fd54b368 |
| 20-Sep-2011 |
Jason Molenda <[email protected]> |
Update declarations for all functions/methods that accept printf-style stdarg formats to use __attribute__ format so the compiler can flag incorrect uses. Fix all incorrect uses. Most of these are
Update declarations for all functions/methods that accept printf-style stdarg formats to use __attribute__ format so the compiler can flag incorrect uses. Fix all incorrect uses. Most of these are innocuous, a few were resulting in crashes.
llvm-svn: 140185
show more ...
|
| #
31412642 |
| 15-Sep-2011 |
Jim Ingham <[email protected]> |
Change the "attach" command to always wait synchronously for the target to stop. It's not very useful to return the prompt in mid-attach, and it makes reporting the result of the attach hard to do.
Change the "attach" command to always wait synchronously for the target to stop. It's not very useful to return the prompt in mid-attach, and it makes reporting the result of the attach hard to do.
llvm-svn: 139764
show more ...
|
| #
aa516843 |
| 11-Aug-2011 |
Greg Clayton <[email protected]> |
Patch for "process load" by Filipe Cabecinhas.
Filipe was attempting to do a:
(lldb) process load ~/path/foo.dylib
But the process load command wasn't resolving the path. We have to be careful abo
Patch for "process load" by Filipe Cabecinhas.
Filipe was attempting to do a:
(lldb) process load ~/path/foo.dylib
But the process load command wasn't resolving the path. We have to be careful about resolving the path here because we want to do it in terms of the platform we are using. the "~/" can mean a completely different path if you are remotely debugging on another machine as another user. So to support this, platforms now can resolve remote paths:
bool Platform::ResolveRemotePath (const FileSpec &platform_path, FileSpec &resolved_platform_path);
The host/local platform will just resolve the path.
llvm-svn: 137307
show more ...
|
| #
aa149cbd |
| 11-Aug-2011 |
Greg Clayton <[email protected]> |
Added the ability to remove orphaned module shared pointers from a ModuleList. This is helping us track down some extra references to ModuleSP objects that are causing things to get kept around for t
Added the ability to remove orphaned module shared pointers from a ModuleList. This is helping us track down some extra references to ModuleSP objects that are causing things to get kept around for too long.
Added a module pointer accessor to target and change a lot of code to use it where it would be more efficient.
"taret delete" can now specify "--clean=1" which will cleanup the global module list for any orphaned module in the shared module cache which can save memory and also help track down module reference leaks like we have now.
llvm-svn: 137294
show more ...
|
| #
197bacff |
| 02-Jul-2011 |
Greg Clayton <[email protected]> |
Cleanup errors that come out of commands and make sure they all have newlines _only_ in the resulting stream, not in the error objects (lldb_private::Error). lldb_private::Error objects should always
Cleanup errors that come out of commands and make sure they all have newlines _only_ in the resulting stream, not in the error objects (lldb_private::Error). lldb_private::Error objects should always just have an error string with no terminating newline characters or periods.
Fixed an issue with GDB remote packet detection that could end up deadlocking if a full packet wasn't received in one chunk. Also modified the packet checking function to properly toss one or more bytes when it detects bad data.
llvm-svn: 134357
show more ...
|
| #
effe5c95 |
| 03-May-2011 |
Greg Clayton <[email protected]> |
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 ne
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
show more ...
|
| #
7260f620 |
| 18-Apr-2011 |
Greg Clayton <[email protected]> |
Centralized a lot of the status information for processes, threads, and stack frame down in the lldb_private::Process, lldb_private::Thread, lldb_private::StackFrameList and the lldb_private::StackF
Centralized a lot of the status information for processes, threads, and stack frame down in the lldb_private::Process, lldb_private::Thread, lldb_private::StackFrameList and the lldb_private::StackFrame classes. We had some command line commands that had duplicate versions of the process status output ("thread list" and "process status" for example).
Removed the "file" command and placed it where it should have been: "target create". Made an alias for "file" to "target create" so we stay compatible with GDB commands.
We can now have multple usable targets in lldb at the same time. This is nice for comparing two runs of a program or debugging more than one binary at the same time. The new command is "target select <target-idx>" and also to see a list of the current targets you can use the new "target list" command. The flow in a debug session can be:
(lldb) target create /path/to/exe/a.out (lldb) breakpoint set --name main (lldb) run ... hit breakpoint (lldb) target create /bin/ls (lldb) run /tmp Process 36001 exited with status = 0 (0x00000000) (lldb) target list Current targets: target #0: /tmp/args/a.out ( arch=x86_64-apple-darwin, platform=localhost, pid=35999, state=stopped ) * target #1: /bin/ls ( arch=x86_64-apple-darwin, platform=localhost, pid=36001, state=exited ) (lldb) target select 0 Current targets: * target #0: /tmp/args/a.out ( arch=x86_64-apple-darwin, platform=localhost, pid=35999, state=stopped ) target #1: /bin/ls ( arch=x86_64-apple-darwin, platform=localhost, pid=36001, state=exited ) (lldb) bt * thread #1: tid = 0x2d03, 0x0000000100000b9a a.out`main + 42 at main.c:16, stop reason = breakpoint 1.1 frame #0: 0x0000000100000b9a a.out`main + 42 at main.c:16 frame #1: 0x0000000100000b64 a.out`start + 52
Above we created a target for "a.out" and ran and hit a breakpoint at "main". Then we created a new target for /bin/ls and ran it. Then we listed the targest and selected our original "a.out" program, so we showed two concurent debug sessions going on at the same time.
llvm-svn: 129695
show more ...
|
| #
f6b8b581 |
| 13-Apr-2011 |
Greg Clayton <[email protected]> |
Added two new classes for command options:
lldb_private::OptionGroup lldb_private::OptionGroupOptions
OptionGroup lets you define a class that encapsulates settings that you want to reuse i
Added two new classes for command options:
lldb_private::OptionGroup lldb_private::OptionGroupOptions
OptionGroup lets you define a class that encapsulates settings that you want to reuse in multiple commands. It contains only the option definitions and the ability to set the option values, but it doesn't directly interface with the lldb_private::Options class that is the front end to all of the CommandObject option parsing. For that the OptionGroupOptions class can be used. It aggregates one or more OptionGroup objects and directs the option setting to the appropriate OptionGroup class. For an example of this, take a look at the CommandObjectFile and how it uses its "m_option_group" object shown below to be able to set values in both the FileOptionGroup and PlatformOptionGroup classes. The members used in CommandObjectFile are:
OptionGroupOptions m_option_group; FileOptionGroup m_file_options; PlatformOptionGroup m_platform_options;
Then in the constructor for CommandObjectFile you can combine the option settings. The code below shows a simplified version of the constructor:
CommandObjectFile::CommandObjectFile(CommandInterpreter &interpreter) : CommandObject (...), m_option_group (interpreter), m_file_options (), m_platform_options(true) { m_option_group.Append (&m_file_options); m_option_group.Append (&m_platform_options); m_option_group.Finalize(); }
We append the m_file_options and then the m_platform_options and then tell the option group the finalize the results. This allows the m_option_group to become the organizer of our prefs and after option parsing we end up with valid preference settings in both the m_file_options and m_platform_options objects. This also allows any other commands to use the FileOptionGroup and PlatformOptionGroup classes to implement options for their commands.
Renamed: virtual void Options::ResetOptionValues(); to: virtual void Options::OptionParsingStarting();
And implemented a new callback named:
virtual Error Options::OptionParsingFinished(); This allows Options subclasses to verify that the options all go together after all of the options have been specified and gives the chance for the command object to return an error. It also gives a chance to take all of the option values and produce or initialize objects after all options have completed parsing.
Modfied:
virtual Error SetOptionValue (int option_idx, const char *option_arg) = 0; to be:
virtual Error SetOptionValue (uint32_t option_idx, const char *option_arg) = 0;
(option_idx is now unsigned).
llvm-svn: 129415
show more ...
|