[llvm] df2485b - Revert "[llvm-jitlink] Add Process and Platform JITDylibs, generalize alias..."

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 5 10:23:38 PST 2023


Author: Lang Hames
Date: 2023-12-05T10:23:31-08:00
New Revision: df2485b215af46ebd5fd3a94b929ebc951c1d12e

URL: https://github.com/llvm/llvm-project/commit/df2485b215af46ebd5fd3a94b929ebc951c1d12e
DIFF: https://github.com/llvm/llvm-project/commit/df2485b215af46ebd5fd3a94b929ebc951c1d12e.diff

LOG: Revert "[llvm-jitlink] Add Process and Platform JITDylibs, generalize alias..."

This reverts commit 3d0dd1a7d62 while I investigate bot failures (e.g.
https://lab.llvm.org/buildbot/#/builders/272/builds/2573)

Added: 
    

Modified: 
    compiler-rt/test/orc/TestCases/Darwin/x86-64/jit-re-dlopen-data-reset.S
    compiler-rt/test/orc/TestCases/Darwin/x86-64/jit-re-dlopen-trivial.S
    compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-jit-dlopen-nested.c
    compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-jit-dlopen.c
    compiler-rt/test/orc/TestCases/Windows/x86-64/trivial-jit-dlopen.c
    llvm/test/ExecutionEngine/JITLink/AArch32/ELF_thumbv7_printf.s
    llvm/tools/llvm-jitlink/llvm-jitlink.cpp
    llvm/tools/llvm-jitlink/llvm-jitlink.h

Removed: 
    


################################################################################
diff  --git a/compiler-rt/test/orc/TestCases/Darwin/x86-64/jit-re-dlopen-data-reset.S b/compiler-rt/test/orc/TestCases/Darwin/x86-64/jit-re-dlopen-data-reset.S
index 6b8e17ded7af6..8582c9ecad752 100644
--- a/compiler-rt/test/orc/TestCases/Darwin/x86-64/jit-re-dlopen-data-reset.S
+++ b/compiler-rt/test/orc/TestCases/Darwin/x86-64/jit-re-dlopen-data-reset.S
@@ -3,8 +3,8 @@
 // RUN: %clang -c -o %t.main.o %p/Inputs/dlopen-dlclose-x2.S
 // RUN: %clang -c -o %t.inits.o %s
 // RUN: %llvm_jitlink \
-// RUN:   -alias Platform:_dlopen=___orc_rt_macho_jit_dlopen \
-// RUN:   -alias Platform:_dlclose=___orc_rt_macho_jit_dlclose \
+// RUN:   -alias _dlopen=___orc_rt_macho_jit_dlopen \
+// RUN:   -alias _dlclose=___orc_rt_macho_jit_dlclose \
 // RUN:   %t.main.o -jd inits %t.inits.o -lmain | FileCheck %s
 
 // CHECK: entering main

diff  --git a/compiler-rt/test/orc/TestCases/Darwin/x86-64/jit-re-dlopen-trivial.S b/compiler-rt/test/orc/TestCases/Darwin/x86-64/jit-re-dlopen-trivial.S
index adc63f9e5c4b2..e8f48cac9c97f 100644
--- a/compiler-rt/test/orc/TestCases/Darwin/x86-64/jit-re-dlopen-trivial.S
+++ b/compiler-rt/test/orc/TestCases/Darwin/x86-64/jit-re-dlopen-trivial.S
@@ -7,8 +7,8 @@
 // RUN: %clang -c -o %t.main.o %p/Inputs/dlopen-dlclose-x2.S
 // RUN: %clang -c -o %t.inits.o %s
 // RUN: %llvm_jitlink \
-// RUN:   -alias Platform:_dlopen=___orc_rt_macho_jit_dlopen \
-// RUN:   -alias Platform:_dlclose=___orc_rt_macho_jit_dlclose \
+// RUN:   -alias _dlopen=___orc_rt_macho_jit_dlopen \
+// RUN:   -alias _dlclose=___orc_rt_macho_jit_dlclose \
 // RUN:   %t.main.o -jd inits %t.inits.o -lmain | FileCheck %s
 
 // CHECK: entering main

diff  --git a/compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-jit-dlopen-nested.c b/compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-jit-dlopen-nested.c
index f4b49b2c852af..49d9fb6f37cd4 100644
--- a/compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-jit-dlopen-nested.c
+++ b/compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-jit-dlopen-nested.c
@@ -5,8 +5,8 @@
 // RUN: %clang -c -o %t.inits.o %p/Inputs/standalone-ctor-and-cxa-atexit-dtor.S
 // RUN: %clang -c -o %t.test.o %s
 // RUN: %llvm_jitlink \
-// RUN:   -alias Platform:_dlopen=___orc_rt_macho_jit_dlopen \
-// RUN:   -alias Platform:_dlclose=___orc_rt_macho_jit_dlclose \
+// RUN:   -alias _dlopen=___orc_rt_macho_jit_dlopen \
+// RUN:   -alias _dlclose=___orc_rt_macho_jit_dlclose \
 // RUN:   %t.test.o -jd inits %t.inits.o -lmain | FileCheck %s
 
 // CHECK: entering main

diff  --git a/compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-jit-dlopen.c b/compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-jit-dlopen.c
index a0007be97723e..ee9b9890934ca 100644
--- a/compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-jit-dlopen.c
+++ b/compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-jit-dlopen.c
@@ -5,8 +5,8 @@
 // RUN: %clang -c -o %t.inits.o %p/Inputs/standalone-ctor-and-cxa-atexit-dtor.S
 // RUN: %clang -c -o %t.test.o %s
 // RUN: %llvm_jitlink \
-// RUN:   -alias Platform:_dlopen=___orc_rt_macho_jit_dlopen \
-// RUN:   -alias Platform:_dlclose=___orc_rt_macho_jit_dlclose \
+// RUN:   -alias _dlopen=___orc_rt_macho_jit_dlopen \
+// RUN:   -alias _dlclose=___orc_rt_macho_jit_dlclose \
 // RUN:   %t.test.o -jd inits %t.inits.o -lmain | FileCheck %s
 
 // CHECK: entering main

diff  --git a/compiler-rt/test/orc/TestCases/Windows/x86-64/trivial-jit-dlopen.c b/compiler-rt/test/orc/TestCases/Windows/x86-64/trivial-jit-dlopen.c
index fd17993e4c57c..6a9182b0d7ab8 100644
--- a/compiler-rt/test/orc/TestCases/Windows/x86-64/trivial-jit-dlopen.c
+++ b/compiler-rt/test/orc/TestCases/Windows/x86-64/trivial-jit-dlopen.c
@@ -5,8 +5,8 @@
 // RUN: %clang_cl -MD -c -o %t.inits.o %p/Inputs/standalone-dylib.c
 // RUN: %clang_cl -MD -c -o %t.test.o %s
 // RUN: %llvm_jitlink \
-// RUN:   -alias Platform:dlopen=__orc_rt_coff_jit_dlopen \
-// RUN:   -alias Platform:dlclose=__orc_rt_coff_jit_dlclose \
+// RUN:   -alias dlopen=__orc_rt_coff_jit_dlopen \
+// RUN:   -alias dlclose=__orc_rt_coff_jit_dlclose \
 // RUN:   %t.test.o -jd inits %t.inits.o -lmain | FileCheck %s
 
 // CHECK: entering main

diff  --git a/llvm/test/ExecutionEngine/JITLink/AArch32/ELF_thumbv7_printf.s b/llvm/test/ExecutionEngine/JITLink/AArch32/ELF_thumbv7_printf.s
index 457ce6a4cc53a..11a77c95cfa8f 100644
--- a/llvm/test/ExecutionEngine/JITLink/AArch32/ELF_thumbv7_printf.s
+++ b/llvm/test/ExecutionEngine/JITLink/AArch32/ELF_thumbv7_printf.s
@@ -3,9 +3,7 @@
 
 // Check that main is a thumb symbol (with LSB set) and printf is arm (with LSB clear)
 //
-// CHECK-LABEL: JITDylib "main"
-// CHECK-NEXT: Link order: [ ("main", MatchAllSymbols), ("Process", MatchExportedSymbolsOnly) ]
-// CHECK-NEXT: Symbol table:
+// CHECK-LABEL: Symbol table:
 // CHECK-NEXT:    "main":   0x{{[0-9a-f]+[13579bdf]}} [Callable] Ready
 // CHECK-NEXT:    "printf": 0x76bbe880 [Data] Ready
 

diff  --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
index 3d6247ca6a25f..17fb70f39b6a1 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
@@ -692,12 +692,11 @@ getTestObjectFileInterface(Session &S, MemoryBufferRef O) {
 }
 
 static Error loadProcessSymbols(Session &S) {
-  S.ProcessSymsJD = &S.ES.createBareJITDylib("Process");
   auto FilterMainEntryPoint =
       [EPName = S.ES.intern(EntryPointName)](SymbolStringPtr Name) {
         return Name != EPName;
       };
-  S.ProcessSymsJD->addGenerator(
+  S.MainJD->addGenerator(
       ExitOnErr(orc::EPCDynamicLibrarySearchGenerator::GetForTargetProcess(
           S.ES, std::move(FilterMainEntryPoint))));
 
@@ -708,9 +707,8 @@ static Error loadDylibs(Session &S) {
   LLVM_DEBUG(dbgs() << "Loading dylibs...\n");
   for (const auto &Dylib : Dylibs) {
     LLVM_DEBUG(dbgs() << "  " << Dylib << "\n");
-    auto DL = S.getOrLoadDynamicLibrary(Dylib);
-    if (!DL)
-      return DL.takeError();
+    if (auto Err = S.loadAndLinkDynamicLibrary(*S.MainJD, Dylib))
+      return Err;
   }
 
   return Error::success();
@@ -965,79 +963,69 @@ Session::Session(std::unique_ptr<ExecutorProcessControl> EPC, Error &Err)
 
   ES.setErrorReporter(reportLLVMJITLinkError);
 
+  if (auto MainJDOrErr = ES.createJITDylib("main"))
+    MainJD = &*MainJDOrErr;
+  else {
+    Err = MainJDOrErr.takeError();
+    return;
+  }
+
   if (!NoProcessSymbols)
     ExitOnErr(loadProcessSymbols(*this));
+  else {
+    // This symbol is used in testcases.
+    auto &TestResultJD = ES.createBareJITDylib("<TestResultJD>");
+    ExitOnErr(TestResultJD.define(absoluteSymbols(
+        {{ES.intern("llvm_jitlink_setTestResultOverride"),
+          {ExecutorAddr::fromPtr(llvm_jitlink_setTestResultOverride),
+           JITSymbolFlags::Exported}}})));
+    MainJD->addToLinkOrder(TestResultJD);
+  }
 
   ExitOnErr(loadDylibs(*this));
 
   auto &TT = ES.getTargetTriple();
 
-  if (DebuggerSupport && TT.isOSBinFormatMachO()) {
-    if (!ProcessSymsJD) {
-      Err = make_error<StringError>("MachO debugging requires process symbols",
-                                    inconvertibleErrorCode());
-      return;
-    }
-    ObjLayer.addPlugin(ExitOnErr(GDBJITDebugInfoRegistrationPlugin::Create(
-        this->ES, *ProcessSymsJD, TT)));
-  }
+  if (DebuggerSupport && TT.isOSBinFormatMachO())
+    ObjLayer.addPlugin(ExitOnErr(
+        GDBJITDebugInfoRegistrationPlugin::Create(this->ES, *MainJD, TT)));
 
   if (PerfSupport && TT.isOSBinFormatELF()) {
-    if (!ProcessSymsJD) {
-      Err = make_error<StringError>("MachO debugging requires process symbols",
-                                    inconvertibleErrorCode());
-      return;
-    }
     ObjLayer.addPlugin(ExitOnErr(DebugInfoPreservationPlugin::Create()));
     ObjLayer.addPlugin(ExitOnErr(PerfSupportPlugin::Create(
-        this->ES.getExecutorProcessControl(), *ProcessSymsJD, true, true)));
+        this->ES.getExecutorProcessControl(), *MainJD, true, true)));
   }
 
   // Set up the platform.
-  if (!OrcRuntime.empty()) {
-    assert(ProcessSymsJD && "ProcessSymsJD should have been set");
-    PlatformJD = &ES.createBareJITDylib("Platform");
-    PlatformJD->addToLinkOrder(*ProcessSymsJD);
-
-    if (TT.isOSBinFormatMachO()) {
-      if (auto P = MachOPlatform::Create(ES, ObjLayer, *PlatformJD,
-                                         OrcRuntime.c_str()))
-        ES.setPlatform(std::move(*P));
-      else {
-        Err = P.takeError();
-        return;
-      }
-    } else if (TT.isOSBinFormatELF()) {
-      if (auto P = ELFNixPlatform::Create(ES, ObjLayer, *PlatformJD,
-                                          OrcRuntime.c_str()))
-        ES.setPlatform(std::move(*P));
-      else {
-        Err = P.takeError();
-        return;
-      }
-    } else if (TT.isOSBinFormatCOFF()) {
-      auto LoadDynLibrary = [&, this](JITDylib &JD,
-                                      StringRef DLLName) -> Error {
-        if (!DLLName.ends_with_insensitive(".dll"))
-          return make_error<StringError>("DLLName not ending with .dll",
-                                         inconvertibleErrorCode());
-        return loadAndLinkDynamicLibrary(JD, DLLName);
-      };
+  if (TT.isOSBinFormatMachO() && !OrcRuntime.empty()) {
+    if (auto P =
+            MachOPlatform::Create(ES, ObjLayer, *MainJD, OrcRuntime.c_str()))
+      ES.setPlatform(std::move(*P));
+    else {
+      Err = P.takeError();
+      return;
+    }
+  } else if (TT.isOSBinFormatELF() && !OrcRuntime.empty()) {
+    if (auto P =
+            ELFNixPlatform::Create(ES, ObjLayer, *MainJD, OrcRuntime.c_str()))
+      ES.setPlatform(std::move(*P));
+    else {
+      Err = P.takeError();
+      return;
+    }
+  } else if (TT.isOSBinFormatCOFF() && !OrcRuntime.empty()) {
+    auto LoadDynLibrary = [&, this](JITDylib &JD, StringRef DLLName) -> Error {
+      if (!DLLName.ends_with_insensitive(".dll"))
+        return make_error<StringError>("DLLName not ending with .dll",
+                                       inconvertibleErrorCode());
+      return loadAndLinkDynamicLibrary(JD, DLLName);
+    };
 
-      if (auto P = COFFPlatform::Create(ES, ObjLayer, *PlatformJD,
-                                        OrcRuntime.c_str(),
-                                        std::move(LoadDynLibrary)))
-        ES.setPlatform(std::move(*P));
-      else {
-        Err = P.takeError();
-        return;
-      }
-    } else {
-      Err = make_error<StringError>(
-          "-" + OrcRuntime.ArgStr + " specified, but format " +
-              Triple::getObjectFormatTypeName(TT.getObjectFormat()) +
-              " not supported",
-          inconvertibleErrorCode());
+    if (auto P = COFFPlatform::Create(ES, ObjLayer, *MainJD, OrcRuntime.c_str(),
+                                      std::move(LoadDynLibrary))) 
+      ES.setPlatform(std::move(*P));
+     else {
+      Err = P.takeError();
       return;
     }
   } else if (TT.isOSBinFormatELF()) {
@@ -1049,24 +1037,6 @@ Session::Session(std::unique_ptr<ExecutorProcessControl> EPC, Error &Err)
           ES, ExitOnErr(createJITLoaderGDBRegistrar(this->ES)), true, true));
   }
 
-  if (auto MainJDOrErr = ES.createJITDylib("main"))
-    MainJD = &*MainJDOrErr;
-  else {
-    Err = MainJDOrErr.takeError();
-    return;
-  }
-
-  if (NoProcessSymbols) {
-    // This symbol is used in testcases, but we're not reflecting process
-    // symbols so we'll need to make it available some other way.
-    auto &TestResultJD = ES.createBareJITDylib("<TestResultJD>");
-    ExitOnErr(TestResultJD.define(absoluteSymbols(
-        {{ES.intern("llvm_jitlink_setTestResultOverride"),
-          {ExecutorAddr::fromPtr(llvm_jitlink_setTestResultOverride),
-           JITSymbolFlags::Exported}}})));
-    MainJD->addToLinkOrder(TestResultJD);
-  }
-
   ObjLayer.addPlugin(std::make_unique<JITLinkSessionPlugin>(*this));
 
   // Process any harness files.
@@ -1296,10 +1266,6 @@ static Error sanitizeArguments(const Triple &TT, const char *ArgV0) {
   if (DebuggerSupport.getNumOccurrences() == 0 && NoExec)
     DebuggerSupport = false;
 
-  if (!OrcRuntime.empty() && NoProcessSymbols)
-    return make_error<StringError>("-orc-runtime requires process symbols",
-                                   inconvertibleErrorCode());
-
   // If -slab-allocate is passed, check that we're not trying to use it in
   // -oop-executor or -oop-executor-connect mode.
   //
@@ -1399,13 +1365,6 @@ static Error createJITDylibs(Session &S,
     }
   }
 
-  if (S.PlatformJD)
-    S.JDSearchOrder.push_back(
-        {S.PlatformJD, JITDylibLookupFlags::MatchExportedSymbolsOnly});
-  if (S.ProcessSymsJD)
-    S.JDSearchOrder.push_back(
-        {S.ProcessSymsJD, JITDylibLookupFlags::MatchExportedSymbolsOnly});
-
   LLVM_DEBUG({
     dbgs() << "Dylib search order is [ ";
     for (auto &KV : S.JDSearchOrder)
@@ -1457,67 +1416,23 @@ static Error addAliases(Session &S,
                         const std::map<unsigned, JITDylib *> &IdxToJD) {
   // Define absolute symbols.
   LLVM_DEBUG(dbgs() << "Defining aliases...\n");
-
-  DenseMap<std::pair<JITDylib *, JITDylib *>, SymbolAliasMap> Reexports;
   for (auto AliasItr = Aliases.begin(), AliasEnd = Aliases.end();
        AliasItr != AliasEnd; ++AliasItr) {
+    unsigned AliasArgIdx = Aliases.getPosition(AliasItr - Aliases.begin());
+    auto &JD = *std::prev(IdxToJD.lower_bound(AliasArgIdx))->second;
 
-    auto BadExpr = [&]() {
-      return make_error<StringError>(
-          "Invalid alias definition \"" + *AliasItr +
-              "\". Syntax: [<dst-jd>:]<alias>=[<src-jd>:]<aliasee>",
-          inconvertibleErrorCode());
-    };
-
-    auto GetJD = [&](StringRef JDName) -> Expected<JITDylib *> {
-      if (JDName.empty()) {
-        unsigned AliasArgIdx = Aliases.getPosition(AliasItr - Aliases.begin());
-        return std::prev(IdxToJD.lower_bound(AliasArgIdx))->second;
-      }
-
-      auto *JD = S.ES.getJITDylibByName(JDName);
-      if (!JD)
-        return make_error<StringError>(StringRef("In alias definition \"") +
-                                           *AliasItr + "\" no dylib named " +
-                                           JDName,
-                                       inconvertibleErrorCode());
-
-      return JD;
-    };
-
-    {
-      // First split on '=' to get alias and aliasee.
-      StringRef AliasStmt = *AliasItr;
-      auto [AliasExpr, AliaseeExpr] = AliasStmt.split('=');
-      if (AliaseeExpr.empty())
-        return BadExpr();
-
-      auto [AliasJDName, Alias] = AliasExpr.split(':');
-      if (Alias.empty())
-        std::swap(AliasJDName, Alias);
-
-      auto AliasJD = GetJD(AliasJDName);
-      if (!AliasJD)
-        return AliasJD.takeError();
-
-      auto [AliaseeJDName, Aliasee] = AliaseeExpr.split(':');
-      if (Aliasee.empty())
-        std::swap(AliaseeJDName, Aliasee);
-
-      if (AliaseeJDName.empty() && !AliasJDName.empty())
-        AliaseeJDName = AliasJDName;
-      auto AliaseeJD = GetJD(AliaseeJDName);
-      if (!AliaseeJD)
-        return AliaseeJD.takeError();
-
-      Reexports[{*AliasJD, *AliaseeJD}][S.ES.intern(Alias)] = {
-          S.ES.intern(Aliasee), JITSymbolFlags::Exported};
-    }
-  }
+    StringRef AliasStmt = *AliasItr;
+    size_t EqIdx = AliasStmt.find_first_of('=');
+    if (EqIdx == StringRef::npos)
+      return make_error<StringError>("Invalid alias definition \"" + AliasStmt +
+                                         "\". Syntax: <name>=<addr>",
+                                     inconvertibleErrorCode());
+    StringRef Alias = AliasStmt.substr(0, EqIdx).trim();
+    StringRef Aliasee = AliasStmt.substr(EqIdx + 1).trim();
 
-  for (auto &[JDs, AliasMap] : Reexports) {
-    auto [DstJD, SrcJD] = JDs;
-    if (auto Err = DstJD->define(reexports(*SrcJD, std::move(AliasMap))))
+    SymbolAliasMap SAM;
+    SAM[S.ES.intern(Alias)] = {S.ES.intern(Aliasee), JITSymbolFlags::Exported};
+    if (auto Err = JD.define(symbolAliases(std::move(SAM))))
       return Err;
   }
 
@@ -1851,14 +1766,6 @@ static Error addLibraries(Session &S,
                                      inconvertibleErrorCode());
   }
 
-  // Add platform and process symbols if available.
-  for (auto &[Idx, JD] : IdxToJD) {
-    if (S.PlatformJD)
-      JD->addToLinkOrder(*S.PlatformJD);
-    if (S.ProcessSymsJD)
-      JD->addToLinkOrder(*S.ProcessSymsJD);
-  }
-
   return Error::success();
 }
 

diff  --git a/llvm/tools/llvm-jitlink/llvm-jitlink.h b/llvm/tools/llvm-jitlink/llvm-jitlink.h
index 3ff406b7b82df..54a16ba171b36 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink.h
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink.h
@@ -31,8 +31,6 @@ struct Session {
 
   orc::ExecutionSession ES;
   orc::JITDylib *MainJD = nullptr;
-  orc::JITDylib *ProcessSymsJD = nullptr;
-  orc::JITDylib *PlatformJD = nullptr;
   orc::ObjectLinkingLayer ObjLayer;
   orc::JITDylibSearchOrder JDSearchOrder;
   SubtargetFeatures Features;


        


More information about the llvm-commits mailing list