From cbfb12469ba312c8ff513397b29bef470f151caa Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Fri, 18 Jun 2021 21:42:43 +1000 Subject: [PATCH] [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 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. --- .../llvm/ExecutionEngine/Orc/OrcRPCTargetProcessControl.h | 6 ++++-- llvm/include/llvm/ExecutionEngine/Orc/Shared/Serialization.h | 5 ----- .../llvm/ExecutionEngine/Orc/TargetProcess/OrcRPCTPCServer.h | 10 ++++++---- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCTargetProcessControl.h b/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCTargetProcessControl.h index 708612e..d42c5c4 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCTargetProcessControl.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/OrcRPCTargetProcessControl.h @@ -362,8 +362,10 @@ public: << formatv("{0:x16}", WrapperFnAddr) << " with " << formatv("{0:x16}", ArgBuffer.size()) << " argument buffer\n"; }); - auto Result = - EP.template callB(WrapperFnAddr, ArgBuffer); + auto Result = EP.template callB( + WrapperFnAddr, + ArrayRef(reinterpret_cast(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 849c947..0ea483b 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/Serialization.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/Serialization.h @@ -58,11 +58,6 @@ public: static const char *getName() { return "void"; } }; -template <> class SerializationTypeName { -public: - static const char *getName() { return "char"; } -}; - template <> class SerializationTypeName { 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 9be6093..458947c 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/OrcRPCTPCServer.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/OrcRPCTPCServer.h @@ -358,7 +358,7 @@ public: class RunWrapper : public shared::RPCFunction)> { + JITTargetAddress, std::vector)> { public: static const char *getName() { return "RunWrapper"; } }; @@ -580,12 +580,14 @@ private: ProgramNameOverride); } - shared::WrapperFunctionResult runWrapper(JITTargetAddress WrapperFnAddr, - const std::vector &ArgBuffer) { + shared::WrapperFunctionResult + runWrapper(JITTargetAddress WrapperFnAddr, + const std::vector &ArgBuffer) { using WrapperFnTy = shared::detail::CWrapperFunctionResult (*)( const char *Data, uint64_t Size); auto *WrapperFn = jitTargetAddressToFunction(WrapperFnAddr); - return WrapperFn(ArgBuffer.data(), ArgBuffer.size()); + return WrapperFn(reinterpret_cast(ArgBuffer.data()), + ArgBuffer.size()); } void closeConnection() { Finished = true; } -- 2.7.4