#
0c489f58 |
| 01-Mar-2012 |
Enrico Granata <egranata@apple.com> |
1) solving a bug where, after Jim's fixes to stack frames, synthetic children were not recalculated when necessary, causing them to get out of sync with live data 2) providing an updated list of tagg
1) solving a bug where, after Jim's fixes to stack frames, synthetic children were not recalculated when necessary, causing them to get out of sync with live data 2) providing an updated list of tagged pointers values for the objc_runtime module - hopefully this one is final 3) changing ValueObject::DumpValueObject to use an Options class instead of providing a bulky list of parameters to pass around this change had been laid out previously, but some clients of DumpValueObject() were still using the old prototype and some arguments were treated in a special way and passed in directly instead of through the Options class 4) providing new GetSummaryAsCString() and GetValueAsCString() calls in ValueObject that are passed a formatter object and a destination string and fill the string by formatting themselves using the formatter argument instead of the default for the current ValueObject 5) removing the option to have formats and summaries stick to a variable for the current stoppoint after some debate, we are going with non-sticky: if you say frame variable --format hex foo, the hex format will only be applied to the current command execution and not stick when redisplaying foo the other option would be full stickiness, which means that foo would be formatted as hex for its whole lifetime we are open to suggestions on what feels "natural" in this regard
llvm-svn: 151801
show more ...
|
#
a73d2692 |
| 27-Jan-2012 |
Greg Clayton <gclayton@apple.com> |
There is no need to hold onto an ExecutionContext as a member variable. ExecutionContext objects have shared pointers to Target, Process, Thread and Frame objects and they can end up being held onto
There is no need to hold onto an ExecutionContext as a member variable. ExecutionContext objects have shared pointers to Target, Process, Thread and Frame objects and they can end up being held onto for too long.
llvm-svn: 149133
show more ...
|
#
6efba4fc |
| 26-Jan-2012 |
Greg Clayton <gclayton@apple.com> |
Fixed formats being able to be applied recursively when using: target variable -f <format> [args] frame variable -f <format> [args] expression -f <format> -- expr
llvm-svn: 149080
|
#
20bb3aa5 |
| 21-Dec-2011 |
Sean Callanan <scallanan@apple.com> |
The "desired result type" code in the expression parser has hitherto been an implementation waiting for a use. I have now tied the '-o' option for the expression command -- which indicates that the
The "desired result type" code in the expression parser has hitherto been an implementation waiting for a use. I have now tied the '-o' option for the expression command -- which indicates that the result is an Objective-C object and needs to be printed -- to the ExpressionParser, which communicates the desired type to Clang.
Now, if the result of an expression is determined by an Objective-C method call for which there is no type information, that result is implicitly cast to id if and only if the -o option is passed to the expression command. (Otherwise if there is no explicit cast Clang will issue an error. This behavior is identical to what happened before r146756.)
Also added a testcase for -o enabled and disabled.
llvm-svn: 147099
show more ...
|
Revision tags: llvmorg-3.0.0, llvmorg-3.0.0-rc4, llvmorg-3.0.0-rc3, llvmorg-3.0.0-rc2 |
|
#
c0a6e061 |
| 27-Oct-2011 |
Sean Callanan <scallanan@apple.com> |
Added a function to the Host that gets a dummy target for it, so that people who want to use LLDB as a calculator can run simple expressions without needing a target or process.
llvm-svn: 143147
|
#
5009f9d5 |
| 27-Oct-2011 |
Greg Clayton <gclayton@apple.com> |
Added support for the new ".apple_objc" accelerator tables. These tables are in the same hashed format as the ".apple_names", but they map objective C class names to all of the methods and class func
Added support for the new ".apple_objc" accelerator tables. These tables are in the same hashed format as the ".apple_names", but they map objective C class names to all of the methods and class functions. We need to do this because in the DWARF the methods for Objective C are never contained in the class definition, they are scattered about at the translation unit level and they don't even have attributes that say the are contained within the class itself.
Added 3 new formats which can be used to display data:
eFormatAddressInfo eFormatHexFloat eFormatInstruction eFormatAddressInfo describes an address such as function+offset and file+line, or symbol + offset, or constant data (c string, 2, 4, 8, or 16 byte constants). The format character for this is "A", the long format is "address".
eFormatHexFloat will print out the hex float format that compilers tend to use. The format character for this is "X", the long format is "hex float".
eFormatInstruction will print out disassembly with bytes and it will use the current target's architecture. The format character for this is "i" (which used to be being used for the integer format, but the integer format also has "d", so we gave the "i" format to disassembly), the long format is "instruction".
Mate the lldb::FormatterChoiceCriterion enumeration private as it should have been from the start. It is very specialized and doesn't belong in the public API.
llvm-svn: 143114
show more ...
|
#
86edbf41 |
| 26-Oct-2011 |
Greg Clayton <gclayton@apple.com> |
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 ...
|
#
1deb7962 |
| 25-Oct-2011 |
Greg Clayton <gclayton@apple.com> |
Updated all commands that use a "--format" / "-f" options to use the new OptionGroupFormat. Updated OptionGroupFormat to be able to also use the "--size" and "--count" options. Commands that use a Op
Updated all commands that use a "--format" / "-f" options to use the new OptionGroupFormat. Updated OptionGroupFormat to be able to also use the "--size" and "--count" options. Commands that use a OptionGroupFormat instance can choose which of the options they want by initializing OptionGroupFormat accordingly. Clients can either get only the "--format", "--format" + "--size", or "--format" + "--size" + "--count". This is in preparation for upcoming chnages where there are alternate ways (GDB format specification) to set a format.
llvm-svn: 142911
show more ...
|
Revision tags: llvmorg-3.0.0-rc1 |
|
#
c14ee32d |
| 22-Sep-2011 |
Greg Clayton <gclayton@apple.com> |
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 ...
|
#
3bfdaa2a |
| 15-Sep-2011 |
Sean Callanan <scallanan@apple.com> |
This patch modifies the expression parser to allow it to execute expressions even in the absence of a process. This allows expressions to run in situations where the target cannot run -- e.g., to per
This patch modifies the expression parser to allow it to execute expressions even in the absence of a process. This allows expressions to run in situations where the target cannot run -- e.g., to perform calculations based on type information, or to inspect a binary's static data.
This modification touches the following files:
lldb-private-enumerations.h Introduce a new enum specifying the policy for processing an expression. Some expressions should always be JITted, for example if they are functions that will be used over and over again. Some expressions should always be interpreted, for example if the target is unsafe to run. For most, it is acceptable to JIT them, but interpretation is preferable when possible.
Target.[h,cpp] Have EvaluateExpression now accept the new enum.
ClangExpressionDeclMap.[cpp,h] Add support for the IR interpreter and also make the ClangExpressionDeclMap more robust in the absence of a process.
ClangFunction.[cpp,h] Add support for the new enum.
IRInterpreter.[cpp,h] New implementation.
ClangUserExpression.[cpp,h] Add support for the new enum, and for running expressions in the absence of a process.
ClangExpression.h Remove references to the old DWARF-based method of evaluating expressions, because it has been superseded for now.
ClangUtilityFunction.[cpp,h] Add support for the new enum.
ClangExpressionParser.[cpp,h] Add support for the new enum, remove references to DWARF, and add support for checking whether the expression could be evaluated statically.
IRForTarget.[h,cpp] Add support for the new enum, and add utility functions to support the interpreter.
IRToDWARF.cpp Removed
CommandObjectExpression.cpp Remove references to the obsolete -i option.
Process.cpp Modify calls to ClangUserExpression::Evaluate to pass the correct enum (for dlopen/dlclose)
SBValue.cpp Add support for the new enum.
SBFrame.cpp Add support for he new enum.
BreakpointOptions.cpp Add support for the new enum.
llvm-svn: 139772
show more ...
|
#
9128ee2f |
| 06-Sep-2011 |
Enrico Granata <granata.enrico@gmail.com> |
Redesign of the interaction between Python and frozen objects: - introduced two new classes ValueObjectConstResultChild and ValueObjectConstResultImpl: the first one is a ValueObjectChild obtained f
Redesign of the interaction between Python and frozen objects: - introduced two new classes ValueObjectConstResultChild and ValueObjectConstResultImpl: the first one is a ValueObjectChild obtained from a ValueObjectConstResult, the second is a common implementation backend for VOCR and VOCRCh of method calls meant to read through pointers stored in frozen objects ; now such reads transparently move from host to target as required - as a consequence of the above, removed code that made target-memory copies of expression results in several places throughout LLDB, and also removed code that enabled to recognize an expression result VO as such - introduced a new GetPointeeData() method in ValueObject that lets you read a given amount of objects of type T from a VO representing a T* or T[], and doing dereferences transparently in private layer it returns a DataExtractor ; in public layer it returns an instance of a newly created lldb::SBData - as GetPointeeData() does the right thing for both frozen and non-frozen ValueObject's, reimplemented ReadPointedString() to use it en lieu of doing the raw read itself - introduced a new GetData() method in ValueObject that lets you get a copy of the data that backs the ValueObject (for pointers, this returns the address without any previous dereferencing steps ; for arrays it actually reads the whole chunk of memory) in public layer this returns an SBData, just like GetPointeeData() - introduced a new CreateValueFromData() method in SBValue that lets you create a new SBValue from a chunk of data wrapped in an SBData the limitation to remember for this kind of SBValue is that they have no address: extracting the address-of for these objects (with any of GetAddress(), GetLoadAddress() and AddressOf()) will return invalid values - added several tests to check that "p"-ing objects (STL classes, char* and char[]) will do the right thing Solved a bug where global pointers to global variables were not dereferenced correctly for display New target setting "max-string-summary-length" gives the maximum number of characters to show in a string when summarizing it, instead of the hardcoded 128 Solved a bug where the summary for char[] and char* would not be shown if the ValueObject's were dumped via the "p" command Removed m_pointers_point_to_load_addrs from ValueObject. Introduced a new m_address_type_of_children, which each ValueObject can set to tell the address type of any pointers and/or references it creates. In the current codebase, this is load address most of the time (the only notable exception being file addresses that generate file address children UNLESS we have a live process) Updated help text for summary-string Fixed an issue in STL formatters where std::stlcontainer::iterator would match the container's synthetic children providers Edited the syntax and help for some commands to have proper argument types
llvm-svn: 139160
show more ...
|
#
bccce813 |
| 23-Aug-2011 |
Sean Callanan <scallanan@apple.com> |
Added support for persistent types to the expression parser. You can use a persistent type like this:
(lldb) expr struct $foo { int a; int b; }; (lldb) struct $foo i; i.a = 2; i.b = 3; i ($foo) $0
Added support for persistent types to the expression parser. You can use a persistent type like this:
(lldb) expr struct $foo { int a; int b; }; (lldb) struct $foo i; i.a = 2; i.b = 3; i ($foo) $0 = { (int) a = 2 (int) b = 3 }
typedefs work similarly.
This patch affects the following files:
test/expression_command/persistent_types/* A test case for persistent types, in particular structs and typedefs.
ClangForward.h Added TypeDecl, needed to declare some functions in ASTResultSynthesizer.h
ClangPersistentVariables.[h,cpp] Added a list of persistent types to the persistent variable store.
ASTResultSynthesizer.[h,cpp] Made the AST result synthesizer iterate across TypeDecls in the expression, and record any persistent types found. Also made a minor documentation fix.
ClangUserExpression.[h,cpp] Extended the user expression class to keep the state needed to report the persistent variable store for the target to the AST result synthesizers.
Also introduced a new error code for expressions that executed normally but did not return a result.
CommandObjectExpression.cpp Improved output for expressions (like declarations of new persistent types) that don't return a result. This is no longer treated as an error.
llvm-svn: 138383
show more ...
|
#
22c55d18 |
| 12-Aug-2011 |
Enrico Granata <granata.enrico@gmail.com> |
*Some more optimizations in usage of ConstString *New setting target.max-children-count gives an upper-bound to the number of child objects that will be displayed at each depth-level This might be
*Some more optimizations in usage of ConstString *New setting target.max-children-count gives an upper-bound to the number of child objects that will be displayed at each depth-level This might be a breaking change in some scenarios. To override the new limit you can use the --show-all-children (-A) option to frame variable or increase the limit in your lldbinit file *Command "type synthetic" has been split in two: - "type synthetic" now only handles Python synthetic children providers - the new command "type filter" handles filters Because filters and synthetic providers are both ways to replace the children of a ValueObject, only one can be effective at any given time.
llvm-svn: 137416
show more ...
|
#
c3e320a7 |
| 02-Aug-2011 |
Enrico Granata <granata.enrico@gmail.com> |
Fixed a bug where a variable could not be formatted in a summary if its datatype already had a custom format Fixed a bug where Objective-C variables coming out of the expression parser could crash th
Fixed a bug where a variable could not be formatted in a summary if its datatype already had a custom format Fixed a bug where Objective-C variables coming out of the expression parser could crash the Python synthetic providers: - expression parser output has a "frozen data" component, which is a byte-exact copy of the value (in host memory), if trying to read into memory based on the host address, LLDB would crash. we are now passing the correct (target) pointer to the Python code Objective-C "id" variables are now formatted according to their dynamic type, if the -d option to frame variable is used: - Code based on the Objective-C 2.0 runtime is used to obtain this information without running code on the target
llvm-svn: 136695
show more ...
|
#
d55546b2 |
| 22-Jul-2011 |
Enrico Granata <granata.enrico@gmail.com> |
when typing a summary string you can use the %S symbol to explicitly indicate that you want the summary to be used to print the target object (e.g. ${var%S}). this might already be the default if yo
when typing a summary string you can use the %S symbol to explicitly indicate that you want the summary to be used to print the target object (e.g. ${var%S}). this might already be the default if your variable is of an aggregate type new feature: synthetic filters. you can restrict the number of children for your variables to only a meaningful subset - the restricted list of children obeys the typical rules (e.g. summaries prevail over children) - one-line summaries show only the filtered (synthetic) children, if you type an expanded summary string, or you use Python scripts, all the real children are accessible - to provide a synthetic children list use the "type synth add" command, as in: type synth add foo_type --child varA --child varB[0] --child varC->packet->flags[1-4] (you can use ., ->, single-item array operator [N] and bitfield operator [N-M]; array slice access is not supported, giving simplified names to expression paths is not supported) - a new -S option to frame variable and target variable lets you override synthetic children and instead show real ones
llvm-svn: 135731
show more ...
|
#
07e66e3e |
| 20-Jul-2011 |
Greg Clayton <gclayton@apple.com> |
Added KDP resume, suspend, set/remove breakpoint, and kernel version support. Also we now display a live update of the kexts that we are loading.
llvm-svn: 135563
|
#
4480530a |
| 19-Jul-2011 |
Johnny Chen <johnny.chen@apple.com> |
Patch by Matt Johnson to silence G++ warnings! Used hand merge to apply the diffs. I did not apply the diffs for FormatManager.h and the diffs for memberwise initialization for ValueObject.cpp becau
Patch by Matt Johnson to silence G++ warnings! Used hand merge to apply the diffs. I did not apply the diffs for FormatManager.h and the diffs for memberwise initialization for ValueObject.cpp because they changed since. I will ask my colleague to apply them later.
llvm-svn: 135508
show more ...
|
#
0c5ef693 |
| 16-Jul-2011 |
Enrico Granata <granata.enrico@gmail.com> |
Some descriptive text for the Python script feature: - help type summary add now gives some hints on how to use it frame variable and target variable now have a --no-summary-depth (-Y) option: - si
Some descriptive text for the Python script feature: - help type summary add now gives some hints on how to use it frame variable and target variable now have a --no-summary-depth (-Y) option: - simply using -Y without an argument will skip one level of summaries, i.e. your aggregate types will expand their children and display no summary, even if they have one. children will behave normally - using -Y<int>, as in -Y4, -Y7, ..., will skip as many levels of summaries as given by the <int> parameter (obviously, -Y and -Y1 are the same thing). children beneath the given depth level will behave normally -Y0 is the same as omitting the --no-summary-depth parameter entirely This option replaces the defined-but-unimplemented --no-summary
llvm-svn: 135336
show more ...
|
#
5fd05903 |
| 24-Jun-2011 |
Greg Clayton <gclayton@apple.com> |
Cleanup error output on expressions.
llvm-svn: 133834
|
#
d61c10bc |
| 16-Jun-2011 |
Caroline Tice <ctice@apple.com> |
Add 'batch_mode' to CommandInterpreter. Modify InputReaders to not write output (prompts, instructions,etc.) if the CommandInterpreter is in batch_mode.
Also, finish updating InputReaders to write
Add 'batch_mode' to CommandInterpreter. Modify InputReaders to not write output (prompts, instructions,etc.) if the CommandInterpreter is in batch_mode.
Also, finish updating InputReaders to write to the asynchronous stream, rather than using the Debugger's output file directly.
llvm-svn: 133162
show more ...
|
#
15356e7f |
| 15-Jun-2011 |
Caroline Tice <ctice@apple.com> |
Replace direct uses of the Debugger's output stream with uses of the asynchronous stream.
llvm-svn: 133076
|
#
6e8dc334 |
| 13-Jun-2011 |
Caroline Tice <ctice@apple.com> |
More prompt-timing cleanups: Make multi-line expressions use the asynchronous stream mechanism rather than writing directly to the Debugger's output & error streams.
llvm-svn: 132930
|
#
007d5be6 |
| 30-May-2011 |
Greg Clayton <gclayton@apple.com> |
lldb-59.
llvm-svn: 132304
|
#
2837b766 |
| 04-May-2011 |
Jim Ingham <jingham@apple.com> |
Change "frame var" over to using OptionGroups (and thus the OptionGroupVariableObjectDisplay). Change the boolean "use_dynamic" over to a tri-state, no-dynamic, dynamic-w/o running target, and dynami
Change "frame var" over to using OptionGroups (and thus the OptionGroupVariableObjectDisplay). Change the boolean "use_dynamic" over to a tri-state, no-dynamic, dynamic-w/o running target, and dynamic with running target.
llvm-svn: 130832
show more ...
|
#
969ed3d1 |
| 02-May-2011 |
Caroline Tice <ctice@apple.com> |
This patch captures and serializes all output being written by the command line driver, including the lldb prompt being output by editline, the asynchronous process output & error messages, and async
This patch captures and serializes all output being written by the command line driver, including the lldb prompt being output by editline, the asynchronous process output & error messages, and asynchronous messages written by target stop-hooks.
As part of this it introduces a new Stream class, StreamAsynchronousIO. A StreamAsynchronousIO object is created with a broadcaster, who will eventually broadcast the stream's data for a listener to handle, and an event type indicating what type of event the broadcaster will broadcast. When the Write method is called on a StreamAsynchronousIO object, the data is appended to an internal string. When the Flush method is called on a StreamAsynchronousIO object, it broadcasts it's data string and clears the string.
Anything in lldb-core that needs to generate asynchronous output for the end-user should use the StreamAsynchronousIO objects.
I have also added a new notification type for InputReaders, to let them know that a asynchronous output has been written. This is to allow the input readers to, for example, refresh their prompts and lines, if desired. I added the case statements to all the input readers to catch this notification, but I haven't added any code for handling them yet (except to the IOChannel input reader).
llvm-svn: 130721
show more ...
|