Index: tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h =================================================================== --- tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h +++ tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.h @@ -71,8 +71,7 @@ bool HandleProcessEventStateSuspended(const lldb::SBEvent &vEvent); bool HandleTargetEventBroadcastBitModulesLoaded(const lldb::SBEvent &vEvent); bool HandleTargetEventBroadcastBitModulesUnloaded(const lldb::SBEvent &vEvent); - bool MiHelpGetModuleInfo(const lldb::SBModule &vModule, const MIuint nModuleNum, - CMICmnMIValueList &vwrMiValueList); + bool MiHelpGetModuleInfo(const lldb::SBModule &vModule, CMICmnMIOutOfBandRecord &vwrMiOutOfBandRecord); bool MiHelpGetCurrentThreadFrame(CMICmnMIValueTuple &vwrMiValueTuple); bool MiResultRecordToStdout(const CMICmnMIResultRecord &vrMiResultRecord); bool MiOutOfBandRecordToStdout(const CMICmnMIOutOfBandRecord &vrMiResultRecord); Index: tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp =================================================================== --- tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp +++ tools/lldb-mi/MICmnLLDBDebuggerHandleEvents.cpp @@ -618,115 +618,111 @@ } //++ ------------------------------------------------------------------------------------ -// Details: Print to stdout "=shlibs-added,shlib-info=[key=\"value\"...]" +// Details: Print to stdout "=library-loaded,id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016" PRIx64"\"" // Type: Method. // Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. +// Return: MIstatus::success - Function succeeded. +// MIstatus::failure - Function failed. // Throws: None. //-- bool CMICmnLLDBDebuggerHandleEvents::HandleTargetEventBroadcastBitModulesLoaded(const lldb::SBEvent &vEvent) { - static MIuint s_nModulesLoadedNumber(0); - const MIuint nSize(lldb::SBTarget::GetNumModulesFromEvent(vEvent)); - bool bOk = MIstatus::success; - for (MIuint nIndex(0); bOk && (nIndex < nSize); ++nIndex) + bool bOk = MIstatus::failure; + const MIuint nSize = lldb::SBTarget::GetNumModulesFromEvent(vEvent); + for (MIuint nIndex = 0; nIndex < nSize; ++nIndex) { const lldb::SBModule sbModule = lldb::SBTarget::GetModuleAtIndexFromEvent(nIndex, vEvent); - CMICmnMIValueList miValueList(true); - bOk = MiHelpGetModuleInfo(sbModule, ++s_nModulesLoadedNumber, miValueList); - const CMICmnMIValueResult miValueResult("shlib-info", miValueList); - const CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetModulesLoaded, miValueResult); + CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded); + bOk = MiHelpGetModuleInfo(sbModule, miOutOfBandRecord); bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord); + if (!bOk) + break; } return bOk; } //++ ------------------------------------------------------------------------------------ -// Details: Print to stdout "=shlibs-removed,shlib-info=[key=\"value\"...]" +// Details: Print to stdout "=library-unloaded,id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016" PRIx64"\"" // Type: Method. // Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. +// Return: MIstatus::success - Function succeeded. +// MIstatus::failure - Function failed. // Throws: None. //-- bool CMICmnLLDBDebuggerHandleEvents::HandleTargetEventBroadcastBitModulesUnloaded(const lldb::SBEvent &vEvent) { - static MIuint s_nModulesUnloadedNumber(0); - const MIuint nSize(lldb::SBTarget::GetNumModulesFromEvent(vEvent)); - bool bOk = MIstatus::success; - for (MIuint nIndex(0); bOk && (nIndex < nSize); ++nIndex) + bool bOk = MIstatus::failure; + const MIuint nSize = lldb::SBTarget::GetNumModulesFromEvent(vEvent); + for (MIuint nIndex = 0; nIndex < nSize; ++nIndex) { const lldb::SBModule sbModule = lldb::SBTarget::GetModuleAtIndexFromEvent(nIndex, vEvent); - CMICmnMIValueList miValueList(true); - bOk = MiHelpGetModuleInfo(sbModule, ++s_nModulesUnloadedNumber, miValueList); - const CMICmnMIValueResult miValueResult("shlib-info", miValueList); - const CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetModulesUnloaded, miValueResult); + CMICmnMIOutOfBandRecord miOutOfBandRecord(CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded); + bOk = MiHelpGetModuleInfo(sbModule, miOutOfBandRecord); bOk = bOk && MiOutOfBandRecordToStdout(miOutOfBandRecord); + if (!bOk) + break; } return bOk; } //++ ------------------------------------------------------------------------------------ -// Details: Build module information for shlib-info "[num=\"%ld\",name=\"%s\",dyld-addr=\"%#lx\",reason=\"dyld\",path=\"%s\",loaded_addr=\"%#lx\",dsym-objpath=\"%s\"]" +// Details: Build module information for =library-loaded/=library-unloaded: "id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded="%d"[,symbols-path=\"%s\"],loaded_addr=\"0x%016" PRIx64"\"" // Type: Method. // Args: vwrMiValueList - (W) MI value list object. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. +// Return: MIstatus::success - Function succeeded. +// MIstatus::failure - Function failed. // Throws: None. //-- bool -CMICmnLLDBDebuggerHandleEvents::MiHelpGetModuleInfo(const lldb::SBModule &vModule, const MIuint nModuleNum, - CMICmnMIValueList &vwrMiValueList) +CMICmnLLDBDebuggerHandleEvents::MiHelpGetModuleInfo(const lldb::SBModule &vModule, + CMICmnMIOutOfBandRecord &vwrMiOutOfBandRecord) { bool bOk = MIstatus::success; - // Build "num" field - const CMIUtilString strNum(CMIUtilString::Format("%ld", nModuleNum)); - const CMICmnMIValueConst miValueConst(strNum); - const CMICmnMIValueResult miValueResult("num", miValueConst); - bOk = bOk && vwrMiValueList.Add(miValueResult); - // Build "name" field - const CMICmnMIValueConst miValueConst2(vModule.GetPlatformFileSpec().GetFilename()); - const CMICmnMIValueResult miValueResult2("name", miValueConst2); - bOk = bOk && vwrMiValueList.Add(miValueResult2); - // Build "dyld-addr" field + // Build "id" field + std::unique_ptr apPath(new char[PATH_MAX]); + vModule.GetFileSpec().GetPath(apPath.get(), PATH_MAX); + const CMIUtilString strTargetPath(apPath.get()); + const CMICmnMIValueConst miValueConst(strTargetPath); + const CMICmnMIValueResult miValueResult("id", miValueConst); + bOk = bOk && vwrMiOutOfBandRecord.Add(miValueResult); + // Build "target-name" field + const CMICmnMIValueConst miValueConst2(strTargetPath); + const CMICmnMIValueResult miValueResult2("target-name", miValueConst2); + bOk = bOk && vwrMiOutOfBandRecord.Add(miValueResult2); + // Build "host-name" field + vModule.GetPlatformFileSpec().GetPath(apPath.get(), PATH_MAX); + const CMIUtilString strHostPath(apPath.get()); + const CMICmnMIValueConst miValueConst3(strHostPath); + const CMICmnMIValueResult miValueResult3("host-name", miValueConst3); + bOk = bOk && vwrMiOutOfBandRecord.Add(miValueResult3); + // Build "symbols-loaded" field + vModule.GetSymbolFileSpec().GetPath(apPath.get(), PATH_MAX); + const CMIUtilString strSymbolsPath(apPath.get()); + const bool bSymbolsLoaded = !CMIUtilString::Compare(strHostPath, strSymbolsPath); + const CMICmnMIValueConst miValueConst4(CMIUtilString::Format("%d", bSymbolsLoaded)); + const CMICmnMIValueResult miValueResult4("symbols-loaded", miValueConst4); + bOk = bOk && vwrMiOutOfBandRecord.Add(miValueResult4); + // Build "symbols-path" field + if (bSymbolsLoaded) + { + const CMICmnMIValueConst miValueConst5(strSymbolsPath); + const CMICmnMIValueResult miValueResult5("symbols-path", miValueConst5); + bOk = bOk && vwrMiOutOfBandRecord.Add(miValueResult5); + } + // Build "loaded_addr" field const lldb::SBAddress sbAddress(vModule.GetObjectFileHeaderAddress()); - const CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance()); + CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance()); const lldb::addr_t nLoadAddress(sbAddress.GetLoadAddress(rSessionInfo.GetTarget())); - const CMIUtilString strDyldAddr(CMIUtilString::Format("%#lx", nLoadAddress)); - const CMICmnMIValueConst miValueConst3(nLoadAddress != LLDB_INVALID_ADDRESS ? strDyldAddr : "-"); - const CMICmnMIValueResult miValueResult3("dyld-addr", miValueConst3); - bOk = bOk && vwrMiValueList.Add(miValueResult3); - // Build "reason" field - const CMICmnMIValueConst miValueConst4("dyld"); - const CMICmnMIValueResult miValueResult4("reason", miValueConst4); - bOk = bOk && vwrMiValueList.Add(miValueResult4); - // Build "path" field - char path[PATH_MAX]; - vModule.GetPlatformFileSpec().GetPath(path, sizeof(path)); - const CMIUtilString strPlatformPath(path); - const CMICmnMIValueConst miValueConst5(strPlatformPath); - const CMICmnMIValueResult miValueResult5("path", miValueConst5); - bOk = bOk && vwrMiValueList.Add(miValueResult5); - // Build "loaded_addr" field - const CMIUtilString strLoadedAddr(CMIUtilString::Format("%#lx", nLoadAddress)); - const CMICmnMIValueConst miValueConst6(nLoadAddress != LLDB_INVALID_ADDRESS ? strDyldAddr : "-"); + const CMIUtilString strLoadedAddr(nLoadAddress != LLDB_INVALID_ADDRESS ? + CMIUtilString::Format("0x%016" PRIx64, nLoadAddress) : "-"); + const CMICmnMIValueConst miValueConst6(strLoadedAddr); const CMICmnMIValueResult miValueResult6("loaded_addr", miValueConst6); - bOk = bOk && vwrMiValueList.Add(miValueResult6); - // Build "dsym-objpath" field - vModule.GetSymbolFileSpec().GetPath(path, sizeof(path)); - const CMIUtilString strSymbolFilePath(path); - if (!CMIUtilString::Compare(strPlatformPath, strSymbolFilePath)) - { - const CMICmnMIValueConst miValueConst7(strSymbolFilePath); - const CMICmnMIValueResult miValueResult7("dsym-objpath", miValueConst7); - bOk = bOk && vwrMiValueList.Add(miValueResult7); - } + bOk = bOk && vwrMiOutOfBandRecord.Add(miValueResult6); return bOk; } Index: tools/lldb-mi/MICmnMIOutOfBandRecord.h =================================================================== --- tools/lldb-mi/MICmnMIOutOfBandRecord.h +++ tools/lldb-mi/MICmnMIOutOfBandRecord.h @@ -62,8 +62,8 @@ eOutOfBand_ThreadCreated, eOutOfBand_ThreadExited, eOutOfBand_ThreadSelected, - eOutOfBand_TargetModulesLoaded, - eOutOfBand_TargetModulesUnloaded, + eOutOfBand_TargetModuleLoaded, + eOutOfBand_TargetModuleUnloaded, eOutOfBand_TargetStreamOutput, eOutOfBand_count // Always the last one }; Index: tools/lldb-mi/MICmnMIOutOfBandRecord.cpp =================================================================== --- tools/lldb-mi/MICmnMIOutOfBandRecord.cpp +++ tools/lldb-mi/MICmnMIOutOfBandRecord.cpp @@ -25,8 +25,8 @@ {CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated, "thread-created"}, {CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, "thread-exited"}, {CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected, "thread-selected"}, - {CMICmnMIOutOfBandRecord::eOutOfBand_TargetModulesLoaded, "shlibs-added"}, - {CMICmnMIOutOfBandRecord::eOutOfBand_TargetModulesUnloaded, "shlibs-removed"}, + {CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded, "library-loaded"}, + {CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded, "library-unloaded"}, {CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, ""}}; CMICmnMIOutOfBandRecord::MapOutOfBandToOutOfBandText_t ms_constMapAsyncRecordTextToToken = { {CMICmnMIOutOfBandRecord::eOutOfBand_Running, "*"}, @@ -41,8 +41,8 @@ {CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated, "="}, {CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited, "="}, {CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected, "="}, - {CMICmnMIOutOfBandRecord::eOutOfBand_TargetModulesLoaded, "="}, - {CMICmnMIOutOfBandRecord::eOutOfBand_TargetModulesUnloaded, "="}, + {CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded, "="}, + {CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded, "="}, {CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput, "@"}}; //++ ------------------------------------------------------------------------------------