Skip to content

Commit

Permalink
ARROW-5894: [Gandiva][C++] Added a linker script for libgandiva.so to…
Browse files Browse the repository at this point in the history
… 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
  • Loading branch information
brills authored and kszucs committed Jul 22, 2019
1 parent 5d7234a commit 5b4e2f2
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
9 changes: 9 additions & 0 deletions cpp/src/gandiva/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,15 @@ endif()
# set(GANDIVA_SHARED_LINK_FLAGS "${GANDIVA_SHARED_LINK_FLAGS} /EXPORT:${SYMBOL}")
# endforeach()
# endif()
if(NOT APPLE AND NOT MSVC)
# Localize thirdparty symbols using a linker version script. This hides them
# from the client application. The OS X linker does not support the
# version-script option.
set(GANDIVA_VERSION_SCRIPT_FLAGS
"-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/symbols.map")
set(GANDIVA_SHARED_LINK_FLAGS
"${GANDIVA_SHARED_LINK_FLAGS} ${GANDIVA_VERSION_SCRIPT_FLAGS}")
endif()

add_arrow_lib(gandiva
SOURCES
Expand Down
35 changes: 35 additions & 0 deletions cpp/src/gandiva/symbols.map
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

{
# Symbols marked as 'local' are not exported by the DSO and thus may not
# be used by client applications.
local:
# devtoolset / static-libstdc++ symbols
__cxa_*;
__once_proxy;

extern "C++" {
# devtoolset or -static-libstdc++ - the Red Hat devtoolset statically
# links c++11 symbols into binaries so that the result may be executed on
# a system with an older libstdc++ which doesn't include the necessary
# c++11 symbols.
std::*;
*std::__once_call*;
};
};

0 comments on commit 5b4e2f2

Please sign in to comment.