Skip to content
  1. May 30, 2011
  2. May 25, 2011
    • Greg Clayton's avatar
      ABI plug-ins must implement the following pure virtual functions: · 9b72eb71
      Greg Clayton authored
      virtual bool
      ABI::StackUsesFrames () = 0;
      
      Should return true if your ABI uses frames when doing stack backtraces. This
      means a frame pointer is used that points to the previous stack frame in some
      way or another.
      
      virtual bool
      ABI::CallFrameAddressIsValid (lldb::addr_t cfa) = 0;
      
      Should take a look at a call frame address (CFA) which is just the stack
      pointer value upon entry to a function. ABIs usually impose alignment
      restrictions (4, 8 or 16 byte aligned), and zero is usually not allowed.
      This function should return true if "cfa" is valid call frame address for
      the ABI, and false otherwise. This is used by the generic stack frame unwinding
      code to help determine when a stack ends.
      
      virtual bool
      ABI::CodeAddressIsValid (lldb::addr_t pc) = 0;    
      
      Validates a possible PC value and returns true if an opcode can be at "pc".
      Some ABIs or architectures have fixed width instructions and must be aligned
      to a 2 or 4 byte boundary. "pc" can be an opcode or a callable address which
      means the load address might be decorated with extra bits (such as bit zero
      to indicate a thumb function call for ARM targets), so take this into account
      when returning true or false. The address should also be validated to ensure
      it is a valid address for the address size of the inferior process. 32 bit
      targets should make sure the address is less than UINT32_MAX.
      
      Modified UnwindLLDB to use the new ABI functions to help it properly terminate
      stacks.
      
      
      Modified the mach-o function that extracts dependent files to not resolve the
      path as the paths inside a binary might not match those on the current
      host system.
      
      llvm-svn: 132021
      9b72eb71
  3. May 23, 2011
    • Sean Callanan's avatar
      This commit integrates support for the LLVM MCJIT · 79763a42
      Sean Callanan authored
      into the mainline LLDB codebase.  MCJIT introduces
      API improvements and better architectural support.
      
      This commit adds a new subsystem, the
      ProcessDataAllocator, which is responsible for
      performing static data allocations on behalf of the
      IR transformer.  MCJIT currently does not support
      the relocations required to store the constant pool
      in the same allocation as the function body, so we
      allocate a heap region separately and redirect
      static data references from the expression to that
      heap region in a new IR modification pass.
      
      This patch also fixes bugs in the IR
      transformations that were exposed by the transition
      to the MCJIT.  Finally, the patch also pulls in a
      more recent revision of LLVM so that the MCJIT is
      available for use.
      
      llvm-svn: 131923
      79763a42
    • Greg Clayton's avatar
      Added new lldb_private::Process memory read/write functions to stop a bunch · f3ef3d2a
      Greg Clayton authored
      of duplicated code from appearing all over LLDB:
      
      lldb::addr_t
      Process::ReadPointerFromMemory (lldb::addr_t vm_addr, Error &error);
      
      bool
      Process::WritePointerToMemory (lldb::addr_t vm_addr, lldb::addr_t ptr_value, Error &error);
      
      size_t
      Process::ReadScalarIntegerFromMemory (lldb::addr_t addr, uint32_t byte_size, bool is_signed, Scalar &scalar, Error &error);
      
      size_t
      Process::WriteScalarToMemory (lldb::addr_t vm_addr, const Scalar &scalar, uint32_t size, Error &error);
      
      in lldb_private::Process the following functions were renamed:
      
      From:
      uint64_t
      Process::ReadUnsignedInteger (lldb::addr_t load_addr, 
                                    size_t byte_size,
                                    Error &error);
      
      To:
      uint64_t
      Process::ReadUnsignedIntegerFromMemory (lldb::addr_t load_addr, 
                                              size_t byte_size,
                                              uint64_t fail_value, 
                                              Error &error);
      
      Cleaned up a lot of code that was manually doing what the above functions do
      to use the functions listed above.
      
      Added the ability to get a scalar value as a buffer that can be written down
      to a process (byte swapping the Scalar value if needed):
      
      uint32_t 
      Scalar::GetAsMemoryData (void *dst,
                              uint32_t dst_len, 
                              lldb::ByteOrder dst_byte_order,
                              Error &error) const;
      
      The "dst_len" can be smaller that the size of the scalar and the least 
      significant bytes will be written. "dst_len" can also be larger and the
      most significant bytes will be padded with zeroes. 
      
      Centralized the code that adds or removes address bits for callable and opcode
      addresses into lldb_private::Target:
      
      lldb::addr_t
      Target::GetCallableLoadAddress (lldb::addr_t load_addr, AddressClass addr_class) const;
      
      lldb::addr_t
      Target::GetOpcodeLoadAddress (lldb::addr_t load_addr, AddressClass addr_class) const;
      
      All necessary lldb_private::Address functions now use the target versions so
      changes should only need to happen in one place if anything needs updating.
      
      Fixed up a lot of places that were calling :
      
      addr_t
      Address::GetLoadAddress(Target*);
      
      to call the Address::GetCallableLoadAddress() or Address::GetOpcodeLoadAddress()
      as needed. There were many places in the breakpoint code where things could
      go wrong for ARM if these weren't used.
      
      llvm-svn: 131878
      f3ef3d2a
  4. May 19, 2011
    • Greg Clayton's avatar
      Added a function to lldb_private::Address: · 3f5c08f5
      Greg Clayton authored
              addr_t
              Address::GetCallableLoadAddress (Target *target) const;
              
      This will resolve the load address in the Address object and optionally
      decorate the address up to be able to be called. For all non ARM targets, this
      just essentially returns the result of "Address::GetLoadAddress (target)". But
      for ARM targets, it checks if the address is Thumb, and if so, it returns
      an address with bit zero set to indicate a mode switch to Thumb. This is how
      we need function pointers to be for return addresses and when resolving 
      function addresses for the JIT. It is also nice to centralize this in one spot
      to avoid having multiple copies of this code.
      
      llvm-svn: 131588
      3f5c08f5
  5. May 18, 2011
  6. May 17, 2011
  7. May 16, 2011
  8. May 15, 2011
    • Greg Clayton's avatar
      Added the ability to get the return value from a ThreadPlanCallFunction · 70b57657
      Greg Clayton authored
      thread plan. In order to get the return value, you can call:
      
              void
              ThreadPlanCallFunction::RequestReturnValue (lldb::ValueSP &return_value_sp);
              
      This registers a shared pointer to a return value that will get filled in if
      everything goes well. After the thread plan is run the return value will be
      extracted for you.
      
      Added an ifdef to be able to switch between the LLVM MCJIT and the standand JIT.
      We currently have the standard JIT selected because we have some work to do to
      get the MCJIT fuctioning properly.
      
      Added the ability to call functions with 6 argument in the x86_64 ABI.
      
      Added the ability for GDBRemoteCommunicationClient to detect if the allocate
      and deallocate memory packets are supported and to not call allocate memory 
      ("_M") or deallocate ("_m") if we find they aren't supported.
      
      Modified the ProcessGDBRemote::DoAllocateMemory(...) and ProcessGDBRemote::DoDeallocateMemory(...) 
      to be able to deal with the allocate and deallocate memory packets not being 
      supported. If they are not supported, ProcessGDBRemote will switch to calling
      "mmap" and "munmap" to allocate and deallocate memory instead using our 
      trivial function call support.
      
      Modified the "void ProcessGDBRemote::DidLaunchOrAttach()" to correctly ignore 
      the qHostInfo triple information if any was specified in the target. Currently 
      if the target only specifies an architecture when creating the target:
      
      (lldb) target create --arch i386 a.out
      
      Then the vendor, os and environemnt will be adopted by the target.
      
      If the target was created with any triple that specifies more than the arch:
      
      (lldb) target create --arch i386-unknown-unknown a.out
      
      Then the target will maintain its triple and not adopt any new values. This
      can be used to help force bare board debugging where the dynamic loader for
      static files will get used and users can then use "target modules load ..."
      to set addressses for any files that are desired.
      
      Added back some convenience functions to the lldb_private::RegisterContext class
      for writing registers with unsigned values. Also made all RegisterContext
      constructors explicit to make sure we know when an integer is being converted
      to a RegisterValue. 
      
      llvm-svn: 131370
      70b57657
  9. May 13, 2011
    • Sean Callanan's avatar
      For cases where a const function is inaccurately reported · 19b6afe3
      Sean Callanan authored
      as non-const in the debug information, added a fallback
      to GetFunctionAddress, adding the const qualifier after
      the fact and searching again.
      
      llvm-svn: 131299
      19b6afe3
    • Sean Callanan's avatar
      Introduced support for UnknownAnyTy, the Clang type · 77502265
      Sean Callanan authored
      representing variables whose type must be inferred
      from the way they are used.  Functions without debug
      information now return UnknownAnyTy and must be cast.
      
      Variables with no debug information are not yet using
      UnknownAnyTy; instead they are assumed to be void*.
      Support for variables of unknown type is coming (and,
      in fact, some relevant support functions are included
      in this commit) but will take a bit of extra effort.
      
      The testsuite has also been updated to reflect the new
      requirement that the result of printf be cast, i.e.
      
      expr (int) printf("Hello world!")
      
      llvm-svn: 131263
      77502265
  10. May 10, 2011
    • Sean Callanan's avatar
      Fixed a bug in which expression-local variables were · e359d9b7
      Sean Callanan authored
      treated as being permanently resident in target
      memory.  In fact, since the expression's stack frame
      is deleted and potentially re-used after the
      expression completes, the variables need to be treated
      as being freeze-dried.
      
      llvm-svn: 131104
      e359d9b7
  11. May 09, 2011
    • Greg Clayton's avatar
      While implementing unwind information using UnwindAssemblyInstEmulation I ran · 7349bd90
      Greg Clayton authored
      into some cleanup I have been wanting to do when reading/writing registers.
      Previously all RegisterContext subclasses would need to implement:
      
      virtual bool
      ReadRegisterBytes (uint32_t reg, DataExtractor &data);
      
      virtual bool
      WriteRegisterBytes (uint32_t reg, DataExtractor &data, uint32_t data_offset = 0);
      
      There is now a new class specifically designed to hold register values: 
              lldb_private::RegisterValue
              
      The new register context calls that subclasses must implement are:
      
      virtual bool
      ReadRegister (const RegisterInfo *reg_info, RegisterValue &reg_value) = 0;
      
      virtual bool
      WriteRegister (const RegisterInfo *reg_info, const RegisterValue &reg_value) = 0;
      
      The RegisterValue class must be big enough to handle any register value. The
      class contains an enumeration for the value type, and then a union for the 
      data value. Any integer/float values are stored directly in an appropriate
      host integer/float. Anything bigger is stored in a byte buffer that has a length
      and byte order. The RegisterValue class also knows how to copy register value
      bytes into in a buffer with a specified byte order which can be used to write
      the register value down into memory, and this does the right thing when not
      all bytes from the register values are needed (getting a uint8 from a uint32
      register value..). 
      
      All RegiterContext and other sources have been switched over to using the new
      regiter value class.
      
      llvm-svn: 131096
      7349bd90
  12. May 08, 2011
  13. May 07, 2011
  14. May 02, 2011
  15. Apr 23, 2011
  16. Apr 16, 2011
    • Jim Ingham's avatar
      Add support for "dynamic values" for C++ classes. This currently only works... · 78a685aa
      Jim Ingham authored
      Add support for "dynamic values" for C++ classes.  This currently only works for "frame var" and for the
      expressions that are simple enough to get passed to the "frame var" underpinnings.  The parser code will
      have to be changed to also query for the dynamic types & offsets as it is looking up variables.
      
      The behavior of "frame var" is controlled in two ways.  You can pass "-d {true/false} to the frame var
      command to get the dynamic or static value of the variables you are printing.
      
      There's also a general setting:
      
      target.prefer-dynamic-value (boolean) = 'true'
      
      which is consulted if you call "frame var" without supplying a value for the -d option.
      
      llvm-svn: 129623
      78a685aa
  17. Apr 14, 2011
  18. Apr 11, 2011
  19. Apr 01, 2011
  20. Mar 31, 2011
    • Jim Ingham's avatar
      Convert ValueObject to explicitly maintain the Execution Context in which they... · 6035b67d
      Jim Ingham authored
      Convert ValueObject to explicitly maintain the Execution Context in which they were created, and then use that when they update themselves.  That means all the ValueObject evaluate me type functions that used to require a Frame object now do not.  I didn't remove the SBValue API's that take this now useless frame, but I added ones that don't require the frame, and marked the SBFrame taking ones as deprecated.
      
      llvm-svn: 128593
      6035b67d
  21. Mar 26, 2011
    • Greg Clayton's avatar
      Added the ability to get the min and max instruction byte size for · 357132eb
      Greg Clayton authored
      an architecture into ArchSpec:
      
      uint32_t
      ArchSpec::GetMinimumOpcodeByteSize() const;
      
      uint32_t
      ArchSpec::GetMaximumOpcodeByteSize() const;
      
      Added an AddressClass to the Instruction class in Disassembler.h.
      This allows decoded instructions to know know if they are code,
      code with alternate ISA (thumb), or even data which can be mixed
      into code. The instruction does have an address, but it is a good
      idea to cache this value so we don't have to look it up more than 
      once.
      
      Fixed an issue in Opcode::SetOpcodeBytes() where the length wasn't
      getting set.
      
      Changed:
      
      	bool
      	SymbolContextList::AppendIfUnique (const SymbolContext& sc);
      
      To:
      	bool
      	SymbolContextList::AppendIfUnique (const SymbolContext& sc, 
      									   bool merge_symbol_into_function);
      
      This function was typically being used when looking up functions
      and symbols. Now if you lookup a function, then find the symbol,
      they can be merged into the same symbol context and not cause
      multiple symbol contexts to appear in a symbol context list that
      describes the same function.
      
      Fixed the SymbolContext not equal operator which was causing mixed
      mode disassembly to not work ("disassembler --mixed --name main").
      
      Modified the disassembler classes to know about the fact we know,
      for a given architecture, what the min and max opcode byte sizes
      are. The InstructionList class was modified to return the max
      opcode byte size for all of the instructions in its list.
      These two fixes means when disassemble a list of instructions and dump 
      them and show the opcode bytes, we can format the output more 
      intelligently when showing opcode bytes. This affects any architectures
      that have varying opcode byte sizes (x86_64 and i386). Knowing the max
      opcode byte size also helps us to be able to disassemble N instructions
      without having to re-read data if we didn't read enough bytes.
      
      Added the ability to set the architecture for the disassemble command.
      This means you can easily cross disassemble data for any supported 
      architecture. I also added the ability to specify "thumb" as an 
      architecture so that we can force disassembly into thumb mode when
      needed. In GDB this was done using a hack of specifying an odd
      address when disassembling. I don't want to repeat this hack in LLDB,
      so the auto detection between ARM and thumb is failing, just specify
      thumb when disassembling:
      
      (lldb) disassemble --arch thumb --name main
      
      You can also have data in say an x86_64 file executable and disassemble
      data as any other supported architecture:
      % lldb a.out
      Current executable set to 'a.out' (x86_64).
      (lldb) b main
      (lldb) run
      (lldb) disassemble --arch thumb --count 2 --start-address 0x0000000100001080 --bytes
      0x100001080:  0xb580 push   {r7, lr}
      0x100001082:  0xaf00 add    r7, sp, #0
      
      Fixed Target::ReadMemory(...) to be able to deal with Address argument object
      that isn't section offset. When an address object was supplied that was
      out on the heap or stack, target read memory would fail. Disassembly uses
      Target::ReadMemory(...), and the example above where we disassembler thumb
      opcodes in an x86 binary was failing do to this bug.
      
      llvm-svn: 128347
      357132eb
  22. Mar 25, 2011
    • Greg Clayton's avatar
      Cleaned up the Disassembler code a bit more. You can now request a disassembler · 1080edbc
      Greg Clayton authored
      plugin by name on the command line for when there is more than one disassembler
      plugin.
      
      Taught the Opcode class to dump itself so that "disassembler -b" will dump
      the bytes correctly for each opcode type. Modified all places that were passing
      the opcode bytes buffer in so that the bytes could be displayed to just pass
      in a bool that indicates if we should dump the opcode bytes since the opcode
      now lives inside llvm_private::Instruction.
      
      llvm-svn: 128290
      1080edbc
  23. Mar 24, 2011
  24. Mar 22, 2011
  25. 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
  26. Mar 17, 2011
  27. Mar 15, 2011
  28. Mar 04, 2011
  29. 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
  30. Feb 22, 2011
  31. Feb 17, 2011
  32. Feb 15, 2011
  33. 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
  34. Feb 05, 2011
  35. 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
  36. Feb 01, 2011
Loading