[New-bugs-announce] [issue14150] AIX, crash loading shared module into another process than python like operator.so results in 0509-130
Jan Stürtz
report at bugs.python.org
Tue Feb 28 14:06:09 CET 2012
New submission from Jan Stürtz <stuertz at googlemail.com>:
AIX 5.2.0.0 with gcc 4.3.0:
Compiling a shared python:
with:
./configure --enable-shared --with-gcc --disable-ipv6 --with-system-ffi
make; make install
results in a working build.
But when I build mod_wsgi into apache with this python and run it I get the follwoing exception when importing e.g. cgi.
Traceback (most recent call last):
File "/devel/js/src/trunk/cdb/wsgi/static.py", line 256, in application
status, response_headers, output = resources(environ, path_info[1:])
File "/devel/js/src/trunk/cdb/wsgi/static.py", line 238, in resources
"/".join(path_info[1:]), (os.environ["CADDOK_BASE"], os.environ["CADDOK_HOME"]))
File "/devel/js/src/trunk/cdb/wsgi/static.py", line 105, in _find_file
import cgi
File "/devel/js/src/trunk/aix5/debug/img/lib/python2.7/cgi.py", line 37, in
from operator import attrgetter
ImportError: 0509-130 Die Symbolauflösung für /devel/js/src/trunk/aix5/debug/img/lib/python2.7/lib-dynload/operator.so ist fehlgeschlagen. Ursache:
0509-136 Symbol _PyArg_NoKeywords (Nummer 1) wurde nicht von
abhängigem Modul httpd exportiert.
0509-136 Symbol PyArg_ParseTuple (Nummer 2) wurde nicht von
abhängigem Modul httpd exportiert.
0509-136 Symbol PyArg_UnpackTuple (Nummer 3) wurde nicht von
abhängigem Modul httpd exportiert.
0509-136 Symbol PyBool_FromLong (Nummer 4) wurde nicht von
abhängigem Modul httpd exportiert.
0509-136 Symbol PyCallable_Check (Nummer 5) wurde nicht von
abhängigem Modul httpd exportiert.
0509-136 Symbol PyErr_SetString (Nummer 6) wurde nicht von
abhängigem Modul httpd exportiert.
0509-021 Es sind noch weitere Fehler aufgetreten, die aber nicht gemeldet wurden.
0509-192 Überprüfen Sie die Symbole des Abschnitts .loader mit dem
Befehl 'dump -Tv'.
I stripped that problem down to a somewhat incorrect python.exp file for the linker.
Tis python.exp file is used as import file to the aix linker when linking the modules in lib-dynload.
So operator.so expects its Symbols like "_PyArg_NoKeywords" to appear in the main executable.
Looking with "dump -HTv" on operator.so results in:
dump -HTv lib/python2.7/lib-dynload/operator.so
lib/python2.7/lib-dynload/operator.so:
***Abschnitt für Ladeprogramm***
Header-Daten zum Ladeprogramm
VERSION# #SYMtableENT #RELOCent LENidSTR
0x00000001 0x00000060 0x000002c4 0x00000208
#IMPfilID OFFidSTR LENstrTBL OFFstrTBL
0x00000004 0x00002a50 0x00000700 0x00002c58
***Dateizeichenfolgen importieren***
INDEX PFAD BASIS MEMBER
0 /devel/js/trunk_E017100_python27/aix5/debug/img/lib:/usr/local/lib:/usr/local/contact/sdk/1.1/lib/gcc/powerpc-ibm-aix5.2.0.0/4.3.0/pthread:/usr/local/contact/sdk/1.1/lib/gcc/powerpc-ibm-aix5.2.0.0/4.3.0/../../../pthread:/usr/local/contact/sdk/1.1/lib/gcc/powerpc-ibm-aix5.2.0.0/4.3.0:/usr/local/contact/sdk/1.1/lib/gcc/powerpc-ibm-aix5.2.0.0/4.3.0/../../../../powerpc-ibm-aix5.2.0.0/lib:/usr/local/contact/sdk/1.1/lib/gcc/powerpc-ibm-aix5.2.0.0/4.3.0/../../..:/usr/lib:/lib
1 libpthreads.a shr_xpg5.o
2 libc.a shr.o
3 .
***Informationen zur Symboltabelle des Ladeprogramms***
[Index] Wert Scn IMEX Sclass Typ IMPid Name
[0] 0x20002338 .data RW SECdef [noIMid] __rtinit
[1] 0x00000000 undef IMP DS EXTref . _PyArg_NoKeywords
[2] 0x00000000 undef IMP DS EXTref . PyArg_ParseTuple
[3] 0x00000000 undef IMP DS EXTref . PyArg_UnpackTuple
[4] 0x00000000 undef IMP DS EXTref . PyBool_FromLong
[5] 0x00000000 undef IMP DS EXTref . PyCallable_Check
[6] 0x00000000 undef IMP DS EXTref . PyErr_SetString
[7] 0x00000000 undef IMP DS EXTref . PyErr_WarnEx
[8] 0x00000000 undef IMP PR EXTref . PyExc_DeprecationWarning
[9] 0x00000000 undef IMP PR EXTref . PyExc_TypeError
[10] 0x00000000 undef IMP DS EXTref . Py_InitModule4
[11] 0x00000000 undef IMP DS EXTref . PyInt_FromSsize_t
[12] 0x00000000 undef IMP DS EXTref . PyMapping_Check
[13] 0x00000000 undef IMP DS EXTref . PyModule_AddObject
[14] 0x00000000 undef IMP PR EXTref . _Py_NoneStruct
[15] 0x00000000 undef IMP DS EXTref . PyNumber_Absolute
[16] 0x00000000 undef IMP DS EXTref . PyNumber_Add
[17] 0x00000000 undef IMP DS EXTref . PyNumber_And
[18] 0x00000000 undef IMP DS EXTref . PyNumber_Check
[19] 0x00000000 undef IMP DS EXTref . PyNumber_Divide
[20] 0x00000000 undef IMP DS EXTref . PyNumber_FloorDivide
[21] 0x00000000 undef IMP DS EXTref . PyNumber_Index
[22] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceAdd
[23] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceAnd
[24] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceDivide
[25] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceFloorDivide
[26] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceLshift
[27] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceMultiply
[28] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceOr
[29] 0x00000000 undef IMP DS EXTref . PyNumber_InPlacePower
[30] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceRemainder
[31] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceRshift
[32] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceSubtract
[33] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceTrueDivide
[34] 0x00000000 undef IMP DS EXTref . PyNumber_InPlaceXor
[35] 0x00000000 undef IMP DS EXTref . PyNumber_Invert
[36] 0x00000000 undef IMP DS EXTref . PyNumber_Lshift
[37] 0x00000000 undef IMP DS EXTref . PyNumber_Multiply
[38] 0x00000000 undef IMP DS EXTref . PyNumber_Negative
[39] 0x00000000 undef IMP DS EXTref . PyNumber_Or
[40] 0x00000000 undef IMP DS EXTref . PyNumber_Positive
[41] 0x00000000 undef IMP DS EXTref . PyNumber_Power
[42] 0x00000000 undef IMP DS EXTref . PyNumber_Remainder
[43] 0x00000000 undef IMP DS EXTref . PyNumber_Rshift
[44] 0x00000000 undef IMP DS EXTref . PyNumber_Subtract
[45] 0x00000000 undef IMP DS EXTref . PyNumber_TrueDivide
[46] 0x00000000 undef IMP DS EXTref . PyNumber_Xor
[47] 0x00000000 undef IMP DS EXTref . PyObject_Call
[48] 0x00000000 undef IMP DS EXTref . PyObject_DelItem
[49] 0x00000000 undef IMP DS EXTref . PyObject_GC_Del
[50] 0x00000000 undef IMP DS EXTref . _PyObject_GC_New
[51] 0x00000000 undef IMP DS EXTref . PyObject_GC_Track
[52] 0x00000000 undef IMP DS EXTref . PyObject_GC_UnTrack
[53] 0x00000000 undef IMP PR EXTref . PyObject_GenericGetAttr
[54] 0x00000000 undef IMP DS EXTref . PyObject_GetAttr
[55] 0x00000000 undef IMP DS EXTref . PyObject_GetItem
[56] 0x00000000 undef IMP DS EXTref . PyObject_IsTrue
[57] 0x00000000 undef IMP DS EXTref . PyObject_Not
[58] 0x00000000 undef IMP DS EXTref . PyObject_RichCompare
[59] 0x00000000 undef IMP DS EXTref . PyObject_SetItem
[60] 0x00000000 undef IMP PR EXTref . Py_Py3kWarningFlag
[61] 0x00000000 undef IMP DS EXTref . PySequence_Check
[62] 0x00000000 undef IMP DS EXTref . PySequence_Concat
[63] 0x00000000 undef IMP DS EXTref . PySequence_Contains
[64] 0x00000000 undef IMP DS EXTref . PySequence_Count
[65] 0x00000000 undef IMP DS EXTref . PySequence_DelSlice
[66] 0x00000000 undef IMP DS EXTref . PySequence_GetSlice
[67] 0x00000000 undef IMP DS EXTref . PySequence_Index
[68] 0x00000000 undef IMP DS EXTref . PySequence_InPlaceConcat
[69] 0x00000000 undef IMP DS EXTref . PySequence_InPlaceRepeat
[70] 0x00000000 undef IMP DS EXTref . PySequence_Repeat
[71] 0x00000000 undef IMP DS EXTref . PySequence_SetSlice
[72] 0x00000000 undef IMP DS EXTref . PyString_FromString
[73] 0x00000000 undef IMP DS EXTref . PyString_FromStringAndSize
[74] 0x00000000 undef IMP PR EXTref . _Py_TrueStruct
[75] 0x00000000 undef IMP DS EXTref . PyTuple_GetSlice
[76] 0x00000000 undef IMP DS EXTref . PyTuple_New
[77] 0x00000000 undef IMP DS EXTref . PyType_Ready
[78] 0x00000000 undef IMP DS EXTref . _PyUnicodeUCS2_AsDefaultEncodedString
[79] 0x00000000 undef IMP PR EXTref . _Py_ZeroStruct
[80] 0x0000e008 undef IMP XO EXTref libc.a(shr.o) ___memset
[81] 0x0000f000 undef IMP XO EXTref libc.a(shr.o) ___memmove
[82] 0x00000000 undef IMP DS EXTref libc.a(shr.o) malloc
[83] 0x00000000 undef IMP DS EXTref libc.a(shr.o) realloc
[84] 0x00000000 undef IMP DS EXTref libc.a(shr.o) free
[85] 0x00000000 undef IMP DS EXTref libc.a(shr.o) calloc
[86] 0x00000000 undef IMP DS EXTref libc.a(shr.o) strlen
[87] 0x00000000 undef IMP DS EXTref libc.a(shr.o) strchr
[88] 0x00000000 undef IMP DS EXTref libc.a(shr.o) abort
[89] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_getspecific
[90] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_setspecific
[91] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_key_create
[92] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_once
[93] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_mutex_unlock
[94] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_mutex_lock
[95] 0x200023a8 .data EXPentPT DS Ldef [noIMid] initoperator
But when I change the python Makefile right after configure, so that
the first line of the python.exp (The !# line) looks this way:
old:
#!.
new:
#!libpython2.7.so
and rebuild every thing it works fine to me, because symbol resolution is fixed to use libpython.so.
So dump -HVtt looks that way:
-bash-2.05b$ dump -HTv lib/python2.7/lib-dynload/operator.so
lib/python2.7/lib-dynload/operator.so:
***Abschnitt für Ladeprogramm***
Header-Daten zum Ladeprogramm
VERSION# #SYMtableENT #RELOCent LENidSTR
0x00000001 0x00000060 0x000002c4 0x00000216
#IMPfilID OFFidSTR LENstrTBL OFFstrTBL
0x00000004 0x00002a50 0x00000700 0x00002c66
***Dateizeichenfolgen importieren***
INDEX PFAD BASIS MEMBER
0 /devel/js/trunk_E017100_python27/aix5/debug/img/lib:/usr/local/lib:/usr/local/contact/sdk/1.1/lib/gcc/powerpc-ibm-aix5.2.0.0/4.3.0/pthread:/usr/local/contact/sdk/1.1/lib/gcc/powerpc-ibm-aix5.2.0.0/4.3.0/../../../pthread:/usr/local/contact/sdk/1.1/lib/gcc/powerpc-ibm-aix5.2.0.0/4.3.0:/usr/local/contact/sdk/1.1/lib/gcc/powerpc-ibm-aix5.2.0.0/4.3.0/../../../../powerpc-ibm-aix5.2.0.0/lib:/usr/local/contact/sdk/1.1/lib/gcc/powerpc-ibm-aix5.2.0.0/4.3.0/../../..:/usr/lib:/lib
1 libpthreads.a shr_xpg5.o
2 libc.a shr.o
3 libpython2.7.so
***Informationen zur Symboltabelle des Ladeprogramms***
[Index] Wert Scn IMEX Sclass Typ IMPid Name
[0] 0x20002338 .data RW SECdef [noIMid] __rtinit
[1] 0x00000000 undef IMP DS EXTref libpython2.7.so _PyArg_NoKeywords
[2] 0x00000000 undef IMP DS EXTref libpython2.7.so PyArg_ParseTuple
[3] 0x00000000 undef IMP DS EXTref libpython2.7.so PyArg_UnpackTuple
[4] 0x00000000 undef IMP DS EXTref libpython2.7.so PyBool_FromLong
[5] 0x00000000 undef IMP DS EXTref libpython2.7.so PyCallable_Check
[6] 0x00000000 undef IMP DS EXTref libpython2.7.so PyErr_SetString
[7] 0x00000000 undef IMP DS EXTref libpython2.7.so PyErr_WarnEx
[8] 0x00000000 undef IMP PR EXTref libpython2.7.so PyExc_DeprecationWarning
[9] 0x00000000 undef IMP PR EXTref libpython2.7.so PyExc_TypeError
[10] 0x00000000 undef IMP DS EXTref libpython2.7.so Py_InitModule4
[11] 0x00000000 undef IMP DS EXTref libpython2.7.so PyInt_FromSsize_t
[12] 0x00000000 undef IMP DS EXTref libpython2.7.so PyMapping_Check
[13] 0x00000000 undef IMP DS EXTref libpython2.7.so PyModule_AddObject
[14] 0x00000000 undef IMP PR EXTref libpython2.7.so _Py_NoneStruct
[15] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Absolute
[16] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Add
[17] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_And
[18] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Check
[19] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Divide
[20] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_FloorDivide
[21] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Index
[22] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceAdd
[23] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceAnd
[24] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceDivide
[25] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceFloorDivide
[26] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceLshift
[27] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceMultiply
[28] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceOr
[29] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlacePower
[30] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceRemainder
[31] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceRshift
[32] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceSubtract
[33] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceTrueDivide
[34] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_InPlaceXor
[35] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Invert
[36] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Lshift
[37] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Multiply
[38] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Negative
[39] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Or
[40] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Positive
[41] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Power
[42] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Remainder
[43] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Rshift
[44] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Subtract
[45] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_TrueDivide
[46] 0x00000000 undef IMP DS EXTref libpython2.7.so PyNumber_Xor
[47] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_Call
[48] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_DelItem
[49] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_GC_Del
[50] 0x00000000 undef IMP DS EXTref libpython2.7.so _PyObject_GC_New
[51] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_GC_Track
[52] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_GC_UnTrack
[53] 0x00000000 undef IMP PR EXTref libpython2.7.so PyObject_GenericGetAttr
[54] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_GetAttr
[55] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_GetItem
[56] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_IsTrue
[57] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_Not
[58] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_RichCompare
[59] 0x00000000 undef IMP DS EXTref libpython2.7.so PyObject_SetItem
[60] 0x00000000 undef IMP PR EXTref libpython2.7.so Py_Py3kWarningFlag
[61] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_Check
[62] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_Concat
[63] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_Contains
[64] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_Count
[65] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_DelSlice
[66] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_GetSlice
[67] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_Index
[68] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_InPlaceConcat
[69] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_InPlaceRepeat
[70] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_Repeat
[71] 0x00000000 undef IMP DS EXTref libpython2.7.so PySequence_SetSlice
[72] 0x00000000 undef IMP DS EXTref libpython2.7.so PyString_FromString
[73] 0x00000000 undef IMP DS EXTref libpython2.7.so PyString_FromStringAndSize
[74] 0x00000000 undef IMP PR EXTref libpython2.7.so _Py_TrueStruct
[75] 0x00000000 undef IMP DS EXTref libpython2.7.so PyTuple_GetSlice
[76] 0x00000000 undef IMP DS EXTref libpython2.7.so PyTuple_New
[77] 0x00000000 undef IMP DS EXTref libpython2.7.so PyType_Ready
[78] 0x00000000 undef IMP DS EXTref libpython2.7.so _PyUnicodeUCS2_AsDefaultEncodedString
[79] 0x00000000 undef IMP PR EXTref libpython2.7.so _Py_ZeroStruct
[80] 0x0000e008 undef IMP XO EXTref libc.a(shr.o) ___memset
[81] 0x0000f000 undef IMP XO EXTref libc.a(shr.o) ___memmove
[82] 0x00000000 undef IMP DS EXTref libc.a(shr.o) malloc
[83] 0x00000000 undef IMP DS EXTref libc.a(shr.o) realloc
[84] 0x00000000 undef IMP DS EXTref libc.a(shr.o) free
[85] 0x00000000 undef IMP DS EXTref libc.a(shr.o) calloc
[86] 0x00000000 undef IMP DS EXTref libc.a(shr.o) strlen
[87] 0x00000000 undef IMP DS EXTref libc.a(shr.o) strchr
[88] 0x00000000 undef IMP DS EXTref libc.a(shr.o) abort
[89] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_getspecific
[90] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_setspecific
[91] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_key_create
[92] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_once
[93] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_mutex_unlock
[94] 0x00000000 undef IMP DS EXTref libpthreads.a(shr_xpg5.o) pthread_mutex_lock
[95] 0x200023a8 .data EXPentPT DS Ldef [noIMid] initoperator
But now im usnure how to implement this into the configure script and to provide a valid general patch for this.
----------
components: Build, Library (Lib)
messages: 154551
nosy: Jan.Stürtz
priority: normal
severity: normal
status: open
title: AIX, crash loading shared module into another process than python like operator.so results in 0509-130
type: crash
versions: Python 2.7
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue14150>
_______________________________________
More information about the New-bugs-announce
mailing list