Skip to content
  1. Nov 15, 2011
    • 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
  2. Nov 14, 2011
  3. 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
  4. Nov 11, 2011
  5. 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
  6. Nov 08, 2011
  7. 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
  8. Nov 03, 2011
  9. 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
  10. 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
  11. Oct 31, 2011
  12. 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
  13. Oct 28, 2011
  14. Oct 27, 2011
  15. 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
  16. 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
  17. Oct 22, 2011
  18. Oct 21, 2011
  19. Oct 20, 2011
  20. Oct 18, 2011
Loading