Skip to content
  1. Jul 07, 2011
    • Greg Clayton's avatar
      Added "target variable" command that allows introspection of global · 644247c1
      Greg Clayton authored
      variables prior to running your binary. Zero filled sections now get
      section data correctly filled with zeroes when Target::ReadMemory
      reads from the object file section data.
      
      Added new option groups and option values for file lists. I still need
      to hook up all of the options to "target variable" to allow more complete
      introspection by file and shlib.
      
      Added the ability for ValueObjectVariable objects to be created with
      only the target as the execution context. This allows them to be read
      from the object files through Target::ReadMemory(...). 
      
      Added a "virtual Module * GetModule()" function to the ValueObject
      class. By default it will look to the parent variable object and
      return its module. The module is needed when we have global variables
      that have file addresses (virtual addresses that are specific to
      module object files) and in turn allows global variables to be displayed
      prior to running.
      
      Removed all of the unused proxy object support that bit rotted in 
      lldb_private::Value.
      
      Replaced a lot of places that used "FileSpec::Compare (lhs, rhs) == 0" code
      with the more efficient "FileSpec::Equal (lhs, rhs)".
      
      Improved logging in GDB remote plug-in.
      
      llvm-svn: 134579
      644247c1
  2. Jul 06, 2011
  3. Jun 30, 2011
  4. Jun 25, 2011
    • Greg Clayton's avatar
      This commit adds broad architectural support for hierarchical · a2721476
      Greg Clayton authored
      inspection of namespaces in the expression parser.
      
      ClangExpressionDeclMap hitherto reported that namespaces had
      been completely imported, even though the namespaces are
      returned empty.  To deal with this situation, ClangASTSource
      was recently extended with an API to complete incomplete type
      definitions, and, for greater efficiency, to complete these
      definitions partially, returning only those objects that have
      a given name.
      
      This commit supports these APIs on LLDB's side, and uses it
      to provide information on types resident in namespaces.
      Namespaces are now imported as they were -- that is to say,
      empty -- but with minimal import mode on.  This means that
      Clang will come back and request their contents by name as
      needed.  We now respond with information on the contained
      types; this will be followed soon by information on functions
      and variables.
      
      llvm-svn: 133852
      a2721476
    • Greg Clayton's avatar
      Cleanup error output on expressions. · 5fd05903
      Greg Clayton authored
      llvm-svn: 133834
      5fd05903
  5. Jun 23, 2011
  6. Jun 20, 2011
  7. Jun 03, 2011
  8. May 30, 2011
  9. 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
  10. 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
  11. 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
  12. May 18, 2011
  13. May 17, 2011
  14. May 16, 2011
  15. 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
  16. 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
  17. 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
  18. 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
  19. May 08, 2011
  20. May 07, 2011
  21. May 02, 2011
  22. Apr 23, 2011
  23. 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
  24. Apr 14, 2011
  25. Apr 11, 2011
  26. Apr 01, 2011
  27. 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
  28. 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
  29. 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
  30. Mar 24, 2011
  31. Mar 22, 2011
  32. 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
  33. Mar 17, 2011
  34. Mar 15, 2011
  35. Mar 04, 2011
Loading