From 2fc0aa52def52ce3cd02b5810b4609b114237278 Mon Sep 17 00:00:00 2001 From: GaoChao Date: Wed, 26 Nov 2025 17:07:42 +0800 Subject: [PATCH 1/2] build: control symbol visibility in shared library - Add -fvisibility=hidden compiler flag to hide all symbols by default - Add visibility("default") attribute to 10 public API functions in libobmm.h - Hide internal vendor_adaptor functions from dynamic library exports - Only expose functions defined in libobmm.h to maintain clean API boundary Signed-off-by: GaoChao --- src/libobmm/CMakeLists.txt | 2 +- src/libobmm/libobmm.c | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/libobmm/CMakeLists.txt b/src/libobmm/CMakeLists.txt index b11d937..5928640 100644 --- a/src/libobmm/CMakeLists.txt +++ b/src/libobmm/CMakeLists.txt @@ -10,7 +10,7 @@ set_target_properties(OBMM_SO PROPERTIES OUTPUT_NAME ${OBMM_NAME} VERSION 1.0.1 SOVERSION 1) -target_compile_options(OBMM_SO PRIVATE -Wall -Wextra -Wfloat-equal -fno-common -std=gnu99 +target_compile_options(OBMM_SO PRIVATE -Wall -Wextra -Wfloat-equal -fno-common -std=gnu99 -fvisibility=hidden -Wuninitialized -Wno-error -Wno-error=format -Wundef -Wunused -Wdate-time -Wshadow -Wvla -Wdisabled-optimization -Wempty-body -Wignored-qualifiers -Wimplicit-fallthrough=3 -Wtype-limits -Wshift-negative-value -Wswitch-default -Wframe-larger-than=8192 diff --git a/src/libobmm/libobmm.c b/src/libobmm/libobmm.c index 897e2b4..19d4add 100644 --- a/src/libobmm/libobmm.c +++ b/src/libobmm/libobmm.c @@ -52,7 +52,7 @@ static int obmm_dev_get_fd(void) return obmm_dev_fd; } -int obmm_query_memid_by_pa(unsigned long pa, mem_id *id, unsigned long *offset) +__attribute__((visibility("default"))) int obmm_query_memid_by_pa(unsigned long pa, mem_id *id, unsigned long *offset) { struct obmm_cmd_addr_query cmd_addr_query; int fd, ret; @@ -75,7 +75,7 @@ int obmm_query_memid_by_pa(unsigned long pa, mem_id *id, unsigned long *offset) return 0; } -int obmm_query_pa_by_memid(mem_id id, unsigned long offset, unsigned long *pa) +__attribute__((visibility("default"))) int obmm_query_pa_by_memid(mem_id id, unsigned long offset, unsigned long *pa) { struct obmm_cmd_addr_query cmd_addr_query; int fd, ret; @@ -96,7 +96,7 @@ int obmm_query_pa_by_memid(mem_id id, unsigned long offset, unsigned long *pa) return 0; } -mem_id obmm_export_useraddr(int pid, void* va, size_t length, +__attribute__((visibility("default"))) mem_id obmm_export_useraddr(int pid, void* va, size_t length, unsigned long flags, struct obmm_mem_desc *desc) { struct obmm_cmd_export_pid cmd_export_pid = {0}; @@ -139,7 +139,7 @@ mem_id obmm_export_useraddr(int pid, void* va, size_t length, return cmd_export_pid.mem_id; } -mem_id obmm_export(const size_t length[OBMM_MAX_LOCAL_NUMA_NODES], +__attribute__((visibility("default"))) mem_id obmm_export(const size_t length[OBMM_MAX_LOCAL_NUMA_NODES], unsigned long flags, struct obmm_mem_desc *desc) { struct obmm_cmd_export cmd_export; @@ -207,7 +207,7 @@ static void fill_import_cmd_info(const struct obmm_mem_desc *desc, memcpy(cmd_import->seid, desc->seid, sizeof(cmd_import->seid)); } -mem_id obmm_import(const struct obmm_mem_desc *desc, unsigned long flags, +__attribute__((visibility("default"))) mem_id obmm_import(const struct obmm_mem_desc *desc, unsigned long flags, int base_dist, int *numa) { struct obmm_cmd_import cmd_import; @@ -256,7 +256,7 @@ mem_id obmm_import(const struct obmm_mem_desc *desc, unsigned long flags, return memid; } -int obmm_unexport(mem_id id, unsigned long flags) +__attribute__((visibility("default"))) int obmm_unexport(mem_id id, unsigned long flags) { struct obmm_cmd_unexport cmd_unexport; int fd; @@ -276,7 +276,7 @@ int obmm_unexport(mem_id id, unsigned long flags) return ioctl(fd, OBMM_CMD_UNEXPORT, &cmd_unexport); } -int obmm_unimport(mem_id id, unsigned long flags) +__attribute__((visibility("default"))) int obmm_unimport(mem_id id, unsigned long flags) { struct obmm_cmd_unimport cmd_unimport; int fd; @@ -296,7 +296,7 @@ int obmm_unimport(mem_id id, unsigned long flags) return ioctl(fd, OBMM_CMD_UNIMPORT, &cmd_unimport); } -int obmm_set_ownership(int fd, void *start, void *end, int prot) +__attribute__((visibility("default"))) int obmm_set_ownership(int fd, void *start, void *end, int prot) { uint64_t mem_attr; struct obmm_cmd_update_range update_info; @@ -320,7 +320,8 @@ int obmm_set_ownership(int fd, void *start, void *end, int prot) return ioctl(fd, OBMM_SHMDEV_UPDATE_RANGE, &update_info); } -int obmm_preimport(struct obmm_preimport_info *preimport_info, unsigned long flags) +__attribute__((visibility("default"))) int obmm_preimport(struct obmm_preimport_info *preimport_info, + unsigned long flags) { struct obmm_cmd_preimport cmd; int ret, fd, errsv; @@ -366,7 +367,8 @@ int obmm_preimport(struct obmm_preimport_info *preimport_info, unsigned long fla return 0; } -int obmm_unpreimport(const struct obmm_preimport_info *preimport_info, unsigned long flags) +__attribute__((visibility("default"))) int obmm_unpreimport(const struct obmm_preimport_info *preimport_info, + unsigned long flags) { struct obmm_cmd_preimport cmd; int fd; -- Gitee From 48e9c779b19c7662f146803612963560ef0c5a4e Mon Sep 17 00:00:00 2001 From: GaoChao Date: Wed, 26 Nov 2025 17:49:40 +0800 Subject: [PATCH 2/2] Add cmake version check. Signed-off-by: GaoChao --- src/libobmm/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libobmm/CMakeLists.txt b/src/libobmm/CMakeLists.txt index 5928640..22b8c84 100644 --- a/src/libobmm/CMakeLists.txt +++ b/src/libobmm/CMakeLists.txt @@ -1,3 +1,6 @@ +cmake_minimum_required(VERSION 3.10) + +project(OBMM_SO C) aux_source_directory(${CMAKE_CURRENT_LIST_DIR} LIBOBMM_DIR_SRCS) add_library(OBMM_SO SHARED ${LIBOBMM_DIR_SRCS}) -- Gitee