Skip to content
  1. Feb 24, 2012
    • Greg Clayton's avatar
      <rdar://problem/10103468> · e72dfb32
      Greg Clayton authored
      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
      e72dfb32
  2. Feb 23, 2012
    • Sean Callanan's avatar
      Added support for looking up the complete type for · 7277284f
      Sean Callanan authored
      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
      7277284f
  3. Feb 21, 2012
    • Greg Clayton's avatar
      Fixed an issue where empty sections or zero filled sections could return · ee212e2c
      Greg Clayton authored
      incorrect values and also fire an assertion.
      
      llvm-svn: 151066
      ee212e2c
    • Greg Clayton's avatar
      Thread hardening part 3. Now lldb_private::Thread objects have std::weak_ptr · 1ac04c30
      Greg Clayton authored
      objects for the backlink to the lldb_private::Process. The issues we were
      running into before was someone was holding onto a shared pointer to a 
      lldb_private::Thread for too long, and the lldb_private::Process parent object
      would get destroyed and the lldb_private::Thread had a "Process &m_process"
      member which would just treat whatever memory that used to be a Process as a
      valid Process. This was mostly happening for lldb_private::StackFrame objects
      that had a member like "Thread &m_thread". So this completes the internal
      strong/weak changes.
      
      Documented the ExecutionContext and ExecutionContextRef classes so that our
      LLDB developers can understand when and where to use ExecutionContext and 
      ExecutionContextRef objects.
      
      llvm-svn: 151009
      1ac04c30
  4. Feb 18, 2012
    • Greg Clayton's avatar
      The second part in thread hardening the internals of LLDB where we make · d9e416c0
      Greg Clayton authored
      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
      d9e416c0
    • Sean Callanan's avatar
      Ignore the constness of the object pointer when · 5056ab04
      Sean Callanan authored
      fetching it.
      
      llvm-svn: 150861
      5056ab04
  5. Feb 10, 2012
  6. Feb 09, 2012
    • Greg Clayton's avatar
      First pass at mach-o core file support is in. It currently works for x86_64 · c3776bf2
      Greg Clayton authored
      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
      c3776bf2
    • Sean Callanan's avatar
      Removed another debug message. Sigh... · 12b0dabd
      Sean Callanan authored
      llvm-svn: 150134
      12b0dabd
  7. Feb 06, 2012
    • Sean Callanan's avatar
      I left some stray debugging messages in the source · 7e2863b4
      Sean Callanan authored
      code.  Removing these.
      
      llvm-svn: 149903
      7e2863b4
    • Greg Clayton's avatar
      Almost have templatized functions working (templatized classes are already · 3c2e3ae4
      Greg Clayton authored
      working, but not functions). I need to check on a few things to make sure 
      I am registering everything correctly in the right order and in the right
      contexts.
      
      llvm-svn: 149858
      3c2e3ae4
    • Greg Clayton's avatar
      Removed all of the "#ifndef SWIG" from the SB header files since we are using · 5569e64e
      Greg Clayton authored
      interface (.i) files for each class.
      
      Changed the FindFunction class from:
      
      uint32_t
      SBTarget::FindFunctions (const char *name, 
                               uint32_t name_type_mask, 
                               bool append, 
                               lldb::SBSymbolContextList& sc_list)
      
      uint32_t
      SBModule::FindFunctions (const char *name, 
                               uint32_t name_type_mask, 
                               bool append, 
                               lldb::SBSymbolContextList& sc_list)
      
      To:
      
      lldb::SBSymbolContextList
      SBTarget::FindFunctions (const char *name, 
                               uint32_t name_type_mask = lldb::eFunctionNameTypeAny);
      
      lldb::SBSymbolContextList
      SBModule::FindFunctions (const char *name,
                               uint32_t name_type_mask = lldb::eFunctionNameTypeAny);
      
      This makes the API easier to use from python. Also added the ability to
      append a SBSymbolContext or a SBSymbolContextList to a SBSymbolContextList.
      
      Exposed properties for lldb.SBSymbolContextList in python:
      
      lldb.SBSymbolContextList.modules => list() or all lldb.SBModule objects in the list
      lldb.SBSymbolContextList.compile_units => list() or all lldb.SBCompileUnits objects in the list
      lldb.SBSymbolContextList.functions => list() or all lldb.SBFunction objects in the list
      lldb.SBSymbolContextList.blocks => list() or all lldb.SBBlock objects in the list
      lldb.SBSymbolContextList.line_entries => list() or all lldb.SBLineEntry objects in the list
      lldb.SBSymbolContextList.symbols => list() or all lldb.SBSymbol objects in the list
      
      This allows a call to the SBTarget::FindFunctions(...) and SBModule::FindFunctions(...)
      and then the result can be used to extract the desired information:
      
      sc_list = lldb.target.FindFunctions("erase")
      
      for function in sc_list.functions:
          print function
      for symbol in sc_list.symbols:
          print symbol
      
      Exposed properties for the lldb.SBSymbolContext objects in python:
      
      lldb.SBSymbolContext.module => lldb.SBModule
      lldb.SBSymbolContext.compile_unit => lldb.SBCompileUnit
      lldb.SBSymbolContext.function => lldb.SBFunction
      lldb.SBSymbolContext.block => lldb.SBBlock
      lldb.SBSymbolContext.line_entry => lldb.SBLineEntry
      lldb.SBSymbolContext.symbol => lldb.SBSymbol
      
      
      Exposed properties for the lldb.SBBlock objects in python:
      
      lldb.SBBlock.parent => lldb.SBBlock for the parent block that contains
      lldb.SBBlock.sibling => lldb.SBBlock for the sibling block to the current block
      lldb.SBBlock.first_child => lldb.SBBlock for the first child block to the current block
      lldb.SBBlock.call_site => for inline functions, return a lldb.declaration object that gives the call site file, line and column
      lldb.SBBlock.name => for inline functions this is the name of the inline function that this block represents
      lldb.SBBlock.inlined_block => returns the inlined function block that contains this block (might return itself if the current block is an inlined block)
      lldb.SBBlock.range[int] => access the address ranges for a block by index, a list() with start and end address is returned
      lldb.SBBlock.ranges => an array or all address ranges for this block
      lldb.SBBlock.num_ranges => the number of address ranges for this blcok
      
      SBFunction objects can now get the SBType and the SBBlock that represents the
      top scope of the function.
      
      SBBlock objects can now get the variable list from the current block. The value
      list returned allows varaibles to be viewed prior with no process if code
      wants to check the variables in a function. There are two ways to get a variable
      list from a SBBlock:
      
      lldb::SBValueList
      SBBlock::GetVariables (lldb::SBFrame& frame,
                             bool arguments,
                             bool locals,
                             bool statics,
                             lldb::DynamicValueType use_dynamic);
      
      lldb::SBValueList
      SBBlock::GetVariables (lldb::SBTarget& target,
                             bool arguments,
                             bool locals,
                             bool statics);
      
      When a SBFrame is used, the values returned will be locked down to the frame
      and the values will be evaluated in the context of that frame.
      
      When a SBTarget is used, global an static variables can be viewed without a
      running process.
      
      llvm-svn: 149853
      5569e64e
  8. Feb 05, 2012
    • Greg Clayton's avatar
      <rdar://problem/10560053> · c9660546
      Greg Clayton authored
      Fixed "target modules list" (aliased to "image list") to output more information
      by default. Modified the "target modules list" to have a few new options:
      
      "--header" or "-h" => show the image header address
      "--offset" or "-o" => show the image header address offset from the address in the file (the slide applied to the shared library)
      
      Removed the "--symfile-basename" or "-S" option, and repurposed it to 
      "--symfile-unique" "-S" which will show the symbol file if it differs from
      the executable file.
      
      ObjectFile's can now be loaded from memory for cases where we don't have the
      files cached locally in an SDK or net mounted root. ObjectFileMachO can now
      read mach files from memory.
      
      Moved the section data reading code into the ObjectFile so that the object
      file can get the section data from Process memory if the file is only in
      memory.
      
      lldb_private::Module can now load its object file in a target with a rigid 
      slide (very common operation for most dynamic linkers) by using:
      
      bool 
      Module::SetLoadAddress (Target &target, lldb::addr_t offset, bool &changed)
      
      lldb::SBModule() now has a new constructor in the public interface:
      
      SBModule::SBModule (lldb::SBProcess &process, lldb::addr_t header_addr);
      
      This will find an appropriate ObjectFile plug-in to load an image from memory
      where the object file header is at "header_addr".
      
      llvm-svn: 149804
      c9660546
  9. Feb 04, 2012
    • Sean Callanan's avatar
      I have brought LLDB up-to-date with top of tree · 5b26f27f
      Sean Callanan authored
      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
      5b26f27f
    • Greg Clayton's avatar
      Convert all python objects in our API to use overload the __str__ method · 81e871ed
      Greg Clayton authored
      instead of the __repr__. __repr__ is a function that should return an
      expression that can be used to recreate an python object and we were using
      it to just return a human readable string.
      
      Fixed a crasher when using the new implementation of SBValue::Cast(SBType).
      
      Thread hardened lldb::SBValue and lldb::SBWatchpoint and did other general
      improvements to the API.
      
      Fixed a crasher in lldb::SBValue::GetChildMemberWithName() where we didn't
      correctly handle not having a target.
      
      llvm-svn: 149743
      81e871ed
  10. Feb 03, 2012
    • Greg Clayton's avatar
      Added support to SBType for getting template arguments from a SBType: · 402230e6
      Greg Clayton authored
      uint32_t
      SBType::GetNumberOfTemplateArguments ();
      
      lldb::SBType
      SBType::GetTemplateArgumentType (uint32_t idx);
      
      lldb::TemplateArgumentKind
      SBType::GetTemplateArgumentKind (uint32_t idx);
      
      Some lldb::TemplateArgumentKind values don't have a corresponding SBType
      that will be returned from SBType::GetTemplateArgumentType(). This will
      help our data formatters do their job by being able to find out the
      type of template params and do smart things with those.
      
      llvm-svn: 149658
      402230e6
  11. Feb 01, 2012
    • Greg Clayton's avatar
      Added many more python convenience accessors: · 6b2bd939
      Greg Clayton authored
      You can now access a frame in a thread using:
      
      lldb.SBThread.frame[int] -> lldb.SBFrame object for a frame in a thread
      
      Where "int" is an integer index. You can also access a list object with all of
      the frames using:
      
      lldb.SBThread.frames => list() of lldb.SBFrame objects
      
      All SB objects that give out SBAddress objects have properties named "addr"
      
      lldb.SBInstructionList now has the following convenience accessors for len() and
      instruction access using an index:
      
      insts = lldb.frame.function.instructions
      for idx in range(len(insts)):
          print insts[idx]
          
      Instruction lists can also lookup an isntruction using a lldb.SBAddress as the key:
      
      pc_inst = lldb.frame.function.instructions[lldb.frame.addr]
      
      lldb.SBProcess now exposes:
      
      lldb.SBProcess.is_alive => BOOL Check if a process is exists and is alive
      lldb.SBProcess.is_running => BOOL check if a process is running (or stepping):
      lldb.SBProcess.is_running => BOOL check if a process is currently stopped or crashed:
      lldb.SBProcess.thread[int] => lldb.SBThreads for a given "int" zero based index
      lldb.SBProcess.threads => list() containing all lldb.SBThread objects in a process
      
      SBInstruction now exposes:
      lldb.SBInstruction.mnemonic => python string for instruction mnemonic
      lldb.SBInstruction.operands => python string for instruction operands
      lldb.SBInstruction.command => python string for instruction comment
      
      SBModule now exposes:
      
      lldb.SBModule.uuid => uuid.UUID(), an UUID object from the "uuid" python module
      lldb.SBModule.symbol[int] => lldb.Symbol, lookup symbol by zero based index
      lldb.SBModule.symbol[str] => list() of lldb.Symbol objects that match "str"
      lldb.SBModule.symbol[re] => list() of lldb.Symbol objecxts that match the regex
      lldb.SBModule.symbols => list() of all symbols in a module
      
        
      SBAddress objects can now access the current load address with the "lldb.SBAddress.load_addr"
      property. The current "lldb.target" will be used to try and resolve the load address.
      
      Load addresses can also be set using this accessor:
      
      addr = lldb.SBAddress()
      addd.load_addr = 0x123023
      
      Then you can check the section and offset to see if the address got resolved.
      
      SBTarget now exposes:
      
      lldb.SBTarget.module[int] => lldb.SBModule from zero based module index
      lldb.SBTarget.module[str] => lldb.SBModule by basename or fullpath or uuid string
      lldb.SBTarget.module[uuid.UUID()] => lldb.SBModule whose UUID matches
      lldb.SBTarget.module[re] => list() of lldb.SBModule objects that match the regex
      lldb.SBTarget.modules => list() of all lldb.SBModule objects in the target
      
      SBSymbol now exposes:
      
      lldb.SBSymbol.name => python string for demangled symbol name
      lldb.SBSymbol.mangled => python string for mangled symbol name or None if there is none
      lldb.SBSymbol.type => lldb.eSymbolType enum value
      lldb.SBSymbol.addr => SBAddress object that represents the start address for this symbol (if there is one)
      lldb.SBSymbol.end_addr => SBAddress for the end address of the symbol  (if there is one)
      lldb.SBSymbol.prologue_size => pythin int containing The size of the prologue in bytes
      lldb.SBSymbol.instructions => SBInstructionList containing all instructions for this symbol
      
      SBFunction now also has these new properties in addition to what is already has:
      lldb.SBFunction.addr => SBAddress object that represents the start address for this function
      lldb.SBFunction.end_addr => SBAddress for the end address of the function
      lldb.SBFunction.instructions => SBInstructionList containing all instructions for this function
      
      SBFrame now exposes the SBAddress for the frame:
      lldb.SBFrame.addr => SBAddress which is the section offset address for the current frame PC
      
      These are all in addition to what was already added. Documentation and website
      updates coming soon.
      
      llvm-svn: 149489
      6b2bd939
  12. Jan 29, 2012
    • Greg Clayton's avatar
      Switching back to using std::tr1::shared_ptr. We originally switched away · e1cd1be6
      Greg Clayton authored
      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
      e1cd1be6
  13. Jan 20, 2012
  14. Jan 19, 2012
  15. Jan 13, 2012
    • Sean Callanan's avatar
      I made two major improvements to the way the · cbbe3ac4
      Sean Callanan authored
      master AST importer imports types.
      
      - First, before importing the definition of a
        Decl from its source, notify the underlying
        importer of the source->destination mapping.
        Especially for anonymous strucutres that are
        otherwise hard to unique in the target AST
        context, this hint is very helpful.
      
      - When deporting a type or Decl from one
        ASTContext to another (deporting occurs in
        the case of moving result types from the
        parser's AST context to the result AST
        context), don't forget their origin if the
        origin is the original debug information.
      
      llvm-svn: 148152
      cbbe3ac4
    • Sean Callanan's avatar
      If the name of a struct or union is NULL in the · 7282e2ac
      Sean Callanan authored
      debug info, call it anonymous.  This isn't
      perfect, because Clang actually considers the
      following struct not to be anonymous:
      –
      struct {
        int x;
        int y;
      } g_foo;
      -
      but DWARF doesn't make the distinction.
      
      llvm-svn: 148145
      7282e2ac
  16. Jan 12, 2012
    • Jim Ingham's avatar
      Discriminate between the lldb_private::Type's for ObjC Classes that come from... · 18f4629c
      Jim Ingham authored
      Discriminate between the lldb_private::Type's for ObjC Classes that come from debug info, and those that
      are made up from the ObjC runtime symbols.  For now the latter contain nothing but the fact that the name
      describes an ObjC class, and so are not useful for things like dynamic types.
      
      llvm-svn: 148059
      18f4629c
    • Greg Clayton's avatar
      Big change in the way ObjectFile file contents are managed. We now · 44435ed0
      Greg Clayton authored
      mmap() the entire object file contents into memory with MAP_PRIVATE.
      We do this because object file contents can change on us and currently
      this helps alleviate this situation. It also make the code for accessing
      object file data much easier to manage and we don't end up opening the
      file, reading some data and closing the file over and over.
      
      llvm-svn: 148017
      44435ed0
  17. Jan 05, 2012
    • Greg Clayton's avatar
      Added code in the Host layer that can report system log messages · e38a5edd
      Greg Clayton authored
      so that we don't have "fprintf (stderr, ...)" calls sprinkled everywhere.
      Changed all needed locations over to using this.
      
      For non-darwin, we log to stderr only. On darwin, we log to stderr _and_
      to ASL (Apple System Log facility). This will allow GUI apps to have a place
      for these error and warning messages to go, and also allows the command line
      apps to log directly to the terminal.
      
      llvm-svn: 147596
      e38a5edd
  18. Dec 29, 2011
  19. Dec 28, 2011
  20. Dec 22, 2011
  21. Dec 21, 2011
    • Sean Callanan's avatar
      Fixed a bug in the ASTImporter that affects · 5bc5a76d
      Sean Callanan authored
      types that have been imported multiple times.
      
      The discussion below uses this diagram:
      
      ASTContext     A      B      C
      Decl           Da     Db     Dc
      ASTImporter    \-Iab-/\-Iac-/
                     \-----Iac----/
      
      When a Decl D is imported from ASTContext A to
      ASTContext B, the ASTImporter Iab records the
      pair <Da, Db> in a DenseMap.  That way, if Iab
      ever encounters Da again (for example, as the
      DeclContext for another Decl), it can use the
      imported version.  This is not an optimization,
      it is critical: if I import the field "st_dev"
      as part of importing "struct stat," the field
      must have DeclContext equal to the parent
      structure or we end up with multiple different
      Decls containing different parts of "struct
      stat."  "struct stat" is imported once and
      recorded in the DenseMap; then the ASTImporter
      finds that same version when looking for the
      DeclContext of "st_dev."
      
      The bug arises when Db is imported into another
      ASTContext C and ASTContext B goes away.  This
      often occurs when LLDB produces result variables
      for expressions.  Ibc is aware of the transport
      of Db to Dc, but a brand new ASTImporter, Iac,
      is responsible for completing Dc from its source
      upon request.  That ASTImporter has no mappings,
      so it will produce a clone of Dc when attempting
      to import its children.  That means that type
      completion operations on Dc will fail.
      
      The solution is to create Iac as soon as Ibc
      imports D from B to C, and inform Iac of the
      mapping between Da and Dc.  This allows type
      completion to happen correctly.
      
      llvm-svn: 147016
      5bc5a76d
  22. Dec 16, 2011
    • Sean Callanan's avatar
      Updated Clang to take an enhancement to the way · bb12004c
      Sean Callanan authored
      we handle Objective-C method calls.  Currently,
      LLDB treats the result of an Objective-C method
      as unknown if the type information doesn't have
      the method's signature.  Now Clang can cast the
      result to id if it isn't explicitly cast.
      
      I also added a test case for this, as well as a
      fix for a type import problem that this feature
      exposed.
      
      llvm-svn: 146756
      bb12004c
  23. Dec 10, 2011
  24. Dec 09, 2011
    • Sean Callanan's avatar
      If the expression parser is unable to complete a TagDecl · 12014a04
      Sean Callanan authored
      in the context in which it was originally found, the
      expression parser now goes hunting for it in all modules
      (in the appropriate namespace, if applicable).  This means
      that forward-declared types that exist in another shared
      library will now be resolved correctly.
      
      Added a test case to cover this.  The test case also tests
      "frame variable," which does not have this functionality
      yet.
      
      llvm-svn: 146204
      12014a04
  25. Dec 08, 2011
    • Jim Ingham's avatar
      Get the bit-field offset & size for ObjC ivars that are bitfields. · f80bc3f4
      Jim Ingham authored
      <rdar://problem/10535460> lldb expression evaluation doesn't handle bit fields in ObjC classes properly
      
      llvm-svn: 146134
      f80bc3f4
    • Greg Clayton's avatar
      Added a new class called lldb_private::SymbolFileType which is designed to · d1767f05
      Greg Clayton authored
      take a SymbolFile reference and a lldb::user_id_t and be used in objects
      which represent things in debug symbols that have types where we don't need
      to know the true type yet, such as in lldb_private::Variable objects. This
      allows us to defer resolving the type until something is used. More specifically
      this allows us to get 1000 local variables from the current function, and if
      the user types "frame variable argc", we end up _only_ resolving the type for
      "argc" and not for the 999 other local variables. We can expand the use of this
      as needed in the future.
      
      Modified the DWARFMappedHash class to be able to read the HashData that has
      more than just the DIE offset. It currently will read the atoms in the header
      definition and read the data correctly. Currently only the DIE offset and 
      type flags are supported. This is needed for adding type flags to the 
      .apple_types hash accelerator tables.
      
      Fixed a assertion crash that would happen if we have a variable that had a
      DW_AT_const_value instead of a location where "location.LocationContains_DW_OP_addr()"
      would end up asserting when it tried to parse the variable location as a
      DWARF opcode list.
      
      Decreased the amount of memory that LLDB would use when evaluating an expression
      by 3x - 4x for clang. There was a place in the namespace lookup code that was
      parsing all namespaces with a certain name in a DWARF file instead of stopping
      when it found the first match. This was causing all of the compile units with
      a matching namespace to get parsed into memory and causing unnecessary memory
      bloat. 
      
      Improved "Target::EvaluateExpression(...)" to not try and find a variable
      when the expression contains characters that would certainly cause an expression
      to need to be evaluated by the debugger. 
      
      llvm-svn: 146130
      d1767f05
  26. Dec 06, 2011
    • Sean Callanan's avatar
      As part of the work to make Objective-C type information · 0eed0d42
      Sean Callanan authored
      from symbols more accessible, I have added a second
      map to the ClangASTImporter: the ObjCInterfaceMetaMap.
      This map keeps track of all type definitions found for
      a particular Objective-C interface, allowing the
      ClangASTSource to refer to all possible sources when
      looking for method definitions.
      
      There is a bug in lookup that I still need to figure out,
      but after that we should be able to report full method
      information for Objective-C classes shown in symbols.
      
      Also fixed some errors I ran into when enabling the maps
      for the persistent type store.  The persistent type store
      previously did not use the ClangASTImporter to import
      types, instead using ASTImporters that got allocated each
      time a type needed copying.  To support the requirements
      of the persistent type store -- namely, that types must be
      copied, completed, and then completely severed from their
      origin in the parser's AST context (which will go away) --
      I added a new function called DeportType which severs all
      these connections.
      
      llvm-svn: 145914
      0eed0d42
    • Sean Callanan's avatar
      Set a flag on the AST type dump to see Objective-C · 853604d5
      Sean Callanan authored
      methods.  The Clang dump is now much more verbose,
      but when somebody types "target modules lookup -t"
      that is typically what they're looking for.
      
      llvm-svn: 145892
      853604d5
    • Jim Ingham's avatar
      Correct typo in method name (AddSymbolFileRepresendation...) · 7d1c115d
      Jim Ingham authored
      llvm-svn: 145884
      7d1c115d
Loading