Skip to content

Commit 725af51

Browse files
committed
avoid interposition (linux only)
1 parent bbe4d43 commit 725af51

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

cmake/cage_build_configuration.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ macro(cage_build_configuration)
7575
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
7676
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
7777
else()
78+
# make runtime loader look for local symbols first
79+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Bsymbolic")
80+
7881
# link time optimizations
7982
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto")
8083
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto")

sources/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ if(MSVC)
2929
target_compile_definitions(cage-core PUBLIC "CAGE_API_IMPORT=__declspec(dllimport)")
3030
target_compile_definitions(cage-core PUBLIC "CAGE_FORCE_INLINE=__forceinline")
3131
else()
32-
target_compile_definitions(cage-core PUBLIC "CAGE_API_EXPORT=[[gnu::visibility(\"default\")]]")
33-
target_compile_definitions(cage-core PUBLIC "CAGE_API_IMPORT=[[gnu::visibility(\"default\")]]")
32+
# protected, unlike default, prevents interposition
33+
target_compile_definitions(cage-core PUBLIC "CAGE_API_EXPORT=[[gnu::visibility(\"protected\")]]")
34+
target_compile_definitions(cage-core PUBLIC "CAGE_API_IMPORT=[[gnu::visibility(\"protected\")]]")
3435
target_compile_definitions(cage-core PUBLIC "CAGE_FORCE_INLINE=[[gnu::always_inline]]inline")
3536
endif()
3637
if(WIN32)

0 commit comments

Comments
 (0)