================ @@ -5857,6 +5838,50 @@ bool ObjectFileMachO::GetCorefileThreadExtraInfos( return false; } +StructuredData::ObjectSP ObjectFileMachO::GetCorefileProcessMetadata() { + ModuleSP module_sp(GetModule()); + if (!module_sp) + return {}; + + Log *log(GetLog(LLDBLog::Object | LLDBLog::Process | LLDBLog::Thread)); + std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex()); + auto lc_notes = FindLC_NOTEByName("process metadata"); + if (lc_notes.size() == 0) + return {}; + + if (lc_notes.size() > 1) + LLDB_LOGF( + log, + "Multiple 'process metadata' LC_NOTEs found, only using the first."); + + offset_t payload_offset = std::get<0>(lc_notes[0]); + offset_t strsize = std::get<1>(lc_notes[0]); + std::string buf(strsize, '\0'); + if (m_data.CopyData(payload_offset, strsize, buf.data()) != strsize) { + LLDB_LOGF(log, + "Unable to read %" PRIu64 + " bytes of 'process metadata' LC_NOTE JSON contents", + strsize); + return {}; + } + while (buf.back() == '\0') + buf.resize(buf.size() - 1); + StructuredData::ObjectSP object_sp = StructuredData::ParseJSON(buf); + if (!object_sp) { + LLDB_LOGF(log, "Unable to read 'process metadata' LC_NOTE, did not " + "parse as valid JSON."); ---------------- JDevlieghere wrote:
No need to change anything, but another way to handle this is to make this function return an `Expected<StructuredData::ObjectSP>` and do the logging on the caller side. The advantage of that is that if you can do better than logging, it's easy to percolate the error up, while now it never leaves the function. https://github.com/llvm/llvm-project/pull/144627 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits