Skip to content
  1. 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
  2. Feb 24, 2011
  3. Feb 23, 2011
    • Greg Clayton's avatar
      Abtracted all mach-o and ELF out of ArchSpec. This patch is a modified form · 64195a2c
      Greg Clayton authored
      of Stephen Wilson's idea (thanks for the input Stephen!). What I ended up
      doing was:
      - Got rid of ArchSpec::CPU (which was a generic CPU enumeration that mimics
        the contents of llvm::Triple::ArchType). We now rely upon the llvm::Triple 
        to give us the machine type from llvm::Triple::ArchType.
      - There is a new ArchSpec::Core definition which further qualifies the CPU
        core we are dealing with into a single enumeration. If you need support for
        a new Core and want to debug it in LLDB, it must be added to this list. In
        the future we can allow for dynamic core registration, but for now it is
        hard coded.
      - The ArchSpec can now be initialized with a llvm::Triple or with a C string
        that represents the triple (it can just be an arch still like "i386").
      - The ArchSpec can still initialize itself with a architecture type -- mach-o
        with cpu type and subtype, or ELF with e_machine + e_flags -- and this will
        then get translated into the internal llvm::Triple::ArchSpec + ArchSpec::Core.
        The mach-o cpu type and subtype can be accessed using the getter functions:
        
        uint32_t
        ArchSpec::GetMachOCPUType () const;
      
        uint32_t
        ArchSpec::GetMachOCPUSubType () const;
        
        But these functions are just converting out internal llvm::Triple::ArchSpec 
        + ArchSpec::Core back into mach-o. Same goes for ELF.
      
      All code has been updated to deal with the changes.
      
      This should abstract us until later when the llvm::TargetSpec stuff gets
      finalized and we can then adopt it.
      
      llvm-svn: 126278
      64195a2c
  4. Feb 19, 2011
    • Jim Ingham's avatar
      - Changed all the places where CommandObjectReturn was exporting a StreamString to just exporting · 85e8b814
      Jim Ingham authored
      a Stream, and then added GetOutputData & GetErrorData to get the accumulated data.
      - Added a StreamTee that will tee output to two provided lldb::StreamSP's.
      - Made the CommandObjectReturn use this so you can Tee the results immediately to
      the debuggers output file, as well as saving up the results to return when the command
      is done executing.
      - HandleCommands now uses this so that if you have a set of commands that continue the target
      you will see the commands come out as they are processed.
      - The Driver now uses this to output the command results as you go, which makes the interface
      more reactive seeming.
      
      llvm-svn: 126015
      85e8b814
  5. Feb 18, 2011
    • Greg Clayton's avatar
      Added new target instance settings for execution settings: · bfe5f3bf
      Greg Clayton authored
      Targets can now specify some additional parameters for when we debug 
      executables that can help with plug-in selection:
      
      target.execution-level = auto | user | kernel
      target.execution-mode  = auto | dynamic | static
      target.execution-os-type = auto | none | halted | live
      
      On some systems, the binaries that are created are the same wether you use
      them to debug a kernel, or a user space program. Many times inspecting an 
      object file can reveal what an executable should be. For these cases we can
      now be a little more complete by specifying wether to detect all of these
      things automatically (inspect the main executable file and select a plug-in
      accordingly), or manually to force the selection of certain plug-ins.
      
      To do this we now allow the specficifation of wether one is debugging a user
      space program (target.execution-level = user) or a kernel program 
      (target.execution-level = kernel).
      
      We can also specify if we want to debug a program where shared libraries
      are dynamically loaded using a DynamicLoader plug-in 
      (target.execution-mode = dynamic), or wether we will treat all symbol files
      as already linked at the correct address (target.execution-mode = static).
      
      We can also specify if the inferior we are debugging is being debugged on 
      a bare board (target.execution-os-type = none), or debugging an OS where
      we have a JTAG or other direct connection to the inferior stops the entire
      OS (target.execution-os-type = halted), or if we are debugging a program on
      something that has live debug services (target.execution-os-type = live).
      
      For the "target.execution-os-type = halted" mode, we will need to create 
      ProcessHelper plug-ins that allow us to extract the process/thread and other
      OS information by reading/writing memory.
      
      This should allow LLDB to be used for a wide variety of debugging tasks and
      handle them all correctly.
      
      llvm-svn: 125815
      bfe5f3bf
    • Jim Ingham's avatar
      Factor all the code that does "Execute a list of lldb command interpreter... · e16c50a1
      Jim Ingham authored
      Factor all the code that does "Execute a list of lldb command interpreter commands" into a single function in the Interpreter, and then use that in all the places that used to do this by hand.
      
      llvm-svn: 125807
      e16c50a1
  6. Feb 17, 2011
  7. Feb 16, 2011
    • Stephen Wilson's avatar
      Expose includes for the socket layer on all platforms. · dd9ec590
      Stephen Wilson authored
      This patch reverts a portion of r125199 to allow the tree to build again on
      linux.  The specific mingw issues that revision intended to address can be
      sorted out at a later time.
      
      llvm-svn: 125655
      dd9ec590
    • Greg Clayton's avatar
      The DynamicLoader plug-in instance now lives up in lldb_private::Process where · 93d3c833
      Greg Clayton authored
      it should live and the lldb_private::Process takes care of managing the 
      auto pointer to the dynamic loader instance.
      
      Also, now that the ArchSpec contains the target triple, we are able to 
      correctly set the Target architecture in DidLaunch/DidAttach in the subclasses,
      and then the lldb_private::Process will find the dynamic loader plug-in 
      by letting the dynamic loader plug-ins inspect the arch/triple in the target.
      
      So now the ProcessGDBRemote plug-in is another step closer to be purely 
      process/platform agnostic.
      
      I updated the ProcessMacOSX and the ProcessLinux plug-ins accordingly.
      
      llvm-svn: 125650
      93d3c833
  8. Feb 15, 2011
  9. Feb 10, 2011
  10. Feb 09, 2011
  11. Feb 08, 2011
  12. Feb 07, 2011
  13. Feb 05, 2011
  14. Feb 04, 2011
  15. Feb 03, 2011
  16. Feb 02, 2011
    • Greg Clayton's avatar
      Modified the PluginManager to be ready for loading plug-ins from a system · 4272cc7d
      Greg Clayton authored
      LLDB plugin directory and a user LLDB plugin directory. We currently still
      need to work out at what layer the plug-ins will be, but at least we are 
      prepared for plug-ins. Plug-ins will attempt to be loaded from the 
      "/Developer/Library/PrivateFrameworks/LLDB.framework/Resources/Plugins" 
      folder, and from the "~/Library/Application Support/LLDB/Plugins" folder on
      MacOSX. Each plugin will be scanned for:
      
      extern "C" bool LLDBPluginInitialize(void);
      extern "C" void LLDBPluginTerminate(void);
      
      If at least LLDBPluginInitialize is found, the plug-in will be loaded. The
      LLDBPluginInitialize function returns a bool that indicates if the plug-in
      should stay loaded or not (plug-ins might check the current OS, current
      hardware, or anything else and determine they don't want to run on the current
      host). The plug-in is uniqued by path and added to a static loaded plug-in
      map. The plug-in scanning happens during "lldb_private::Initialize()" which
      calls to the PluginManager::Initialize() function. Likewise with termination
      lldb_private::Terminate() calls PluginManager::Terminate(). The paths for the
      plug-in directories is fetched through new Host calls:
      
          bool Host::GetLLDBPath (ePathTypeLLDBSystemPlugins, dir_spec);
          bool Host::GetLLDBPath (ePathTypeLLDBUserPlugins, dir_spec);
      
      This way linux and other systems can define their own appropriate locations
      for plug-ins to be loaded.
      
      To allow dynamic shared library loading, the Host layer has also been modified
      to include shared library open, close and get symbol:
      
          static void *
          Host::DynamicLibraryOpen (const FileSpec &file_spec, 
                                    Error &error);
      
          static Error
          Host::DynamicLibraryClose (void *dynamic_library_handle);
      
          static void *
          Host::DynamicLibraryGetSymbol (void *dynamic_library_handle, 
                                        const char *symbol_name, 
                                        Error &error);
      
      lldb_private::FileSpec also has been modified to support directory enumeration
      in an attempt to abstract the directory enumeration into one spot in the code.
      The directory enumertion function is static and takes a callback:
      
      
          typedef enum EnumerateDirectoryResult
          {
              eEnumerateDirectoryResultNext,  // Enumerate next entry in the current directory
              eEnumerateDirectoryResultEnter, // Recurse into the current entry if it is a directory or symlink, or next if not
              eEnumerateDirectoryResultExit,  // Exit from the current directory at the current level.
              eEnumerateDirectoryResultQuit   // Stop directory enumerations at any level
          };
      
          typedef FileSpec::EnumerateDirectoryResult (*EnumerateDirectoryCallbackType) (void *baton,
                                                                                        FileSpec::FileType file_type,
                                                                                        const FileSpec &spec);
      
          static FileSpec::EnumerateDirectoryResult
          FileSpec::EnumerateDirectory (const char *dir_path,
                                        bool find_directories,
                                        bool find_files,
                                        bool find_other,
                                        EnumerateDirectoryCallbackType callback,
                                        void *callback_baton);
      
      This allow clients to specify the directory to search, and specifies if only
      files, directories or other (pipe, symlink, fifo, etc) files will cause the
      callback to be called. The callback also gets to return with the action that
      should be performed after this directory entry. eEnumerateDirectoryResultNext
      specifies to continue enumerating through a directory with the next entry.
      eEnumerateDirectoryResultEnter specifies to recurse down into a directory
      entry, or if the file is not a directory or symlink/alias to a directory, then
      just iterate to the next entry. eEnumerateDirectoryResultExit specifies to 
      exit the current directory and skip any entries that might be remaining, yet
      continue enumerating to the next entry in the parent directory. And finally
      eEnumerateDirectoryResultQuit means to abort all directory enumerations at 
      all levels.
      
      Modified the Declaration class to not include column information currently
      since we don't have any compilers that currently support column based 
      declaration information. Columns support can be re-enabled with the
      additions of a #define.
      
      Added the ability to find an EmulateInstruction plug-in given a target triple
      and optional plug-in name in the plug-in manager.
      
      Fixed a few cases where opendir/readdir was being used, but yet not closedir
      was being used. Soon these will be deprecated in favor of the new directory
      enumeration call that was added to the FileSpec class.
      
      llvm-svn: 124716
      4272cc7d
  17. Feb 01, 2011
  18. Jan 29, 2011
Loading