[Lldb-commits] [lldb] r279198 - Add StructuredData plugin type; showcase with new DarwinLog feature
Todd Fiala via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 19 09:27:02 PDT 2016
I'm going to follow up with Kate on the intent for it. If there is a
reason for it, then we almost certainly want to add lldb-commits and/or
lldb-dev to it.
On Fri, Aug 19, 2016 at 9:24 AM, Zachary Turner <zturner at google.com> wrote:
> Is this group needed for something? Why not just delete it? All reviews
> are supposed to go to lldb-commits
>
> On Fri, Aug 19, 2016 at 9:23 AM Todd Fiala <todd.fiala at gmail.com> wrote:
>
>> (Since it never collided before, I never had to be that precise and I
>> always got the right entry on the list).
>>
>> On Fri, Aug 19, 2016 at 9:22 AM, Todd Fiala <todd.fiala at gmail.com> wrote:
>>
>>> That is indeed what happened. On July 18th, 2016, Kate created a
>>> reviews.llvm.org entity called LLDB, which is a group that anyone can
>>> join (see link below):
>>>
>>> https://reviews.llvm.org/project/profile/39/
>>>
>>> Up until moments ago, she was the only member of the group. (I just
>>> added myself).
>>>
>>> And I see how that would truncate the auto completion of lldb-commits.
>>>
>>> -Todd
>>>
>>>
>>> On Fri, Aug 19, 2016 at 8:56 AM, Todd Fiala <todd.fiala at gmail.com>
>>> wrote:
>>>
>>>> Ah okay. I usually type LLDB and it auto completes to the right thing.
>>>> I wonder if a new id with name LLDB was added - it appears to be valid -
>>>> and if that short circuited my normal lookup process. I'll look into that
>>>> to see if that's the case, as this probably won't be the only time when
>>>> that will happen.
>>>>
>>>> -Todd
>>>>
>>>> On Friday, August 19, 2016, Pavel Labath <labath at google.com> wrote:
>>>>
>>>>> You added LLDB as a subsriber. I don't know what that is, but the
>>>>> correct name for the list is "lldb-commits".
>>>>>
>>>>> pl
>>>>>
>>>>> On 19 August 2016 at 04:54, Todd Fiala via lldb-commits
>>>>> <lldb-commits at lists.llvm.org> wrote:
>>>>> > Huh, that is totally weird. I wonder what happened there?
>>>>> >
>>>>> > On Thu, Aug 18, 2016 at 8:12 PM, Zachary Turner <zturner at google.com>
>>>>> wrote:
>>>>> >>
>>>>> >> Weird, you linked to a phabricator revision but i never saw it come
>>>>> across
>>>>> >> to the mailing list
>>>>> >>
>>>>> >> On Thu, Aug 18, 2016 at 8:00 PM Todd Fiala via lldb-commits
>>>>> >> <lldb-commits at lists.llvm.org> wrote:
>>>>> >>>
>>>>> >>> Author: tfiala
>>>>> >>> Date: Thu Aug 18 21:52:07 2016
>>>>> >>> New Revision: 279198
>>>>> >>>
>>>>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=279198&view=rev
>>>>> >>> Log:
>>>>> >>> Add StructuredData plugin type; showcase with new DarwinLog feature
>>>>> >>>
>>>>> >>> See docs/structured_data/StructuredDataPlugins.md for details.
>>>>> >>>
>>>>> >>> differential review: https://reviews.llvm.org/D22976
>>>>> >>>
>>>>> >>> reviewers: clayborg, jingham
>>>>> >>>
>>>>> >>> Added:
>>>>> >>> lldb/trunk/docs/structured_data/
>>>>> >>> lldb/trunk/docs/structured_data/DarwinLog.md
>>>>> >>> lldb/trunk/docs/structured_data/StructuredDataPlugins.md
>>>>> >>> lldb/trunk/include/lldb/API/SBStructuredData.h
>>>>> >>> lldb/trunk/include/lldb/Target/StructuredDataPlugin.h
>>>>> >>> lldb/trunk/include/lldb/Target/ThreadPlanCallOnFunctionExit.h
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/darwin_log.py
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/basic/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/basic/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/basic/TestDarwinLogBasic.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/basic/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/common/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/common/darwin_log_common.h
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/activity/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/activity-chain/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/activity-chain/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/activity-chain/
>>>>> TestDarwinLogFilterMatchActivityChain.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/activity-chain/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/activity/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/activity/
>>>>> TestDarwinLogFilterMatchActivity.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/activity/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/category/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/category/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/category/
>>>>> TestDarwinLogFilterMatchCategory.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/category/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/message/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/message/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/message/
>>>>> TestDarwinLogFilterMatchMessage.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/message/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/subsystem/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/subsystem/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/subsystem/
>>>>> TestDarwinLogFilterMatchSubsystem.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/exact_match/subsystem/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/activity/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/activity-chain/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/activity-chain/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/activity-chain/
>>>>> TestDarwinLogFilterRegexActivityChain.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/activity-chain/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/activity/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/activity/
>>>>> TestDarwinLogFilterRegexActivity.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/activity/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/category/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/category/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/category/
>>>>> TestDarwinLogFilterRegexCategory.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/category/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/message/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/message/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/message/
>>>>> TestDarwinLogFilterRegexMessage.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/message/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/subsystem/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/subsystem/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/subsystem/
>>>>> TestDarwinLogFilterRegexSubsystem.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/filter/regex/subsystem/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/format/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/format/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/format/TestDarwinLogMessageFormat.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/format/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/source/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/source/debug/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/source/debug/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/source/debug/TestDarwinLogSourceDebug.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/source/debug/main.c
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/source/info/
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/source/info/Makefile
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/source/info/TestDarwinLogSourceInfo.py
>>>>> >>>
>>>>> >>> lldb/trunk/packages/Python/lldbsuite/test/
>>>>> functionalities/darwin_log/source/info/main.c
>>>>> >>> lldb/trunk/scripts/interface/SBStructuredData.i
>>>>> >>> lldb/trunk/source/API/SBStructuredData.cpp
>>>>> >>> lldb/trunk/source/Plugins/StructuredData/
>>>>> >>> lldb/trunk/source/Plugins/StructuredData/CMakeLists.txt
>>>>> >>> lldb/trunk/source/Plugins/StructuredData/DarwinLog/
>>>>> >>> lldb/trunk/source/Plugins/StructuredData/DarwinLog/
>>>>> CMakeLists.txt
>>>>> >>>
>>>>> >>> lldb/trunk/source/Plugins/StructuredData/DarwinLog/
>>>>> StructuredDataDarwinLog.cpp
>>>>> >>>
>>>>> >>> lldb/trunk/source/Plugins/StructuredData/DarwinLog/
>>>>> StructuredDataDarwinLog.h
>>>>> >>> lldb/trunk/source/Target/StructuredDataPlugin.cpp
>>>>> >>> lldb/trunk/source/Target/ThreadPlanCallOnFunctionExit.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/JSON.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/JSON.h
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> ActivityStore.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> ActivityStore.h
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> ActivityStreamSPI.h
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> CMakeLists.txt
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> DarwinLogCollector.cpp
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> DarwinLogCollector.h
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> DarwinLogEvent.h
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> DarwinLogInterfaces.h
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> DarwinLogTypes.h
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogFilter.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogFilter.h
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogFilterChain.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogFilterChain.h
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogFilterExactMatch.cpp
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogFilterExactMatch.h
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogFilterRegex.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogFilterRegex.h
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogMessage.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogMessage.h
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogMessageOsLog.cpp
>>>>> >>>
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/DarwinLog/
>>>>> LogMessageOsLog.h
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/OsLogger.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/OsLogger.h
>>>>> >>> Modified:
>>>>> >>> lldb/trunk/.gitignore
>>>>> >>> lldb/trunk/cmake/LLDBDependencies.cmake
>>>>> >>> lldb/trunk/include/lldb/API/LLDB.h
>>>>> >>> lldb/trunk/include/lldb/API/SBDefines.h
>>>>> >>> lldb/trunk/include/lldb/API/SBError.h
>>>>> >>> lldb/trunk/include/lldb/API/SBProcess.h
>>>>> >>> lldb/trunk/include/lldb/API/SBStream.h
>>>>> >>> lldb/trunk/include/lldb/Core/Broadcaster.h
>>>>> >>> lldb/trunk/include/lldb/Core/Event.h
>>>>> >>> lldb/trunk/include/lldb/Core/PluginManager.h
>>>>> >>> lldb/trunk/include/lldb/Interpreter/Args.h
>>>>> >>> lldb/trunk/include/lldb/Target/Process.h
>>>>> >>> lldb/trunk/include/lldb/lldb-forward.h
>>>>> >>> lldb/trunk/include/lldb/lldb-private-interfaces.h
>>>>> >>> lldb/trunk/lldb.xcodeproj/project.pbxproj
>>>>> >>> lldb/trunk/scripts/interface/SBProcess.i
>>>>> >>> lldb/trunk/scripts/interface/SBTarget.i
>>>>> >>> lldb/trunk/scripts/lldb.swig
>>>>> >>> lldb/trunk/source/API/CMakeLists.txt
>>>>> >>> lldb/trunk/source/API/SBDebugger.cpp
>>>>> >>> lldb/trunk/source/API/SBProcess.cpp
>>>>> >>> lldb/trunk/source/API/SystemInitializerFull.cpp
>>>>> >>> lldb/trunk/source/Core/Debugger.cpp
>>>>> >>> lldb/trunk/source/Core/Event.cpp
>>>>> >>> lldb/trunk/source/Core/PluginManager.cpp
>>>>> >>> lldb/trunk/source/Interpreter/Args.cpp
>>>>> >>> lldb/trunk/source/Plugins/Process/gdb-remote/
>>>>> GDBRemoteClientBase.cpp
>>>>> >>> lldb/trunk/source/Plugins/Process/gdb-remote/
>>>>> GDBRemoteClientBase.h
>>>>> >>>
>>>>> >>> lldb/trunk/source/Plugins/Process/gdb-remote/
>>>>> GDBRemoteCommunicationClient.cpp
>>>>> >>>
>>>>> >>> lldb/trunk/source/Plugins/Process/gdb-remote/
>>>>> GDBRemoteCommunicationClient.h
>>>>> >>> lldb/trunk/source/Plugins/Process/gdb-remote/
>>>>> ProcessGDBRemote.cpp
>>>>> >>> lldb/trunk/source/Plugins/Process/gdb-remote/
>>>>> ProcessGDBRemote.h
>>>>> >>> lldb/trunk/source/Target/CMakeLists.txt
>>>>> >>> lldb/trunk/source/Target/Platform.cpp
>>>>> >>> lldb/trunk/source/Target/Process.cpp
>>>>> >>> lldb/trunk/tools/debugserver/debugserver.xcodeproj/project.
>>>>> pbxproj
>>>>> >>> lldb/trunk/tools/debugserver/source/CMakeLists.txt
>>>>> >>> lldb/trunk/tools/debugserver/source/DNB.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/DNB.h
>>>>> >>> lldb/trunk/tools/debugserver/source/DNBDefs.h
>>>>> >>> lldb/trunk/tools/debugserver/source/MacOSX/CMakeLists.txt
>>>>> >>> lldb/trunk/tools/debugserver/source/RNBContext.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/RNBContext.h
>>>>> >>> lldb/trunk/tools/debugserver/source/RNBRemote.cpp
>>>>> >>> lldb/trunk/tools/debugserver/source/RNBRemote.h
>>>>> >>> lldb/trunk/tools/debugserver/source/debugserver.cpp
>>>>> >>> lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp
>>>>> >>> lldb/trunk/tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/.gitignore
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/.gitignore?
>>>>> rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/.gitignore (original)
>>>>> >>> +++ lldb/trunk/.gitignore Thu Aug 18 21:52:07 2016
>>>>> >>> @@ -40,7 +40,18 @@ __pycache__/
>>>>> >>>
>>>>> >>> clang-module-cache
>>>>> >>>
>>>>> >>> +# Skip ctags-style tags files
>>>>> >>> +tags
>>>>> >>> +
>>>>> >>> # We should ignore Xcode-style embedding of llvm/ at lldb root
>>>>> dir.
>>>>> >>> # Do not add trailing '/'s, they skip symlinks.
>>>>> >>> /llvm
>>>>> >>> /DerivedData
>>>>> >>> +
>>>>> >>> +# Ignore test trace directories.
>>>>> >>> +20??-??-??-??_??_??/
>>>>> >>> +
>>>>> >>> +# Ignore crashlog support files.
>>>>> >>> +crashinfo.lock
>>>>> >>> +crashinfo.so
>>>>> >>> +
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/cmake/LLDBDependencies.cmake
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/cmake/
>>>>> LLDBDependencies.cmake?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/cmake/LLDBDependencies.cmake (original)
>>>>> >>> +++ lldb/trunk/cmake/LLDBDependencies.cmake Thu Aug 18 21:52:07
>>>>> 2016
>>>>> >>> @@ -47,6 +47,7 @@ set( LLDB_USED_LIBS
>>>>> >>> lldbPluginObjectContainerMachOArchive
>>>>> >>> lldbPluginObjectContainerBSDArchive
>>>>> >>> lldbPluginPlatformMacOSX
>>>>> >>> + lldbPluginStructuredDataDarwinLog
>>>>> >>> lldbPluginDynamicLoaderMacOSXDYLD
>>>>> >>> lldbPluginUnwindAssemblyInstEmulation
>>>>> >>> lldbPluginUnwindAssemblyX86
>>>>> >>>
>>>>> >>> Added: lldb/trunk/docs/structured_data/DarwinLog.md
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/docs/
>>>>> structured_data/DarwinLog.md?rev=279198&view=auto
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/docs/structured_data/DarwinLog.md (added)
>>>>> >>> +++ lldb/trunk/docs/structured_data/DarwinLog.md Thu Aug 18
>>>>> 21:52:07 2016
>>>>> >>> @@ -0,0 +1,160 @@
>>>>> >>> +# Change Notes
>>>>> >>> +
>>>>> >>> +## Summary
>>>>> >>> +
>>>>> >>> +This document describes the DarwinLog logging feature.
>>>>> >>> +
>>>>> >>> +## StructuredDataDarwinLog feature
>>>>> >>> +
>>>>> >>> +The DarwinLog feature supports logging os_log*() and NSLog()
>>>>> messages
>>>>> >>> +to the command-line lldb console, as well as making those messages
>>>>> >>> +available to LLDB clients via the event system. Starting with
>>>>> fall
>>>>> >>> +2016 OSes, Apple platforms introduce a new fire-hose, stream-style
>>>>> >>> +logging system where the bulk of the log processing happens on
>>>>> the log
>>>>> >>> +consumer side. This reduces logging impact on the system when
>>>>> there
>>>>> >>> +are no consumers, making it cheaper to include logging at all
>>>>> times.
>>>>> >>> +However, it also increases the work needed on the consumer end
>>>>> when
>>>>> >>> +log messages are desired.
>>>>> >>> +
>>>>> >>> +The debugserver binary has been modified to support collection of
>>>>> >>> +os_log*()/NSLog() messages, selection of which messages appear in
>>>>> the
>>>>> >>> +stream, and fine-grained filtering of what gets passed on to the
>>>>> LLDB
>>>>> >>> +client. DarwinLog also tracks the activity chain (i.e.
>>>>> os_activity()
>>>>> >>> +hierarchy) in effect at the time the log messages were issued.
>>>>> The
>>>>> >>> +user is able to configure a number of aspects related to the
>>>>> >>> +formatting of the log message header fields.
>>>>> >>> +
>>>>> >>> +The DarwinLog support is written in a way which should support the
>>>>> >>> +lldb client side on non-Apple clients talking to an Apple device
>>>>> or
>>>>> >>> +macOS system; hence, the plugin support is built into all LLDB
>>>>> >>> +clients, not just those built on an Apple platform.
>>>>> >>> +
>>>>> >>> +StructuredDataDarwinLog implements the 'DarwinLog' feature type,
>>>>> and
>>>>> >>> +the plugin name for it shows up as 'darwin-log'.
>>>>> >>> +
>>>>> >>> +The user interface to the darwin-log support is via the following:
>>>>> >>> +
>>>>> >>> +* 'plugin structured-data darwin-log enable' command
>>>>> >>> +
>>>>> >>> + This is the main entry point for enabling the command. It can
>>>>> be
>>>>> >>> + set before launching a process or while the process is running.
>>>>> >>> + If the user wants to squelch seeing info-level or debug-level
>>>>> >>> + messages, which is the default behavior, then the enable command
>>>>> >>> + must be made prior to launching the process; otherwise, the
>>>>> >>> + info-level and debug-level messages will always show up. Also,
>>>>> >>> + there is a similar "echo os_log()/NSLog() messages to target
>>>>> >>> + process stderr" mechanism which is properly disabled when
>>>>> enabling
>>>>> >>> + the DarwinLog support prior to launch. This cannot be squelched
>>>>> >>> + if enabling DarwinLog after launch.
>>>>> >>> +
>>>>> >>> + See the help for this command. There are a number of options
>>>>> >>> + to shrink or expand the number of messages that are processed
>>>>> >>> + on the remote side and sent over to the client, and other
>>>>> >>> + options to control the formatting of messages displayed.
>>>>> >>> +
>>>>> >>> + This command is sticky. Once enabled, it will stay enabled for
>>>>> >>> + future process launches.
>>>>> >>> +
>>>>> >>> +* 'plugin structured-data darwin-log disable' command
>>>>> >>> +
>>>>> >>> + Executing this command disables os_log() capture in the
>>>>> currently
>>>>> >>> + running process and signals LLDB to stop attempting to launch
>>>>> >>> + new processes with DarwinLog support enabled.
>>>>> >>> +
>>>>> >>> +* 'settings set \
>>>>> >>> + plugin.structured-data.darwin-log.enable-on-startup'
>>>>> >>> +
>>>>> >>> + and
>>>>> >>> +
>>>>> >>> + 'settings set \
>>>>> >>> + plugin.structured-data.darwin-log.auto-enable-options --
>>>>> {options}'
>>>>> >>> +
>>>>> >>> + When enable-on-startup is set to true, then LLDB will
>>>>> automatically
>>>>> >>> + enable DarwinLog on startup of relevant processes. It will use
>>>>> the
>>>>> >>> + content provided in the auto-enable-options settings as the
>>>>> >>> + options to pass to the enable command.
>>>>> >>> +
>>>>> >>> + Note the '--' required after auto-enable-command. That is
>>>>> necessary
>>>>> >>> + for raw commands like settings set. The '--' will not become
>>>>> part
>>>>> >>> + of the options for the enable command.
>>>>> >>> +
>>>>> >>> +### Message flow and related performance considerations
>>>>> >>> +
>>>>> >>> +os_log()-style collection is not free. The more data that must be
>>>>> >>> +processed, the slower it will be. There are several knobs
>>>>> available
>>>>> >>> +to the developer to limit how much data goes through the pipe,
>>>>> and how
>>>>> >>> +much data ultimately goes over the wire to the LLDB client. The
>>>>> >>> +user's goal should be to ensure he or she only collects as many
>>>>> log
>>>>> >>> +messages are needed, but no more.
>>>>> >>> +
>>>>> >>> +The flow of data looks like the following:
>>>>> >>> +
>>>>> >>> +1. Data comes into debugserver from the low-level OS facility that
>>>>> >>> + receives log messages. The data that comes through this pipe
>>>>> can
>>>>> >>> + be limited or expanded by the '--debug', '--info' and
>>>>> >>> + '--all-processes' options of the 'plugin structured-data
>>>>> darwin-log
>>>>> >>> + enable' command. options. Exclude as many categories as
>>>>> possible
>>>>> >>> + here (also the default). The knobs here are very coarse - for
>>>>> >>> + example, whether to include os_log_info()-level or
>>>>> >>> + os_log_debug()-level info, or to include callstacks in the log
>>>>> >>> + message event data.
>>>>> >>> +
>>>>> >>> +2. The debugserver process filters the messages that arrive
>>>>> through a
>>>>> >>> + message log filter that may be fully customized by the user.
>>>>> It
>>>>> >>> + works similar to a rules-based packet filter: a set of rules
>>>>> are
>>>>> >>> + matched against the log message, each rule tried in sequential
>>>>> >>> + order. The first rule that matches then either accepts or
>>>>> rejects
>>>>> >>> + the message. If the log message does not match any rule, then
>>>>> the
>>>>> >>> + message gets the no-match (i.e. fall-through) action. The
>>>>> no-match
>>>>> >>> + action defaults to accepting but may be set to reject.
>>>>> >>> +
>>>>> >>> + Filters can be added via the enable command's '--filter
>>>>> >>> + {filter-spec}' option. Filters are added in order, and
>>>>> multiple
>>>>> >>> + --filter entries can be provided to the enable command.
>>>>> >>> +
>>>>> >>> + Filters take the following form:
>>>>> >>> +
>>>>> >>> + {action} {attribute} {op}
>>>>> >>> +
>>>>> >>> + {action} :=
>>>>> >>> + accept |
>>>>> >>> + reject
>>>>> >>> +
>>>>> >>> + {attribute} :=
>>>>> >>> + category | // The log message category
>>>>> >>> + subsystem | // The log message subsystem}
>>>>> >>> + activity | // The child-most activity in force
>>>>> >>> + // at the time the message was logged.
>>>>> >>> + activity-chain | // The complete activity chain,
>>>>> specified
>>>>> >>> + // as {parent-activity}:{child-
>>>>> activity}:
>>>>> >>> + // {grandchild-activity}
>>>>> >>> + message | // The fully expanded message contents.
>>>>> >>> + // Note this one is expensive because it
>>>>> >>> + // requires expanding the message.
>>>>> Avoid
>>>>> >>> + // this if possible, or add it further
>>>>> >>> + // down the filter chain.
>>>>> >>> +
>>>>> >>> + {op} :=
>>>>> >>> + match {exact-match-text} |
>>>>> >>> + regex {search-regex} // uses C++ std::regex
>>>>> >>> + // ECMAScript variant.
>>>>> >>> +
>>>>> >>> +e.g.
>>>>> >>> + --filter "accept subsystem match com.example.mycompany.
>>>>> myproduct"
>>>>> >>> + --filter "accept subsystem regex com.example.+"
>>>>> >>> + --filter "reject category regex spammy-system-[[:digit:]]+"
>>>>> >>> +
>>>>> >>> +3. Messages that are accepted by the log message filter get sent
>>>>> to
>>>>> >>> + the lldb client, where they are mapped to the
>>>>> >>> + StructuredDataDarwinLog plugin. By default, command-line lldb
>>>>> will
>>>>> >>> + issue a Process-level event containing the log message
>>>>> content, and
>>>>> >>> + will request the plugin to print the message if the plugin is
>>>>> >>> + enabled to do so.
>>>>> >>> +
>>>>> >>> +### Log message display
>>>>> >>> +
>>>>> >>> +Several settings control aspects of displaying log messages in
>>>>> >>> +command-line LLDB. See the enable command's help for a
>>>>> description
>>>>> >>> +of these.
>>>>> >>> +
>>>>> >>> +
>>>>> >>>
>>>>> >>> Added: lldb/trunk/docs/structured_data/StructuredDataPlugins.md
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/docs/
>>>>> structured_data/StructuredDataPlugins.md?rev=279198&view=auto
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/docs/structured_data/StructuredDataPlugins.md
>>>>> (added)
>>>>> >>> +++ lldb/trunk/docs/structured_data/StructuredDataPlugins.md Thu
>>>>> Aug 18
>>>>> >>> 21:52:07 2016
>>>>> >>> @@ -0,0 +1,136 @@
>>>>> >>> +# Change Notes
>>>>> >>> +
>>>>> >>> +## Overview
>>>>> >>> +
>>>>> >>> +This document describes an infrastructural feature called
>>>>> Structured
>>>>> >>> +Data plugins. See the DarwinLog.md doc for a description of one
>>>>> >>> +such plugin that makes use of this feature.
>>>>> >>> +
>>>>> >>> +## StructuredDataPlugin
>>>>> >>> +
>>>>> >>> +StructuredDataPlugin instances have the following characteristics:
>>>>> >>> +
>>>>> >>> +* Each plugin instance is bound to a single Process instance.
>>>>> >>> +
>>>>> >>> +* Each StructuredData feature has a type name that identifies the
>>>>> >>> + feature. For instance, the type name for the DarwinLog feature
>>>>> is
>>>>> >>> + "DarwinLog". This feature type name is used in various places.
>>>>> >>> +
>>>>> >>> +* The process monitor reports the list of supported StructuredData
>>>>> >>> + features advertised by the process monitor. Process goes
>>>>> through the
>>>>> >>> + list of supported feature type names, and asks each known
>>>>> >>> + StructuredDataPlugin if it can handle the feature. The first
>>>>> plugin
>>>>> >>> + that supports the feature is mapped to that Process instance for
>>>>> >>> + that feature. Plugins are only mapped when the process monitor
>>>>> >>> + advertises that a feature is supported.
>>>>> >>> +
>>>>> >>> +* The feature may send asynchronous messages in StructuredData
>>>>> format
>>>>> >>> + to the Process instance. Process instances route the
>>>>> asynchronous
>>>>> >>> + structured data messages to the plugin mapped to that feature
>>>>> type,
>>>>> >>> + if one exists.
>>>>> >>> +
>>>>> >>> +* Plugins can request that the Process instance forward on
>>>>> >>> + configuration data to the process monitor if the plugin
>>>>> needs/wants
>>>>> >>> + to configure the feature. Plugins may call the new Process
>>>>> method
>>>>> >>> +
>>>>> >>> + ```C++
>>>>> >>> + virtual Error
>>>>> >>> + ConfigureStructuredData(const ConstString &type_name,
>>>>> >>> + const StructuredData::ObjectSP
>>>>> &config_sp)
>>>>> >>> + ```
>>>>> >>> +
>>>>> >>> + where type_name is the feature name and config_sp points to the
>>>>> >>> + configuration structured data, which may be nullptr.
>>>>> >>> +
>>>>> >>> +* Plugins for features present in a process are notified when
>>>>> modules
>>>>> >>> + are loaded into the Process instance via this
>>>>> StructuredDataPlugin
>>>>> >>> + method:
>>>>> >>> +
>>>>> >>> + ```C++
>>>>> >>> + virtual void
>>>>> >>> + ModulesDidLoad(Process &process, ModuleList &module_list);
>>>>> >>> + ```
>>>>> >>> +
>>>>> >>> +* Plugins may optionally broadcast their received structured data
>>>>> as
>>>>> >>> + an LLDB process-level event via the following new Process call:
>>>>> >>> +
>>>>> >>> + ```C++
>>>>> >>> + void
>>>>> >>> + BroadcastStructuredData(const StructuredData::ObjectSP
>>>>> &object_sp,
>>>>> >>> + const lldb::StructuredDataPluginSP
>>>>> >>> &plugin_sp);
>>>>> >>> + ```
>>>>> >>> +
>>>>> >>> + IDE clients might use this feature to receive information about
>>>>> the
>>>>> >>> + process as it is running to monitor memory usage, CPU usage, and
>>>>> >>> + logging.
>>>>> >>> +
>>>>> >>> + Internally, the event type created is an instance of
>>>>> >>> + EventDataStructuredData.
>>>>> >>> +
>>>>> >>> +* In the case where a plugin chooses to broadcast a received
>>>>> >>> + StructuredData event, the command-line LLDB Debugger instance
>>>>> >>> + listens for them. The Debugger instance then gives the plugin an
>>>>> >>> + opportunity to display info to either the debugger output or
>>>>> error
>>>>> >>> + stream at a time that is safe to write to them. The plugin can
>>>>> >>> + choose to display something appropriate regarding the structured
>>>>> >>> + data that time.
>>>>> >>> +
>>>>> >>> +* Plugins can provide a ProcessLaunchInfo filter method when the
>>>>> >>> + plugin is registered. If such a filter method is provided, then
>>>>> >>> + when a process is about to be launched for debugging, the filter
>>>>> >>> + callback is invoked, given both the launch info and the
>>>>> target. The
>>>>> >>> + plugin may then alter the launch info if needed to better
>>>>> support
>>>>> >>> + the feature of the plugin.
>>>>> >>> +
>>>>> >>> +* The plugin is entirely independent of the type of
>>>>> Process-derived
>>>>> >>> + class that it is working with. The only requirements from the
>>>>> >>> + process monitor are the following feature-agnostic elements:
>>>>> >>> +
>>>>> >>> + * Provide a way to discover features supported by the process
>>>>> >>> + monitor for the current process.
>>>>> >>> +
>>>>> >>> + * Specify the list of supported feature type names to Process.
>>>>> >>> + The process monitor does this by calling the following new
>>>>> >>> + method on Process:
>>>>> >>> +
>>>>> >>> + ```C++
>>>>> >>> + void
>>>>> >>> + MapSupportedStructuredDataPlugins(const StructuredData::Array
>>>>> >>> + &supported_type_names)
>>>>> >>> + ```
>>>>> >>> +
>>>>> >>> + The supported_type_names specifies an array of string entries,
>>>>> >>> + where each entry specifies the name of a StructuredData
>>>>> feature.
>>>>> >>> +
>>>>> >>> + * Provide a way to forward on configuration data for a feature
>>>>> type
>>>>> >>> + to the process monitor. This is the manner by which LLDB can
>>>>> >>> + configure a feature, perhaps based on settings or commands
>>>>> from
>>>>> >>> + the user. The following virtual method on Process (described
>>>>> >>> + earlier) does the job:
>>>>> >>> +
>>>>> >>> + ```C++
>>>>> >>> + virtual Error
>>>>> >>> + ConfigureStructuredData(const ConstString &type_name,
>>>>> >>> + const StructuredData::ObjectSP
>>>>> &config_sp)
>>>>> >>> + ```
>>>>> >>> +
>>>>> >>> + * Listen for asynchronous structured data packets from the
>>>>> process
>>>>> >>> + monitor, and forward them on to Process via this new Process
>>>>> >>> + member method:
>>>>> >>> +
>>>>> >>> + ```C++
>>>>> >>> + bool
>>>>> >>> + RouteAsyncStructuredData(const StructuredData::ObjectSP
>>>>> object_sp)
>>>>> >>> + ```
>>>>> >>> +
>>>>> >>> +* StructuredData producers must send their top-level data as a
>>>>> >>> + Dictionary type, with a key called 'type' specifying a string
>>>>> value,
>>>>> >>> + where the value is equal to the StructuredData feature/type name
>>>>> >>> + previously advertised. Everything else about the content of the
>>>>> >>> + dictionary is entirely up to the feature.
>>>>> >>> +
>>>>> >>> +* StructuredDataPlugin commands show up under 'plugin
>>>>> structured-data
>>>>> >>> + plugin-name'.
>>>>> >>> +
>>>>> >>> +* StructuredDataPlugin settings show up under
>>>>> >>> + 'plugin.structured-data.{plugin-name}.
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/include/lldb/API/LLDB.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/API/LLDB.h?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/API/LLDB.h (original)
>>>>> >>> +++ lldb/trunk/include/lldb/API/LLDB.h Thu Aug 18 21:52:07 2016
>>>>> >>> @@ -55,6 +55,7 @@
>>>>> >>> #include "lldb/API/SBSourceManager.h"
>>>>> >>> #include "lldb/API/SBStream.h"
>>>>> >>> #include "lldb/API/SBStringList.h"
>>>>> >>> +#include "lldb/API/SBStructuredData.h"
>>>>> >>> #include "lldb/API/SBSymbol.h"
>>>>> >>> #include "lldb/API/SBSymbolContext.h"
>>>>> >>> #include "lldb/API/SBSymbolContextList.h"
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/include/lldb/API/SBDefines.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/API/SBDefines.h?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/API/SBDefines.h (original)
>>>>> >>> +++ lldb/trunk/include/lldb/API/SBDefines.h Thu Aug 18 21:52:07
>>>>> 2016
>>>>> >>> @@ -71,6 +71,7 @@ class LLDB_API SBSection;
>>>>> >>> class LLDB_API SBSourceManager;
>>>>> >>> class LLDB_API SBStream;
>>>>> >>> class LLDB_API SBStringList;
>>>>> >>> +class LLDB_API SBStructuredData;
>>>>> >>> class LLDB_API SBSymbol;
>>>>> >>> class LLDB_API SBSymbolContext;
>>>>> >>> class LLDB_API SBSymbolContextList;
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/include/lldb/API/SBError.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/API/SBError.h?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/API/SBError.h (original)
>>>>> >>> +++ lldb/trunk/include/lldb/API/SBError.h Thu Aug 18 21:52:07 2016
>>>>> >>> @@ -73,6 +73,7 @@ protected:
>>>>> >>> friend class SBHostOS;
>>>>> >>> friend class SBPlatform;
>>>>> >>> friend class SBProcess;
>>>>> >>> + friend class SBStructuredData;
>>>>> >>> friend class SBThread;
>>>>> >>> friend class SBTarget;
>>>>> >>> friend class SBValue;
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/include/lldb/API/SBProcess.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/API/SBProcess.h?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/API/SBProcess.h (original)
>>>>> >>> +++ lldb/trunk/include/lldb/API/SBProcess.h Thu Aug 18 21:52:07
>>>>> 2016
>>>>> >>> @@ -32,7 +32,8 @@ public:
>>>>> >>> eBroadcastBitInterrupt = (1 << 1),
>>>>> >>> eBroadcastBitSTDOUT = (1 << 2),
>>>>> >>> eBroadcastBitSTDERR = (1 << 3),
>>>>> >>> - eBroadcastBitProfileData = (1 << 4)
>>>>> >>> + eBroadcastBitProfileData = (1 << 4),
>>>>> >>> + eBroadcastBitStructuredData = (1 << 5)
>>>>> >>> };
>>>>> >>>
>>>>> >>> SBProcess ();
>>>>> >>> @@ -278,10 +279,16 @@ public:
>>>>> >>>
>>>>> >>> static bool
>>>>> >>> GetInterruptedFromEvent (const lldb::SBEvent &event);
>>>>> >>> -
>>>>> >>> +
>>>>> >>> + static lldb::SBStructuredData
>>>>> >>> + GetStructuredDataFromEvent (const lldb::SBEvent &event);
>>>>> >>> +
>>>>> >>> static bool
>>>>> >>> EventIsProcessEvent (const lldb::SBEvent &event);
>>>>> >>>
>>>>> >>> + static bool
>>>>> >>> + EventIsStructuredDataEvent (const lldb::SBEvent &event);
>>>>> >>> +
>>>>> >>> lldb::SBBroadcaster
>>>>> >>> GetBroadcaster () const;
>>>>> >>>
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/include/lldb/API/SBStream.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/API/SBStream.h?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/API/SBStream.h (original)
>>>>> >>> +++ lldb/trunk/include/lldb/API/SBStream.h Thu Aug 18 21:52:07
>>>>> 2016
>>>>> >>> @@ -83,6 +83,7 @@ protected:
>>>>> >>> friend class SBProcess;
>>>>> >>> friend class SBSection;
>>>>> >>> friend class SBSourceManager;
>>>>> >>> + friend class SBStructuredData;
>>>>> >>> friend class SBSymbol;
>>>>> >>> friend class SBSymbolContext;
>>>>> >>> friend class SBSymbolContextList;
>>>>> >>>
>>>>> >>> Added: lldb/trunk/include/lldb/API/SBStructuredData.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/API/SBStructuredData.h?rev=279198&view=auto
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/API/SBStructuredData.h (added)
>>>>> >>> +++ lldb/trunk/include/lldb/API/SBStructuredData.h Thu Aug 18
>>>>> 21:52:07
>>>>> >>> 2016
>>>>> >>> @@ -0,0 +1,52 @@
>>>>> >>> +//===-- SBStructuredData.h --------------------------------------*-
>>>>> C++
>>>>> >>> -*-===//
>>>>> >>> +//
>>>>> >>> +// The LLVM Compiler Infrastructure
>>>>> >>> +//
>>>>> >>> +// This file is distributed under the University of Illinois Open
>>>>> Source
>>>>> >>> +// License. See LICENSE.TXT for details.
>>>>> >>> +//
>>>>> >>>
>>>>> >>> +//===------------------------------------------------------
>>>>> ----------------===//
>>>>> >>> +
>>>>> >>> +#ifndef SBStructuredData_h
>>>>> >>> +#define SBStructuredData_h
>>>>> >>> +
>>>>> >>> +#include "lldb/API/SBDefines.h"
>>>>> >>> +#include "lldb/API/SBModule.h"
>>>>> >>> +
>>>>> >>> +namespace lldb {
>>>>> >>> +
>>>>> >>> + class SBStructuredData
>>>>> >>> + {
>>>>> >>> + public:
>>>>> >>> +
>>>>> >>> + SBStructuredData();
>>>>> >>> +
>>>>> >>> + SBStructuredData(const lldb::SBStructuredData &rhs);
>>>>> >>> +
>>>>> >>> + SBStructuredData(const lldb::EventSP &event_sp);
>>>>> >>> +
>>>>> >>> + ~SBStructuredData();
>>>>> >>> +
>>>>> >>> + lldb::SBStructuredData &
>>>>> >>> + operator =(const lldb::SBStructuredData &rhs);
>>>>> >>> +
>>>>> >>> + bool
>>>>> >>> + IsValid() const;
>>>>> >>> +
>>>>> >>> + void
>>>>> >>> + Clear();
>>>>> >>> +
>>>>> >>> + lldb::SBError
>>>>> >>> + GetAsJSON(lldb::SBStream &stream) const;
>>>>> >>> +
>>>>> >>> + lldb::SBError
>>>>> >>> + GetDescription(lldb::SBStream &stream) const;
>>>>> >>> +
>>>>> >>> + private:
>>>>> >>> +
>>>>> >>> + class Impl;
>>>>> >>> + std::unique_ptr<Impl> m_impl_up;
>>>>> >>> + };
>>>>> >>> +}
>>>>> >>> +
>>>>> >>> +#endif /* SBStructuredData_h */
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/include/lldb/Core/Broadcaster.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/Core/Broadcaster.h?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/Core/Broadcaster.h (original)
>>>>> >>> +++ lldb/trunk/include/lldb/Core/Broadcaster.h Thu Aug 18
>>>>> 21:52:07 2016
>>>>> >>> @@ -272,11 +272,10 @@ private:
>>>>> >>> /// //---------------------------
>>>>> -------------------------------
>>>>> >>> /// enum
>>>>> >>> /// {
>>>>> >>> -/// eBroadcastBitStateChanged = (1 << 0),
>>>>> >>> -/// eBroadcastBitInterrupt = (1 << 1),
>>>>> >>> -/// eBroadcastBitSTDOUT = (1 << 2),
>>>>> >>> -/// eBroadcastBitSTDERR = (1 << 3),
>>>>> >>> -/// eBroadcastBitProfileData = (1 << 4)
>>>>> >>> +/// eBroadcastBitOne = (1 << 0),
>>>>> >>> +/// eBroadcastBitTwo = (1 << 1),
>>>>> >>> +/// eBroadcastBitThree = (1 << 2),
>>>>> >>> +/// ...
>>>>> >>> /// };
>>>>> >>> /// \endcode
>>>>> >>> //----------------------------------------------------------
>>>>> ------------
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/include/lldb/Core/Event.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/Core/Event.h?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/Core/Event.h (original)
>>>>> >>> +++ lldb/trunk/include/lldb/Core/Event.h Thu Aug 18 21:52:07 2016
>>>>> >>> @@ -20,6 +20,7 @@
>>>>> >>> // Project includes
>>>>> >>> #include "lldb/lldb-private.h"
>>>>> >>> #include "lldb/Core/ConstString.h"
>>>>> >>> +#include "lldb/Core/StructuredData.h"
>>>>> >>> #include "lldb/Host/Predicate.h"
>>>>> >>> #include "lldb/Core/Broadcaster.h"
>>>>> >>>
>>>>> >>> @@ -159,6 +160,80 @@ private:
>>>>> >>> };
>>>>> >>>
>>>>> >>> //----------------------------------------------------------
>>>>> ------------
>>>>> >>> +/// This class handles one or more StructuredData::Dictionary
>>>>> entries
>>>>> >>> +/// that are raised for structured data events.
>>>>> >>> +//---------------------------------------------------------
>>>>> -------------
>>>>> >>> +
>>>>> >>> +class EventDataStructuredData : public EventData
>>>>> >>> +{
>>>>> >>> +public:
>>>>> >>> +
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + // Constructors
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + EventDataStructuredData();
>>>>> >>> +
>>>>> >>> + EventDataStructuredData(const lldb::ProcessSP &process_sp,
>>>>> >>> + const StructuredData::ObjectSP
>>>>> &object_sp,
>>>>> >>> + const lldb::StructuredDataPluginSP
>>>>> >>> &plugin_sp);
>>>>> >>> +
>>>>> >>> + ~EventDataStructuredData() override;
>>>>> >>> +
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + // Member functions
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + const ConstString &
>>>>> >>> + GetFlavor() const override;
>>>>> >>> +
>>>>> >>> + void
>>>>> >>> + Dump(Stream *s) const override;
>>>>> >>> +
>>>>> >>> + const lldb::ProcessSP&
>>>>> >>> + GetProcess() const;
>>>>> >>> +
>>>>> >>> + const StructuredData::ObjectSP&
>>>>> >>> + GetObject() const;
>>>>> >>> +
>>>>> >>> + const lldb::StructuredDataPluginSP&
>>>>> >>> + GetStructuredDataPlugin() const;
>>>>> >>> +
>>>>> >>> + void
>>>>> >>> + SetProcess(const lldb::ProcessSP &process_sp);
>>>>> >>> +
>>>>> >>> + void
>>>>> >>> + SetObject(const StructuredData::ObjectSP &object_sp);
>>>>> >>> +
>>>>> >>> + void
>>>>> >>> + SetStructuredDataPlugin(const lldb::StructuredDataPluginSP
>>>>> >>> &plugin_sp);
>>>>> >>> +
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + // Static functions
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + static const EventDataStructuredData*
>>>>> >>> + GetEventDataFromEvent(const Event *event_ptr);
>>>>> >>> +
>>>>> >>> + static lldb::ProcessSP
>>>>> >>> + GetProcessFromEvent(const Event *event_ptr);
>>>>> >>> +
>>>>> >>> + static StructuredData::ObjectSP
>>>>> >>> + GetObjectFromEvent(const Event *event_ptr);
>>>>> >>> +
>>>>> >>> + static lldb::StructuredDataPluginSP
>>>>> >>> + GetPluginFromEvent(const Event *event_ptr);
>>>>> >>> +
>>>>> >>> + static const ConstString &
>>>>> >>> + GetFlavorString ();
>>>>> >>> +
>>>>> >>> +private:
>>>>> >>> +
>>>>> >>> + lldb::ProcessSP m_process_sp;
>>>>> >>> + StructuredData::ObjectSP m_object_sp;
>>>>> >>> + lldb::StructuredDataPluginSP m_plugin_sp;
>>>>> >>> +
>>>>> >>> + DISALLOW_COPY_AND_ASSIGN(EventDataStructuredData);
>>>>> >>> +};
>>>>> >>> +
>>>>> >>> +//---------------------------------------------------------
>>>>> -------------
>>>>> >>> // lldb::Event
>>>>> >>> //----------------------------------------------------------
>>>>> ------------
>>>>> >>> class Event
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/include/lldb/Core/PluginManager.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/Core/PluginManager.h?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/Core/PluginManager.h (original)
>>>>> >>> +++ lldb/trunk/include/lldb/Core/PluginManager.h Thu Aug 18
>>>>> 21:52:07 2016
>>>>> >>> @@ -328,6 +328,65 @@ public:
>>>>> >>> CommandInterpreter
>>>>> &interpreter);
>>>>> >>>
>>>>> >>> //----------------------------------------------------------
>>>>> --------
>>>>> >>> + // StructuredDataPlugin
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> +
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + /// Register a StructuredDataPlugin class along with optional
>>>>> >>> + /// callbacks for debugger initialization and Process launch
>>>>> info
>>>>> >>> + /// filtering and manipulation.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] name
>>>>> >>> + /// The name of the plugin.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] description
>>>>> >>> + /// A description string for the plugin.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] create_callback
>>>>> >>> + /// The callback that will be invoked to create an
>>>>> instance of
>>>>> >>> + /// the callback. This may not be nullptr.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] debugger_init_callback
>>>>> >>> + /// An optional callback that will be made when a Debugger
>>>>> >>> + /// instance is initialized.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] filter_callback
>>>>> >>> + /// An optional callback that will be invoked before LLDB
>>>>> >>> + /// launches a process for debugging. The callback must
>>>>> >>> + /// do the following:
>>>>> >>> + /// 1. Only do something if the plugin's behavior is
>>>>> enabled.
>>>>> >>> + /// 2. Only make changes for processes that are relevant
>>>>> to the
>>>>> >>> + /// plugin. The callback gets a pointer to the Target,
>>>>> which
>>>>> >>> + /// can be inspected as needed. The ProcessLaunchInfo
>>>>> is
>>>>> >>> + /// provided in read-write mode, and may be modified by
>>>>> the
>>>>> >>> + /// plugin if, for instance, additional environment
>>>>> variables
>>>>> >>> + /// are needed to support the feature when enabled.
>>>>> >>> + ///
>>>>> >>> + /// @return
>>>>> >>> + /// Returns true upon success; otherwise, false.
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + static bool
>>>>> >>> + RegisterPlugin(const ConstString &name,
>>>>> >>> + const char *description,
>>>>> >>> + StructuredDataPluginCreateInstance
>>>>> create_callback,
>>>>> >>> + DebuggerInitializeCallback
>>>>> debugger_init_callback =
>>>>> >>> nullptr,
>>>>> >>> + StructuredDataFilterLaunchInfo filter_callback
>>>>> >>> + = nullptr);
>>>>> >>> +
>>>>> >>> + static bool
>>>>> >>> + UnregisterPlugin(StructuredDataPluginCreateInstance
>>>>> >>> create_callback);
>>>>> >>> +
>>>>> >>> + static StructuredDataPluginCreateInstance
>>>>> >>> + GetStructuredDataPluginCreateCallbackAtIndex(uint32_t idx);
>>>>> >>> +
>>>>> >>> + static StructuredDataPluginCreateInstance
>>>>> >>> + GetStructuredDataPluginCreateCallbackForPluginName(const
>>>>> ConstString
>>>>> >>> &name);
>>>>> >>> +
>>>>> >>> + static StructuredDataFilterLaunchInfo
>>>>> >>> + GetStructuredDataFilterCallbackAtIndex(uint32_t idx,
>>>>> >>> + bool
>>>>> &iteration_complete);
>>>>> >>> +
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> // SymbolFile
>>>>> >>> //----------------------------------------------------------
>>>>> --------
>>>>> >>> static bool
>>>>> >>> @@ -531,6 +590,16 @@ public:
>>>>> >>> static bool CreateSettingForOperatingSystemPlugin(Debugger
>>>>> >>> &debugger,
>>>>> >>> const
>>>>> >>> lldb::OptionValuePropertiesSP &properties_sp,
>>>>> >>> const
>>>>> ConstString
>>>>> >>> &description, bool is_global_property);
>>>>> >>> +
>>>>> >>> + static lldb::OptionValuePropertiesSP
>>>>> >>> + GetSettingForStructuredDataPlugin(Debugger &debugger,
>>>>> >>> + const ConstString
>>>>> &setting_name);
>>>>> >>> +
>>>>> >>> + static bool
>>>>> >>> + CreateSettingForStructuredDataPlugin(Debugger &debugger,
>>>>> >>> + const
>>>>> >>> lldb::OptionValuePropertiesSP &properties_sp,
>>>>> >>> + const ConstString
>>>>> &description,
>>>>> >>> + bool is_global_property);
>>>>> >>> };
>>>>> >>>
>>>>> >>> } // namespace lldb_private
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/include/lldb/Interpreter/Args.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/Interpreter/Args.h?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/Interpreter/Args.h (original)
>>>>> >>> +++ lldb/trunk/include/lldb/Interpreter/Args.h Thu Aug 18
>>>>> 21:52:07 2016
>>>>> >>> @@ -451,6 +451,17 @@ public:
>>>>> >>> LongestCommonPrefix (std::string &common_prefix);
>>>>> >>>
>>>>> >>> //----------------------------------------------------------
>>>>> --------
>>>>> >>> + /// Add or replace an environment variable with the given
>>>>> value.
>>>>> >>> + ///
>>>>> >>> + /// This command adds the environment variable if it is not
>>>>> already
>>>>> >>> + /// present using the given value. If the environment
>>>>> variable is
>>>>> >>> + /// already in the list, it replaces the first such occurrence
>>>>> >>> + /// with the new value.
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + void
>>>>> >>> + AddOrReplaceEnvironmentVariable(const char *env_var_name,
>>>>> >>> + const char *new_value);
>>>>> >>> +
>>>>> >>> /// Return whether a given environment variable exists.
>>>>> >>> ///
>>>>> >>> /// This command treats Args like a list of environment
>>>>> variables,
>>>>> >>> @@ -460,12 +471,18 @@ public:
>>>>> >>> /// @param[in] env_var_name
>>>>> >>> /// Specifies the name of the environment variable to
>>>>> check.
>>>>> >>> ///
>>>>> >>> + /// @param[out] argument_index
>>>>> >>> + /// If non-null, then when the environment variable is
>>>>> found,
>>>>> >>> + /// the index of the argument position will be returned in
>>>>> >>> + /// the size_t pointed to by this argument.
>>>>> >>> + ///
>>>>> >>> /// @return
>>>>> >>> /// true if the specified env var name exists in the list
>>>>> in
>>>>> >>> /// either of the above-mentioned formats; otherwise,
>>>>> false.
>>>>> >>> //----------------------------------------------------------
>>>>> --------
>>>>> >>> bool
>>>>> >>> - ContainsEnvironmentVariable(const char *env_var_name) const;
>>>>> >>> + ContainsEnvironmentVariable(const char *env_var_name,
>>>>> >>> + size_t *argument_index = nullptr)
>>>>> const;
>>>>> >>>
>>>>> >>> protected:
>>>>> >>> //----------------------------------------------------------
>>>>> --------
>>>>> >>>
>>>>> >>> Modified: lldb/trunk/include/lldb/Target/Process.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/Target/Process.h?rev=279198&r1=279197&r2=279198&view=diff
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/Target/Process.h (original)
>>>>> >>> +++ lldb/trunk/include/lldb/Target/Process.h Thu Aug 18 21:52:07
>>>>> 2016
>>>>> >>> @@ -760,7 +760,8 @@ public:
>>>>> >>> eBroadcastBitInterrupt = (1 << 1),
>>>>> >>> eBroadcastBitSTDOUT = (1 << 2),
>>>>> >>> eBroadcastBitSTDERR = (1 << 3),
>>>>> >>> - eBroadcastBitProfileData = (1 << 4)
>>>>> >>> + eBroadcastBitProfileData = (1 << 4),
>>>>> >>> + eBroadcastBitStructuredData = (1 << 5),
>>>>> >>> };
>>>>> >>>
>>>>> >>> enum
>>>>> >>> @@ -3254,6 +3255,71 @@ public:
>>>>> >>> AdvanceAddressToNextBranchInstruction (Address
>>>>> default_stop_addr,
>>>>> >>> AddressRange
>>>>> range_bounds);
>>>>> >>>
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + /// Configure asynchronous structured data feature.
>>>>> >>> + ///
>>>>> >>> + /// Each Process type that supports using an asynchronous
>>>>> >>> StructuredData
>>>>> >>> + /// feature should implement this to enable/disable/configure
>>>>> the
>>>>> >>> feature.
>>>>> >>> + /// The default implementation here will always return an
>>>>> error
>>>>> >>> indiciating
>>>>> >>> + /// the feature is unsupported.
>>>>> >>> + ///
>>>>> >>> + /// StructuredDataPlugin implementations will call this to
>>>>> configure
>>>>> >>> + /// a feature that has been reported as being supported.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] type_name
>>>>> >>> + /// The StructuredData type name as previously discovered
>>>>> by
>>>>> >>> + /// the Process-derived instance.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] config
>>>>> >>> + /// Configuration data for the feature being enabled.
>>>>> This
>>>>> >>> config
>>>>> >>> + /// data, which may be null, will be passed along to the
>>>>> feature
>>>>> >>> + /// to process. The feature will dictate whether this is
>>>>> a
>>>>> >>> dictionary,
>>>>> >>> + /// an array or some other object. If the feature needs
>>>>> to be
>>>>> >>> + /// set up properly before it can be enabled, then the
>>>>> config
>>>>> >>> should
>>>>> >>> + /// also take an enable/disable flag.
>>>>> >>> + ///
>>>>> >>> + /// @return
>>>>> >>> + /// Returns the result of attempting to configure the
>>>>> feature.
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + virtual Error
>>>>> >>> + ConfigureStructuredData(const ConstString &type_name,
>>>>> >>> + const StructuredData::ObjectSP
>>>>> &config_sp);
>>>>> >>> +
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + /// Broadcasts the given structured data object from the given
>>>>> >>> + /// plugin.
>>>>> >>> + ///
>>>>> >>> + /// StructuredDataPlugin instances can use this to optionally
>>>>> >>> + /// broadcast any of their data if they want to make it
>>>>> available
>>>>> >>> + /// for clients. The data will come in on the structured data
>>>>> >>> + /// event bit (eBroadcastBitStructuredData).
>>>>> >>> + ///
>>>>> >>> + /// @param[in] object_sp
>>>>> >>> + /// The structured data object to broadcast.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] plugin_sp
>>>>> >>> + /// The plugin that will be reported in the event's plugin
>>>>> >>> + /// parameter.
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + void
>>>>> >>> + BroadcastStructuredData(const StructuredData::ObjectSP
>>>>> &object_sp,
>>>>> >>> + const lldb::StructuredDataPluginSP
>>>>> >>> &plugin_sp);
>>>>> >>> +
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + /// Returns the StructuredDataPlugin associated with a given
>>>>> type
>>>>> >>> + /// name, if there is one.
>>>>> >>> + ///
>>>>> >>> + /// There will only be a plugin for a given
>>>>> StructuredDataType if
>>>>> >>> the
>>>>> >>> + /// debugged process monitor claims that the feature is
>>>>> supported.
>>>>> >>> + /// This is one way to tell whether a feature is available.
>>>>> >>> + ///
>>>>> >>> + /// @return
>>>>> >>> + /// The plugin if one is available for the specified
>>>>> feature;
>>>>> >>> + /// otherwise, returns an empty shared pointer.
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + lldb::StructuredDataPluginSP
>>>>> >>> + GetStructuredDataPlugin(const ConstString &type_name) const;
>>>>> >>> +
>>>>> >>> protected:
>>>>> >>> void
>>>>> >>> SetState (lldb::EventSP &event_sp);
>>>>> >>> @@ -3392,6 +3458,57 @@ protected:
>>>>> >>> }
>>>>> >>>
>>>>> >>> //----------------------------------------------------------
>>>>> --------
>>>>> >>> + /// Loads any plugins associated with asynchronous structured
>>>>> data
>>>>> >>> + /// and maps the relevant supported type name to the plugin.
>>>>> >>> + ///
>>>>> >>> + /// Processes can receive asynchronous structured data from
>>>>> the
>>>>> >>> + /// process monitor. This method will load and map any
>>>>> structured
>>>>> >>> + /// data plugins that support the given set of supported type
>>>>> names.
>>>>> >>> + /// Later, if any of these features are enabled, the process
>>>>> monitor
>>>>> >>> + /// is free to generate asynchronous structured data. The
>>>>> data must
>>>>> >>> + /// come in as a single \b StructuredData::Dictionary. That
>>>>> >>> dictionary
>>>>> >>> + /// must have a string field named 'type', with a value that
>>>>> equals
>>>>> >>> + /// the relevant type name string (one of the values in
>>>>> >>> + /// \b supported_type_names).
>>>>> >>> + ///
>>>>> >>> + /// @param[in] supported_type_names
>>>>> >>> + /// An array of zero or more type names. Each must be
>>>>> unique.
>>>>> >>> + /// For each entry in the list, a StructuredDataPlugin
>>>>> will be
>>>>> >>> + /// searched for that supports the structured data type
>>>>> name.
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + void
>>>>> >>> + MapSupportedStructuredDataPlugins(const StructuredData::Array
>>>>> >>> + &supported_type_names);
>>>>> >>> +
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + /// Route the incoming structured data dictionary to the right
>>>>> >>> plugin.
>>>>> >>> + ///
>>>>> >>> + /// The incoming structured data must be a dictionary, and it
>>>>> must
>>>>> >>> + /// have a key named 'type' that stores a string value. The
>>>>> string
>>>>> >>> + /// value must be the name of the structured data feature that
>>>>> >>> + /// knows how to handle it.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] object_sp
>>>>> >>> + /// When non-null and pointing to a dictionary, the 'type'
>>>>> >>> + /// key's string value is used to look up the plugin that
>>>>> >>> + /// was registered for that structured data type. It then
>>>>> >>> + /// calls the following method on the StructuredDataPlugin
>>>>> >>> + /// instance:
>>>>> >>> + ///
>>>>> >>> + /// virtual void
>>>>> >>> + /// HandleArrivalOfStructuredData(Process &process,
>>>>> >>> + /// const ConstString
>>>>> &type_name,
>>>>> >>> + /// const
>>>>> StructuredData::ObjectSP
>>>>> >>> + /// &object_sp)
>>>>> >>> + ///
>>>>> >>> + /// @return
>>>>> >>> + /// True if the structured data was routed to a plugin;
>>>>> >>> otherwise,
>>>>> >>> + /// false.
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> + bool
>>>>> >>> + RouteAsyncStructuredData(const StructuredData::ObjectSP
>>>>> object_sp);
>>>>> >>> +
>>>>> >>> + //----------------------------------------------------------
>>>>> --------
>>>>> >>> // Type definitions
>>>>> >>> //----------------------------------------------------------
>>>>> --------
>>>>> >>> typedef std::map<lldb::LanguageType, lldb::LanguageRuntimeSP>
>>>>> >>> LanguageRuntimeCollection;
>>>>> >>> @@ -3408,6 +3525,9 @@ protected:
>>>>> >>> {
>>>>> >>> }
>>>>> >>> };
>>>>> >>> +
>>>>> >>> + using StructuredDataPluginMap = std::map<ConstString,
>>>>> >>> +
>>>>> >>> lldb::StructuredDataPluginSP>;
>>>>> >>>
>>>>> >>> //----------------------------------------------------------
>>>>> --------
>>>>> >>> // Member variables
>>>>> >>> @@ -3477,7 +3597,9 @@ protected:
>>>>> >>> bool m_can_interpret_function_calls; // Some targets, e.g
>>>>> the OSX
>>>>> >>> kernel, don't support the ability to modify the stack.
>>>>> >>> WarningsCollection m_warnings_issued; // A set of
>>>>> object
>>>>> >>> pointers which have already had warnings printed
>>>>> >>> std::mutex m_run_thread_plan_lock;
>>>>> >>> -
>>>>> >>> + StructuredDataPluginMap m_structured_data_plugin_map;
>>>>> >>> +
>>>>> >>> +
>>>>> >>> enum {
>>>>> >>> eCanJITDontKnow= 0,
>>>>> >>> eCanJITYes,
>>>>> >>> @@ -3562,7 +3684,7 @@ protected:
>>>>> >>>
>>>>> >>> void
>>>>> >>> BroadcastAsyncProfileData(const std::string
>>>>> &one_profile_data);
>>>>> >>> -
>>>>> >>> +
>>>>> >>> static void
>>>>> >>> STDIOReadThreadBytesReceived (void *baton, const void *src,
>>>>> size_t
>>>>> >>> src_len);
>>>>> >>>
>>>>> >>>
>>>>> >>> Added: lldb/trunk/include/lldb/Target/StructuredDataPlugin.h
>>>>> >>> URL:
>>>>> >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/
>>>>> lldb/Target/StructuredDataPlugin.h?rev=279198&view=auto
>>>>> >>>
>>>>> >>> ============================================================
>>>>> ==================
>>>>> >>> --- lldb/trunk/include/lldb/Target/StructuredDataPlugin.h (added)
>>>>> >>> +++ lldb/trunk/include/lldb/Target/StructuredDataPlugin.h Thu Aug
>>>>> 18
>>>>> >>> 21:52:07 2016
>>>>> >>> @@ -0,0 +1,204 @@
>>>>> >>> +//===-- StructuredDataPlugin.h ----------------------------------*-
>>>>> C++
>>>>> >>> -*-===//
>>>>> >>> +//
>>>>> >>> +// The LLVM Compiler Infrastructure
>>>>> >>> +//
>>>>> >>> +// This file is distributed under the University of Illinois Open
>>>>> Source
>>>>> >>> +// License. See LICENSE.TXT for details.
>>>>> >>> +//
>>>>> >>>
>>>>> >>> +//===------------------------------------------------------
>>>>> ----------------===//
>>>>> >>> +
>>>>> >>> +#ifndef StructuredDataPlugin_h
>>>>> >>> +#define StructuredDataPlugin_h
>>>>> >>> +
>>>>> >>> +#include "lldb/Core/PluginInterface.h"
>>>>> >>> +#include "lldb/Core/StructuredData.h"
>>>>> >>> +
>>>>> >>> +namespace lldb_private
>>>>> >>> +{
>>>>> >>> +
>>>>> >>> +class CommandObjectMultiword;
>>>>> >>> +
>>>>> >>> +//
>>>>> >>> ------------------------------------------------------------
>>>>> -----------------
>>>>> >>> +/// Plugin that supports process-related structured data sent
>>>>> >>> asynchronously
>>>>> >>> +/// from the debug monitor (e.g. debugserver, lldb-server, etc.)
>>>>> >>> +///
>>>>> >>> +/// This plugin type is activated by a Process-derived instance
>>>>> when
>>>>> >>> that
>>>>> >>> +/// instance detects that a given structured data feature is
>>>>> available.
>>>>> >>> +///
>>>>> >>> +/// StructuredDataPlugin instances are inherently tied to a
>>>>> process.
>>>>> >>> The
>>>>> >>> +/// main functionality they support is the ability to consume
>>>>> >>> asynchronously-
>>>>> >>> +/// delivered structured data from the process monitor, and do
>>>>> something
>>>>> >>> +/// reasonable with it. Something reasonable can include
>>>>> broadcasting a
>>>>> >>> +/// StructuredData event, which other parts of the system can
>>>>> then do
>>>>> >>> with
>>>>> >>> +/// as they please. An IDE could use this facility to retrieve
>>>>> CPU
>>>>> >>> usage,
>>>>> >>> +/// memory usage, and other run-time aspects of the process.
>>>>> That data
>>>>> >>> +/// can then be displayed meaningfully to the user through the
>>>>> IDE.
>>>>> >>> +
>>>>> >>> +/// For command-line LLDB, the Debugger instance listens for the
>>>>> >>> structured
>>>>> >>> +/// data events raised by the plugin, and give the plugin both the
>>>>> >>> output
>>>>> >>> +/// and error streams such that the plugin can display something
>>>>> about
>>>>> >>> the
>>>>> >>> +/// event, at a time when the debugger ensures it is safe to
>>>>> write to
>>>>> >>> the
>>>>> >>> +/// output or error streams.
>>>>> >>> +//
>>>>> >>> ------------------------------------------------------------
>>>>> -----------------
>>>>> >>> +
>>>>> >>> +class StructuredDataPlugin :
>>>>> >>> + public PluginInterface,
>>>>> >>> + public std::enable_shared_from_this<StructuredDataPlugin>
>>>>> >>> +{
>>>>> >>> +public:
>>>>> >>> +
>>>>> >>> + virtual ~StructuredDataPlugin();
>>>>> >>> +
>>>>> >>> + lldb::ProcessSP
>>>>> >>> + GetProcess() const;
>>>>> >>> +
>>>>> >>> + //
>>>>> >>> ------------------------------------------------------------
>>>>> -------------
>>>>> >>> + // Public instance API
>>>>> >>> + //
>>>>> >>> ------------------------------------------------------------
>>>>> -------------
>>>>> >>> +
>>>>> >>> + //
>>>>> >>> ------------------------------------------------------------
>>>>> -------------
>>>>> >>> + /// Return whether this plugin supports the given
>>>>> StructuredData
>>>>> >>> feature.
>>>>> >>> + ///
>>>>> >>> + /// When Process is informed of a list of
>>>>> process-monitor-supported
>>>>> >>> + /// structured data features, Process will go through the
>>>>> list of
>>>>> >>> plugins,
>>>>> >>> + /// one at a time, and have the first plugin that supports a
>>>>> given
>>>>> >>> feature
>>>>> >>> + /// be the plugin instantiated to handle that feature. There
>>>>> is a
>>>>> >>> 1-1
>>>>> >>> + /// correspondence between a Process instance and a
>>>>> >>> StructuredDataPlugin
>>>>> >>> + /// mapped to that process. A plugin can support handling
>>>>> multiple
>>>>> >>> + /// features, and if that happens, there is a single plugin
>>>>> instance
>>>>> >>> + /// created covering all of the mapped features for a given
>>>>> process.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] type_name
>>>>> >>> + /// The name of the feature tag supported by a process.
>>>>> >>> + /// e.g. "darwin-log".
>>>>> >>> + ///
>>>>> >>> + /// @return
>>>>> >>> + /// true if the plugin supports the feature; otherwise,
>>>>> false.
>>>>> >>> + //
>>>>> >>> ------------------------------------------------------------
>>>>> -------------
>>>>> >>> + virtual bool
>>>>> >>> + SupportsStructuredDataType(const ConstString &type_name) = 0;
>>>>> >>> +
>>>>> >>> + //
>>>>> >>> ------------------------------------------------------------
>>>>> -------------
>>>>> >>> + /// Handle the arrival of asynchronous structured data from
>>>>> the
>>>>> >>> process.
>>>>> >>> + ///
>>>>> >>> + /// When asynchronous structured data arrives from the process
>>>>> >>> monitor,
>>>>> >>> + /// it is immediately delivered to the plugin mapped for that
>>>>> >>> feature
>>>>> >>> + /// if one exists. The structured data that arrives from a
>>>>> process
>>>>> >>> + /// monitor must be a dictionary, and it must have a string
>>>>> field
>>>>> >>> named
>>>>> >>> + /// "type" that must contain the StructuredData feature name
>>>>> set as
>>>>> >>> the
>>>>> >>> + /// value. This is the manner in which the data is routed to
>>>>> the
>>>>> >>> proper
>>>>> >>> + /// plugin instance.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] process
>>>>> >>> + /// The process instance that just received the
>>>>> structured data.
>>>>> >>> + /// This will always be the same process for a given
>>>>> instance of
>>>>> >>> + /// a plugin.
>>>>> >>> + ///
>>>>> >>> + /// @param[in] type_name
>>>>> >>> + /// The name of the feature tag for the asynchronous
>>>>> structured
>>>>> >>> data.
>>>>> >>> + /// Note this data will also be present in the \b
>>>>> object_sp
>>>>> >>> dictionary
>>>>> >>> + /// under the string value with key "type".
>>>>> >>> + ///
>>>>> >>> + /// @param[in] object_sp
>>>>> >>> + /// A shared pointer to the structured data that
>>>>> arrived. This
>>>>> >>> must
>>>>> >>> + ///> _______________________________________________
>>>>> > lldb-commits mailing list
>>>>> > lldb-commits at lists.llvm.org
>>>>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>>>>> >
>>>>>
>>>>
>>>>
>>>> --
>>>> -Todd
>>>>
>>>>
>>>
>>>
>>> --
>>> -Todd
>>>
>>
>>
>>
>> --
>> -Todd
>>
>
--
-Todd
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20160819/23b4d801/attachment-0001.html>
More information about the lldb-commits
mailing list