From 8c8f013cae9ee564c6e95087e15f293e6a4ba106 Mon Sep 17 00:00:00 2001 From: dingguangya Date: Tue, 19 Sep 2023 11:03:15 +0800 Subject: [PATCH] [Sync] Sync patch from openeuler/pin-gcc-client --- 0011-Fix-BUILD-errors.patch | 37 +++ ...PluginClient-Update-transfer-command.patch | 216 ++++++++++++++++++ pin-gcc-client.spec | 10 +- 3 files changed, 262 insertions(+), 1 deletion(-) create mode 100644 0011-Fix-BUILD-errors.patch create mode 100644 0012-PluginClient-Update-transfer-command.patch diff --git a/0011-Fix-BUILD-errors.patch b/0011-Fix-BUILD-errors.patch new file mode 100644 index 0000000..57f3c24 --- /dev/null +++ b/0011-Fix-BUILD-errors.patch @@ -0,0 +1,37 @@ +From 767bc6e10b7286ba22a2a1c0129d978abf094d44 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=E9=83=91=E6=99=A8=E5=8D=89?= +Date: Thu, 7 Sep 2023 10:52:04 +0800 +Subject: [PATCH 1/2] Fix BUILD errors + +--- + CMakeLists.txt | 1 + + lib/PluginClient/PluginLog.cpp | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index fcd737b..a0df8c8 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -33,6 +33,7 @@ include(TableGen) + include(AddLLVM) + include(AddMLIR) + ++include_directories(${GRPC_INCLUDE_DIR}) + include_directories(${LLVM_INCLUDE_DIRS}) + include_directories(${MLIR_INCLUDE_DIRS}) + include_directories(${PROJECT_SOURCE_DIR}/include) +diff --git a/lib/PluginClient/PluginLog.cpp b/lib/PluginClient/PluginLog.cpp +index 7ace548..c9320a5 100644 +--- a/lib/PluginClient/PluginLog.cpp ++++ b/lib/PluginClient/PluginLog.cpp +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + #include "PluginClient/PluginLog.h" + + namespace PinClient { +-- +2.33.0 + diff --git a/0012-PluginClient-Update-transfer-command.patch b/0012-PluginClient-Update-transfer-command.patch new file mode 100644 index 0000000..1cd1c6f --- /dev/null +++ b/0012-PluginClient-Update-transfer-command.patch @@ -0,0 +1,216 @@ +From b622cc8d95f4ef8bd417d94974e9ff83104beab9 Mon Sep 17 00:00:00 2001 +From: Mingchuan Wu +Date: Sat, 2 Sep 2023 15:59:19 +0800 +Subject: [PATCH 2/2] [PluginClient] Update transfer command. + +--- + include/PluginAPI/BasicPluginOpsAPI.h | 1 + + include/PluginAPI/PluginClientAPI.h | 1 + + lib/PluginAPI/PluginClientAPI.cpp | 3 ++ + lib/PluginClient/PluginClient.cpp | 78 +++++++++++++++++++++++++-- + lib/Translate/GimpleToPluginOps.cpp | 11 ++-- + 5 files changed, 87 insertions(+), 7 deletions(-) + +diff --git a/include/PluginAPI/BasicPluginOpsAPI.h b/include/PluginAPI/BasicPluginOpsAPI.h +index 22da8df..37bd73d 100644 +--- a/include/PluginAPI/BasicPluginOpsAPI.h ++++ b/include/PluginAPI/BasicPluginOpsAPI.h +@@ -48,6 +48,7 @@ public: + virtual string FuncName(int64_t gccDataAddr) = 0; + virtual int GetDeclSourceLine(uint64_t gccDataAddr) = 0; + virtual int GetDeclSourceColumn(uint64_t gccDataAddr) = 0; ++ virtual void ShutdownCompile() = 0; + + // CGnode + virtual vector GetCGnodeIDs() = 0; +diff --git a/include/PluginAPI/PluginClientAPI.h b/include/PluginAPI/PluginClientAPI.h +index 26ef71d..43e7154 100644 +--- a/include/PluginAPI/PluginClientAPI.h ++++ b/include/PluginAPI/PluginClientAPI.h +@@ -38,6 +38,7 @@ public: + string FuncName(int64_t gccDataAddr) override; + int GetDeclSourceLine(uint64_t gccDataAddr) override; + int GetDeclSourceColumn(uint64_t gccDataAddr) override; ++ void ShutdownCompile() override; + + uint64_t CreateBlock(uint64_t, uint64_t) override; + void DeleteBlock(uint64_t, uint64_t) override; +diff --git a/lib/PluginAPI/PluginClientAPI.cpp b/lib/PluginAPI/PluginClientAPI.cpp +index 95e9ab3..55f46f7 100644 +--- a/lib/PluginAPI/PluginClientAPI.cpp ++++ b/lib/PluginAPI/PluginClientAPI.cpp +@@ -17,6 +17,7 @@ + */ + + #include "PluginAPI/PluginClientAPI.h" ++#include + + namespace PluginAPI { + +@@ -92,6 +93,8 @@ vector PluginClientAPI::GetAllFunc() + return gimpleConversion.GetAllFunction(); + } + ++void PluginClientAPI::ShutdownCompile() { _exit(0); } ++ + vector PluginClientAPI::GetFunctions() + { + return gimpleConversion.GetFunctionIDs(); +diff --git a/lib/PluginClient/PluginClient.cpp b/lib/PluginClient/PluginClient.cpp +index c9f3cb7..cf3036d 100644 +--- a/lib/PluginClient/PluginClient.cpp ++++ b/lib/PluginClient/PluginClient.cpp +@@ -25,6 +25,10 @@ + #include "Dialect/PluginTypes.h" + #include "PluginAPI/PluginClientAPI.h" + ++#include "gcc-plugin.h" ++#include "plugin-version.h" ++#include "toplev.h" ++#include "opts.h" + namespace PinClient { + using namespace mlir::Plugin; + using namespace mlir; +@@ -344,6 +348,16 @@ void SetDeclAlignResult(PluginClient *client, Json::Value& root, string& result) + client->ReceiveSendMsg("VoidResult", result); + } + ++void ShutdownCompile(PluginClient *client, Json::Value& root, string& result) ++{ ++ // Load our Dialect in this MLIR Context. ++ mlir::MLIRContext context; ++ context.getOrLoadDialect(); ++ PluginAPI::PluginClientAPI clientAPI(context); ++ clientAPI.ShutdownCompile(); ++ client->ReceiveSendMsg("VoidResult", result); ++} ++ + void SetUserAlignResult(PluginClient *client, Json::Value& root, string& result) + { + /// Json格式 +@@ -1335,6 +1349,7 @@ std::map g_getResultFunc = { + {"IsDomInfoAvailable", IsDomInfoAvailableResult}, + {"GetCurrentDefFromSSA", GetCurrentDefFromSSAResult}, + {"SetCurrentDefInSSA", SetCurrentDefInSSAResult}, ++ {"ShutdownCompile", ShutdownCompile}, + {"CopySSAOp", CopySSAOpResult}, + {"CreateSSAOp", CreateSSAOpResult}, + {"CreateNewDef", CreateNewDefResult}, +@@ -1543,7 +1558,12 @@ static bool WaitServer(const string& port) + mode_t mask = umask(0); + mode_t mode = 0666; // 权限是rwrwrw,跨进程时,其他用户也要可以访问 + string semFile = "wait_server_startup" + port; +- sem_t *sem = sem_open(semFile.c_str(), O_CREAT, mode, 0); ++ sem_t *sem = sem_open(semFile.c_str(), O_CREAT | O_EXCL, mode, 0); ++ // Semaphore exception handling. ++ if (sem == SEM_FAILED) { ++ sem_unlink(semFile.c_str()); ++ sem = sem_open(semFile.c_str(), O_CREAT, mode, 0); ++ } + umask(mask); + int i = 0; + for (; i < cnt; i++) { +@@ -1561,11 +1581,60 @@ static bool WaitServer(const string& port) + return true; + } + ++bool ExecuteWithCommand(string serverPath, string port, string level) ++{ ++ string inputFile (main_input_filename); ++ string cwd = get_current_dir_name(); ++ ++ string outputName=""; ++ for (int i = 0; i< save_decoded_options_count; ++i) { ++ if (!strcmp(save_decoded_options[i].canonical_option[0],"-o")) { ++ outputName = save_decoded_options[i].canonical_option[1]; ++ } ++ } ++ ++ string common_opt = ""; ++ for (int i = 0; i< save_decoded_options_count; ++i) { ++ if (!strcmp(save_decoded_options[i].canonical_option[0],"-I") || ++ !strcmp(save_decoded_options[i].canonical_option[0],"-D")) { ++ common_opt.append(save_decoded_options[i].canonical_option[0]); ++ common_opt.append(save_decoded_options[i].canonical_option[1]); ++ common_opt.append(" "); ++ } ++ if (!strcmp(save_decoded_options[i].canonical_option[0],"-std=gnu90")) { ++ common_opt.append(" -std=gnu90 "); ++ } ++ } ++ ++ string extra_opt = ""; ++ for (int i = 0; i< save_decoded_options_count; ++i) { ++ if (strcmp(save_decoded_options[i].canonical_option[0],"-I") && ++ strcmp(save_decoded_options[i].canonical_option[0],"-D") && ++ strcmp(save_decoded_options[i].canonical_option[0],"-o")) { ++ extra_opt.append(save_decoded_options[i].canonical_option[0]); ++ extra_opt.append(" "); ++ } ++ } ++ ++ if (execl(serverPath.c_str(), port.c_str(), level.c_str(), ++ inputFile.c_str(), cwd.c_str(), common_opt.c_str(), extra_opt.c_str(), outputName.c_str(), NULL) == -1) ++ { ++ return true; ++ } ++ return false; ++ ++} ++ + int PluginClient::ServerStart(pid_t& pid) + { + if (!grpcPort.FindUnusedPort()) { +- LOGE("cannot find port for grpc,port 40001-65535 all used!\n"); +- return -1; ++ // Rectify the fault that the port number is not released ++ // because the client is abnormal. ++ LOGW("cannot find port for grpc, try again!\n"); ++ if (!grpcPort.FindUnusedPort()) { ++ LOGE("cannot find port for grpc,port 40001-65534 all used!\n"); ++ return -1; ++ } + } + + int ret = 0; +@@ -1575,7 +1644,8 @@ int PluginClient::ServerStart(pid_t& pid) + if (pid == 0) { + LOGI("start plugin server!\n"); + string serverPath = input.GetServerPath(); +- if (execl(serverPath.c_str(), port.c_str(), std::to_string(input.GetLogLevel()).c_str(), NULL) == -1) { ++ string level = std::to_string(input.GetLogLevel()); ++ if (ExecuteWithCommand(serverPath, port, level)) { + DeleteGrpcPort(); + LOGE("server start fail! please check serverPath:%s\n", serverPath.c_str()); + ret = -1; +diff --git a/lib/Translate/GimpleToPluginOps.cpp b/lib/Translate/GimpleToPluginOps.cpp +index 80d4e87..4617c78 100644 +--- a/lib/Translate/GimpleToPluginOps.cpp ++++ b/lib/Translate/GimpleToPluginOps.cpp +@@ -1505,9 +1505,14 @@ Value GimpleToPluginOps::TreeToValue(uint64_t treeId) + unsigned HOST_WIDE_INT uinit = tree_to_uhwi(t); + initAttr = builder.getI64IntegerAttr(uinit); + } else { +- abort(); ++ wide_int val = wi::to_wide(t); ++ if (wi::neg_p(val, TYPE_SIGN(TREE_TYPE(t)))) { ++ val = -val; ++ } ++ signed HOST_WIDE_INT init = val.to_shwi(); ++ initAttr = builder.getI64IntegerAttr(init); + } +- GetTreeAttr(treeId, readOnly, rPluginType); ++ GetTreeAttr(treeId, readOnly, rPluginType); + opValue = builder.create( + builder.getUnknownLoc(), treeId, IDefineCode::IntCST, + readOnly, initAttr, rPluginType); +@@ -1887,4 +1892,4 @@ Value GimpleToPluginOps::MakeSsaName(mlir::Type type) + return TreeToValue(retId); + } + +-} // namespace PluginIR +\ No newline at end of file ++} // namespace PluginIR +-- +2.33.0 + diff --git a/pin-gcc-client.spec b/pin-gcc-client.spec index 57b8e29..31401f9 100644 --- a/pin-gcc-client.spec +++ b/pin-gcc-client.spec @@ -1,6 +1,6 @@ Name: pin-gcc-client Version: 0.4.1 -Release: 8 +Release: 9 Summary: A Pin (Plug-IN framework) client is implemented based on GCC plugin and can execute the compiler optimization pass in GCC. License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD URL: https://gitee.com/src-openeuler/pin-gcc-client @@ -20,6 +20,8 @@ Patch7: 0007-Pin-gcc-client-Fix-VectorType.patch Patch8: 0008-Pin-gcc-client-Fix-struct-self-contained-CallOp-Tree.patch Patch9: 0009-Pin-gcc-client-Fix-TreeToValue-VAR_DECL-and-ARRAY_TY.patch Patch10: 0010-PluginClient-Fix-the-bug-during-multi-process-compil.patch +Patch11: 0011-Fix-BUILD-errors.patch +Patch12: 0012-PluginClient-Update-transfer-command.patch %description A Pin (Plug-IN framework) client is implemented based on GCC plugin and can execute the compiler optimization pass in GCC. @@ -62,6 +64,12 @@ find %{_libdir} -type f -name "*.so" -exec strip "{}" ";" %config(noreplace) /etc/ld.so.conf.d/%{name}-%{_arch}.conf %changelog +* Tue Sep 19 2023 dingguangya - 0.4.1-9 +- Type:SPEC +- ID:NA +- SUG:NA +- DESC:Sync patch from openeuler/pin-gcc-client + * Tue May 09 2023 shenbowen - 0.4.1-8 - Type:SPEC - ID:NA -- Gitee