aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Huber <huberjn@outlook.com>2024-07-02 13:23:53 -0500
committerGitHub <noreply@github.com>2024-07-02 13:23:53 -0500
commit3c50cbfda4fc3ad85349167132f7ed809ecc685a (patch)
tree093a24d3ee8cc426da0c453482a393c2141808ba
parent4d8883759432bb5fe6c5039b88c035d127ce948d (diff)
downloadllvm-3c50cbfda4fc3ad85349167132f7ed809ecc685a.zip
llvm-3c50cbfda4fc3ad85349167132f7ed809ecc685a.tar.gz
llvm-3c50cbfda4fc3ad85349167132f7ed809ecc685a.tar.bz2
[DeviceRTL] Make defined 'libc' functions weak in OpenMP (#97356)
Summary: These functions provide special-case implementations internal to the OpenMP device runtime. This can potentially conflict with the symbols pulled in from the actual GPU `libc`. This patch makes these weak, so in the case that the GPU libc functions exist they will be overridden. This should not impact performance in the average case because the old `-mlink-builtin-bitcode` version does internalization, deleting weak, and the new LTO path will resolve to the strong reference and then internalize it.
-rw-r--r--offload/DeviceRTL/src/Debug.cpp4
-rw-r--r--offload/DeviceRTL/src/LibC.cpp4
2 files changed, 4 insertions, 4 deletions
diff --git a/offload/DeviceRTL/src/Debug.cpp b/offload/DeviceRTL/src/Debug.cpp
index 31cd54e..4e16591 100644
--- a/offload/DeviceRTL/src/Debug.cpp
+++ b/offload/DeviceRTL/src/Debug.cpp
@@ -26,8 +26,8 @@ using namespace ompx;
extern "C" {
void __assert_assume(bool condition) { __builtin_assume(condition); }
-void __assert_fail(const char *expr, const char *file, unsigned line,
- const char *function) {
+[[gnu::weak]] void __assert_fail(const char *expr, const char *file,
+ unsigned line, const char *function) {
__assert_fail_internal(expr, nullptr, file, line, function);
}
void __assert_fail_internal(const char *expr, const char *msg, const char *file,
diff --git a/offload/DeviceRTL/src/LibC.cpp b/offload/DeviceRTL/src/LibC.cpp
index e587c30..4bca5d2 100644
--- a/offload/DeviceRTL/src/LibC.cpp
+++ b/offload/DeviceRTL/src/LibC.cpp
@@ -49,7 +49,7 @@ int32_t omp_vprintf(const char *Format, void *Arguments, uint32_t) {
extern "C" {
-int memcmp(const void *lhs, const void *rhs, size_t count) {
+[[gnu::weak]] int memcmp(const void *lhs, const void *rhs, size_t count) {
auto *L = reinterpret_cast<const unsigned char *>(lhs);
auto *R = reinterpret_cast<const unsigned char *>(rhs);
@@ -60,7 +60,7 @@ int memcmp(const void *lhs, const void *rhs, size_t count) {
return 0;
}
-void memset(void *dst, int C, size_t count) {
+[[gnu::weak]] void memset(void *dst, int C, size_t count) {
auto *dstc = reinterpret_cast<char *>(dst);
for (size_t I = 0; I < count; ++I)
dstc[I] = C;