[llvm] cbfb124 - [ORC] Use uint8_t rather than char for RPC wrapper-function calls.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 18 04:56:18 PDT 2021


Author: Lang Hames
Date: 2021-06-18T21:56:09+10:00
New Revision: cbfb12469ba312c8ff513397b29bef470f151caa

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

LOG: [ORC] Use uint8_t rather than char for RPC wrapper-function calls.

This partially reverts 838490de7ed, which broke some Solaris bots. Apparently
Solaris defines int8_t as char rather than signed char, which made the
SerializationTypeName<char> specialization a redefinition.

This partial revert isolates use of uint8_t buffers to ORC-RPC handling of
wrapper functions only. The TargetProcessControl::runWrapper method will
continue to use char buffers.

Added: 
    

Modified: 
    llvm/include/llvm/ExecutionEngine/Orc/OrcRPCTargetProcessControl.h
    llvm/include/llvm/ExecutionEngine/Orc/Shared/Serialization.h
    llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/OrcRPCTPCServer.h

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCTargetProcessControl.h b/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCTargetProcessControl.h
index 708612e838ca7..d42c5c4d6dd8b 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCTargetProcessControl.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCTargetProcessControl.h
@@ -362,8 +362,10 @@ class OrcRPCTargetProcessControlBase : public TargetProcessControl {
              << formatv("{0:x16}", WrapperFnAddr) << " with "
              << formatv("{0:x16}", ArgBuffer.size()) << " argument buffer\n";
     });
-    auto Result =
-        EP.template callB<orcrpctpc::RunWrapper>(WrapperFnAddr, ArgBuffer);
+    auto Result = EP.template callB<orcrpctpc::RunWrapper>(
+        WrapperFnAddr,
+        ArrayRef<uint8_t>(reinterpret_cast<const uint8_t *>(ArgBuffer.data()),
+                          ArgBuffer.size()));
     return Result;
   }
 

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/Serialization.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/Serialization.h
index 849c947c18cc3..0ea483ba2abb0 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/Serialization.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/Serialization.h
@@ -58,11 +58,6 @@ template <> class SerializationTypeName<void> {
   static const char *getName() { return "void"; }
 };
 
-template <> class SerializationTypeName<char> {
-public:
-  static const char *getName() { return "char"; }
-};
-
 template <> class SerializationTypeName<int8_t> {
 public:
   static const char *getName() { return "int8_t"; }

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/OrcRPCTPCServer.h b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/OrcRPCTPCServer.h
index 9be6093bcc436..458947cc4d443 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/OrcRPCTPCServer.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/OrcRPCTPCServer.h
@@ -358,7 +358,7 @@ class RunMain
 class RunWrapper
     : public shared::RPCFunction<RunWrapper,
                                  shared::WrapperFunctionResult(
-                                     JITTargetAddress, std::vector<char>)> {
+                                     JITTargetAddress, std::vector<uint8_t>)> {
 public:
   static const char *getName() { return "RunWrapper"; }
 };
@@ -580,12 +580,14 @@ template <typename RPCEndpointT> class OrcRPCTPCServer {
         ProgramNameOverride);
   }
 
-  shared::WrapperFunctionResult runWrapper(JITTargetAddress WrapperFnAddr,
-                                           const std::vector<char> &ArgBuffer) {
+  shared::WrapperFunctionResult
+  runWrapper(JITTargetAddress WrapperFnAddr,
+             const std::vector<uint8_t> &ArgBuffer) {
     using WrapperFnTy = shared::detail::CWrapperFunctionResult (*)(
         const char *Data, uint64_t Size);
     auto *WrapperFn = jitTargetAddressToFunction<WrapperFnTy>(WrapperFnAddr);
-    return WrapperFn(ArgBuffer.data(), ArgBuffer.size());
+    return WrapperFn(reinterpret_cast<const char *>(ArgBuffer.data()),
+                     ArgBuffer.size());
   }
 
   void closeConnection() { Finished = true; }


        


More information about the llvm-commits mailing list