[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