[Openmp-commits] [openmp] [Libomptarget] Add error message back in after changes (PR #77528)
Joseph Huber via Openmp-commits
openmp-commits at lists.llvm.org
Tue Jan 9 13:37:36 PST 2024
https://github.com/jhuber6 created https://github.com/llvm/llvm-project/pull/77528
Summary:
My previous reworking of the image hangling removed the image info which
was originally used for this extra error message requested by Ye Luo. I
have since added in the necessary ELF facilities to extract it from the
object file and can add it back in. It's a little verbose mostly from
needing to shuffle around types and potential errors.
>From 128659c9e6c7e26c1e4092e9f9f927f1af1ca78c Mon Sep 17 00:00:00 2001
From: Joseph Huber <huberjn at outlook.com>
Date: Tue, 9 Jan 2024 15:35:43 -0600
Subject: [PATCH] [Libomptarget] Add error message back in after changes
Summary:
My previous reworking of the image hangling removed the image info which
was originally used for this extra error message requested by Ye Luo. I
have since added in the necessary ELF facilities to extract it from the
object file and can add it back in. It's a little verbose mostly from
needing to shuffle around types and potential errors.
---
openmp/libomptarget/src/omptarget.cpp | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/openmp/libomptarget/src/omptarget.cpp b/openmp/libomptarget/src/omptarget.cpp
index a7d55d7ebd5391..fe226345ed249e 100644
--- a/openmp/libomptarget/src/omptarget.cpp
+++ b/openmp/libomptarget/src/omptarget.cpp
@@ -18,6 +18,7 @@
#include "PluginManager.h"
#include "Shared/Debug.h"
#include "Shared/EnvironmentVar.h"
+#include "Shared/Utils.h"
#include "device.h"
#include "private.h"
#include "rtl.h"
@@ -29,6 +30,7 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/bit.h"
+#include "llvm/Object/ObjectFile.h"
#include <cassert>
#include <cstdint>
@@ -308,10 +310,32 @@ void handleTargetOutcome(bool Success, ident_t *Loc) {
FAILURE_MESSAGE("Consult https://openmp.llvm.org/design/Runtimes.html "
"for debugging options.\n");
- if (!PM->getNumUsedPlugins())
+ if (!PM->getNumUsedPlugins()) {
FAILURE_MESSAGE(
"No images found compatible with the installed hardware. ");
+ llvm::SmallVector<llvm::StringRef> Archs;
+ for (auto &Image : PM->deviceImages()) {
+ const char *Start = reinterpret_cast<const char *>(
+ Image.getExecutableImage().ImageStart);
+ uint64_t Length = llvm::omp::target::getPtrDiff(
+ Start, Image.getExecutableImage().ImageEnd);
+ llvm::MemoryBufferRef Buffer(llvm::StringRef(Start, Length),
+ /*Identifier=*/"");
+
+ auto ObjectOrErr = llvm::object::ObjectFile::createObjectFile(Buffer);
+ if (auto Err = ObjectOrErr.takeError()) {
+ llvm::consumeError(std::move(Err));
+ continue;
+ }
+
+ if (auto CPU = (*ObjectOrErr)->tryGetCPUName())
+ Archs.push_back(*CPU);
+ }
+ fprintf(stderr, "Found %zu image(s): (%s)\n", Archs.size(),
+ llvm::join(Archs, ",").c_str());
+ }
+
SourceInfo Info(Loc);
if (Info.isAvailible())
fprintf(stderr, "%s:%d:%d: ", Info.getFilename(), Info.getLine(),
More information about the Openmp-commits
mailing list