classification
Title: importing "ctypes" immediately causes a segmentation fault
Type: crash Stage:
Components: ctypes Versions: Python 2.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: n0s69z
Priority: normal Keywords:

Created on 2018-11-29 15:17 by n0s69z, last changed 2018-11-30 13:27 by n0s69z.

Files
File name Uploaded Description Edit
strace_python.log n0s69z, 2018-11-29 15:17
Messages (3)
msg330696 - (view) Author: David (n0s69z) Date: 2018-11-29 15:17
~Environment

Cross compiled Python 2.7.15 for ARM Cortex-A7 target, Linux Kernel 4.18

uname -a: Linux Test-0002 4.18.13 #1 SMP Wed Oct 31 11:20:07 CET 2018 armv7l GNU/Linux

~Description of the problem

Importing the "ctypes" module in order to load shared libraries causes a segmentation fault:

root [ /tmpfs/root ] $ python
Python 2.7.15 (default, Nov 29 2018, 13:57:56)
[GCC 8.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
Segmentation fault

I have found a similiar issue here:
https://bugs.python.org/issue11048
But the changes are already applied in 2.7.15.

Here is the GDB output similiar to the link I posted:

(gdb) file python2.7
Reading symbols from python2.7...done.
(gdb) run -c "import ctypes"
Starting program: /usr/bin/python2.7 -c "import ctypes"
warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.

Program received signal SIGSEGV, Segmentation fault.
0x76a4fa94 in CThunkObject_dealloc (_self=0x76adb920) at /home/user/ARM_Linux/src/Python-2.7.15/Modules/_ctypes/callbacks.c:25
25      /home/user/ARM_Linux/src/Python-2.7.15/Modules/_ctypes/callbacks.c: No such file or directory.
(gdb)

From what I can see it tries to use the path from the host I cross compiled for the callbacks.c. Is this the cause of the segmentation fault? If yes, how can I correct the path during compilation?

I also attached the strace log of the command 'python -c "import ctypes"'

Thank you in advance!
msg330762 - (view) Author: David (n0s69z) Date: 2018-11-30 09:06
Small update:

After commenting out Py_XDECREF(self->restype) in function CThunkObject_dealloc(PyObject *_self), I can import ctypes without getting a segmentation fault.

static void
CThunkObject_dealloc(PyObject *_self)
{
    CThunkObject *self = (CThunkObject *)_self;
    PyObject_GC_UnTrack(self);
    Py_XDECREF(self->converters);
    Py_XDECREF(self->callable);
    //Py_XDECREF(self->restype);
    if (self->pcl_write)
        ffi_closure_free(self->pcl_write);
    PyObject_GC_Del(self);
}

But I'm afraid I don't know what other effects could result with this change.
msg330786 - (view) Author: David (n0s69z) Date: 2018-11-30 13:27
Another small update:

After I recompiled Python with the commented out statement, I did a small test if loading a shared library works.

I compiled the following test function to testib.so:

#include <stdio.h>

void test_func(void);

void test_func(void) {
	printf("hello world\n");
}

After that I used ctypes to load this library and execute the test_func():

(gdb) file python2.7
Reading symbols from python2.7...done.
(gdb) run -c "import ctypes; lib_test = ctypes.cdll.LoadLibrary('/tmp/testlib.so'); lib_test.test_func();"
Starting program: /usr/bin/python2.7 -c "import ctypes; lib_test = ctypes.cdll.LoadLibrary('/tmp/testlib.so'); lib_test.test_func();"
warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.
hello world

Program received signal SIGSEGV, Segmentation fault.
PyCFuncPtr_call (self=<optimized out>, inargs=<optimized out>, kwds=<optimized out>) at /home/user/ARM_Linux/src/Python-2.7.15/Modules/_ctypes/_ctypes.c:4108
4108    /home/user/ARM_Linux/src/Python-2.7.15/Modules/_ctypes/_ctypes.c: No such file or directory.
(gdb)

It prints the expected output, but again I get a segmentation fault, this time in PyCFuncPtr_call function.
History
Date User Action Args
2018-11-30 13:27:43n0s69zsetmessages: + msg330786
2018-11-30 09:06:42n0s69zsetmessages: + msg330762
2018-11-29 15:17:47n0s69zcreate