[llvm] [BOLT] Exit early when prepareToParse fails on buildid (PR #161151)
Paschalis Mpeis via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 7 10:51:19 PDT 2025
https://github.com/paschalis-mpeis updated https://github.com/llvm/llvm-project/pull/161151
>From bfd0874983c11bbf263e3fd3574df8ea8a602838 Mon Sep 17 00:00:00 2001
From: Paschalis Mpeis <paschalis.mpeis at arm.com>
Date: Mon, 29 Sep 2025 09:04:41 +0100
Subject: [PATCH 1/2] [BOLT] Exit early when prepareToParse fails on buildid
---
bolt/lib/Profile/DataAggregator.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/bolt/lib/Profile/DataAggregator.cpp b/bolt/lib/Profile/DataAggregator.cpp
index 3604fdd3a94b4..50012c8e25361 100644
--- a/bolt/lib/Profile/DataAggregator.cpp
+++ b/bolt/lib/Profile/DataAggregator.cpp
@@ -295,8 +295,10 @@ void DataAggregator::processFileBuildID(StringRef FileBuildID) {
PerfProcessInfo BuildIDProcessInfo;
launchPerfProcess("buildid list", BuildIDProcessInfo, "buildid-list");
- if (prepareToParse("buildid", BuildIDProcessInfo, WarningCallback))
- return;
+ int ErrCode = prepareToParse("buildid", BuildIDProcessInfo, WarningCallback);
+ if (ErrCode != 0) {
+ exit(ErrCode);
+ }
std::optional<StringRef> FileName = getFileNameForBuildID(FileBuildID);
if (FileName && *FileName == sys::path::filename(BC->getFilename())) {
>From 066ebeec884bc167c8db36dd863e4ccdae5326c0 Mon Sep 17 00:00:00 2001
From: Paschalis Mpeis <paschalis.mpeis at arm.com>
Date: Tue, 7 Oct 2025 18:26:54 +0100
Subject: [PATCH 2/2] Avoid prepareToParse crash
I stumbled upon a case where perpareToParse return an error message on
'buildid', but then on a subsequent call for 'mmap events' it crashed
with:
> Assertion `!HasError && "Cannot get value when an error exists!"' failed.
This was due to an Error while reading the error message (ErrorMB).
---
bolt/lib/Profile/DataAggregator.cpp | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/bolt/lib/Profile/DataAggregator.cpp b/bolt/lib/Profile/DataAggregator.cpp
index 50012c8e25361..07f21187b5edd 100644
--- a/bolt/lib/Profile/DataAggregator.cpp
+++ b/bolt/lib/Profile/DataAggregator.cpp
@@ -295,10 +295,8 @@ void DataAggregator::processFileBuildID(StringRef FileBuildID) {
PerfProcessInfo BuildIDProcessInfo;
launchPerfProcess("buildid list", BuildIDProcessInfo, "buildid-list");
- int ErrCode = prepareToParse("buildid", BuildIDProcessInfo, WarningCallback);
- if (ErrCode != 0) {
- exit(ErrCode);
- }
+ if (prepareToParse("buildid", BuildIDProcessInfo, WarningCallback))
+ return;
std::optional<StringRef> FileName = getFileNameForBuildID(FileBuildID);
if (FileName && *FileName == sys::path::filename(BC->getFilename())) {
@@ -434,7 +432,18 @@ int DataAggregator::prepareToParse(StringRef Name, PerfProcessInfo &Process,
if (PI.ReturnCode != 0) {
ErrorOr<std::unique_ptr<MemoryBuffer>> ErrorMB =
MemoryBuffer::getFileOrSTDIN(Process.StderrPath.data());
- StringRef ErrBuf = (*ErrorMB)->getBuffer();
+ std::string ErrMsg;
+ StringRef ErrBuf;
+ if (std::error_code EC = ErrorMB.getError()) {
+ ErrMsg = "PERF2BOLT: cannot open ";
+ ErrMsg += Process.StderrPath.data();
+ ErrMsg += ": ";
+ ErrMsg += EC.message();
+ ErrMsg += '\n';
+ ErrBuf = ErrMsg;
+ } else {
+ ErrBuf = (*ErrorMB)->getBuffer();
+ }
deleteTempFiles();
Callback(PI.ReturnCode, ErrBuf);
More information about the llvm-commits
mailing list