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*;
+    };
+};
+