Skip to content
  1. May 23, 2013
    • Sean Callanan's avatar
      Fixed a bug where persistent variables did not · fbf5c682
      Sean Callanan authored
      live as long as they needed to.  This led to
      equality tests involving persistent variables
      often failing or succeeding when they had no
      business doing so.
      
      To do this, I introduced the ability for a
      memory allocation to "leak" - that is, to
      persist in the process beyond the lifetime of
      the expression.  Hand-declared persistent
      variables do this now.
      
      <rdar://problem/13956311>
      
      llvm-svn: 182528
      fbf5c682
  2. May 18, 2013
  3. May 17, 2013
    • Greg Clayton's avatar
      <rdar://problem/13893094> · 9e9f219a
      Greg Clayton authored
      Show variables that were in the debug info but optimized out. Also display a good error message when one of these variables get used in an expression.
      
      llvm-svn: 182066
      9e9f219a
  4. May 16, 2013
    • Sean Callanan's avatar
      Added a per-process cache for reserved memory · bb77704c
      Sean Callanan authored
      regions that aren't actually allocated in the
      process.  This cache is used by the expression
      parser if the underlying process doesn't support
      memory allocation, to avoid needless repeated
      searches for unused address ranges.
      
      Also fixed a silly bug in IRMemoryMap where it
      would continue searching even after it found a
      valid region.
      
      <rdar://problem/13866629>
      
      llvm-svn: 182028
      bb77704c
  5. May 15, 2013
  6. May 09, 2013
  7. May 08, 2013
  8. May 02, 2013
  9. Apr 30, 2013
  10. Apr 27, 2013
  11. Apr 26, 2013
  12. Apr 25, 2013
  13. Apr 24, 2013
  14. Apr 23, 2013
  15. Apr 20, 2013
  16. Apr 19, 2013
    • Greg Clayton's avatar
      Fixed some linux buildbot warnings. · 03da4cc2
      Greg Clayton authored
      llvm-svn: 179892
      03da4cc2
    • Sean Callanan's avatar
      Fixed two problems when reading constant/register · ed185ab5
      Sean Callanan authored
      variables in the ValueObject code:
      
        - Report an error if the variable does not have
          a valid address.
      
        - Return the contents of the data to GetData(),
          even if the value is constant.
      
      <rdar://problem/13690855>
      
      llvm-svn: 179876
      ed185ab5
    • Sean Callanan's avatar
      Simplified the management of the data buffer for · d2562509
      Sean Callanan authored
      an Allocation to reduce heap fragmentation and
      make the code less brittle (and to make some
      buildbots happier).
      
      llvm-svn: 179868
      d2562509
    • Sean Callanan's avatar
      Removed 2800+ lines of code that no longer do anything · 44342735
      Sean Callanan authored
      now that the IR interpreter and the JIT share the same
      materialization codepaths.
      
      llvm-svn: 179842
      44342735
    • Sean Callanan's avatar
      Optimized the way breakpoint conditions are evaluated. · 3dbf346e
      Sean Callanan authored
      Previously, the options for a breakopint or its
      locations stored only the text of the breakpoint
      condition (ironically, they used ClangUserExpression
      as a glorified std::string) and, each time the condition
      had to be evaluated in the StopInfo code, the expression
      parser would be invoked via a static method to parse and
      then execute the expression.
      
      I made several changes here:
      
        - Each breakpoint location now has its own
          ClangUserExpressionSP containing a version of
          the breakpoint expression compiled for that exact
          location.
      
        - Whenever the breakpoint is hit, the breakpoint
          condition expression is simply re-run to determine
          whether to stop.
      
        - If the process changes (e.g., it's re-run) or
          the source code of the expression changes (we use
          a hash so as to avoid doing string comparisons)
          the ClangUserExpressionSP is re-generated.
      
      This should improve performance of breakpoint
      conditions significantly, and takes advantage of
      the recent expression re-use work.
      
      llvm-svn: 179838
      3dbf346e
    • Sean Callanan's avatar
      Reverted 179810, which breaks the expression · 7d71e567
      Sean Callanan authored
      parser.
      
      llvm-svn: 179832
      7d71e567
    • Sean Callanan's avatar
      Made IRMemoryMap::FindSpace a little cleverer, · bb9945f4
      Sean Callanan authored
      and made attempts to allocate memory in the process
      fall back to FindSpace and just allocate memory on
      the host (but with real-looking pointers, hence
      FindSpace) if the process doesn't allow allocation.
      This allows expressions to run on processes that don't
      support allocation, like core files.
      
      This introduces an extremely rare potential problem:
      If all of the following are true:
      
      - The Process doesn't support allocation;
      
      - the user writes an expression that refers to an
        address that does not yet map to anything, or is
        dynamically generated (e.g., the result of calling
        a function); and
      
      - the randomly-selected address for the static data
        for that specific expression runs into the
        address the user was expecting to work with;
      
      then dereferencing the pointer later results
      in the user seeing something unexpected.  This is
      unlikely but possible; as a future piece of work,
      we should have processes be able to hint to the
      expression parser where it can allocate temporary data
      of this kind.
      
      llvm-svn: 179827
      bb9945f4
    • Greg Clayton's avatar
    • Greg Clayton's avatar
      After discussing with Chris Lattner, we require C++11, so lets get rid of the... · 7b0992d9
      Greg Clayton authored
      After discussing with Chris Lattner, we require C++11, so lets get rid of the macros and just use C++11.
      
      llvm-svn: 179805
      7b0992d9
    • Sean Callanan's avatar
      This commit changes the way LLDB executes user · 1582ee68
      Sean Callanan authored
      expressions.  
      
      Previously, ClangUserExpression assumed that if
      there was a constant result for an expression 
      then it could be determined during parsing.  In
      particular, the IRInterpreter ran while parser
      state (in particular, ClangExpressionDeclMap) 
      was present.  This approach is flawed, because
      the IRInterpreter actually is capable of using
      external variables, and hence the result might
      be different each run.  Until now, we papered
      over this flaw by re-parsing the expression each
      time we ran it.
      
      I have rewritten the IRInterpreter to be 
      completely independent of the ClangExpressionDeclMap.
      Instead of special-casing external variable lookup,
      which ties the IRInterpreter closely to LLDB,
      we now interpret the exact same IR that the JIT
      would see.  This IR assumes that materialization
      has occurred; hence the recent implementation of the
      Materializer, which does not require parser state
      (in the form of ClangExpressionDeclMap) to be 
      present.
      
      Materialization, interpretation, and dematerialization
      are now all independent of parsing.  This means that
      in theory we can parse expressions once and run them
      many times.  I have three outstanding tasks before
      shutting this down:
      
          - First, I will ensure that all of this works with
            core files.  Core files have a Process but do not
            allow allocating memory, which currently confuses
            materialization.
      
          - Second, I will make expression breakpoint 
            conditions remember their ClangUserExpression and
            re-use it.
      
          - Third, I will tear out all the redundant code
            (for example, materialization logic in
            ClangExpressionDeclMap) that is no longer used.
      
      While implementing this fix, I also found a bug in
      IRForTarget's handling of floating-point constants.  
      This should be fixed.
      
      llvm-svn: 179801
      1582ee68
    • Greg Clayton's avatar
  17. Apr 18, 2013
    • Greg Clayton's avatar
      Since we use C++11, we should switch over to using std::unique_ptr when C++11... · e01e07b6
      Greg Clayton authored
      Since we use C++11, we should switch over to using std::unique_ptr when C++11 is being used. To do this, we follow what we have done for shared pointers and we define a STD_UNIQUE_PTR macro that can be used and it will "do the right thing". Due to some API differences in std::unique_ptr and due to the fact that we need to be able to compile without C++11, we can't use move semantics so some code needed to change so that it can compile with either C++.
      
      Anyone wanting to use a unique_ptr or auto_ptr should now use the "STD_UNIQUE_PTR(TYPE)" macro.
      
      llvm-svn: 179779
      e01e07b6
  18. Apr 17, 2013
    • Sean Callanan's avatar
      Added a new API to the IRInterpreter (the old API · 14cb2aaa
      Sean Callanan authored
      will be gone soon!) that lets it interpret a function
      using just an llvm::Module, an llvm::Function, and a
      MemoryMap.
      
      Also added an API to IRExecutionUnit to get at its
      llvm::Function, so that the IRInterpreter can work
      with it.
      
      llvm-svn: 179704
      14cb2aaa
    • Sean Callanan's avatar
      Made the IRInterpreter's methods static, since · 182bd6c0
      Sean Callanan authored
      it doesn't actually hold any important state.
      
      llvm-svn: 179702
      182bd6c0
    • Sean Callanan's avatar
      Made the IRInterpreter be able to operate without · 175187b3
      Sean Callanan authored
      a ClangExpressionDeclMap.  Any functions that
      require value resolution etc. fail if the
      ClangExpressionDeclMap isn't present - which is
      exactly what is desired.
      
      llvm-svn: 179695
      175187b3
    • Sean Callanan's avatar
      Updated the IRInterpreter to work with an · 08052afa
      Sean Callanan authored
      IRMemoryMap rather than through its own memory
      abstraction.  This considerably simplifies the
      code, and makes it possible to run the
      IRInterpreter multiple times on an already-parsed
      expression in the absence of a ClangExpressionDeclMap.
      
      Changes include:
      
        - ClangExpressionDeclMap's interface methods
          for the IRInterpreter now take IRMemoryMap
          arguments.  They are not long for this world,
          however, since the IRInterpreter will soon be
          working with materialized variables.
      
        - As mentioned above, removed the Memory class
          from the IR interpreter altogether.  It had a
          few functions that remain useful, such as
          keeping track of Values that have been placed
          in memory, so I moved those into methods on
          InterpreterStackFrame.
      
        - Changed IRInterpreter to work with lldb::addr_t
          rather than Memory::Region as its primary
          currency.
      
        - Fixed a bug in the IRMemoryMap where it did not
          report correct address byte size and byte order
          if no process was present, because it was using
          Target::GetDefaultArchitecture() rather than
          Target::GetArchitecture().
      
        - Made IRMemoryMap methods clear the Errors they
          receive before running.  Having to do this by
          hand is just annoying.
      
      The testsuite seems happy with these changes, but
      please let me know if you see problems (especially
      in use cases without a process).
      
      llvm-svn: 179675
      08052afa
    • Sean Callanan's avatar
      Modified the IRInterpreter to take an IRMemoryMap. · 179b5485
      Sean Callanan authored
      It doesn't use it yet; the next step is to make it
      use the IRMemoryMap instead of its own conjured-up
      Memory class.
      
      llvm-svn: 179650
      179b5485
    • Sean Callanan's avatar
      Flipped the big switch: LLDB now uses the new · 14b1bae5
      Sean Callanan authored
      Materializer for all expressions that need to
      run in the target.  This includes the following
      changes:
      
      - Removed a bunch of (de-)materialization code
        from ClangExpressionDeclMap and assumed the
        presence of a Materializer where we previously
        had a fallback.
      
      - Ensured that an IRMemoryMap is passed into
        ClangExpressionDeclMap::Materialize().
      
      - Fixed object ownership on LLVMContext; it is
        now owned by the IRExecutionUnit, since the
        Module and the ExecutionEngine both depend on
        its existence.
      
      - Fixed a few bugs in IRMemoryMap and the
        Materializer that showed up during testing.
      
      llvm-svn: 179649
      14b1bae5
Loading