[Openmp-commits] [openmp] [libomptarget] Support BE ELF files in	plugins-nextgen (PR #83976)
    Ulrich Weigand via Openmp-commits 
    openmp-commits at lists.llvm.org
       
    Wed Mar  6 07:49:59 PST 2024
    
    
  
================
@@ -81,55 +71,36 @@ Error GenericGlobalHandlerTy::moveGlobalBetweenDeviceAndHost(
 bool GenericGlobalHandlerTy::isSymbolInImage(GenericDeviceTy &Device,
                                              DeviceImageTy &Image,
                                              StringRef SymName) {
-  // Get the ELF object file for the image. Notice the ELF object may already
-  // be created in previous calls, so we can reuse it. If this is unsuccessful
-  // just return false as we couldn't find it.
-  auto ELFObjOrErr = getELFObjectFile(Image);
-  if (!ELFObjOrErr) {
-    consumeError(ELFObjOrErr.takeError());
-    return false;
-  }
 
   // Search the ELF symbol using the symbol name.
-  auto SymOrErr = utils::elf::getSymbol(*ELFObjOrErr, SymName);
+  auto SymOrErr =
+      utils::elf::findSymbolInImage(Image.getMemoryBuffer(), SymName);
   if (!SymOrErr) {
     consumeError(SymOrErr.takeError());
     return false;
   }
 
-  return *SymOrErr;
+  return !SymOrErr->empty();
----------------
uweigand wrote:
It's true that for symbols with no size, we'd also report an empty StringRef, so we cannot distinguish these two cases (easily).  I thought this should be OK as the user here actually wants to copy data to/from the memory object identified by the symbol, so it cannot really do anything with a zero-sized symbol either.
If we do need to be able to make that distinction, we'd have to tweak the interface a bit.  Either add an explicit boolean, or else expose a bit more details of the implementation (e.g. we could check for `SymOrErr->data() != nullptr`).
https://github.com/llvm/llvm-project/pull/83976
    
    
More information about the Openmp-commits
mailing list