[Lldb-commits] [lldb] 6385c2a - [AppleObjCRuntimeV2] Force lazily allocated class names to be resolved.
Davidino Italiano via lldb-commits
lldb-commits at lists.llvm.org
Fri Mar 20 13:44:33 PDT 2020
> On Mar 20, 2020, at 1:43 PM, Davide Italiano via lldb-commits <lldb-commits at lists.llvm.org> wrote:
>
>
> Author: Davide Italiano
> Date: 2020-03-20T13:43:08-07:00
> New Revision: 6385c2ab8ff8304eafa822012c40934690bde124
>
> URL: https://github.com/llvm/llvm-project/commit/6385c2ab8ff8304eafa822012c40934690bde124
> DIFF: https://github.com/llvm/llvm-project/commit/6385c2ab8ff8304eafa822012c40934690bde124.diff
>
> LOG: [AppleObjCRuntimeV2] Force lazily allocated class names to be resolved.
>
> Fixes a couple of tests on new versions of the Obj-C runtime.
>
> Added:
>
>
> Modified:
> lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
> lldb/test/Shell/ExecControl/StopHook/stop-hook.test
>
> Removed:
>
>
>
> ################################################################################
> diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
> index 9fea9a217dce..4a07c792eebb 100644
> --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
> +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
> @@ -1175,6 +1175,28 @@ AppleObjCRuntimeV2::GetClassDescriptorFromISA(ObjCISA isa) {
> return class_descriptor_sp;
> }
>
> +static std::pair<bool, ConstString> ObjCGetClassNameRaw(
> + AppleObjCRuntime::ObjCISA isa,
> + Process *process) {
> + StreamString expr_string;
> + std::string input = std::to_string(isa);
> + expr_string.Printf("(const char *)objc_debug_class_getNameRaw(%s)",
> + input.c_str());
> +
> + ValueObjectSP result_sp;
> + EvaluateExpressionOptions eval_options;
> + eval_options.SetLanguage(lldb::eLanguageTypeObjC);
> + eval_options.SetResultIsInternal(true);
> + eval_options.SetGenerateDebugInfo(true);
> + eval_options.SetTimeout(process->GetUtilityExpressionTimeout());
> + auto eval_result = process->GetTarget().EvaluateExpression(
> + expr_string.GetData(),
> + process->GetThreadList().GetSelectedThread()->GetSelectedFrame().get(),
> + result_sp, eval_options);
> + ConstString type_name(result_sp->GetSummaryAsCString());
> + return std::make_pair(eval_result == eExpressionCompleted, type_name);
> +}
> +
> ObjCLanguageRuntime::ClassDescriptorSP
> AppleObjCRuntimeV2::GetClassDescriptor(ValueObject &valobj) {
> ClassDescriptorSP objc_class_sp;
> @@ -1210,7 +1232,10 @@ AppleObjCRuntimeV2::GetClassDescriptor(ValueObject &valobj) {
> return objc_class_sp;
>
> objc_class_sp = GetClassDescriptorFromISA(isa);
> - if (isa && !objc_class_sp) {
> +
> + if (objc_class_sp)
> + return objc_class_sp;
> + else {
> Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS |
> LIBLLDB_LOG_TYPES));
> LLDB_LOGF(log,
> @@ -1219,6 +1244,13 @@ AppleObjCRuntimeV2::GetClassDescriptor(ValueObject &valobj) {
> "not in class descriptor cache 0x%" PRIx64,
> isa_pointer, isa);
> }
> +
> + ClassDescriptorSP descriptor_sp(new ClassDescriptorV2(*this, isa, nullptr));
> + auto resolved = ObjCGetClassNameRaw(isa, process);
> + if (resolved.first == true) {
> + AddClass(isa, descriptor_sp, resolved.second.AsCString());
> + objc_class_sp = descriptor_sp;
> + }
> return objc_class_sp;
> }
>
>
> diff --git a/lldb/test/Shell/ExecControl/StopHook/stop-hook.test b/lldb/test/Shell/ExecControl/StopHook/stop-hook.test
> index a06de6634ea1..7e5b37b63854 100644
> --- a/lldb/test/Shell/ExecControl/StopHook/stop-hook.test
> +++ b/lldb/test/Shell/ExecControl/StopHook/stop-hook.test
> @@ -51,7 +51,7 @@ run
> thread step-over
> # Stepping inside of the stop hook range
> # CHECK: (lldb) thread step-over
> -# CHECK-NEXT: (void *) $1 = 0x
> +# CHECK-NEXT: (void *) $2 = 0x
> # CHECK: ->{{.*}} // We should stop here after stepping.
This is an unfortunate side effect of SetResultInternal not working in the expression parser.
Jim Ingham is fixing this, to the best of my knowledge.
—
Davide
More information about the lldb-commits
mailing list