Skip to content

Commit

Permalink
CMake: Test the linker too for -mno-direct-extern-access
Browse files Browse the repository at this point in the history
The GNU binutils ld linker needed a patch after the tagging of 2.38 to
make the new feature work. Before this patch, the linker will fail to
link when protected visibility symbols are used in the library, so don't
enable the feature unless the linker is recent enough.

GNU binutils gold from that version passes this test.

LLVM lld is unknown (I didn't test), but LLVM was consulted in
developing the feature.

Fixes: QTBUG-103493
Change-Id: Ibcde9b9795ad42ac9978fffd16f1c80ca20953ff
Reviewed-by: Qt CI Bot <[email protected]>
Reviewed-by: Marc Mutz <[email protected]>
  • Loading branch information
thiagomacieira committed May 25, 2022
1 parent 845491e commit fdd7227
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 2 deletions.
9 changes: 9 additions & 0 deletions config.tests/direct_extern_access/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.16)
project(direct_extern_access LANGUAGES CXX)

# this is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087

add_library(no_extern_access_lib SHARED lib.cpp)
add_executable(no_extern_access_main main.cpp)
target_compile_options(no_extern_access_lib PUBLIC "-mno-direct-extern-access")
target_link_libraries(no_extern_access_main no_extern_access_lib)
10 changes: 10 additions & 0 deletions config.tests/direct_extern_access/lib.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Copyright (C) 2022 Intel Corporation.
// SPDX-License-Identifier: MIT

// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087

#define BUILD
#include "lib.h"

S::~S() { }
void S::f() { }
16 changes: 16 additions & 0 deletions config.tests/direct_extern_access/lib.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Copyright (C) 2022 Intel Corporation.
// SPDX-License-Identifier: MIT

// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087

#ifdef BUILD
# define LIB_API __attribute__((visibility("protected")))
#else
# define LIB_API __attribute__((visibility("default")))
#endif

struct LIB_API S
{
virtual ~S();
virtual void f();
};
12 changes: 12 additions & 0 deletions config.tests/direct_extern_access/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Copyright (C) 2022 Intel Corporation.
// SPDX-License-Identifier: MIT

// This is the test found in https://sourceware.org/bugzilla/show_bug.cgi?id=29087

#include "lib.h"

struct Local : S { };
int main()
{
Local l;
}
4 changes: 2 additions & 2 deletions configure.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -188,9 +188,9 @@ qt_config_compiler_supports_flag_test(optimize_debug
FLAG "-Og"
)

qt_config_compiler_supports_flag_test(no_extern_direct_access
qt_config_compile_test(no_extern_direct_access
LABEL "-mno-direct-extern-access support"
FLAG "-mno-direct-extern-access"
PROJECT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/config.tests/direct_extern_access"
)

qt_config_linker_supports_flag_test(enable_new_dtags
Expand Down

0 comments on commit fdd7227

Please sign in to comment.