Skip to content
  1. Nov 19, 2011
    • Sean Callanan's avatar
      Pulled in a new revision of LLVM/Clang and added · 7f27d604
      Sean Callanan authored
      several patches.  These patches fix a problem
      where templated types were not being completed the
      first time they were used, and fix a variety of
      minor issues I discovered while fixing that problem.
      
      One of the previous local patches was resolved in
      the most recent Clang, so I removed it.  The others
      will be removed in due course.
      
      llvm-svn: 144984
      7f27d604
  2. Nov 18, 2011
    • Sean Callanan's avatar
      This commit completes the rearchitecting of ClangASTSource · 00f43622
      Sean Callanan authored
      to allow variables in the persistent variable store to know
      how to complete themselves from debug information.  That
      fixes a variety of bugs during dematerialization of 
      expression results and also makes persistent variable and
      result variables ($foo, $4, ...) more useful.
      
      I have also added logging improvements that make it much
      easier to figure out how types are moving from place to 
      place, and made some checking a little more aggressive.
      
      The commit includes patches to Clang which are currently being
      integrated into Clang proper; once these fixes are in Clang
      top-of-tree, these patches will be removed.  The patches don't
      fix API; rather, they fix some internal bugs in Clang's 
      ASTImporter that were exposed when LLDB was moving types from
      place to place multiple times.
      
      llvm-svn: 144969
      00f43622
  3. Nov 16, 2011
    • Sean Callanan's avatar
      I made the ClangASTImporter owned by the target · 686b2319
      Sean Callanan authored
      rather than individually on behalf of each
      ASTContext.  This allows the ASTImporter to know
      about all containers of types, which will let it
      be smarter about forwarding information about
      type origins.  That means that the following
      sequence of steps will be possible (after a few
      more changes):
      
      - Import a type from a Module's ASTContext into
        an expression parser ASTContext, tracking its
        origin information -- this works now.
      
      - Because the result of the expression uses that
        type, import it from the expression parser
        ASTContext into the Target's scratch AST
        context, forwarding the origin information --
        this needs to be added.
      
      - For a later expression that uses the result,
        import the type from the Target's scratch AST
        context, still forwarding origin information
        -- this also needs to be added.
      
      - Use the intact origin information to complete
        the type as needed -- this works now if the
        origin information is present.
      
      To this end, I made the following changes:
      
      - ASTImporter top-level copy functions now
        require both a source and a destination AST
        context parameter.
      
      - The ASTImporter now knows how to purge
        records related to an ASTContext that is
        going away.
      
      - The Target now owns and creates the ASTImporter
        whenever the main executable changes or (in the
        absence of a main executable) on demand.
      
      llvm-svn: 144802
      686b2319
    • Sean Callanan's avatar
      Fixed a crash when we merrily went on to try to log · ed8d58fc
      Sean Callanan authored
      information about a nonexistent function declaration.
      
      llvm-svn: 144744
      ed8d58fc
    • Sean Callanan's avatar
      Two fixes for Objetive-C methods that return struct · a6cbf06d
      Sean Callanan authored
      types.  First, I added handling for the memset intrinsic
      in the IR, which is used to zero out the returned struct.
      Second, I fixed the object-checking instrumentation
      to objc_msgSend_stret, and generally tightened up how
      the object-checking functions get inserted.
      
      llvm-svn: 144741
      a6cbf06d
  4. Nov 15, 2011
    • Sean Callanan's avatar
      Eliminated a compile warning by removing dyn_cast · 100d74e2
      Sean Callanan authored
      where isa is good enough.
      
      llvm-svn: 144704
      100d74e2
    • Sean Callanan's avatar
      Fixed a bug where the variable-resolution code · fe5d139b
      Sean Callanan authored
      would occasionally try to resolve the placeholder
      variable used for static data allocation.
      
      llvm-svn: 144677
      fe5d139b
    • Sean Callanan's avatar
      Pulled in a new version of LLVM/Clang to solve a variety · d5c17edb
      Sean Callanan authored
      of problems with Objective-C object completion.  To go
      along with the LLVM/Clang-side fixes, we have a variety
      of Objective-C improvements.
      
      Fixes include:
      
      - It is now possible to run expressions when stopped in
        an Objective-C class method and have "self" act just
        like "self" would act in the class method itself (i.e.,
        [self classMethod] works without casting the return
        type if debug info is present).  To accomplish this,
        the expression masquerades as a class method added by
        a category.
      
      - Objective-C objects can now provide methods and
        properties and methods to Clang on demand (i.e., the
        ASTImporter sets hasExternalVisibleDecls on Objective-C
        interface objects).
      
      - Objective-C built-in types, which had long been a bone
        of contention (should we be using "id"?  "id*"?), are
        now fetched correctly using accessor functions on
        ClangASTContext.  We inhibit searches for them in the
        debug information.
      
      There are also a variety of logging fixes, and I made two
      changes to the test suite:
      
      - Enabled a test case for Objective-C properties in the
        current translation unit.
      
      - Added a test case for calling Objective-C class methods
        when stopped in a class method.
      
      llvm-svn: 144607
      d5c17edb
  5. Nov 14, 2011
  6. Nov 13, 2011
    • Greg Clayton's avatar
      <rdar://problem/10338439> · 2fc93eab
      Greg Clayton authored
      This is the actual fix for the above radar where global variables that weren't
      initialized were not being shown correctly when leaving the DWARF in the .o 
      files. Global variables that aren't intialized have symbols in the .o files
      that specify they are undefined and external to the .o file, yet document the
      size of the variable. This allows the compiler to emit a single copy, but makes
      it harder for our DWARF in .o files with the executable having a debug map
      because the symbol for the global in the .o file doesn't exist in a section
      that we can assign a fixed up linked address to, and also the DWARF contains
      an invalid address in the "DW_OP_addr" location (always zero). This means that
      the DWARF is incorrect and actually maps all such global varaibles to the
      first file address in the .o file which is usually the first function. So we
      can fix this in either of two ways: make a new fake section in the .o file
      so that we have a file address in the .o file that we can relink, or fix the 
      the variable as it is created in the .o file DWARF parser and actually give it
      the file address from the executable. Each variable contains a 
      SymbolContextScope, or a single pointer that helps us to recreate where the
      variables came from (which module, file, function, etc). This context helps
      us to resolve any file addresses that might be in the location description of
      the variable by pointing us to which file the file address comes from, so we
      can just replace the SymbolContextScope and also fix up the location, which we
      would have had to do for the other case as well, and update the file address.
      Now globals display correctly.
      
      The above changes made it possible to determine if a variable is a global
      or static variable when parsing DWARF. The DWARF emits a DW_TAG_variable tag
      for each variable (local, global, or static), yet DWARF provides no way for
      us to classify these variables into these categories. We can now detect when
      a variable has a simple address expressions as its location and this will help
      us classify these correctly.
      
      While making the above changes I also noticed that we had two symbol types:
      eSymbolTypeExtern and eSymbolTypeUndefined which mean essentially the same
      thing: the symbol is not defined in the current object file. Symbol objects
      also have a bit that specifies if a symbol is externally visible, so I got
      rid of the eSymbolTypeExtern symbol type and moved all code locations that
      used it to use the eSymbolTypeUndefined type.
       
      
      llvm-svn: 144489
      2fc93eab
  7. Nov 11, 2011
  8. Nov 09, 2011
    • Sean Callanan's avatar
      Added a function to ClangASTSource to service · 0730e9c9
      Sean Callanan authored
      lookups for Objective-C methods by selector.
      Right now all it does is print log information.
      
      Also improved the logging for imported TagDecls
      to indicate whether or not the definition for
      the imported TagDecl is complete.
      
      llvm-svn: 144203
      0730e9c9
  9. Nov 08, 2011
  10. Nov 04, 2011
    • Sean Callanan's avatar
      Updated LLVM/Clang to pick up a fix for imports of · bfb237bc
      Sean Callanan authored
      C++ vtables, fixing a record layout problem in the
      expression parser.
      
      Also fixed various problems with the generation 
      and unpacking of llvm.zip given our new better
      handling of multiple architectures in the LLVM
      build.
      
      (And added a log message that will hopefully catch
      record layout problems in the future.)
      
      llvm-svn: 143741
      bfb237bc
    • Sean Callanan's avatar
      Occasionally LLDB runs into contexts where the · 744756e3
      Sean Callanan authored
      target is stopped in a C++ or Objective-C method
      but the "self" pointer's valid range actually
      doesn't cover the current location.  Before, that
      was confusing Clang to the point where it crashed;
      now, we sanity-check and fall back to pretending
      we're in a C function if "self" or "this" isn't
      available.
      
      llvm-svn: 143676
      744756e3
  11. Nov 03, 2011
  12. Nov 02, 2011
    • Sean Callanan's avatar
      Updated LLVM/Clang to pull in an MCJIT fix that · c832475c
      Sean Callanan authored
      allows us to set __attribute__ ((used)) on expressions
      that masquerade as methods.  When we are stopped in
      classes in anonymous namespaces, this fix (and enabling
      __attribute__ ((used)) on the method) will allow
      expressions to run.
      
      llvm-svn: 143560
      c832475c
    • Sean Callanan's avatar
      Sometimes the debug information includes artifically- · dbb58399
      Sean Callanan authored
      generated special member functions (constructors,
      destructors, etc.) for classes that don't really have
      them.  We needed to mark these as artificial to reflect
      the debug information; this bug does that for
      constructors and destructors.
      
      The "etc." case (certain assignment operators, mostly)
      remains to be fixed.
      
      llvm-svn: 143526
      dbb58399
    • Sean Callanan's avatar
      Added functionality to call Objective-C class methods · fc89c142
      Sean Callanan authored
      correctly, and added a testcase to check that it works.
      
      The main problem here is that Objective-C class method
      selectors are external references stored in a special
      data structure in the LLVM IR module for an expression.
      I just had to extract them and ensure that the real
      class object locations were properly resolved.
      
      llvm-svn: 143520
      fc89c142
  13. Nov 01, 2011
    • Sean Callanan's avatar
      Added the capability (turned off for now) to mark a · c1b732d7
      Sean Callanan authored
      method as __attribute__ ((used)) when adding it to a
      class.  This functionality is useful when stopped in
      anonymous namespaces: expressions attached to classes
      in anonymous namespaces are typically elided by Clang's
      CodeGen because they have no namespaces are intended
      not to be externally visible.  __attribute__ ((used))
      forces CodeGen to emit the function.
      
      Right now, __attribute__ ((used)) causes the JIT not to
      emit the function, so we're not enabling it until we
      fix that.
      
      llvm-svn: 143469
      c1b732d7
    • Sean Callanan's avatar
      Minor logging changes: added logging right before · ea685aeb
      Sean Callanan authored
      the expression makes it to the JIT, and made some
      logging only appear in verbose mode.
      
      llvm-svn: 143467
      ea685aeb
    • Jim Ingham's avatar
      Enhanced the ObjC DynamicCheckerFunction to test for "object responds to selector" as well as · ce553d88
      Jim Ingham authored
      "object borked"...  Also made the error when the checker fails reflect this fact rather than
      report a crash at 0x0.
      
      Also a little cleanup:
      - StopInfoMachException had a redundant copy of the description string.
      - ThreadPlanCallFunction had a redundant copy of the thread, and had a 
      copy of the process that it didn't really need.
      
      llvm-svn: 143419
      ce553d88
  14. Oct 31, 2011
  15. Oct 29, 2011
    • Sean Callanan's avatar
      Cloned FindExternalVisibleDecls from · fb3e4306
      Sean Callanan authored
      ClangExpressionDeclMap to ClangASTSource, and
      moved all general type and namespace lookups
      into ClangASTSource.  Now ClangASTSource is ready
      to complete types given nothing more than a target
      and an AST context.
      
      llvm-svn: 143292
      fb3e4306
    • Sean Callanan's avatar
      Moved FindExternalLexicalDecls and a few smaller · ba0aca72
      Sean Callanan authored
      functions from ClangExpressionDeclMap to ClangASTSource.
      
      llvm-svn: 143276
      ba0aca72
    • Sean Callanan's avatar
      I moved the responsibility for interacting with the · 1ee44b74
      Sean Callanan authored
      AST importer on completing namespace mappings from
      ClangExpressionDeclMap to ClangASTSource.
      
      ClangASTSource now contains a TargetSP which it
      uses to lookup namespaces in all of a target's
      modules.  I will use the TargetSP in the future to
      look up globals.
      
      llvm-svn: 143275
      1ee44b74
    • Sean Callanan's avatar
      As part of a general refactoring of ClangASTSource to · eddeb3b9
      Sean Callanan authored
      allow it to complete types on behalf of any AST context
      (including the "scratch" AST context associated with
      the target), I scrapped its role as intermediary between
      the Clang parser and ClangExpressionDeclMap, and instead
      made ClangExpressionDeclMap inherit from ClangASTSource.
      
      After this, I will migrate the functions that complete
      types and perform namespace lookups from
      ClangExpressionDeclMap to ClangASTSource.  Ultimately
      ClangExpressionDeclMap's only responsiblity will be to
      look up variables and ensure that they are materialized
      and dematerialized correctly.
      
      llvm-svn: 143253
      eddeb3b9
  16. Oct 28, 2011
  17. Oct 27, 2011
  18. Oct 26, 2011
    • Sean Callanan's avatar
      Extended the IR interpreter to handle the variables · d2cb626a
      Sean Callanan authored
      "_cmd", "this", and "self".  These variables are handled
      differently from all other external variables used by
      the expression.  Other variables are used indirectly
      through the $__lldb_arg operand; only _cmd, this, and
      self are passed directly through the ABI.
      
      There are two modifications:
      
       - I added a function to ClangExpressionDeclMap that
         retrives the value of one of these variables by name;
         and
      
       - I made IRInterpreter fetch these values when needed,
         and ensured that the proper level of indirection is
         used.
      
      llvm-svn: 143065
      d2cb626a
  19. Oct 25, 2011
    • Sean Callanan's avatar
      Fixed a problem where local variables conflict with · efa7d1f1
      Sean Callanan authored
      types of the same name.  If a local variable with the
      given name is found (and we are not searching a
      specific namespace) we stop right then and there and
      report it.
      
      llvm-svn: 142962
      efa7d1f1
    • Sean Callanan's avatar
      Improved handling of static data in the expression · c70ed46d
      Sean Callanan authored
      parser.  Now expression like the following work as
      expected:
      
      -
      (lldb) expr struct { int a; int b; } $blah = { 10, 20 }
      <no result>
      (lldb) expr $blah
      (<anonymous struct at Parse:6:5>) $blah = {
        (int) a = 10
        (int) b = 20
      }
      -
      
      Now the IRForTarget subsystem knows how to handle
      static initializers of various composite types.
      
      Also removed an unnecessary parameter from
      ClangExpressionDeclMap::GetFunctionInfo.
      
      llvm-svn: 142936
      c70ed46d
    • Sean Callanan's avatar
      Fixed our handling of const functions, compensating · f463856f
      Sean Callanan authored
      for debug information that occasionally gets the
      const-ness of member functions wrong.  We used to
      demangle the name, add "const," and remangle it; now
      we handle the mangled name directly, which is more
      robust.
      
      llvm-svn: 142933
      f463856f
Loading