lawrence_danna created this revision.
lawrence_danna added reviewers: jasonmolenda, JDevlieghere, jingham.
Herald added a subscriber: mgorny.
lawrence_danna requested review of this revision.
Herald added a project: LLDB.

LLDB doesn't use only the python stable ABI, which means loading
it into an incompatible python can cause the process to crash.
_lldb.so should be named with the full EXT_SUFFIX from sysconfig

- such as _lldb.cpython-39-darwin.so -- so this doesn't happen.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D112972

Files:
  lldb/CMakeLists.txt
  lldb/bindings/python/CMakeLists.txt


Index: lldb/bindings/python/CMakeLists.txt
===================================================================
--- lldb/bindings/python/CMakeLists.txt
+++ lldb/bindings/python/CMakeLists.txt
@@ -138,13 +138,14 @@
     set(LIBLLDB_SYMLINK_DEST 
"${LLVM_SHLIB_OUTPUT_INTDIR}/liblldb${CMAKE_SHARED_LIBRARY_SUFFIX}")
   endif()
   if(WIN32)
+    # FIXME should we use EXT_SUFFIX on windows?
     if(CMAKE_BUILD_TYPE STREQUAL Debug)
       set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb_d.pyd")
     else()
       set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb.pyd")
     endif()
   else()
-    set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb.so")
+    set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb${LLDB_PYTHON_EXT_SUFFIX}")
   endif()
   create_relative_symlink(${swig_target} ${LIBLLDB_SYMLINK_DEST}
                           ${lldb_python_target_dir} 
${LIBLLDB_SYMLINK_OUTPUT_FILE})
Index: lldb/CMakeLists.txt
===================================================================
--- lldb/CMakeLists.txt
+++ lldb/CMakeLists.txt
@@ -37,18 +37,29 @@
           -c "import distutils.sysconfig; 
print(distutils.sysconfig.get_python_lib(True, False, ''))"
       OUTPUT_VARIABLE LLDB_PYTHON_DEFAULT_RELATIVE_PATH
       OUTPUT_STRIP_TRAILING_WHITESPACE)
-
     file(TO_CMAKE_PATH ${LLDB_PYTHON_DEFAULT_RELATIVE_PATH} 
LLDB_PYTHON_DEFAULT_RELATIVE_PATH)
+    execute_process(
+      COMMAND ${Python3_EXECUTABLE}
+          -c "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))"
+      OUTPUT_VARIABLE LLDB_PYTHON_DEFAULT_EXT_SUFFIX
+      OUTPUT_STRIP_TRAILING_WHITESPACE)
   else ()
     if ("${LLDB_PYTHON_RELATIVE_PATH}" STREQUAL "")
       message(FATAL_ERROR
         "Crosscompiling LLDB with Python requires manually setting
         LLDB_PYTHON_RELATIVE_PATH.")
     endif ()
+    if ("${LLDB_PYTHON_EXT_SUFFIX}" STREQUAL "")
+      message(FATAL_ERROR
+        "Crosscompiling LLDB with Python requires manually setting
+        LLDB_PYTHON_EXT_SUFFIX.")
+    endif ()
   endif ()
 
   set(LLDB_PYTHON_RELATIVE_PATH ${LLDB_PYTHON_DEFAULT_RELATIVE_PATH}
-    CACHE STRING "Path where Python modules are installed, relative to install 
prefix")
+    CACHE STRING "Path where Python modules are installed, relative to install 
prefix.")
+  set(LLDB_PYTHON_EXT_SUFFIX ${LLDB_PYTHON_DEFAULT_EXT_SUFFIX}
+    CACHE STRING "Filename suffix for Python modules.")
 endif ()
 
 if (LLDB_ENABLE_LUA)


Index: lldb/bindings/python/CMakeLists.txt
===================================================================
--- lldb/bindings/python/CMakeLists.txt
+++ lldb/bindings/python/CMakeLists.txt
@@ -138,13 +138,14 @@
     set(LIBLLDB_SYMLINK_DEST "${LLVM_SHLIB_OUTPUT_INTDIR}/liblldb${CMAKE_SHARED_LIBRARY_SUFFIX}")
   endif()
   if(WIN32)
+    # FIXME should we use EXT_SUFFIX on windows?
     if(CMAKE_BUILD_TYPE STREQUAL Debug)
       set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb_d.pyd")
     else()
       set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb.pyd")
     endif()
   else()
-    set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb.so")
+    set(LIBLLDB_SYMLINK_OUTPUT_FILE "_lldb${LLDB_PYTHON_EXT_SUFFIX}")
   endif()
   create_relative_symlink(${swig_target} ${LIBLLDB_SYMLINK_DEST}
                           ${lldb_python_target_dir} ${LIBLLDB_SYMLINK_OUTPUT_FILE})
Index: lldb/CMakeLists.txt
===================================================================
--- lldb/CMakeLists.txt
+++ lldb/CMakeLists.txt
@@ -37,18 +37,29 @@
           -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(True, False, ''))"
       OUTPUT_VARIABLE LLDB_PYTHON_DEFAULT_RELATIVE_PATH
       OUTPUT_STRIP_TRAILING_WHITESPACE)
-
     file(TO_CMAKE_PATH ${LLDB_PYTHON_DEFAULT_RELATIVE_PATH} LLDB_PYTHON_DEFAULT_RELATIVE_PATH)
+    execute_process(
+      COMMAND ${Python3_EXECUTABLE}
+          -c "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))"
+      OUTPUT_VARIABLE LLDB_PYTHON_DEFAULT_EXT_SUFFIX
+      OUTPUT_STRIP_TRAILING_WHITESPACE)
   else ()
     if ("${LLDB_PYTHON_RELATIVE_PATH}" STREQUAL "")
       message(FATAL_ERROR
         "Crosscompiling LLDB with Python requires manually setting
         LLDB_PYTHON_RELATIVE_PATH.")
     endif ()
+    if ("${LLDB_PYTHON_EXT_SUFFIX}" STREQUAL "")
+      message(FATAL_ERROR
+        "Crosscompiling LLDB with Python requires manually setting
+        LLDB_PYTHON_EXT_SUFFIX.")
+    endif ()
   endif ()
 
   set(LLDB_PYTHON_RELATIVE_PATH ${LLDB_PYTHON_DEFAULT_RELATIVE_PATH}
-    CACHE STRING "Path where Python modules are installed, relative to install prefix")
+    CACHE STRING "Path where Python modules are installed, relative to install prefix.")
+  set(LLDB_PYTHON_EXT_SUFFIX ${LLDB_PYTHON_DEFAULT_EXT_SUFFIX}
+    CACHE STRING "Filename suffix for Python modules.")
 endif ()
 
 if (LLDB_ENABLE_LUA)
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to