Skip to content
  1. Jul 25, 2011
  2. Jul 24, 2011
    • Enrico Granata's avatar
      Python synthetic children: · a37a065c
      Enrico Granata authored
       - you can now define a Python class as a synthetic children producer for a type
         the class must adhere to this "interface":
              def __init__(self, valobj, dict):
           	def get_child_at_index(self, index):
           	def get_child_index(self, name):
         then using type synth add -l className typeName
         (e.g. type synth add -l fooSynthProvider foo)
         (This is still WIP with lots to be added)
         A small test case is available also as reference
      
      llvm-svn: 135865
      a37a065c
  3. Jul 22, 2011
    • Peter Collingbourne's avatar
      Add support for platforms without sa_len to SocketAddress, and modify · 9a8d848c
      Peter Collingbourne authored
      some code to use it
      
      llvm-svn: 135790
      9a8d848c
    • Enrico Granata's avatar
      some editing of data visualization error messages to make them more meaningful · e992a089
      Enrico Granata authored
      debugging printfs() for data visualization turned into a meaningful log:
       - introduced a new log category `types' in channel `lldb'
      
      llvm-svn: 135773
      e992a089
    • Enrico Granata's avatar
      when typing a summary string you can use the %S symbol to explicitly indicate... · d55546b2
      Enrico Granata authored
      when typing a summary string you can use the %S symbol to explicitly indicate that you want the summary to be used to print the target object
       (e.g. ${var%S}). this might already be the default if your variable is of an aggregate type
      new feature: synthetic filters. you can restrict the number of children for your variables to only a meaningful subset
       - the restricted list of children obeys the typical rules (e.g. summaries prevail over children)
       - one-line summaries show only the filtered (synthetic) children, if you type an expanded summary string, or you use Python scripts, all the real children are accessible
       - to provide a synthetic children list use the "type synth add" command, as in:
         type synth add foo_type --child varA --child varB[0] --child varC->packet->flags[1-4]
         (you can use ., ->, single-item array operator [N] and bitfield operator [N-M]; array slice access is not supported, giving simplified names to expression paths is not supported)
       - a new -S option to frame variable and target variable lets you override synthetic children and instead show real ones
      
      llvm-svn: 135731
      d55546b2
  4. Jul 19, 2011
    • Enrico Granata's avatar
      Applied Matt Johnson patch to ValueObject and FormatManager · 9df29e32
      Enrico Granata authored
      llvm-svn: 135523
      9df29e32
    • Greg Clayton's avatar
      Added some more functionality to SocketAddress and modified · 9189b208
      Greg Clayton authored
      ConnectionFileDescriptor to use it.
      
      llvm-svn: 135511
      9189b208
    • Johnny Chen's avatar
      Patch by Matt Johnson to silence G++ warnings! · 4480530a
      Johnny Chen authored
      Used hand merge to apply the diffs.  I did not apply the diffs for FormatManager.h and
      the diffs for memberwise initialization for ValueObject.cpp because they changed since.
      I will ask my colleague to apply them later.
      
      llvm-svn: 135508
      4480530a
    • Enrico Granata's avatar
      The implementation of categories is now synchronization safe · 20edcdbe
      Enrico Granata authored
      Code cleanup:
       - The Format Manager implementation is now split between two files: FormatClasses.{h|cpp} where the
         actual formatter classes (ValueFormat, SummaryFormat, ...) are implemented and
         FormatManager.{h|cpp} where the infrastructure classes (FormatNavigator, FormatManager, ...)
         are contained. The wrapper code always remains in Debugger.{h|cpp}
       - Several leftover fields, methods and comments from previous design choices have been removed
      type category subcommands (enable, disable, delete) now can take a list of category names as input
       - for type category enable, saying "enable A B C" is the same as saying
          enable C
          enable B
          enable A
         (the ordering is relevant in enabling categories, and it is expected that a user typing
          enable A B C wants to look into category A, then into B, then into C and not the other
          way round)
       - for the other two commands, the order is not really relevant (however, the same inverted ordering
         is used for consistency)
      
      llvm-svn: 135494
      20edcdbe
    • Greg Clayton's avatar
      Abstract "struct sockaddr", "struct sockaddr_in", "struct sockaddr_in6" and · ad440da3
      Greg Clayton authored
      "struct sockaddr_storage" into a new host class called SocketAddress. This
      will allow us to control the host specific implementations (such as how to
      get the length) into a single Host specific class.
      
      llvm-svn: 135488
      ad440da3
    • Greg Clayton's avatar
      Modified the LocateMacOSXFilesUsingDebugSymbols(...) function to locate · a63d08c9
      Greg Clayton authored
      an executable file if it is right next to a dSYM file that is found using
      DebugSymbols. The code also looks into a bundle if the dSYM file is right
      next to a bundle.
      
      Modified the MacOSX kernel dynamic loader plug-in to correctly set the load
      address for kext sections. This is a tad tricky because of how LLDB chooses
      to treat mach-o segments with no name. Also modified the loader to properly
      handle the older version 1 kext summary info.
      
      Fixed a crasher in the Mach-o object file parser when it is trying to set
      the section size correctly for dSYM sections.
      
      Added packet dumpers to the CommunicationKDP class. We now also properly 
      detect address byte sizes based on the cpu type and subtype that is provided.
      Added a read memory and read register support to CommunicationKDP. Added a
      ThreadKDP class that now uses subclasses of the RegisterContextDarwin_XXX for
      arm, i386 and x86_64. 
      
      Fixed some register numbering issues in the RegisterContextDarwin_arm class
      and added ARM GDB numbers to the ARM_GCC_Registers.h file.
      
      Change the RegisterContextMach_XXX classes over to subclassing their
      RegisterContextDarwin_XXX counterparts so we can share the mach register 
      contexts between the user and kernel plug-ins.
      
      llvm-svn: 135466
      a63d08c9
    • Enrico Granata's avatar
      Fixed a bug where deleting a regex summary would not immediately reflect in the variables display · 1490c6fd
      Enrico Granata authored
      The "systemwide summaries" feature has been removed and replaced with a more general and
      powerful mechanism.
      Categories:
       - summaries can now be grouped into buckets, called "categories" (it is expected that categories
         correspond to libraries and/or runtime environments)
       - to add a summary to a category, you can use the -w option to type summary add and give
         a category name (e.g. type summary add -f "foo" foo_t -w foo_category)
       - categories are by default disabled, which means LLDB will not look into them for summaries,
         to enable a category use "type category enable". once a category is enabled, LLDB will
         look into that category for summaries. the rules are quite trivial: every enabled category
         is searched for an exact match. if an exact match is nowhere to be found, any match is
         searched for in every enabled category (whether it involves cascading, going to base classes,
         ...). categories are searched into the order in which they were enabled (the most recently
         enabled category first, then the second most and so on..)
       - by default, most commands that deal with summaries, use a category named "default" if no
         explicit -w parameter is given (the observable behavior of LLDB should not change when
         categories are not explicitly used)
       - the systemwide summaries are now part of a "system" category
      
      llvm-svn: 135463
      1490c6fd
  5. Jul 17, 2011
    • Greg Clayton's avatar
      Added a boolean to the pure virtual lldb_private::Process::CanDebug(...) · 3a29bdbe
      Greg Clayton authored
      method so process plug-ins that are requested by name can answer yes when
      asked if they can debug a target that might not have any file in the target.
      
      Modified the ConnectionFileDescriptor to have both a read and a write file
      descriptor. This allows us to support UDP, and eventually will allow us to
      support pipes. The ConnectionFileDescriptor class also has a file descriptor
      type for each of the read and write file decriptors so we can use the correct
      read/recv/recvfrom call when reading, or write/send/sendto for writing.
      
      Finished up an initial implementation of UDP where you can use the "udp://"
      URL to specify a host and port to connect to:
      
      (lldb) process connect --plugin kdp-remote udp://host:41139
      
      This will cause a ConnectionFileDescriptor to be created that can send UDP
      packets to "host:41139", and it will also bind to a localhost port that can
      be given out to receive the connectionless UDP reply. 
      
      Added the ability to get to the IPv4/IPv6 socket port number from a 
      ConnectionFileDescriptor instance if either file descriptor is a socket.
      
      The ProcessKDP can now successfully connect to a remote kernel and detach
      using the above "processs connect" command!!! So far we have the following
      packets working:
          KDP_CONNECT
          KDP_DISCONNECT
          KDP_HOSTINFO
          KDP_VERSION
          KDP_REATTACH
      
      Now that the packets are working, adding new packets will go very quickly.
      
      llvm-svn: 135363
      3a29bdbe
  6. Jul 16, 2011
    • Greg Clayton's avatar
      Completed more work on the KDP darwin kernel debugging Process plug-in. · 4df8ddfc
      Greg Clayton authored
      Implemented connect, disconnect, reattach, version, and hostinfo.
      
      Modified the ConnectionFileDescriptor class to be able to handle UDP. 
      
      Added a new Stream subclass called StreamBuffer that is backed by a
      llvm::SmallVector for better efficiency.
      
      Modified the DataExtractor class to have a static function that can
      dump hex bytes into a stream. This is currently being used to dump incoming
      binary packet data in the KDP plug-in.
      
      llvm-svn: 135338
      4df8ddfc
    • Enrico Granata's avatar
      Some descriptive text for the Python script feature: · 0c5ef693
      Enrico Granata authored
       - help type summary add now gives some hints on how to use it
      frame variable and target variable now have a --no-summary-depth (-Y) option:
       - simply using -Y without an argument will skip one level of summaries, i.e.
         your aggregate types will expand their children and display no summary, even
         if they have one. children will behave normally
       - using -Y<int>, as in -Y4, -Y7, ..., will skip as many levels of summaries as
         given by the <int> parameter (obviously, -Y and -Y1 are the same thing). children
         beneath the given depth level will behave normally
       -Y0 is the same as omitting the --no-summary-depth parameter entirely
       This option replaces the defined-but-unimplemented --no-summary
      
      llvm-svn: 135336
      0c5ef693
    • Enrico Granata's avatar
      System-wide summaries: · 9dd75c88
      Enrico Granata authored
       - Summaries for char*, const char* and char[] are loaded at startup as
         system-wide summaries. This means you cannot delete them unless you use
         the -a option to type summary delete/clear
       - You can add your own system-wide summaries by using the -w option to type
         summary add
      Several code improvements for the Python summaries feature
      
      llvm-svn: 135326
      9dd75c88
  7. Jul 15, 2011
    • Greg Clayton's avatar
      Added the ability to connect using "tcp://<host>:<port>" which is the · 57508026
      Greg Clayton authored
      same as the old "connect://<host>:<port>". Also added the ability to
      connect using "udp://<host>:<port>" which will open a connected 
      datagram socket. I need to find a way to specify a non connected
      datagram socket as well. 
      
      We might need to start setting some settings in the URL itself, 
      maybe something like:
      
      udp://<host>:<port>?connected=yes
      udp://<host>:<port>?connected=no
      
      I am open to suggestions for URL settings.
      
      Also did more work on the KDP darwin kernel plug-in.
      
       
      
      llvm-svn: 135277
      57508026
    • Enrico Granata's avatar
      Python summary strings: · f2bbf717
      Enrico Granata authored
       - you can use a Python script to write a summary string for data-types, in one of
         three ways:
          -P option and typing the script a line at a time
          -s option and passing a one-line Python script
          -F option and passing the name of a Python function
         these options all work for the "type summary add" command
         your Python code (if provided through -P or -s) is wrapped in a function
         that accepts two parameters: valobj (a ValueObject) and dict (an LLDB
         internal dictionary object). if you use -F and give a function name,
         you're expected to define the function on your own and with the right
         prototype. your function, however defined, must return a Python string
       - test case for the Python summary feature
       - a few quirks:
        Python summaries cannot have names, and cannot use regex as type names
        both issues will be fixed ASAP
      major redesign of type summary code:
       - type summary working with strings and type summary working with Python code
         are two classes, with a common base class SummaryFormat
       - SummaryFormat classes now are able to actively format objects rather than
         just aggregating data
       - cleaner code to print descriptions for summaries
      the public API now exports a method to easily navigate a ValueObject hierarchy
      New InputReaderEZ and PriorityPointerPair classes
      Several minor fixes and improvements
      
      llvm-svn: 135238
      f2bbf717
  8. Jul 13, 2011
    • Enrico Granata's avatar
      smarter summary strings: · f4efecd9
      Enrico Granata authored
       - formats %s %char[] %c and %a now work to print 0-terminated c-strings if they are applied to a char* or char[] even without the [] operator (e.g. ${var%s})
       - array formats (char[], intN[], ..) now work when applied to an array of a scalar type even without the [] operator (e.g. ${var%int32_t[]})
      LLDB will not crash because of endless loop when trying to obtain a summary for an object that has no value and references itself in its summary string
      In many cases, a wrong summary string will now display an "<error>" message instead of giving out an empty string
      
      llvm-svn: 135007
      f4efecd9
  9. Jul 12, 2011
    • Enrico Granata's avatar
      named summaries: · f9fa6ee5
      Enrico Granata authored
       - a new --name option for "type summary add" lets you give a name to a summary
       - a new --summary option for "frame variable" lets you bind a named summary to one or more variables
      ${var%s} now works for printing the value of 0-terminated CStrings
      type format test case now tests for cascading
       - this is disabled on GCC because GCC may end up stripping typedef chains, basically breaking cascading
      new design for the FormatNavigator class
      new template class CleanUp2 meant to support cleanup routines with 1 additional parameter beyond resource handle
      
      llvm-svn: 134943
      f9fa6ee5
  10. 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
  11. Jul 10, 2011
    • Greg Clayton's avatar
      Allow the built in ValueObject summary providers for C strings · 45ba8543
      Greg Clayton authored
      use lldb_private::Target::ReadMemory(...) to allow constant strings
      to be displayed in global variables prior on in between process
      execution.
      
      Centralized the variable declaration dumping into:
      
      	bool
      	Variable::DumpDeclaration (Stream *s, bool show_fullpaths, bool show_module);
      
      Fixed an issue if you used "target variable --regex <regex>" where the
      variable name would not be displayed, but the regular expression would.
      
      Fixed an issue when viewing global variables through "target variable"
      might not display correctly when doing DWARF in object files.
      
      llvm-svn: 134878
      45ba8543
  12. Jul 09, 2011
    • Greg Clayton's avatar
      Fixed the global and static variables to always be in scope. · daf515fc
      Greg Clayton authored
      Made it so that you can create synthetic children of array
      value objects. This is for creating array members when the
      array index is out of range. This comes in handy when you have
      a structure definition like:
      
      struct Collection
      {
          uint32_t count;
          Item array[0];
      };
      "array" has 1 item, but many times in practice there are more
      items in "item_array".
      
      This allows you to do:
      
      (lldb) target variable g_collection.array[3]
      
      To implement this, the get child at index has been modified
      to have a "ignore_array_bounds" boolean that can be set to true.
      
      llvm-svn: 134846
      daf515fc
    • Greg Clayton's avatar
      Limit the character array summary to 512 bytes. · 5707d224
      Greg Clayton authored
      llvm-svn: 134827
      5707d224
  13. Jul 08, 2011
  14. 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
  15. Jul 06, 2011
    • Enrico Granata's avatar
      bug fix in summary strings: · a7187d00
      Enrico Granata authored
      - ${*var[].something} was not working as expected
      options -p and -r now also work for type format add
      
      llvm-svn: 134523
      a7187d00
    • Jim Ingham's avatar
      Set the EvaluationPoint's m_thread_id to the RIGHT invalid define... · 89b6109b
      Jim Ingham authored
      llvm-svn: 134505
      89b6109b
    • Greg Clayton's avatar
      Made the string representation for a SBValue return what "frame variable" · 262f80df
      Greg Clayton authored
      would return instead of a less than helpful "name: '%s'" description.
      
      Make sure that when we ask for the error from a ValueObject object we
      first update the value if needed.
      
      Cleaned up some SB functions to use internal functions and not re-call
      through the public API when possible.
      
      llvm-svn: 134497
      262f80df
    • Enrico Granata's avatar
      Fixed some format names · e443ba73
      Enrico Granata authored
      llvm-svn: 134492
      e443ba73
    • Greg Clayton's avatar
      Fixed some issues with ARM backtraces by not processing any push/pop · 34132754
      Greg Clayton authored
      instructions if they are conditional. Also fixed issues where the PC wasn't
      getting bit zero stripped for ARM targets when a stack frame was thumb. We
      now properly call through the GetOpcodeLoadAddress() functions to make sure
      the addresses are properly stripped for any targets that may decorate up
      their addresses.
      
      We now don't pass the SIGSTOP signals along. We can revisit this soon, but
      currently this was interfering with debugging some older ARM targets that
      don't have vCont support in the GDB server.
      
      llvm-svn: 134461
      34132754
    • Enrico Granata's avatar
      new syntax for summary strings: · 9fc1944e
      Enrico Granata authored
       - ${*expr} now simply means to dereference expr before actually using it
       - bitfields, array ranges and pointer ranges now work in a (hopefully) more natural and language-compliant way
      a new class TypeHierarchyNavigator replicates the behavior of the FormatManager in going through type hierarchies
      when one-lining summary strings, children's summaries can be used as well as values
      
      llvm-svn: 134458
      9fc1944e
  16. Jul 03, 2011
  17. Jul 02, 2011
    • Peter Collingbourne's avatar
      Fix Linux build errors · f52f0502
      Peter Collingbourne authored
      llvm-svn: 134347
      f52f0502
    • Enrico Granata's avatar
      several improvements to "type summary": · 0a3958e0
      Enrico Granata authored
       - type names can now be regular expressions (exact matching is done first, and is faster)
       - integral (and floating) types can be printed as bitfields, i.e. ${var[low-high]} will extract bits low thru high of the value and print them
       - array subscripts are supported, both for arrays and for pointers. the syntax is ${*var[low-high]}, or ${*var[]} to print the whole array (the latter only works for statically sized arrays)
       - summary is now printed by default when a summary string references a variable. if that variable's type has no summary, value is printed instead. to force value, you can use %V as a format specifier
       - basic support for ObjectiveC:
        - ObjectiveC inheritance chains are now walked through
        - %@ can be specified as a summary format, to print the ObjectiveC runtime description for an object
       - some bug fixes
      
      llvm-svn: 134293
      0a3958e0
  18. Jun 30, 2011
    • Greg Clayton's avatar
      Centralize all of the type name code so that we always strip the leading · e3055942
      Greg Clayton authored
      "struct ", "class ", and "union " from the start of any type names that are
      extracted from clang QualType objects. I had to fix test suite cases that
      were expecting the struct/union/class prefix to be there.
      
      llvm-svn: 134132
      e3055942
    • Enrico Granata's avatar
      This commit adds a new top subcommand "summary" to command type named "type".... · 4becb37e
      Enrico Granata authored
      This commit adds a new top subcommand "summary" to command type named "type". Currently this command
      implements three commands:
      
      type summary add <format> <typename1> [<typename2> ...]
      type summary delete <typename1> [<typename2> ...]
      type summary list [<typename1> [<typename2>] ...]
      type summary clear
      
      This allows you to specify the default format that will be used to display
      summaries for variables, shown when you use "frame variable" or "expression", or the SBValue classes.
      
      Examples:
      type summary add "x = ${var.x}" Point
      
      type summary list
      
      type summary add --one-liner SimpleType
      
      llvm-svn: 134108
      4becb37e
    • Greg Clayton's avatar
      Added support for finding and global variables in the SBTarget and SBModule · dea8cb4f
      Greg Clayton authored
      level in the public API. 
      
      Also modified the ValueObject values to be able to display global variables
      without having a valid running process. The globals will read themselves from
      the object file section data if there is no process, and from the process if
      there is one.
      
      Also fixed an issue where modifications for dynamic types could cause child
      values of ValueObjects to not show up if the value was unable to evaluate
      itself (children of NULL pointer objects).
      
      llvm-svn: 134102
      dea8cb4f
Loading