From 660479ab1ac25a016e07634c1313427489bb6747 Mon Sep 17 00:00:00 2001 From: "Z. Liu" Date: Mon, 3 Mar 2025 22:40:15 +0800 Subject: [PATCH 1/4] preload: fix build issue with clang 19 librdmacm/preload.c:796:9: error: at most one overload for a given name may lack the 'overloadable' attribute librdmacm/preload.c:796:9: warning: no previous prototype for function 'recvfrom' [-Wmissing-prototypes] Signed-off-by: Z. Liu --- CMakeLists.txt | 7 +++++++ buildlib/config.h.in | 2 ++ librdmacm/preload.c | 9 +++++++++ 3 files changed, 18 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f5b4139b..26d658830 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -394,6 +394,13 @@ if (NOT HAVE_LONG_LONG_U64) add_definitions("-D__SANE_USERSPACE_TYPES__") endif() +# Check __SOCKADDR_ARG exist and is union +RDMA_Check_C_Compiles(HAVE_SOCKADDR_ARG_AS_UNION " +#define _GNU_SOURCE +#include + int main(int argc,const char *argv[]) {struct sockaddr addr;__SOCKADDR_ARG sa; sa.__sockaddr__ = (struct sockaddr *)&addr; (void)addr; (void)sa; return 0;}" +) + # glibc and kernel uapi headers can co-exist CHECK_C_SOURCE_COMPILES(" #include diff --git a/buildlib/config.h.in b/buildlib/config.h.in index c5b0bf557..663248041 100644 --- a/buildlib/config.h.in +++ b/buildlib/config.h.in @@ -50,6 +50,8 @@ #cmakedefine HAVE_WORKING_IF_H 1 +#cmakedefine HAVE_SOCKADDR_ARG_AS_UNION 1 + // Operating mode for symbol versions #cmakedefine HAVE_FULL_SYMBOL_VERSIONS 1 #cmakedefine HAVE_LIMITED_SYMBOL_VERSIONS 1 diff --git a/librdmacm/preload.c b/librdmacm/preload.c index d46beb1bb..b3175dd5d 100644 --- a/librdmacm/preload.c +++ b/librdmacm/preload.c @@ -794,12 +794,21 @@ ssize_t recv(int socket, void *buf, size_t len, int flags) } ssize_t recvfrom(int socket, void *buf, size_t len, int flags, +#if HAVE_SOCKADDR_ARG_AS_UNION + __SOCKADDR_ARG src_addr, socklen_t *addrlen) +#else struct sockaddr *src_addr, socklen_t *addrlen) +#endif { int fd; return (fd_fork_get(socket, &fd) == fd_rsocket) ? +#if HAVE_SOCKADDR_ARG_AS_UNION + rrecvfrom(fd, buf, len, flags, src_addr.__sockaddr__, addrlen) : + real.recvfrom(fd, buf, len, flags, src_addr.__sockaddr__, addrlen); +#else rrecvfrom(fd, buf, len, flags, src_addr, addrlen) : real.recvfrom(fd, buf, len, flags, src_addr, addrlen); +#endif } ssize_t recvmsg(int socket, struct msghdr *msg, int flags) -- 2.45.2 From c13a26a463750f3bb3db5697069ee9e9bf5a5556 Mon Sep 17 00:00:00 2001 From: "Z. Liu" Date: Wed, 5 Mar 2025 01:19:37 +0800 Subject: [PATCH 2/4] libibverbs.map: ibv_cmd_query_device had been removed Signed-off-by: Z. Liu --- libibverbs/libibverbs.map.in | 1 - 1 file changed, 1 deletion(-) diff --git a/libibverbs/libibverbs.map.in b/libibverbs/libibverbs.map.in index 11268cefd..a473549ca 100644 --- a/libibverbs/libibverbs.map.in +++ b/libibverbs/libibverbs.map.in @@ -222,7 +222,6 @@ IBVERBS_PRIVATE_@IBVERBS_PABI_VERSION@ { ibv_cmd_post_send; ibv_cmd_post_srq_recv; ibv_cmd_query_context; - ibv_cmd_query_device; ibv_cmd_query_device_any; ibv_cmd_query_mr; ibv_cmd_query_port; -- 2.45.2 From f564d1938bc03eb3b5f1fe5d6fadf7be81d922a6 Mon Sep 17 00:00:00 2001 From: "Z. Liu" Date: Wed, 5 Mar 2025 09:08:48 +0800 Subject: [PATCH 3/4] libefa.map: efadv_wc_read_sgid is static inline Signed-off-by: Z. Liu --- providers/efa/libefa.map | 1 - 1 file changed, 1 deletion(-) diff --git a/providers/efa/libefa.map b/providers/efa/libefa.map index eff647d18..d27b58c16 100644 --- a/providers/efa/libefa.map +++ b/providers/efa/libefa.map @@ -17,7 +17,6 @@ EFA_1.2 { global: efadv_cq_from_ibv_cq_ex; efadv_create_cq; - efadv_wc_read_sgid; } EFA_1.1; EFA_1.3 { -- 2.45.2 From 25cf8775b956ef81034aa314c1470634ea9ab5d3 Mon Sep 17 00:00:00 2001 From: "Z. Liu" Date: Fri, 7 Mar 2025 10:31:13 +0800 Subject: [PATCH 4/4] cmake: add ${BUILD_INCLUDE} for __SOCKADDR_ARG test because the sparse check has sys/socket.h patched Signed-off-by: Z. Liu --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 26d658830..dce05c78b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -395,11 +395,14 @@ if (NOT HAVE_LONG_LONG_U64) endif() # Check __SOCKADDR_ARG exist and is union +set(SAFE_CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}") +set(CMAKE_REQUIRED_INCLUDES "${BUILD_INCLUDE}") RDMA_Check_C_Compiles(HAVE_SOCKADDR_ARG_AS_UNION " #define _GNU_SOURCE #include int main(int argc,const char *argv[]) {struct sockaddr addr;__SOCKADDR_ARG sa; sa.__sockaddr__ = (struct sockaddr *)&addr; (void)addr; (void)sa; return 0;}" ) +set(CMAKE_REQUIRED_INCLUDES "${SAFE_CMAKE_REQUIRED_INCLUDES}") # glibc and kernel uapi headers can co-exist CHECK_C_SOURCE_COMPILES(" -- 2.45.2