[Lldb-commits] [PATCH] Don't try to link against a release python during a debug build.

Zachary Turner zturner at google.com
Wed Jul 9 13:33:07 PDT 2014


Hi deepak2427, tfiala,

When doing a debug build of LLDB, python headers automatically force a link against python27_d.lib.  Since obtaining a copy of python27_d.lib requires building python manually, we attempted to avoid requiring LLDB developers to build python themselves as a matter of convenience.  This leads to undefined behavior.  

To reproduce the failures, you can do the following:

1) Build a debug build of LLDB on Windows with python enabled.
2) Run LLDB
3) Type "script" with no arguments.

When the python interpreter launches, you get a CRT error from the Visual Studio runtime.  This is most likely due to the fact that in order to make this work, we #undef'ed _DEBUG, then included stdlib.h, then included python.h, then #define'd _DEBUG again.  This leads to stdlib.h being included with a different defines in different translation units.  For example, a TU which indirectly includes lldb-python.h will see a different pre-processed stdlib.h than a translation unit which does not include lldb-python.h

http://reviews.llvm.org/D4441

Files:
  CMakeLists.txt
  include/lldb/lldb-python.h

Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -108,10 +108,6 @@
 endmacro(add_lldb_definitions)
 
 if (NOT LLDB_DISABLE_PYTHON)
-    if (MSVC)
-        # this definition will stop python from auto linking python27_d.lib when Python.h is included
-        add_definitions( -DSWIG_PYTHON_INTERPRETER_NO_DEBUG )
-    endif()
     find_package(PythonLibs REQUIRED)
     include_directories(${PYTHON_INCLUDE_DIRS})
 endif()
Index: include/lldb/lldb-python.h
===================================================================
--- include/lldb/lldb-python.h
+++ include/lldb/lldb-python.h
@@ -15,44 +15,16 @@
 #ifdef LLDB_DISABLE_PYTHON
 // Python is disabled in this build
 #else
-	// If this is a visual studio build
-	#if defined( _MSC_VER )
-		// Special case for debug build since python unfortunately
-		// adds library to the linker path through a #pragma directive
-		#if defined( _DEBUG )
-			// Python forces a header link to python27_d.lib when building debug.
-			// To get around this (because most python packages for Windows
-			// don't come with debug python libraries), we undefine _DEBUG, include
-			// python.h and then restore _DEBUG.
-
-			// The problem with this is that any system level headers included from
-			// python.h were also effectively included in 'release' mode when we undefined
-			// _DEBUG. To work around this we include headers that python includes 
-			// before undefining _DEBUG.
-			#           include <stdlib.h>
-			// Undefine to force python to link against the release distro
-			#           undef _DEBUG
-			#           include <Python.h>
-			#           define _DEBUG
-			
-		#else
-			#include <Python.h>
-		#endif
-
-	#else
-		#if defined(__linux__)
-			// features.h will define _POSIX_C_SOURCE if _GNU_SOURCE is defined.  This value
-			// may be different from the value that Python defines it to be which results
-			// in a warning.  Undefine _POSIX_C_SOURCE before including Python.h  The same
-			// holds for _XOPEN_SOURCE.
-			#undef _POSIX_C_SOURCE
-			#undef _XOPEN_SOURCE
-		#endif
-
-		// Include python for non windows machines
-		#include <Python.h>
-
+	#if defined(__linux__)
+		// features.h will define _POSIX_C_SOURCE if _GNU_SOURCE is defined.  This value
+		// may be different from the value that Python defines it to be which results
+		// in a warning.  Undefine _POSIX_C_SOURCE before including Python.h  The same
+		// holds for _XOPEN_SOURCE.
+		#undef _POSIX_C_SOURCE
+		#undef _XOPEN_SOURCE
 	#endif
+
+	#include <Python.h>
 #endif // LLDB_DISABLE_PYTHON
 
 #endif  // LLDB_lldb_python_h_
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4441.11219.patch
Type: text/x-patch
Size: 2654 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20140709/ea0ba731/attachment.bin>


More information about the lldb-commits mailing list