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

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


> 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