You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2019/07/17 21:29:15 UTC
[arrow] branch master updated: ARROW-5894: [Gandiva][C++] Added a
linker script for libgandiva.so to restrict libstdc++ symbols.
This is an automated email from the ASF dual-hosted git repository.
wesm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new 0061f00 ARROW-5894: [Gandiva][C++] Added a linker script for libgandiva.so to restrict libstdc++ symbols.
0061f00 is described below
commit 0061f003a3b7f956bc3a9ef3b659fd88059f4491
Author: Zhuo Peng <18...@users.noreply.github.com>
AuthorDate: Wed Jul 17 16:29:07 2019 -0500
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 <18...@users.noreply.github.com>
Closes #4883 from brills/linker-script and squashes the following commits:
67e134740 <Zhuo Peng> cmake format
778a194cb <Zhuo Peng> Only restrict symbols from libstdc++
a8e0bac7a <Zhuo Peng> Added a linker script for Gandiva to limit exported symbols
---
cpp/src/gandiva/CMakeLists.txt | 9 +++++++++
cpp/src/gandiva/symbols.map | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+)
diff --git a/cpp/src/gandiva/CMakeLists.txt b/cpp/src/gandiva/CMakeLists.txt
index 468ecc7..df0c54e 100644
--- a/cpp/src/gandiva/CMakeLists.txt
+++ b/cpp/src/gandiva/CMakeLists.txt
@@ -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
diff --git a/cpp/src/gandiva/symbols.map b/cpp/src/gandiva/symbols.map
new file mode 100644
index 0000000..77f0001
--- /dev/null
+++ b/cpp/src/gandiva/symbols.map
@@ -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*;
+ };
+};
+