Skip to content
  1. Mar 24, 2011
  2. Mar 22, 2011
  3. Mar 20, 2011
    • Greg Clayton's avatar
      Split all of the core of LLDB.framework/lldb.so into a · 7a5388bf
      Greg Clayton authored
      static archive that can be linked against. LLDB.framework/lldb.so
      exports a very controlled API. Splitting the API into a static
      library allows other tools (debugserver for now) to use the power
      of the LLDB debugger core, yet not export it as its API is not
      portable or maintainable. The Host layer and many of the other
      internal only APIs can now be statically linked against.
      
      Now LLDB.framework/lldb.so links against "liblldb-core.a" instead
      of compiling the .o files only for the shared library. This fix
      is only for compiling with Xcode as the Makefile based build already
      does this.
      
      The Xcode projecdt compiler has been changed to LLVM. Anyone using
      Xcode 3 will need to manually change the compiler back to GCC 4.2,
      or update to Xcode 4.
      
      llvm-svn: 127963
      7a5388bf
  4. Mar 17, 2011
  5. Mar 15, 2011
  6. Mar 04, 2011
  7. Feb 23, 2011
    • Greg Clayton's avatar
      Abtracted all mach-o and ELF out of ArchSpec. This patch is a modified form · 64195a2c
      Greg Clayton authored
      of Stephen Wilson's idea (thanks for the input Stephen!). What I ended up
      doing was:
      - Got rid of ArchSpec::CPU (which was a generic CPU enumeration that mimics
        the contents of llvm::Triple::ArchType). We now rely upon the llvm::Triple 
        to give us the machine type from llvm::Triple::ArchType.
      - There is a new ArchSpec::Core definition which further qualifies the CPU
        core we are dealing with into a single enumeration. If you need support for
        a new Core and want to debug it in LLDB, it must be added to this list. In
        the future we can allow for dynamic core registration, but for now it is
        hard coded.
      - The ArchSpec can now be initialized with a llvm::Triple or with a C string
        that represents the triple (it can just be an arch still like "i386").
      - The ArchSpec can still initialize itself with a architecture type -- mach-o
        with cpu type and subtype, or ELF with e_machine + e_flags -- and this will
        then get translated into the internal llvm::Triple::ArchSpec + ArchSpec::Core.
        The mach-o cpu type and subtype can be accessed using the getter functions:
        
        uint32_t
        ArchSpec::GetMachOCPUType () const;
      
        uint32_t
        ArchSpec::GetMachOCPUSubType () const;
        
        But these functions are just converting out internal llvm::Triple::ArchSpec 
        + ArchSpec::Core back into mach-o. Same goes for ELF.
      
      All code has been updated to deal with the changes.
      
      This should abstract us until later when the llvm::TargetSpec stuff gets
      finalized and we can then adopt it.
      
      llvm-svn: 126278
      64195a2c
  8. Feb 22, 2011
  9. Feb 17, 2011
  10. Feb 15, 2011
  11. Feb 10, 2011
    • Sean Callanan's avatar
      Fixes for two bugs: · 229ce2d5
      Sean Callanan authored
      - Objective-C constant strings were being
        NULL-terminated erroneously.
      
      - Empty Objective-C constant strings were not
        being generated correctly.
      
      Also added the template for a test of these
      fixes.
      
      llvm-svn: 125314
      229ce2d5
  12. Feb 05, 2011
  13. Feb 02, 2011
    • Sean Callanan's avatar
      Added a new class, ASTDumper, that provides verbose · 0917d6e5
      Sean Callanan authored
      diagnostics of Clang AST classes for the purpose of
      debugging the types LLDB produces for DWARF objects.
      
      The ASTDumper is currently only used in log output
      if you enable verbose mode in the expression log:
      
      log enable -v lldb expr
      
      Its output then appears in the log for external
      variables used by the expr command.
      
      llvm-svn: 124703
      0917d6e5
  14. Feb 01, 2011
  15. Jan 27, 2011
    • Greg Clayton's avatar
      Changed the SymbolFile::FindFunction() function calls to only return · 931180e6
      Greg Clayton authored
      lldb_private::Function objects. Previously the SymbolFileSymtab subclass
      would return lldb_private::Symbol objects when it was asked to find functions.
      
      The Module::FindFunctions (...) now take a boolean "bool include_symbols" so
      that the module can track down functions and symbols, yet functions are found
      by the SymbolFile plug-ins (through the SymbolVendor class), and symbols are
      gotten through the ObjectFile plug-ins.
      
      Fixed and issue where the DWARF parser might run into incomplete class member
      function defintions which would make clang mad when we tried to make certain
      member functions with invalid number of parameters (such as an operator=
      operator that had no parameters). Now we just avoid and don't complete these
      incomplete functions.
      
      llvm-svn: 124359
      931180e6
    • Sean Callanan's avatar
      Updated Clang to a version that supports propagating · 78e3760f
      Sean Callanan authored
      the "virtual" flag when importing a C++ function
      declaration.  Made changes to LLDB to support other
      changes in Clang.
      
      llvm-svn: 124355
      78e3760f
    • Sean Callanan's avatar
      Added error reporting to IRForTarget so that the · 3989fb92
      Sean Callanan authored
      user doesn't have to enable logging to see where
      something went wrong.
      
      llvm-svn: 124342
      3989fb92
  16. Jan 26, 2011
  17. Jan 24, 2011
    • Sean Callanan's avatar
      Fixed a bug in the expression code which caused · 9d2127ad
      Sean Callanan authored
      it to interpret a "this" variable that was merely
      a pointer -- that is, not a class pointer -- as
      meaning that the current context was inside a C++
      method.  This bug would prevent expressions from
      evaluating correctly in regular C code if there
      was a pointer variable named "this" in scope.
      
      llvm-svn: 124117
      9d2127ad
  18. Jan 23, 2011
  19. Jan 22, 2011
  20. Jan 21, 2011
  21. Jan 20, 2011
  22. Jan 19, 2011
  23. Jan 18, 2011
  24. Jan 17, 2011
    • Greg Clayton's avatar
      A few of the issue I have been trying to track down and fix have been due to · 6beaaa68
      Greg Clayton authored
      the way LLDB lazily gets complete definitions for types within the debug info.
      When we run across a class/struct/union definition in the DWARF, we will only
      parse the full definition if we need to. This works fine for top level types
      that are assigned directly to variables and arguments, but when we have a 
      variable with a class, lets say "A" for this example, that has a member:
      "B *m_b". Initially we don't need to hunt down a definition for this class
      unless we are ever asked to do something with it ("expr m_b->getDecl()" for
      example). With my previous approach to lazy type completion, we would be able
      to take a "A *a" and get a complete type for it, but we wouldn't be able to
      then do an "a->m_b->getDecl()" unless we always expanded all types within a
      class prior to handing out the type. Expanding everything is very costly and
      it would be great if there were a better way.
      
      A few months ago I worked with the llvm/clang folks to have the 
      ExternalASTSource class be able to complete classes if there weren't completed
      yet:
      
      class ExternalASTSource {
      ....
      
          virtual void
          CompleteType (clang::TagDecl *Tag);
          
          virtual void 
          CompleteType (clang::ObjCInterfaceDecl *Class);
      };
      
      This was great, because we can now have the class that is producing the AST
      (SymbolFileDWARF and SymbolFileDWARFDebugMap) sign up as external AST sources
      and the object that creates the forward declaration types can now also
      complete them anywhere within the clang type system.
      
      This patch makes a few major changes:
      - lldb_private::Module classes now own the AST context. Previously the TypeList
        objects did.
      - The DWARF parsers now sign up as an external AST sources so they can complete
        types.
      - All of the pure clang type system wrapper code we have in LLDB (ClangASTContext,
        ClangASTType, and more) can now be iterating through children of any type,
        and if a class/union/struct type (clang::RecordType or ObjC interface) 
        is found that is incomplete, we can ask the AST to get the definition. 
      - The SymbolFileDWARFDebugMap class now will create and use a single AST that
        all child SymbolFileDWARF classes will share (much like what happens when
        we have a complete linked DWARF for an executable).
        
      We will need to modify some of the ClangUserExpression code to take more 
      advantage of this completion ability in the near future. Meanwhile we should
      be better off now that we can be accessing any children of variables through
      pointers and always be able to resolve the clang type if needed.
      
      llvm-svn: 123613
      6beaaa68
  25. Jan 15, 2011
  26. Jan 13, 2011
    • Sean Callanan's avatar
      Fixed handling of explicitly-declared persistent · e1175b7c
      Sean Callanan authored
      variables.
      
      llvm-svn: 123398
      e1175b7c
    • Sean Callanan's avatar
      Implemented a major overhaul of the way variables are handled · 92adcac9
      Sean Callanan authored
      by LLDB.  Instead of being materialized into the input structure
      passed to the expression, variables are left in place and pointers
      to them are materialzied into the structure.  Variables not resident
      in memory (notably, registers) get temporary memory regions allocated
      for them.
      
      Persistent variables are the most complex part of this, because they
      are made in various ways and there are different expectations about
      their lifetime.  Persistent variables now have flags indicating their
      status and what the expectations for longevity are.  They can be
      marked as residing in target memory permanently -- this is the
      default for result variables from expressions entered on the command
      line and for explicitly declared persistent variables (but more on
      that below).  Other result variables have their memory freed.
      
      Some major improvements resulting from this include being able to
      properly take the address of variables, better and cleaner support
      for functions that return references, and cleaner C++ support in
      general.  One problem that remains is the problem of explicitly
      declared persistent variables; I have not yet implemented the code
      that makes references to them into indirect references, so currently
      materialization and dematerialization of these variables is broken.
      
      llvm-svn: 123371
      92adcac9
  27. Jan 09, 2011
    • Greg Clayton's avatar
      Put more smarts into the RegisterContext base class. Now the base class has · 3e06bd90
      Greg Clayton authored
      a method:
      
          void RegisterContext::InvalidateIfNeeded (bool force);
      
      Each time this function is called, when "force" is false, it will only call
      the pure virtual "virtual void RegisterContext::InvalideAllRegisters()" if
      the register context's stop ID doesn't match that of the process. When the
      stop ID doesn't match, or "force" is true, the base class will clear its
      cached registers and the RegisterContext will update its stop ID to match
      that of the process. This helps make it easier to correctly flush the register
      context (possibly from multiple locations depending on when and where new
      registers are availabe) without inadvertently clearing the register cache 
      when it doesn't need to be.
      
      Modified the ProcessGDBRemote plug-in to be much more efficient when it comes
      to:
      - caching the expedited registers in the stop reply packets (we were ignoring
        these before and it was causing us to read at least three registers every
        time we stopped that were already supplied in the stop reply packet).
      - When a thread has no stop reason, don't keep asking for the thread stopped
        info. Prior to this fix we would continually send a qThreadStopInfo packet
        over and over when any thread stop info was requested. We now note the stop
        ID that the stop info was requested for and avoid multiple requests.
      
      Cleaned up some of the expression code to not look for ClangExpressionVariable
      objects up by name since they are now shared pointers and we can just look for
      the exact pointer match and avoid possible errors.
      
      Fixed an bug in the ValueObject code that would cause children to not be 
      displayed.
      
      llvm-svn: 123127
      3e06bd90
  28. Jan 06, 2011
    • Greg Clayton's avatar
      Fixed issues with RegisterContext classes and the subclasses. There was · 5ccbd294
      Greg Clayton authored
      an issue with the way the UnwindLLDB was handing out RegisterContexts: it
      was making shared pointers to register contexts and then handing out just
      the pointers (which would get put into shared pointers in the thread and
      stack frame classes) and cause double free issues. MallocScribble helped to
      find these issues after I did some other cleanup. To help avoid any
      RegisterContext issue in the future, all code that deals with them now
      returns shared pointers to the register contexts so we don't end up with
      multiple deletions. Also now that the RegisterContext class doesn't require
      a stack frame, we patched a memory leak where a StackFrame object was being
      created and leaked.
      
      Made the RegisterContext class not have a pointer to a StackFrame object as
      one register context class can be used for N inlined stack frames so there is
      not a 1 - 1 mapping. Updates the ExecutionContextScope part of the 
      RegisterContext class to never return a stack frame to indicate this when it
      is asked to recreate the execution context. Now register contexts point to the
      concrete frame using a concrete frame index. Concrete frames are all of the
      frames that are actually formed on the stack of a thread. These concrete frames
      can be turned into one or more user visible frames due to inlining. Each 
      inlined stack frame has the exact same register context (shared via shared
      pointers) as any parent inlined stack frames all the way up to the concrete 
      frame itself.
      
      So now the stack frames and the register contexts should behave much better.
      
      llvm-svn: 122976
      5ccbd294
  29. Jan 04, 2011
  30. Dec 20, 2010
  31. Dec 17, 2010
    • Greg Clayton's avatar
      Added access to set the current stack frame within a thread so any command · f028a1fb
      Greg Clayton authored
      line commands can use the current thread/frame.
      
      Fixed an issue with expressions that get sandboxed in an objective C method
      where unichar wasn't being passed down.
      
      Added a "static size_t Scalar::GetMaxByteSize();" function in case we need
      to know the max supported by size of something within a Scalar object.
      
      llvm-svn: 122027
      f028a1fb
  32. Dec 16, 2010
  33. Dec 14, 2010
    • Greg Clayton's avatar
      Modified LLDB expressions to not have to JIT and run code just to see variable · 8b2fe6dc
      Greg Clayton authored
      values or persistent expression variables. Now if an expression consists of
      a value that is a child of a variable, or of a persistent variable only, we
      will create a value object for it and make a ValueObjectConstResult from it to
      freeze the value (for program variables only, not persistent variables) and
      avoid running JITed code. For everything else we still parse up and JIT code
      and run it in the inferior. 
      
      There was also a lot of clean up in the expression code. I made the 
      ClangExpressionVariables be stored in collections of shared pointers instead
      of in collections of objects. This will help stop a lot of copy constructors on
      these large objects and also cleans up the code considerably. The persistent
      clang expression variables were moved over to the Target to ensure they persist
      across process executions.
      
      Added the ability for lldb_private::Target objects to evaluate expressions.
      We want to evaluate expressions at the target level in case we aren't running
      yet, or we have just completed running. We still want to be able to access the
      persistent expression variables between runs, and also evaluate constant 
      expressions. 
      
      Added extra logging to the dynamic loader plug-in for MacOSX. ModuleList objects
      can now dump their contents with the UUID, arch and full paths being logged with
      appropriate prefix values.
      
      Thread hardened the Communication class a bit by making the connection auto_ptr
      member into a shared pointer member and then making a local copy of the shared
      pointer in each method that uses it to make sure another thread can't nuke the
      connection object while it is being used by another thread.
      
      Added a new file to the lldb/test/load_unload test that causes the test a.out file
      to link to the libd.dylib file all the time. This will allow us to test using
      the DYLD_LIBRARY_PATH environment variable after moving libd.dylib somewhere else.
      
      llvm-svn: 121745
      8b2fe6dc
Loading