Skip to content

Commit 5b4e2f2

Browse files
brillskszucs
authored andcommitted
ARROW-5894: [Gandiva][C++] Added a linker script for libgandiva.so to restrict libstdc++ symbols.
I tried more aggressive restrictions that exports only *gandiva::* but unit tests crashed. (see the previous commit in this PR). Author: Zhuo Peng <1835738+brills@users.noreply.github.com> Closes #4883 from brills/linker-script and squashes the following commits: 67e1347 <Zhuo Peng> cmake format 778a194 <Zhuo Peng> Only restrict symbols from libstdc++ a8e0bac <Zhuo Peng> Added a linker script for Gandiva to limit exported symbols
1 parent 5d7234a commit 5b4e2f2

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

cpp/src/gandiva/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,15 @@ endif()
9595
# set(GANDIVA_SHARED_LINK_FLAGS "${GANDIVA_SHARED_LINK_FLAGS} /EXPORT:${SYMBOL}")
9696
# endforeach()
9797
# endif()
98+
if(NOT APPLE AND NOT MSVC)
99+
# Localize thirdparty symbols using a linker version script. This hides them
100+
# from the client application. The OS X linker does not support the
101+
# version-script option.
102+
set(GANDIVA_VERSION_SCRIPT_FLAGS
103+
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/symbols.map")
104+
set(GANDIVA_SHARED_LINK_FLAGS
105+
"${GANDIVA_SHARED_LINK_FLAGS} ${GANDIVA_VERSION_SCRIPT_FLAGS}")
106+
endif()
98107

99108
add_arrow_lib(gandiva
100109
SOURCES

cpp/src/gandiva/symbols.map

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Licensed to the Apache Software Foundation (ASF) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The ASF licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
18+
{
19+
# Symbols marked as 'local' are not exported by the DSO and thus may not
20+
# be used by client applications.
21+
local:
22+
# devtoolset / static-libstdc++ symbols
23+
__cxa_*;
24+
__once_proxy;
25+
26+
extern "C++" {
27+
# devtoolset or -static-libstdc++ - the Red Hat devtoolset statically
28+
# links c++11 symbols into binaries so that the result may be executed on
29+
# a system with an older libstdc++ which doesn't include the necessary
30+
# c++11 symbols.
31+
std::*;
32+
*std::__once_call*;
33+
};
34+
};
35+

0 commit comments

Comments
 (0)