summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression
Commit message (Collapse)AuthorAgeFilesLines
* Enabled C++11 in the expression parser. auto andSean Callanan2012-05-162-2/+19
| | | | | | | | | various other syntactic sugar work. Lambdas do not due to some problems relocating code containing lambdas. Rvalue references work when returned from expressions, but need more testing. llvm-svn: 156948
* Don't try to use "OkayToDiscard" to mean BOTH this plan is a user plan or ↵Jim Ingham2012-05-111-0/+2
| | | | | | | | not AND unwind on error. rdar://problem/11419156 llvm-svn: 156627
* <rdar://problem/11330621>Greg Clayton2012-05-101-2/+1
| | | | | | | | | | | | Fixed the DisassemblerLLVMC disassembler to parse more efficiently instead of parsing opcodes over and over. The InstructionLLVMC class now only reads the opcode in the InstructionLLVMC::Decode function. This can be done very efficiently for ARM and architectures that have fixed opcode sizes. For x64 it still calls the disassembler to get the byte size. Moved the lldb_private::Instruction::Dump(...) function up into the lldb_private::Instruction class and it now uses the function that gets the mnemonic, operandes and comments so that all disassembly is using the same code. Added StreamString::FillLastLineToColumn() to allow filling a line up to a column with a character (which is used by the lldb_private::Instruction::Dump(...) function). Modified the Opcode::GetData() fucntion to "do the right thing" for thumb instructions. llvm-svn: 156532
* Added a #define of NULL to 0 to make NULL usableSean Callanan2012-05-091-1/+9
| | | | | | in expressions. llvm-svn: 156514
* Made the IR interpreter move all floats, not just "wide"Sean Callanan2012-04-261-1/+1
| | | | | | | | | | ones, to its own constant pool. This reflects the fact that the LLVM code generators for different targets move floats to their constant pools under varying conditions, and the JIT cannot (yet) be relied upon to relocate references to its constant pool correctly. llvm-svn: 155660
* Hardened LLDB against NULL identifiers being passedSean Callanan2012-04-251-2/+9
| | | | | | into FindExternalVisibleDeclsByName. llvm-svn: 155561
* Fixed a crasher that occurs when an expressionSean Callanan2012-04-241-1/+2
| | | | | | | | | | | doesn't return a result. If that expression can't be run in the current context (for example, if it uses a function and there is no running process) then we used to try to destroy the nonexistent result variable. We now only destroy the result variable if we actually made one. llvm-svn: 155455
* Implemented zext as a no-op cast in the IRSean Callanan2012-04-231-4/+6
| | | | | | interpreter. llvm-svn: 155360
* Disabled spell checking in the expression parser,Sean Callanan2012-04-171-0/+6
| | | | | | | which incurs large overheads in terms of type parsing and importing. llvm-svn: 154885
* Make sure frozen_sp for a ClangExpressionVariableSean Callanan2012-04-121-1/+2
| | | | | | is non-NULL before asking for its name. llvm-svn: 154593
* Hardened the struct layout code to eliminate aSean Callanan2012-04-071-0/+5
| | | | | | | potential crash if the underlying type couldn't be completed. llvm-svn: 154234
* In a prior commit, I changed the parameters around on a ↵Greg Clayton2012-04-061-2/+2
| | | | | | ModuleList::FindTypes where the old parameters that existing clients were using would have been compatible, so I renamed ModuleList::FindTypes to ModuleList::FindTypes2. Then I made fixes and verified I updated and fixed all client code, but I forgot to rename the function back to ModuleList::FindTypes(). I am doing that now and also cleaning up the C++ dynamic type code a bit. llvm-svn: 154182
* Fixed a problem where we did not read propertiesSean Callanan2012-04-051-0/+80
| | | | | | | | | | | | | | | | correctly if the setter/getter were not present in the debug information. The fixes are as follows: - We not only look for the method by its full name, but also look for automatically-generated methods when searching for a selector in an Objective-C interface. This is necessary to find accessors. - Extract the getter and setter name from the DW_TAG_APPLE_Property declaration in the DWARF if they are present; generate them if not. llvm-svn: 154067
* Initialize ivars in the correct order.Bill Wendling2012-04-031-3/+3
| | | | llvm-svn: 153947
* Disabling blocks support because of rdar://problem/11024417 - This is ↵Enrico Granata2012-03-301-1/+2
| | | | | | hopefully just a temporary countermeasure llvm-svn: 153758
* <rdar://problem/11082392>Greg Clayton2012-03-301-1/+1
| | | | | | | | | | | | | | | | | | | Fixed an issue that could cause circular type parsing that will assert and kill LLDB. Prior to this fix the DWARF parser would always create class types and not start their definitions (for both C++ and ObjC classes) until we were asked to complete the class later. When we had cases like: class A { class B { }; }; We would alway try to complete A before specifying "A" as the decl context for B. Turns out we can just start the definition and still not complete the class since we can check the TagDecl::isCompleteDefinition() function. This only works for C++ types. This means we will not be pulling in the full definition of parent classes all the time and should help with our memory consumption and also reduce the amount of debug info we have to parse. I also reduced redundant code that was checking in a lldb::clang_type_t was a possible C++ dynamic type since it was still completing the type, just to see if it was dynamic. This was fixed in another function that was checking for a type being dynamic as an ObjC or a C++ type, but there was dedicated fucntion for C++ that we missed. llvm-svn: 153713
* <rdar://problem/11113279>Greg Clayton2012-03-262-7/+12
| | | | | | | | | | Fixed type lookups to "do the right thing". Prior to this fix, looking up a type using "foo::bar" would result in a type list that contains all types that had "bar" as a basename unless the symbol file was able to match fully qualified names (which our DWARF parser does not). This fix will allow type matches to be made based on the basename and then have the types that don't match filtered out. Types by name can be fully qualified, or partially qualified with the new "bool exact_match" parameter to the Module::FindTypes() method. This fixes some issue that we discovered with dynamic type resolution as well as improves the overall type lookups in LLDB. llvm-svn: 153482
* Added some hardening to make sure that we don'tSean Callanan2012-03-212-0/+5
| | | | | | use QualType contents unchecked. llvm-svn: 153201
* Fixed some potential null-pointer bugs in theSean Callanan2012-03-201-1/+7
| | | | | | expression parser code. llvm-svn: 153128
* Strengthened LLDB's completion of object types.Sean Callanan2012-03-153-1/+23
| | | | | | | | | | | | | | Now when LLDB reports a variable, it has a complete type. Similarly, when it reports members of a struct, it completes their types. Also, when it creates the result variable for an expression, it ensures that variable's type is complete. This ensures compliance with Clang's expectations, preventing potential crashes. llvm-svn: 152771
* <rdar://problem/10434005>Greg Clayton2012-03-141-3/+3
| | | | | | | Prepare LLDB to be built with C++11 by hiding all accesses to std::tr1 behind macros that allows us to easily compile for either C++. llvm-svn: 152698
* Hardened the process of reading the program counterSean Callanan2012-03-101-1/+6
| | | | | | on behalf of a DWARF expression. llvm-svn: 152477
* Updated the revision of LLVM/Clang used by LLDB.Sean Callanan2012-03-082-6/+9
| | | | | | | | | | | | | | | This takes two important changes: - Calling blocks is now supported. You need to cast their return values, but that works fine. - We now can correctly run JIT-compiled expressions that use floating-point numbers. Also, we have taken a fix that allows us to ignore access control in Objective-C as in C++. llvm-svn: 152286
* <rdar://problem/10997402>Greg Clayton2012-03-071-7/+5
| | | | | | | | | | | This fix really needed to happen as a previous fix I had submitted for calculating symbol sizes made many symbols appear to have zero size since the function that was calculating the symbol size was calling another function that would cause the calculation to happen again. This resulted in some symbols having zero size when they shouldn't. This could then cause infinite stack traces and many other side affects. llvm-svn: 152244
* Added support for calling blocks from expressions,Sean Callanan2012-03-061-0/+42
| | | | | | | but gated by an #ifdef until we roll LLVM/Clang to bring in the necessary parser support. llvm-svn: 152149
* Don't return bare symbols when asked to searchSean Callanan2012-03-061-2/+2
| | | | | | inside a namespace. This bypasses local variables. llvm-svn: 152144
* Made sure to store the type for "this" when in aSean Callanan2012-03-051-0/+12
| | | | | | C++ method. llvm-svn: 152064
* And remove the control character that somehow found its way into the last ↵Jim Ingham2012-03-021-1/+1
| | | | | | checkin... llvm-svn: 151941
* For Sean: handle the case where you are asked for a 0 byte allocation with 0 ↵Jim Ingham2012-03-021-2/+2
| | | | | | alignment. llvm-svn: 151940
* Prevent assertions because of zero-sized sections,Sean Callanan2012-03-021-1/+6
| | | | | | | while still ensuring that the sections get remote allocations. llvm-svn: 151936
* Updated LLVM to take a new MC JIT that supportsSean Callanan2012-03-013-12/+17
| | | | | | | | | | allocations by section. We install these sections in the target process and inform the JIT of their new locations. Also removed some unused variable warnings. llvm-svn: 151789
* Made the IR interpreter handle GetElementPtr instructionsSean Callanan2012-02-291-1/+34
| | | | | | with non-constant indexes. llvm-svn: 151734
* Extended the IR interpreter to support symbolsSean Callanan2012-02-281-4/+16
| | | | | | that have valid load addresses. llvm-svn: 151636
* Harden the checks on the type returned from theSean Callanan2012-02-271-0/+5
| | | | | | | AST importer because we're seeing occasional crashes. llvm-svn: 151541
* <rdar://problem/10103468>Greg Clayton2012-02-243-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | I started work on being able to add symbol files after a debug session had started with a new "target symfile add" command and quickly ran into problems with stale Address objects in breakpoint locations that had lldb_private::Section pointers into modules that had been removed or replaced. This also let to grabbing stale modules from those sections. So I needed to thread harded the Address, Section and related objects. To do this I modified the ModuleChild class to now require a ModuleSP on initialization so that a weak reference can created. I also changed all places that were handing out "Section *" to have them hand out SectionSP. All ObjectFile, SymbolFile and SymbolVendors were inheriting from ModuleChild so all of the find plug-in, static creation function and constructors now require ModuleSP references instead of Module *. Address objects now have weak references to their sections which can safely go stale when a module gets destructed. This checkin doesn't complete the "target symfile add" command, but it does get us a lot clioser to being able to do such things without a high risk of crashing or memory corruption. llvm-svn: 151336
* Added support for looking up the complete type forSean Callanan2012-02-221-18/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Objective-C classes. This allows LLDB to find ivars declared in class extensions in modules other than where the debugger is currently stopped (we already supported this when the debugger was stopped in the same module as the definition). This involved the following main changes: - The ObjCLanguageRuntime now knows how to hunt for the authoritative version of an Objective-C type. It looks for the symbol indicating a definition, and then gets the type from the module containing that symbol. - ValueObjects now report their type with a potential override, and the override is set if the type of the ValueObject is an Objective-C class or pointer type that is defined somewhere other than the original reported type. This means that "frame variable" will always use the complete type if one is available. - The ClangASTSource now looks for the complete type when looking for ivars. This means that "expr" will always use the complete type if one is available. - I added a testcase that verifies that both "frame variable" and "expr" work. llvm-svn: 151214
* The second part in thread hardening the internals of LLDB where we makeGreg Clayton2012-02-182-17/+13
| | | | | | | | | | | | | | | | the lldb_private::StackFrame objects hold onto a weak pointer to the thread object. The lldb_private::StackFrame objects the the most volatile objects we have as when we are doing single stepping, frames can often get lost or thrown away, only to be re-created as another object that still refers to the same frame. We have another bug tracking that. But we need to be able to have frames no longer be able to get the thread when they are not part of a thread anymore, and this is the first step (this fix makes that possible but doesn't implement it yet). Also changed lldb_private::ExecutionContextScope to return shared pointers to all objects in the execution context to further thread harden the internals. llvm-svn: 150871
* Ignore the constness of the object pointer whenSean Callanan2012-02-181-3/+10
| | | | | | fetching it. llvm-svn: 150861
* Stop finding bare symbols when we're explicitlySean Callanan2012-02-151-1/+4
| | | | | | told to look in a namespace. llvm-svn: 150590
* Previoously the expression parser had to rely on theSean Callanan2012-02-152-3/+37
| | | | | | | | | JIT when printing the values of registers (e.g., "expr $pc"). Now the expression parser can do this in the IR interpreter without running code in the inferior process. llvm-svn: 150554
* Extended function lookup to allow the user toSean Callanan2012-02-102-3/+7
| | | | | | | | | indicate whether inline functions are desired. This allows the expression parser, for instance, to filter out inlined functions when looking for functions it can call. llvm-svn: 150279
* Fixed a bunch of ownership problems with the expressionSean Callanan2012-02-102-121/+110
| | | | | | | | | | | | | | | | | | | | | | | | | | | parser. Specifically: - ClangUserExpression now keeps weak pointers to the structures it needs and then locks them when needed. This ensures that they continue to be valid without leaking memory if the ClangUserExpression is long lived. - ClangExpressionDeclMap, instead of keeping a pointer to an ExecutionContext, now contains an ExecutionContext. This prevents bugs if the pointer or its contents somehow become stale. It also no longer requires that ExecutionContexts be passed into any function except its initialization function, since it can count on the ExecutionContext still being around. There's a lot of room for improvement (specifically, ClangExpressionDeclMap should also use weak pointers insetad of shared pointers) but this is an important first step that codifies assumptions that already existed in the code. llvm-svn: 150217
* Brought LLVM/Clang up to top of tree. The onlySean Callanan2012-02-092-14/+20
| | | | | | | | change (besides logging) is that now string literals in the IR are ConstantDataArrays instead of ConstantArrays. llvm-svn: 150142
* Added support to the expression parser for readingSean Callanan2012-02-081-17/+40
| | | | | | variables that are only available in symbols. llvm-svn: 150103
* In the absence of a valid process, the expressionSean Callanan2012-02-081-1/+6
| | | | | | | parser now at least tries to generate IR for the target. llvm-svn: 150079
* Fixed ClangExpressionDeclMap to use the debugSean Callanan2012-02-081-45/+50
| | | | | | | | | | | information about the current frame rather than the debug information about "this" and "self" when determining the types of those pointers. This allows expressions to work in frames that don't have valid "this" and "self" pointers, working around poor debug information. llvm-svn: 150051
* The IRInterpreter's constant evaluator wasn'tSean Callanan2012-02-081-12/+50
| | | | | | | | | | sufficiently general - it could only handle literals and operations that didn't change the data. Now the constant evaluator passes APInt values around, and can handle GetElementPtr constants. llvm-svn: 150034
* I left some stray debugging messages in the sourceSean Callanan2012-02-061-3/+0
| | | | | | code. Removing these. llvm-svn: 149903
* I have brought LLDB up-to-date with top of treeSean Callanan2012-02-047-136/+535
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | LLVM/Clang. This brings in several fixes, including: - Improvements in the Just-In-Time compiler's allocation of memory: the JIT now allocates memory in chunks of sections, improving its ability to generate relocations. I have revamped the RecordingMemoryManager to reflect these changes, as well as to get the memory allocation and data copying out fo the ClangExpressionParser code. Jim Grosbach wrote the updates to the JIT on the LLVM side. - A new ExternalASTSource interface to allow LLDB to report accurate structure layout information to Clang. Previously we could only report the sizes of fields, not their offsets. This meant that if data structures included field alignment directives, we could not communicate the necessary alignment to Clang and accesses to the data would fail. Now we can (and I have update the relevant test case). Thanks to Doug Gregor for implementing the Clang side of this fix. - The way Objective-C interfaces are completed by Clang has been made consistent with RecordDecls; with help from Doug Gregor and Greg Clayton I have ensured that this still works. - I have eliminated all local LLVM and Clang patches, committing the ones that are still relevant to LLVM and Clang as needed. I have tested the changes extensively locally, but please let me know if they cause any trouble for you. llvm-svn: 149775
* Switching back to using std::tr1::shared_ptr. We originally switched awayGreg Clayton2012-01-295-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | due to RTTI worries since llvm and clang don't use RTTI, but I was able to switch back with no issues as far as I can tell. Once the RTTI issue wasn't an issue, we were looking for a way to properly track weak pointers to objects to solve some of the threading issues we have been running into which naturally led us back to std::tr1::weak_ptr. We also wanted the ability to make a shared pointer from just a pointer, which is also easily solved using the std::tr1::enable_shared_from_this class. The main reason for this move back is so we can start properly having weak references to objects. Currently a lldb_private::Thread class has a refrence to its parent lldb_private::Process. This doesn't work well when we now hand out a SBThread object that contains a shared pointer to a lldb_private::Thread as this SBThread can be held onto by external clients and if they end up using one of these objects we can easily crash. So the next task is to start adopting std::tr1::weak_ptr where ever it makes sense which we can do with lldb_private::Debugger, lldb_private::Target, lldb_private::Process, lldb_private::Thread, lldb_private::StackFrame, and many more objects now that they are no longer using intrusive ref counted pointer objects (you can't do std::tr1::weak_ptr functionality with intrusive pointers). llvm-svn: 149207
OpenPOWER on IntegriCloud