Skip to content
  1. Aug 29, 2012
    • Greg Clayton's avatar
      <rdar://problem/11757916> · 1f746071
      Greg Clayton authored
      Make breakpoint setting by file and line much more efficient by only looking for inlined breakpoint locations if we are setting a breakpoint in anything but a source implementation file. Implementing this complex for a many reasons. Turns out that parsing compile units lazily had some issues with respect to how we need to do things with DWARF in .o files. So the fixes in the checkin for this makes these changes:
      - Add a new setting called "target.inline-breakpoint-strategy" which can be set to "never", "always", or "headers". "never" will never try and set any inlined breakpoints (fastest). "always" always looks for inlined breakpoint locations (slowest, but most accurate). "headers", which is the default setting, will only look for inlined breakpoint locations if the breakpoint is set in what are consudered to be header files, which is realy defined as "not in an implementation source file". 
      - modify the breakpoint setting by file and line to check the current "target.inline-breakpoint-strategy" setting and act accordingly
      - Modify compile units to be able to get their language and other info lazily. This allows us to create compile units from the debug map and not have to fill all of the details in, and then lazily discover this information as we go on debuggging. This is needed to avoid parsing all .o files when setting breakpoints in implementation only files (no inlines). Otherwise we would need to parse the .o file, the object file (mach-o in our case) and the symbol file (DWARF in the object file) just to see what the compile unit was.
      - modify the "SymbolFileDWARFDebugMap" to subclass lldb_private::Module so that the virtual "GetObjectFile()" and "GetSymbolVendor()" functions can be intercepted when the .o file contenst are later lazilly needed. Prior to this fix, when we first instantiated the "SymbolFileDWARFDebugMap" class, we would also make modules, object files and symbol files for every .o file in the debug map because we needed to fix up the sections in the .o files with information that is in the executable debug map. Now we lazily do this in the DebugMapModule::GetObjectFile()
      
      Cleaned up header includes a bit as well.
      
      llvm-svn: 162860
      1f746071
  2. Jul 17, 2012
  3. Jul 12, 2012
    • Greg Clayton's avatar
      Modifying the "address" format, which prints a pointer and a description of... · c3a86bf9
      Greg Clayton authored
      Modifying the "address" format, which prints a pointer and a description of what it points to, to detect when the deref of that pointer points to something valid. So if you have:
      
          % cat sp.cpp 
          #include <tr1/memory>
      
          class A
          {
          public:
              A (): m_i (12) {}
              virtual ~A() {}
          private:
              int m_i;
          };
      
          int main (int argc, char const *argv[], char const *envp[])
          {
              A *a_pointers[2] = { NULL, NULL };
              A a1;
              A a2;
              a_pointers[0] = &a1;
              a_pointers[1] = &a2;
              return 0;
          }
      
      
      And you stop at the "return 0", you can now read memory using the "address" format and see:
      
      (lldb) memory read --format address `&a_pointers`
      0x7fff5fbff870: 0x00007fff5fbff860 -> 0x00000001000010b0 vtable for A + 16
      0x7fff5fbff878: 0x00007fff5fbff850 -> 0x00000001000010b0 vtable for A + 16
      0x7fff5fbff880: 0x00007fff5fbff8d0
      0x7fff5fbff888: 0x00007fff5fbff8c0
      0x7fff5fbff890: 0x0000000000000001
      0x7fff5fbff898: 0x36d54c275add2294
      0x7fff5fbff8a0: 0x00007fff5fbff8b0
      0x7fff5fbff8a8: 0x0000000100000bb4 a.out`start + 52
      
      Note the extra dereference that was applied to 0x00007fff5fbff860 and 0x00007fff5fbff850 so we can see that these are "A" classes.
      
      llvm-svn: 160085
      c3a86bf9
  4. May 15, 2012
    • Greg Clayton's avatar
      <rdar://problem/11455398> · c4a8a760
      Greg Clayton authored
      Add "--name" option to "image lookup" that will search both functions and symbols.
      
      Also made all of the output from any of the "image lookup" commands be the same regardless of the lookup type (function name, symbol name, func or symbol, file and line, address, etc). The --verbose or -v option also will expand the results as needed and display things so they look the same.
      
      llvm-svn: 156835
      c4a8a760
  5. Mar 07, 2012
    • Greg Clayton's avatar
      <rdar://problem/10997402> · e7612134
      Greg Clayton authored
      This fix really needed to happen as a previous fix I had submitted for
      calculating symbol sizes made many symbols appear to have zero size since
      the function that was calculating the symbol size was calling another function
      that would cause the calculation to happen again. This resulted in some symbols
      having zero size when they shouldn't. This could then cause infinite stack
      traces and many other side affects.
      
      llvm-svn: 152244
      e7612134
  6. Feb 24, 2012
    • Greg Clayton's avatar
      <rdar://problem/10103468> · e72dfb32
      Greg Clayton authored
      I started work on being able to add symbol files after a debug session
      had started with a new "target symfile add" command and quickly ran into
      problems with stale Address objects in breakpoint locations that had 
      lldb_private::Section pointers into modules that had been removed or 
      replaced. This also let to grabbing stale modules from those sections. 
      So I needed to thread harded the Address, Section and related objects.
      
      To do this I modified the ModuleChild class to now require a ModuleSP
      on initialization so that a weak reference can created. I also changed
      all places that were handing out "Section *" to have them hand out SectionSP.
      All ObjectFile, SymbolFile and SymbolVendors were inheriting from ModuleChild
      so all of the find plug-in, static creation function and constructors now
      require ModuleSP references instead of Module *. 
      
      Address objects now have weak references to their sections which can
      safely go stale when a module gets destructed. 
      
      This checkin doesn't complete the "target symfile add" command, but it
      does get us a lot clioser to being able to do such things without a high
      risk of crashing or memory corruption.
      
      llvm-svn: 151336
      e72dfb32
  7. Feb 18, 2012
    • Greg Clayton's avatar
      The second part in thread hardening the internals of LLDB where we make · d9e416c0
      Greg Clayton authored
      the lldb_private::StackFrame objects hold onto a weak pointer to the thread
      object. The lldb_private::StackFrame objects the the most volatile objects
      we have as when we are doing single stepping, frames can often get lost or
      thrown away, only to be re-created as another object that still refers to the
      same frame. We have another bug tracking that. But we need to be able to 
      have frames no longer be able to get the thread when they are not part of
      a thread anymore, and this is the first step (this fix makes that possible
      but doesn't implement it yet).
      
      Also changed lldb_private::ExecutionContextScope to return shared pointers to
      all objects in the execution context to further thread harden the internals.
      
      llvm-svn: 150871
      d9e416c0
  8. Jan 29, 2012
    • Greg Clayton's avatar
      Switching back to using std::tr1::shared_ptr. We originally switched away · e1cd1be6
      Greg Clayton authored
      due to RTTI worries since llvm and clang don't use RTTI, but I was able to 
      switch back with no issues as far as I can tell. Once the RTTI issue wasn't
      an issue, we were looking for a way to properly track weak pointers to objects
      to solve some of the threading issues we have been running into which naturally
      led us back to std::tr1::weak_ptr. We also wanted the ability to make a shared 
      pointer from just a pointer, which is also easily solved using the 
      std::tr1::enable_shared_from_this class. 
      
      The main reason for this move back is so we can start properly having weak
      references to objects. Currently a lldb_private::Thread class has a refrence
      to its parent lldb_private::Process. This doesn't work well when we now hand
      out a SBThread object that contains a shared pointer to a lldb_private::Thread
      as this SBThread can be held onto by external clients and if they end up
      using one of these objects we can easily crash.
      
      So the next task is to start adopting std::tr1::weak_ptr where ever it makes
      sense which we can do with lldb_private::Debugger, lldb_private::Target,
      lldb_private::Process, lldb_private::Thread, lldb_private::StackFrame, and
      many more objects now that they are no longer using intrusive ref counted
      pointer objects (you can't do std::tr1::weak_ptr functionality with intrusive
      pointers).
      
      llvm-svn: 149207
      e1cd1be6
  9. Dec 10, 2011
    • Greg Clayton's avatar
      <rdar://problem/9958446> · 6f6bf26a
      Greg Clayton authored
      <rdar://problem/10561406>
      
      Stopped the SymbolFileDWARF::FindFunctions (...) from always calculating
      the line table entry for all functions that were found. This can slow down
      the expression parser if it ends up finding a bunch of matches. Fixed the 
      places that were relying on the line table entry being filled in.
      
      Discovered a recursive stack blowout that happened when "main" didn't have
      line info for it and there was no line information for "main"
      
      llvm-svn: 146330
      6f6bf26a
  10. Oct 19, 2011
    • Greg Clayton's avatar
      Moved lldb::user_id_t values to be 64 bit. This was going to be needed for · 81c22f61
      Greg Clayton authored
      process IDs, and thread IDs, but was mainly needed for for the UserID's for
      Types so that DWARF with debug map can work flawlessly. With DWARF in .o files
      the type ID was the DIE offset in the DWARF for the .o file which is not
      unique across all .o files, so now the SymbolFileDWARFDebugMap class will
      make the .o file index part (the high 32 bits) of the unique type identifier
      so it can uniquely identify the types.
      
      llvm-svn: 142534
      81c22f61
  11. Sep 22, 2011
    • Greg Clayton's avatar
      Converted the lldb_private::Process over to use the intrusive · c14ee32d
      Greg Clayton authored
      shared pointers.
      
      Changed the ExecutionContext over to use shared pointers for
      the target, process, thread and frame since these objects can
      easily go away at any time and any object that was holding onto
      an ExecutionContext was running the risk of using a bad object.
      
      Now that the shared pointers for target, process, thread and
      frame are just a single pointer (they all use the instrusive
      shared pointers) the execution context is much safer and still
      the same size. 
      
      Made the shared pointers in the the ExecutionContext class protected
      and made accessors for all of the various ways to get at the pointers,
      references, and shared pointers.
      
      llvm-svn: 140298
      c14ee32d
  12. Sep 20, 2011
  13. Sep 17, 2011
    • Greg Clayton's avatar
      Removed the function: · a2eee184
      Greg Clayton authored
      	ModuleSP
      	Module::GetSP();
      
      Since we are now using intrusive ref counts, we can easily turn any
      pointer to a module into a shared pointer just by assigning it.
      	
      
      llvm-svn: 139984
      a2eee184
  14. Aug 25, 2011
  15. Aug 12, 2011
    • Greg Clayton's avatar
      We were leaking a stack frame in StackFrameList in Thread.cpp which could · 7e9b1fd0
      Greg Clayton authored
      cause extra shared pointer references to one or more modules to be leaked.
      This would cause many object files to stay around the life of LLDB, so after
      a recompile and rexecution, we would keep adding more and more memory. After
      fixing the leak, we found many cases where leaked stack frames were still
      being used and causing crashes in the test suite. These are now all resolved.
      
      llvm-svn: 137516
      7e9b1fd0
  16. Jul 11, 2011
    • Greg Clayton's avatar
      Added the ability to see block variables when looking up addresses · c749eb89
      Greg Clayton authored
      with the "target modules lookup --address <addr>" command. The variable
      ID's, names, types, location for the address, and declaration is
      displayed.
      
      This can really help with crash logs since we get, on MacOSX at least,
      the registers for the thread that crashed so it is often possible to
      figure out some of the variable contents. 
      
      llvm-svn: 134886
      c749eb89
  17. May 23, 2011
    • 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
  18. May 22, 2011
    • Greg Clayton's avatar
      Added functions to lldb_private::Address to set an address from a load address · cff851ab
      Greg Clayton authored
      and set the address as an opcode address or as a callable address. This is
      needed in various places in the thread plans to make sure that addresses that
      might be found in symbols or runtime might already have extra bits set (ARM/Thumb).
      The new functions are:
      
      bool
      Address::SetCallableLoadAddress (lldb::addr_t load_addr, Target *target);
      
      bool
      Address::SetOpcodeLoadAddress (lldb::addr_t load_addr, Target *target);
      
      SetCallableLoadAddress will initialize a section offset address if it can,
      and if so it might possibly set some bits in the address to make the address
      callable (bit zero might get set for ARM for Thumb functions).
      
      SetOpcodeLoadAddress will initialize a section offset address using the
      specified target and it will strip any special address bits if needed 
      depending on the target.
      
      Fixed the ABIMacOSX_arm::GetArgumentValues() function to require arguments
      1-4 to be in the needed registers (previously this would incorrectly fallback
      to the stack) and return false if unable to get the register values. The
      function was also modified to first look for the generic argument registers
      and then fall back to finding the registers by name.
      
      Fixed the objective trampoline handler to use the new Address::SetOpcodeLoadAddress
      function when needed to avoid address mismatches when trying to complete 
      steps into objective C methods. Make similar fixes inside the
      AppleThreadPlanStepThroughObjCTrampoline::ShouldStop() function.
      
      Modified ProcessGDBRemote::BuildDynamicRegisterInfo(...) to be able to deal with
      the new generic argument registers.
      
      Modified RNBRemote::HandlePacket_qRegisterInfo() to handle the new generic
      argument registers on the debugserver side.
      
      Modified DNBArchMachARM::NumSupportedHardwareBreakpoints() to be able to 
      detect how many hardware breakpoint registers there are using a darwin sysctl.
      Did the same for hardware watchpoints in 
      DNBArchMachARM::NumSupportedHardwareWatchpoints().
      
      llvm-svn: 131834
      cff851ab
  19. May 19, 2011
    • Greg Clayton's avatar
      Moved a lot of simple functions from StoppointLocation.cpp to be inlined in · 92bb12ca
      Greg Clayton authored
      StoppointLocation.h.
      
      Added a new lldb_private::Address function:
      
      addr_t
      Address::GetOpcodeLoadAddress (Target *target) const;
      
      This will strip any special bits from an address to make sure it is suitable
      for use in addressing an opcode. Often ARM addresses have an extra bit zero 
      that can be set to indicate ARM vs Thumb addresses (gotten from return address
      registers, or symbol addresses that may be marked up specially). We need to 
      strip these bits off prior to setting breakpoints, so we can centralized the
      place to do this inside the Address class.
      
      llvm-svn: 131658
      92bb12ca
    • 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
  20. May 18, 2011
    • Greg Clayton's avatar
      Added a way to resolve an load address from a target: · cd482e35
      Greg Clayton authored
      bool
      Address::SetLoadAddress (lldb::addr_t load_addr, Target *target);
      
      Added an == and != operator to RegisterValue.
      
      Modified the ThreadPlanTracer to use RegisterValue objects to store the
      register values when single stepping. Also modified the output to be a bit
      less wide.
      
      Fixed the ABIMacOSX_arm to not overwrite stuff on the stack. Also made the
      trivial function call be able to set the ARM/Thumbness of the target 
      correctly, and also sets the return value ARM/Thumbness.
      
      Fixed the encoding on the arm s0-s31 and d16 - d31 registers when the default
      register set from a standard GDB server register sets.
      
      llvm-svn: 131517
      cd482e35
  21. Mar 24, 2011
  22. Mar 19, 2011
    • Greg Clayton's avatar
      Added more platform support. There are now some new commands: · ded470d3
      Greg Clayton authored
      platform status -- gets status information for the selected platform
      platform create <platform-name> -- creates a new instance of a remote platform
      platform list -- list all available platforms
      platform select -- select a platform instance as the current platform (not working yet)
      
      When using "platform create" it will create a remote platform and make it the
      selected platform. For instances for iPhone OS debugging on Mac OS X one can 
      do:
      
      (lldb) platform create remote-ios --sdk-version=4.0
      Remote platform: iOS platform
      SDK version: 4.0
      SDK path: "/Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.0"
      Not connected to a remote device.
      (lldb) file ~/Documents/a.out
      Current executable set to '~/Documents/a.out' (armv6).
      (lldb) image list
      [  0] /Volumes/work/gclayton/Documents/devb/attach/a.out
      [  1] /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.0/Symbols/usr/lib/dyld
      [  2] /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.0/Symbols/usr/lib/libSystem.B.dylib
      
      
      Note that this is all happening prior to running _or_ connecting to a remote
      platform. Once connected to a remote platform the OS version might change which
      means we will need to update our dependecies. Also once we run, we will need
      to match up the actualy binaries with the actualy UUID's to files in the
      SDK, or download and cache them locally.
      
      This is just the start of the remote platforms, but this modification is the
      first iteration in getting the platforms really doing something.
      
      llvm-svn: 127934
      ded470d3
  23. Feb 15, 2011
  24. Feb 01, 2011
  25. Jan 29, 2011
  26. Jan 08, 2011
  27. Jan 07, 2011
  28. Oct 31, 2010
  29. Oct 08, 2010
    • Greg Clayton's avatar
      Hooked up ability to look up data symbols so they show up in disassembly · 8941142a
      Greg Clayton authored
      if the address comes from a data section. 
      
      Fixed an issue that could occur when looking up a symbol that has a zero
      byte size where no match would be returned even if there was an exact symbol
      match.
      
      Cleaned up the section dump output and added the section type into the output.
      
      llvm-svn: 116017
      8941142a
  30. Oct 04, 2010
    • Greg Clayton's avatar
      There are now to new "settings set" variables that live in each debugger · 0603aa9d
      Greg Clayton authored
      instance:
      
      settings set frame-format <string>
      settings set thread-format <string>
      
      This allows users to control the information that is seen when dumping
      threads and frames. The default values are set such that they do what they
      used to do prior to changing over the the user defined formats.
      
      This allows users with terminals that can display color to make different
      items different colors using the escape control codes. A few alias examples
      that will colorize your thread and frame prompts are:
      
      settings set frame-format 'frame #${frame.index}: \033[0;33m${frame.pc}\033[0m{ \033[1;4;36m${module.file.basename}\033[0;36m ${function.name}{${function.pc-offset}}\033[0m}{ \033[0;35mat \033[1;35m${line.file.basename}:${line.number}}\033[0m\n'
      
      settings set thread-format 'thread #${thread.index}: \033[1;33mtid\033[0;33m = ${thread.id}\033[0m{, \033[0;33m${frame.pc}\033[0m}{ \033[1;4;36m${module.file.basename}\033[0;36m ${function.name}{${function.pc-offset}}\033[0m}{, \033[1;35mstop reason\033[0;35m = ${thread.stop-reason}\033[0m}{, \033[1;36mname = \033[0;36m${thread.name}\033[0m}{, \033[1;32mqueue = \033[0;32m${thread.queue}}\033[0m\n'
      
      A quick web search for "colorize terminal output" should allow you to see what
      you can do to make your output look like you want it.
      
      The "settings set" commands above can of course be added to your ~/.lldbinit
      file for permanent use.
      
      Changed the pure virtual 
          void ExecutionContextScope::Calculate (ExecutionContext&);
      To:
          void ExecutionContextScope::CalculateExecutionContext (ExecutionContext&);
          
      I did this because this is a class that anything in the execution context
      heirarchy inherits from and "target->Calculate (exe_ctx)" didn't always tell
      you what it was really trying to do unless you look at the parameter.
      
      llvm-svn: 115485
      0603aa9d
  31. Sep 15, 2010
  32. Sep 10, 2010
  33. Sep 07, 2010
  34. Sep 02, 2010
    • Greg Clayton's avatar
      Added a new bool parameter to many of the DumpStopContext() methods that · 6dadd508
      Greg Clayton authored
      might dump file paths that allows the dumping of full paths or just the
      basenames. Switched the stack frame dumping code to use just the basenames for
      the files instead of the full path.
      
      Modified the StackID class to no rely on needing the start PC for the current
      function/symbol since we can use the SymbolContextScope to uniquely identify
      that, unless there is no symbol context scope. In that case we can rely upon
      the current PC value. This saves the StackID from having to calculate the 
      start PC when the StackFrame::GetStackID() accessor is called.
      
      Also improved the StackID less than operator to correctly handle inlined stack
      frames in the same stack.
      
      llvm-svn: 112867
      6dadd508
  35. Aug 30, 2010
    • Greg Clayton's avatar
      Clarified the intent of the SymbolContextScope class in the header · 59e8fc1c
      Greg Clayton authored
      documentation. Symbol now inherits from the symbol
      context scope so that the StackID can use a "SymbolContextScope *"
      instead of a blockID (which could have been the same as some other
      blockID from another symbol file). 
      
      Modified the stacks that are created on subsequent stops to reuse
      the previous stack frame objects which will allow for some internal
      optimization using pointer comparisons during stepping. 
      
      llvm-svn: 112495
      59e8fc1c
  36. Aug 25, 2010
    • Greg Clayton's avatar
      Fixed another issue with the inline stack frames where if the first frame · 288e5afe
      Greg Clayton authored
      has inlined functions that all started at the same address, then the inlined
      backtrace would not produce correct stack frames.
      
      Also cleaned up and inlined a lot of stuff in lldb_private::Address.
      
      Added a function to StackFrame to detect if the frame is a concrete frame so
      we can detect the difference between actual frames and inlined frames.
      
      llvm-svn: 111989
      288e5afe
  37. Aug 24, 2010
    • Greg Clayton's avatar
      Added support for inlined stack frames being represented as real stack frames · 1b72fcb7
      Greg Clayton authored
      which is now on by default. Frames are gotten from the unwinder as concrete
      frames, then if inline frames are to be shown, extra information to track
      and reconstruct these frames is cached with each Thread and exanded as needed.
      
      I added an inline height as part of the lldb_private::StackID class, the class
      that helps us uniquely identify stack frames. This allows for two frames to
      shared the same call frame address, yet differ only in inline height.
      
      Fixed setting breakpoint by address to not require addresses to resolve.
      
      A quick example:
      
      % cat main.cpp
      
      % ./build/Debug/lldb test/stl/a.out 
      Current executable set to 'test/stl/a.out' (x86_64).
      (lldb) breakpoint set --address 0x0000000100000d31
      Breakpoint created: 1: address = 0x0000000100000d31, locations = 1
      (lldb) r
      Launching 'a.out'  (x86_64)
      (lldb) Process 38031 Stopped
      * thread #1: tid = 0x2e03, pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::_M_data() const at /usr/include/c++/4.2.1/bits/basic_string.h:280, stop reason = breakpoint 1.1, queue = com.apple.main-thread
       277   	
       278   	      _CharT*
       279   	      _M_data() const
       280 ->	      { return  _M_dataplus._M_p; }
       281   	
       282   	      _CharT*
       283   	      _M_data(_CharT* __p)
      (lldb) bt
      thread #1: tid = 0x2e03, stop reason = breakpoint 1.1, queue = com.apple.main-thread
        frame #0: pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::_M_data() const at /usr/include/c++/4.2.1/bits/basic_string.h:280
        frame #1: pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::_M_rep() const at /usr/include/c++/4.2.1/bits/basic_string.h:288
        frame #2: pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::size() const at /usr/include/c++/4.2.1/bits/basic_string.h:606
        frame #3: pc = 0x0000000100000d31, where = a.out`main [inlined] operator<< <char, std::char_traits<char>, std::allocator<char> > at /usr/include/c++/4.2.1/bits/basic_string.h:2414
        frame #4: pc = 0x0000000100000d31, where = a.out`main + 33 at /Volumes/work/gclayton/Documents/src/lldb/test/stl/main.cpp:14
        frame #5: pc = 0x0000000100000d08, where = a.out`start + 52
      
      Each inline frame contains only the variables that they contain and each inlined
      stack frame is treated as a single entity.
      
      llvm-svn: 111877
      1b72fcb7
  38. Aug 03, 2010
    • Greg Clayton's avatar
      Added support for objective C built-in types: id, Class, and SEL. This · b0b9fe61
      Greg Clayton authored
      involved watching for the objective C built-in types in DWARF and making sure
      when we convert the DWARF types into clang types that we use the appropriate
      ASTContext types.
      
      Added a way to find and dump types in lldb (something equivalent to gdb's 
      "ptype" command):
      
          image lookup --type <TYPENAME>
      
      This only works for looking up types by name and won't work with variables.
      It also currently dumps out verbose internal information. I will modify it
      to dump more appropriate user level info in my next submission.
      
      Hookup up the "FindTypes()" functions in the SymbolFile and SymbolVendor so
      we can lookup types by name in one or more images.
      
      Fixed "image lookup --address <ADDRESS>" to be able to correctly show all
      symbol context information, but it will only show this extra information when
      the new "--verbose" flag is used.
      
      Updated to latest LLVM to get a few needed fixes.
      
      llvm-svn: 110089
      b0b9fe61
Loading