[lldb-dev] Execution contexts in the OptionValue subsystem?

Jim Ingham via lldb-dev lldb-dev at lists.llvm.org
Fri Jul 21 17:03:03 PDT 2017


If you don't pass an exe_ctx to the Target property setter, it will always set the global property.  If that's what you want that's fine, but be aware that's what you'll get...

Jim

> On Jul 21, 2017, at 5:00 PM, Jim Ingham <jingham at apple.com> wrote:
> 
> 
>> On Jul 21, 2017, at 4:55 PM, Sean Callanan <scallanan at apple.com> wrote:
>> 
>> I was evaluating whether to provide one in a target setting, and I decided not to.
>> 
>> Then I was looking to see why anyone wouild, and I couldn't find anyone actually using it.
>> 
>> It's a little painful to see it passed around everywhere rather than stored by Process or Target, the two things that care... but it's not getting in the way of my work.
> 
> Not sure what you mean by that.  "settings set target.process.whatever something" has to convey to the process property setter it calls down to what the current process is - if any.  That's not something you can store in the process.  The process property setter could check the "selected process" but that would be racy, and not a good idea.
> 
> Maybe I'm missing something, however.
> 
> Jim
> 
>> 
>> Sean
>> On 7/21/17 4:51 PM, Jim Ingham wrote:
>>> Was this just curiosity, or was this getting in your way somehow?
>>> 
>>> Jim
>>> 
>>> 
>>>> On Jul 21, 2017, at 4:50 PM, Jim Ingham via lldb-dev <lldb-dev at lists.llvm.org>
>>>> wrote:
>>>> 
>>>> 
>>>> 
>>>>> On Jul 21, 2017, at 4:41 PM, Sean Callanan via lldb-dev <lldb-dev at lists.llvm.org>
>>>>> wrote:
>>>>> 
>>>>> There's a function in OptionValueProperties (
>>>>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionValueProperties.cpp?view=markup
>>>>> line 234):
>>>>> 
>>>>> const Property *OptionValueProperties::GetPropertyAtIndex(
>>>>>   const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const {
>>>>> return ProtectedGetPropertyAtIndex(idx);
>>>>> }
>>>>> 
>>>>> Its callers  go to some trouble to collect and pass around the ExecutionContext (e.g., GetSubValue passes it around everywhere, GetPropertyAtrIndexAs* has to keep it everywhere, the Dump mechanism passes around ExecutionContexts, etc.)
>>>>> 
>>>>> Aside from calling this function with completely ignores the ExecutionContext, I don't see the execution contexts getting used anywhere.  Is this a remnant from old code?
>>>>> 
>>>> For instance (from Process.cpp):
>>>> 
>>>> class ProcessOptionValueProperties : public OptionValueProperties {
>>>> public:
>>>> ProcessOptionValueProperties(const ConstString &name)
>>>>     : OptionValueProperties(name) {}
>>>> 
>>>> // This constructor is used when creating ProcessOptionValueProperties when it
>>>> // is part of a new lldb_private::Process instance. It will copy all current
>>>> // global property values as needed
>>>> ProcessOptionValueProperties(ProcessProperties *global_properties)
>>>>     : OptionValueProperties(*global_properties->GetValueProperties()) {}
>>>> 
>>>> const Property *GetPropertyAtIndex(const ExecutionContext *exe_ctx,
>>>>                                    bool will_modify,
>>>>                                    uint32_t idx) const override {
>>>>   // When getting the value for a key from the process options, we will always
>>>>   // try and grab the setting from the current process if there is one. Else
>>>>   // we just
>>>>   // use the one from this instance.
>>>>   if (exe_ctx) {
>>>>     Process *process = exe_ctx->GetProcessPtr();
>>>>     if (process) {
>>>>       ProcessOptionValueProperties *instance_properties =
>>>>           static_cast<ProcessOptionValueProperties *>(
>>>>               process->GetValueProperties().get());
>>>>       if (this != instance_properties)
>>>>         return instance_properties->ProtectedGetPropertyAtIndex(idx);
>>>>     }
>>>>   }
>>>>   return ProtectedGetPropertyAtIndex(idx);
>>>> }
>>>> };
>>>> 
>>>> That's what tells you whether to use the global process property, or this process specific one.  Ditto for Thread properties.
>>>> 
>>>> Jim
>>>> 
>>>> 
>>>> 
>>>>> Sean
>>>>> _______________________________________________
>>>>> lldb-dev mailing list
>>>>> 
>>>>> lldb-dev at lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>>>> _______________________________________________
>>>> lldb-dev mailing list
>>>> 
>>>> lldb-dev at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>> 
> 



More information about the lldb-dev mailing list