Skip to content
  1. Apr 22, 2011
    • Greg Clayton's avatar
      Did some work on the "register read" command to only show the first register · 385aa28c
      Greg Clayton authored
      set by default when dumping registers. If you want to see all of the register
      sets you can use the "--all" option:
      
      (lldb) register read --all
      
      If you want to just see some register sets, you can currently specify them
      by index:
      
      (lldb) register read --set 0 --set 2
      
      We need to get shorter register set names soon so we can specify the register
      sets by name without having to type too much. I will make this change soon.
      
      You can also have any integer encoded registers resolve the address values
      back to any code or data from the object files using the "--lookup" option.
      Below is sample output when stopped in the libc function "puts" with some
      const strings in registers:
      
      Process 8973 stopped
      * thread #1: tid = 0x2c03, 0x00007fff828fa30f libSystem.B.dylib`puts + 1, stop reason = instruction step into
        frame #0: 0x00007fff828fa30f libSystem.B.dylib`puts + 1
      (lldb) register read --lookup 
      General Purpose Registers:
        rax          = 0x0000000100000e98  "----------------------------------------------------------------------"
        rbx          = 0x0000000000000000
        rcx          = 0x0000000000000001  
        rdx          = 0x0000000000000000
        rdi          = 0x0000000100000e98  "----------------------------------------------------------------------"
        rsi          = 0x0000000100800000
        rbp          = 0x00007fff5fbff710
        rsp          = 0x00007fff5fbff280
        r8           = 0x0000000000000040  
        r9           = 0x0000000000000000
        r10          = 0x0000000000000000
        r11          = 0x0000000000000246  
        r12          = 0x0000000000000000
        r13          = 0x0000000000000000
        r14          = 0x0000000000000000
        r15          = 0x0000000000000000
        rip          = 0x00007fff828fa30f  libSystem.B.dylib`puts + 1
        rflags       = 0x0000000000000246  
        cs           = 0x0000000000000027  
        fs           = 0x0000000000000000
        gs           = 0x0000000000000000
      
      As we can see, we see two constant strings and the PC (register "rip") is 
      showing the code it resolves to.
      
      I fixed the register "--format" option to work as expected.
      
      Added a setting to disable skipping the function prologue when setting 
      breakpoints as a target settings variable:
      
      (lldb) settings set target.skip-prologue false
      
      Updated the user settings controller boolean value handler funciton to be able
      to take the default value so it can correctly respond to the eVarSetOperationClear
      operation.
      
      Did some usability work on the OptionValue classes.
      
      Fixed the "image lookup" command to correctly respond to the "--verbose" 
      option and display the detailed symbol context information when looking up
      line table entries and functions by name. This previously was only working
      for address lookups.
      
      llvm-svn: 129977
      385aa28c
  2. Apr 21, 2011
  3. Apr 20, 2011
    • Caroline Tice's avatar
      · 3ac6711a
      Caroline Tice authored
      Add the infrastructure to test instruction emulations automatically.
      The idea is that the instruction to be emulated is actually executed
      on the hardware to be emulated, with the before and after state of the
      hardware being captured and 'freeze-dried' into .dat files.  The
      emulation testing code then loads the before & after state from the
      .dat file, emulates the instruction using the before state, and
      compares the resulting state to the 'after' state.  If they match, the
      emulation is accurate, otherwise there is a problem.
      
      The final format of the .dat files needs a bit more work; the plan is
      to generalize them a bit and to convert the plain values to key-value pairs. 
      But I wanted to get this first pass committed.
      
      This commit adds arm instruction emulation testing to the testsuite, along with
      many initial .dat files.
      
      It also fixes a bug in the llvm disassembler, where 32-bit thumb opcodes
      were getting their upper & lower 16-bits reversed.
      
      There is a new Instruction sub-class, that is intended to be loaded
      from a .dat file rather than read from an executable.  There is also a
      new EmulationStateARM class, for handling the before & after states.
      EmulationStates for other architetures can be added later when we
      emulate their instructions.
      
      llvm-svn: 129832
      3ac6711a
    • Greg Clayton's avatar
      General cleanup on the UserSettingsController stuff. There were 5 different · 4c20717a
      Greg Clayton authored
      places that were dumping values for the settings. Centralized all of the
      value dumping into a single place. When dumping values that aren't strings
      we no longer surround the value with single quotes. When dumping values that
      are strings, surround the string value with double quotes. When dumping array
      values, assume they are always string values, and don't put quotes around
      dictionary values.
      
      llvm-svn: 129826
      4c20717a
  4. Apr 19, 2011
    • Greg Clayton's avatar
      Added a new option to the "source list" command that allows us to see where · 176761e5
      Greg Clayton authored
      line tables specify breakpoints can be set in the source. When dumping the
      source, the number of breakpoints that can be set on a source line are shown
      as a prefix:
      
      (lldb) source list -f test.c -l1 -c222 -b
             1   	#include <stdio.h>
             2   	#include <sys/fcntl.h>
             3   	#include <unistd.h>
             4   	int
             5   	sleep_loop (const int num_secs)
      [2]    6   	{
             7   	    int i;
      [1]    8   	    for (i=0; i<num_secs; ++i)
             9   	    {
      [1]    10  	        printf("%d of %i - sleep(1);\n", i, num_secs);
      [1]    11  	        sleep(1);       
             12  	    }
             13  	    return 0;
      [1]    14  	}
             15  	
             16  	int 
             17  	main (int argc, char const* argv[])
      [1]    18  	{
      [1]    19  	    printf("Process: %i\n\n", getpid());
      [1]    20  	    puts("Press any key to continue..."); getchar();
      [1]    21  	    sleep_loop (20);
             22  	    return 12;
      [1]    23  	}
      
      Above we can see there are two breakpoints for line 6 and one breakpoint for
      lines 8, 10, 11, 14, 18, 19, 20, 21 and 23. All other lines have no line table
      entries for them. This helps visualize the data provided in the debug 
      information without having to manually dump all line tables. It also includes
      all inline breakpoint that may result for a given file which can also be very
      handy to see.
      
      llvm-svn: 129747
      176761e5
  5. Apr 18, 2011
    • Greg Clayton's avatar
      Centralized a lot of the status information for processes, · 7260f620
      Greg Clayton authored
      threads, and stack frame down in the lldb_private::Process,
      lldb_private::Thread, lldb_private::StackFrameList and the 
      lldb_private::StackFrame classes. We had some command line
      commands that had duplicate versions of the process status
      output ("thread list" and "process status" for example). 
      
      Removed the "file" command and placed it where it should
      have been: "target create". Made an alias for "file" to
      "target create" so we stay compatible with GDB commands.
      
      We can now have multple usable targets in lldb at the
      same time. This is nice for comparing two runs of a program
      or debugging more than one binary at the same time. The
      new command is "target select <target-idx>" and also to see
      a list of the current targets you can use the new "target list"
      command. The flow in a debug session can be:
      
      (lldb) target create /path/to/exe/a.out
      (lldb) breakpoint set --name main
      (lldb) run
      ... hit breakpoint
      (lldb) target create /bin/ls
      (lldb) run /tmp
      Process 36001 exited with status = 0 (0x00000000) 
      (lldb) target list
      Current targets:
        target #0: /tmp/args/a.out ( arch=x86_64-apple-darwin, platform=localhost, pid=35999, state=stopped )
      * target #1: /bin/ls ( arch=x86_64-apple-darwin, platform=localhost, pid=36001, state=exited )
      (lldb) target select 0
      Current targets:
      * target #0: /tmp/args/a.out ( arch=x86_64-apple-darwin, platform=localhost, pid=35999, state=stopped )
        target #1: /bin/ls ( arch=x86_64-apple-darwin, platform=localhost, pid=36001, state=exited )
      (lldb) bt
      * thread #1: tid = 0x2d03, 0x0000000100000b9a a.out`main + 42 at main.c:16, stop reason = breakpoint 1.1
        frame #0: 0x0000000100000b9a a.out`main + 42 at main.c:16
        frame #1: 0x0000000100000b64 a.out`start + 52
      
      Above we created a target for "a.out" and ran and hit a
      breakpoint at "main". Then we created a new target for /bin/ls
      and ran it. Then we listed the targest and selected our original
      "a.out" program, so we showed two concurent debug sessions
      going on at the same time.
      
      llvm-svn: 129695
      7260f620
  6. 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
  7. Apr 14, 2011
    • Greg Clayton's avatar
      Added auto completion for architecture names and for platforms. · ab65b34f
      Greg Clayton authored
      Modified the OptionGroupOptions to be able to specify only some of the options
      that should be appended by using the usage_mask in the group defintions and
      also provided a way to remap them to a new usage mask after the copy. This 
      allows options to be re-used and also targetted for specific option groups.
      
      Modfied the CommandArgumentType to have a new eArgTypePlatform enumeration.
      Taught the option parser to be able to automatically use the appropriate
      auto completion for a given options if nothing is explicitly specified
      in the option definition. So you don't have to specify it in the option
      definition tables.
      
      Renamed the default host platform name to "host", and the default platform
      hostname to be "localhost".
      
      Modified the "file" and "platform select" commands to make sure all options
      and args are good prior to creating a new platform. Also defer the computation
      of the architecture in the file command until all options are parsed and the
      platform has either not been specified or reset to a new value to avoid
      computing the arch more than once.
      
      Switch the PluginManager code over to using llvm::StringRef for string
      comparisons and got rid of all the AccessorXXX functions in lieu of the newer
      mutex + collection singleton accessors.
      
      llvm-svn: 129483
      ab65b34f
  8. Apr 12, 2011
    • Greg Clayton's avatar
      Moved the execution context that was in the Debugger into · 8b82f087
      Greg Clayton authored
      the CommandInterpreter where it was always being used.
      
      Make sure that Modules can track their object file offsets correctly to
      allow opening of sub object files (like the "__commpage" on darwin).
      
      Modified the Platforms to be able to launch processes. The first part of this
      move is the platform soon will become the entity that launches your program
      and when it does, it uses a new ProcessLaunchInfo class which encapsulates
      all process launching settings. This simplifies the internal APIs needed for
      launching. I want to slowly phase out process launching from the process
      classes, so for now we can still launch just as we used to, but eventually
      the platform is the object that should do the launching.
      
      Modified the Host::LaunchProcess in the MacOSX Host.mm to correctly be able
      to launch processes with all of the new eLaunchFlag settings. Modified any
      code that was manually launching processes to use the Host::LaunchProcess
      functions.
      
      Fixed an issue where lldb_private::Args had implicitly defined copy 
      constructors that could do the wrong thing. This has now been fixed by adding
      an appropriate copy constructor and assignment operator.
      
      Make sure we don't add empty ModuleSP entries to a module list.
      
      Fixed the commpage module creation on MacOSX, but we still need to train
      the MacOSX dynamic loader to not get rid of it when it doesn't have an entry
      in the all image infos.
      
      Abstracted many more calls from in ProcessGDBRemote down into the 
      GDBRemoteCommunicationClient subclass to make the classes cleaner and more
      efficient.
      
      Fixed the default iOS ARM register context to be correct and also added support
      for targets that don't support the qThreadStopInfo packet by selecting the
      current thread (only if needed) and then sending a stop reply packet.
      
      Debugserver can now start up with a --unix-socket (-u for short) and can 
      then bind to port zero and send the port it bound to to a listening process
      on the other end. This allows the GDB remote platform to spawn new GDB server
      instances (debugserver) to allow platform debugging.
      
      llvm-svn: 129351
      8b82f087
  9. Apr 11, 2011
  10. Apr 09, 2011
    • Caroline Tice's avatar
      · 25d61ac2
      Caroline Tice authored
      Fix various things in the instruction emulation code:
      
          - Add ability to control whether or not the emulator advances the
          PC register (in the emulation state), if the instruction itself
          does not change the pc value..
      
          - Fix a few typos in asm description strings.
      
          - Fix bug in the carry flag calculation.
      
      llvm-svn: 129168
      25d61ac2
  11. Apr 08, 2011
    • Stephen Wilson's avatar
      Add missing headers. · 8acdbb8a
      Stephen Wilson authored
      Something changed in commit r129112 where a few standard headers vanished from
      the include chain when building on Linux.  Fix up by including limits.h for
      INT_MAX and PATH_MAX where needed, and stdio.h for printf().
      
      llvm-svn: 129130
      8acdbb8a
    • Greg Clayton's avatar
      Modified the ArchSpec to take an optional "Platform *" when setting the triple. · eb0103f2
      Greg Clayton authored
      This allows you to have a platform selected, then specify a triple using
      "i386" and have the remaining triple items (vendor, os, and environment) set
      automatically.
      
      Many interpreter commands take the "--arch" option to specify an architecture
      triple, so now the command options needed to be able to get to the current
      platform, so the Options class now take a reference to the interpreter on
      construction.
      
      Modified the build LLVM building in the Xcode project to use the new
      Xcode project level user definitions:
      
      LLVM_BUILD_DIR - a path to the llvm build directory
      LLVM_SOURCE_DIR - a path to the llvm sources for the llvm that will be used to build lldb
      LLVM_CONFIGURATION - the configuration that lldb is built for (Release, 
      Release+Asserts, Debug, Debug+Asserts).
      
      I also changed the LLVM build to not check if "lldb/llvm" is a symlink and
      then assume it is a real llvm build directory versus the unzipped llvm.zip
      package, so now you can actually have a "lldb/llvm" directory in your lldb
      sources.
      
      llvm-svn: 129112
      eb0103f2
  12. Apr 07, 2011
    • Caroline Tice's avatar
      · c1bcafd8
      Caroline Tice authored
      Translate dwarf register numbers to internal register numbers
      before trying to look them up in register contexts, in the 
      emulation callback functions that read & write the frame registers.
      
      llvm-svn: 129037
      c1bcafd8
  13. Apr 06, 2011
    • Caroline Tice's avatar
      · 7c9dd3ce
      Caroline Tice authored
      Add Emulate and DumpEmulation to Instruction class.
      
      Move InstructionLLVM out of DisassemblerLLVM class.
      
      Add instruction emulation function calls to SBInstruction and SBInstructionList APIs.
      
      llvm-svn: 128956
      7c9dd3ce
  14. Apr 05, 2011
    • Caroline Tice's avatar
      · 3d50b2f7
      Caroline Tice authored
      Convert "process" read/write callback functions to "frame" read/write callback functions.
      
      llvm-svn: 128917
      3d50b2f7
    • Caroline Tice's avatar
      · ad379efc
      Caroline Tice authored
      Add the rest of the mechanisms to make ARM instruction emulation usable/possible.
      
      llvm-svn: 128907
      ad379efc
  15. Apr 04, 2011
    • Greg Clayton's avatar
      Added a speed test to the GDBRemoteCommunicationClient and · 9b1e1cdf
      Greg Clayton authored
      GDBRemoteCommunicationServer classes. This involved adding a new packet
      named "qSpeedTest" which can test the speed of a packet send/response pairs
      using a wide variety of send/recv packet sizes.
      
      Added a few new connection classes: one for shared memory, and one for using
      mach messages (Apple only). The mach message stuff is experimental and not 
      working yet, but added so I don't lose the code. The shared memory stuff
      uses pretty standard calls to setup shared memory.
      
      llvm-svn: 128837
      9b1e1cdf
  16. Apr 01, 2011
  17. Mar 31, 2011
    • Greg Clayton's avatar
      Added some functions to our API related to classifying symbols as code, data, · 05d2b7f7
      Greg Clayton authored
      const data, etc, and also for SBAddress objects to classify their type of
      section they are in and also getting the module for a section offset address.
      
          lldb::SymbolType SBSymbol::GetType();
          
          lldb::SectionType SBAddress::GetSectionType ();
          lldb::SBModule SBAddress::GetModule ();
      
      llvm-svn: 128602
      05d2b7f7
    • 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
  18. Mar 30, 2011
    • Greg Clayton's avatar
      Many improvements to the Platform base class and subclasses. The base Platform · 32e0a750
      Greg Clayton authored
      class now implements the Host functionality for a lot of things that make 
      sense by default so that subclasses can check:
      
      int
      PlatformSubclass::Foo ()
      {
          if (IsHost())
              return Platform::Foo (); // Let the platform base class do the host specific stuff
          
          // Platform subclass specific code...
          int result = ...
          return result;
      }
      
      Added new functions to the platform:
      
          virtual const char *Platform::GetUserName (uint32_t uid);
          virtual const char *Platform::GetGroupName (uint32_t gid);
      
      The user and group names are cached locally so that remote platforms can avoid
      sending packets multiple times to resolve this information.
      
      Added the parent process ID to the ProcessInfo class. 
      
      Added a new ProcessInfoMatch class which helps us to match processes up
      and changed the Host layer over to using this new class. The new class allows
      us to search for processs:
      1 - by name (equal to, starts with, ends with, contains, and regex)
      2 - by pid
      3 - And further check for parent pid == value, uid == value, gid == value, 
          euid == value, egid == value, arch == value, parent == value.
          
      This is all hookup up to the "platform process list" command which required
      adding dumping routines to dump process information. If the Host class 
      implements the process lookup routines, you can now lists processes on 
      your local machine:
      
      machine1.foo.com % lldb
      (lldb) platform process list 
      PID    PARENT USER       GROUP      EFF USER   EFF GROUP  TRIPLE                   NAME
      ====== ====== ========== ========== ========== ========== ======================== ============================
      99538  1      username   usergroup  username   usergroup  x86_64-apple-darwin      FileMerge
      94943  1      username   usergroup  username   usergroup  x86_64-apple-darwin      mdworker
      94852  244    username   usergroup  username   usergroup  x86_64-apple-darwin      Safari
      94727  244    username   usergroup  username   usergroup  x86_64-apple-darwin      Xcode
      92742  92710  username   usergroup  username   usergroup  i386-apple-darwin        debugserver
      
      
      This of course also works remotely with the lldb-platform:
      
      machine1.foo.com % lldb-platform --listen 1234
      
      machine2.foo.com % lldb
      (lldb) platform create remote-macosx
        Platform: remote-macosx
       Connected: no
      (lldb) platform connect connect://localhost:1444
        Platform: remote-macosx
          Triple: x86_64-apple-darwin
      OS Version: 10.6.7 (10J869)
          Kernel: Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386
        Hostname: machine1.foo.com
       Connected: yes
      (lldb) platform process list 
      PID    PARENT USER       GROUP      EFF USER   EFF GROUP  TRIPLE                   NAME
      ====== ====== ========== ========== ========== ========== ======================== ============================
      99556  244    username   usergroup  username   usergroup  x86_64-apple-darwin      trustevaluation
      99548  65539  username   usergroup  username   usergroup  x86_64-apple-darwin      lldb
      99538  1      username   usergroup  username   usergroup  x86_64-apple-darwin      FileMerge
      94943  1      username   usergroup  username   usergroup  x86_64-apple-darwin      mdworker
      94852  244    username   usergroup  username   usergroup  x86_64-apple-darwin      Safari
      
      The lldb-platform implements everything with the Host:: layer, so this should
      "just work" for linux. I will probably be adding more stuff to the Host layer
      for launching processes and attaching to processes so that this support should
      eventually just work as well.
      
      Modified the target to be able to be created with an architecture that differs
      from the main executable. This is needed for iOS debugging since we can have
      an "armv6" binary which can run on an "armv7" machine, so we want to be able
      to do:
      
      % lldb
      (lldb) platform create remote-ios
      (lldb) file --arch armv7 a.out
      
      Where "a.out" is an armv6 executable. The platform then can correctly decide
      to open all "armv7" images for all dependent shared libraries.
      
      Modified the disassembly to show the current PC value. Example output:
      
      (lldb) disassemble --frame
      a.out`main:
         0x1eb7:  pushl  %ebp
         0x1eb8:  movl   %esp, %ebp
         0x1eba:  pushl  %ebx
         0x1ebb:  subl   $20, %esp
         0x1ebe:  calll  0x1ec3                   ; main + 12 at test.c:18
         0x1ec3:  popl   %ebx
      -> 0x1ec4:  calll  0x1f12                   ; getpid
         0x1ec9:  movl   %eax, 4(%esp)
         0x1ecd:  leal   199(%ebx), %eax
         0x1ed3:  movl   %eax, (%esp)
         0x1ed6:  calll  0x1f18                   ; printf
         0x1edb:  leal   213(%ebx), %eax
         0x1ee1:  movl   %eax, (%esp)
         0x1ee4:  calll  0x1f1e                   ; puts
         0x1ee9:  calll  0x1f0c                   ; getchar
         0x1eee:  movl   $20, (%esp)
         0x1ef5:  calll  0x1e6a                   ; sleep_loop at test.c:6
         0x1efa:  movl   $12, %eax
         0x1eff:  addl   $20, %esp
         0x1f02:  popl   %ebx
         0x1f03:  leave
         0x1f04:  ret
         
      This can be handy when dealing with the new --line options that was recently
      added:
      
      (lldb) disassemble --line
      a.out`main + 13 at test.c:19
         18  	{
      -> 19  		printf("Process: %i\n\n", getpid());
         20  	    puts("Press any key to continue..."); getchar();
      -> 0x1ec4:  calll  0x1f12                   ; getpid
         0x1ec9:  movl   %eax, 4(%esp)
         0x1ecd:  leal   199(%ebx), %eax
         0x1ed3:  movl   %eax, (%esp)
         0x1ed6:  calll  0x1f18                   ; printf
      
      Modified the ModuleList to have a lookup based solely on a UUID. Since the
      UUID is typically the MD5 checksum of a binary image, there is no need
      to give the path and architecture when searching for a pre-existing
      image in an image list.
      
      Now that we support remote debugging a bit better, our lldb_private::Module
      needs to be able to track what the original path for file was as the platform
      knows it, as well as where the file is locally. The module has the two 
      following functions to retrieve both paths:
      
      const FileSpec &Module::GetFileSpec () const;
      const FileSpec &Module::GetPlatformFileSpec () const;
      
      llvm-svn: 128563
      32e0a750
  19. 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
  20. 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
    • Greg Clayton's avatar
      Made the lldb_private::Opcode struct into a real boy... I mean class. · 0ae96273
      Greg Clayton authored
      Modified the Disassembler::Instruction base class to contain an Opcode 
      instance so that we can know the bytes for an instruction without needing
      to keep the data around.
      
      Modified the DisassemblerLLVM's instruction class to correctly extract the
      opcode bytes if all goes well.
      
      llvm-svn: 128248
      0ae96273
  21. Mar 24, 2011
    • Greg Clayton's avatar
      Fixed the LLDB build so that we can have private types, private enums and · e0d378b3
      Greg Clayton authored
      public types and public enums. This was done to keep the SWIG stuff from
      parsing all sorts of enums and types that weren't needed, and allows us to
      abstract our API better.
      
      llvm-svn: 128239
      e0d378b3
    • Greg Clayton's avatar
      Did a lot more work on abtracting and organizing the platforms. · 1cb6496e
      Greg Clayton authored
      On Mac OS X we now have 3 platforms:
      PlatformDarwin - must be subclassed to fill in the missing pure virtual funcs
                       but this implements all the common functionality between
                       remote-macosx and remote-ios. It also allows for another
                       platform to be used (remote-gdb-server for now) when doing
                       remote connections. Keeping this pluggable will allow for
                       flexibility.
      PlatformMacOSX - Now implements both local and remote macosx desktop platforms.
      PlatformRemoteiOS - Remote only iOS that knows how to locate SDK files in the
                          cached SDK locations on the host.
      
      A new agnostic platform has been created:
      PlatformRemoteGDBServer - this implements the platform using the GDB remote 
                                protocol and uses the built in lldb_private::Host
                                static functions to implement many queries.
      
      llvm-svn: 128193
      1cb6496e
  22. Mar 22, 2011
  23. 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
  24. 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
  25. Mar 18, 2011
  26. Mar 15, 2011
  27. Mar 11, 2011
  28. Mar 10, 2011
    • Caroline Tice's avatar
      · 20bd37f7
      Caroline Tice authored
      The UserSettings controllers must be initialized & terminated in the
      correct order.  Previously this was tacitly implemented but not
      enforced, so it was possible to accidentally do things in the wrong
      order and cause problems.  This fixes that problem.
      
      llvm-svn: 127430
      20bd37f7
  29. Mar 08, 2011
    • Greg Clayton's avatar
      LLDB now has "Platform" plug-ins. Platform plug-ins are plug-ins that provide · e996fd30
      Greg Clayton authored
      an interface to a local or remote debugging platform. By default each host OS
      that supports LLDB should be registering a "default" platform that will be
      used unless a new platform is selected. Platforms are responsible for things
      such as:
      - getting process information by name or by processs ID
      - finding platform files. This is useful for remote debugging where there is 
        an SDK with files that might already or need to be cached for debug access.
      - getting a list of platform supported architectures in the exact order they
        should be selected. This helps the native x86 platform on MacOSX select the
        correct x86_64/i386 slice from universal binaries.
      - Connect to remote platforms for remote debugging
      - Resolving an executable including finding an executable inside platform
        specific bundles (macosx uses .app bundles that contain files) and also
        selecting the appropriate slice of universal files for a given platform.
      
      So by default there is always a local platform, but remote platforms can be
      connected to. I will soon be adding a new "platform" command that will support
      the following commands:
      (lldb) platform connect --name machine1 macosx connect://host:port
      Connected to "machine1" platform.
      (lldb) platform disconnect macosx
      
      This allows LLDB to be well setup to do remote debugging and also once 
      connected process listing and finding for things like:
      (lldb) process attach --name x<TAB>
      
      The currently selected platform plug-in can now auto complete any available
      processes that start with "x". The responsibilities for the platform plug-in
      will soon grow and expand.
      
      llvm-svn: 127286
      e996fd30
  30. Feb 24, 2011
Loading