[Python-Dev] Newly Built Python3 Binary Throws Segfault

Cyd Haselton chaselton at gmail.com
Fri Jan 30 21:49:30 CET 2015


I've got a page of all of the modifications to source files I've used
in my attempts to get 3.4.2 working...I can post it somewhere if the
port ever succeeds.

On Fri, Jan 30, 2015 at 2:07 PM, Victor Stinner
<victor.stinner at gmail.com> wrote:
> Oh, I found my old patch to force UTF-8 on Android. I didn't test it:
> see attached file.
>
> It would be nice to start a wiki page to collect all informations on
> the Python port to Android.
>
> Victor
>
> 2015-01-30 21:04 GMT+01:00 Victor Stinner <victor.stinner at gmail.com>:
>> Android provides a minimal support of locales. Most functions return a
>> fake result, do nothing. I'm not sure that it supports any codec. To
>> support Android, we may force UTF-8 for the filesystem encoding, as
>> done on Mac OS X.
>>
>> Victor
>>
>> 2015-01-30 19:04 GMT+01:00 Ryan Gonzalez <rymg19 at gmail.com>:
>>> No...
>>>
>>> ...but I think I found the issue with grep. Try applying the attached patch
>>> to the Python/frozenmain.c. It comments out the locale handling.
>>>
>>> It seems that Python always calls its strdup function on the locale string.
>>> On Android, this can apparently be null (as seen in the bug report you
>>> linked to).
>>>
>>> On Fri, Jan 30, 2015 at 12:00 PM, Cyd Haselton <chaselton at gmail.com> wrote:
>>>>
>>>> I don't have gdb on device; does the following tell you where Python's
>>>> strdup is called?
>>>>
>>>> >> _PyMem_RawStrdup
>>>> >> /bld/python/Python-3.4.2/Objects/obmalloc.c:323
>>>>
>>>> On Fri, Jan 30, 2015 at 11:52 AM, Ryan Gonzalez <rymg19 at gmail.com> wrote:
>>>> > Is it possible at all to get a stack trace of the crash using gdb? Try
>>>> > the
>>>> > steps here.
>>>> >
>>>> > That way we can see where Python's own strdup function is getting
>>>> > called.
>>>> >
>>>> > On Fri, Jan 30, 2015 at 9:05 AM, Cyd Haselton <chaselton at gmail.com>
>>>> > wrote:
>>>> >>
>>>> >> Absolutely.  Good thing I have addr2line on device
>>>> >>
>>>> >> /bld/python/Python-3.4.2 $ addr2line -C -f -e /lib/libpython3.4m.so.1.0
>>>> >> 0008bbc8
>>>> >> _PyMem_RawStrdup
>>>> >> /bld/python/Python-3.4.2/Objects/obmalloc.c:323
>>>> >> /bld/python/Python-3.4.2 $
>>>> >>
>>>> >>
>>>> >>
>>>> >> On Thu, Jan 29, 2015 at 8:26 PM, Ryan <rymg19 at gmail.com> wrote:
>>>> >> > Could you try the steps at
>>>> >> > http://stackoverflow.com/a/11369475/2097780?
>>>> >> > They
>>>> >> > allow you to get a better idea of where libc is crashing.
>>>> >> >
>>>> >> > Cyd Haselton <chaselton at gmail.com> wrote:
>>>> >> >>
>>>> >> >> Managed to get this out of logcat:
>>>> >> >> F(11914) Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread
>>>> >> >> 11914 (python)  (libc)
>>>> >> >>
>>>> >> >> [ 01-29 19:30:55.855 23373:23373 F/libc     ]
>>>> >> >> Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 23373
>>>> >> >> (python)
>>>> >> >>
>>>> >> >> Less detail than strace but it seems to be that python is
>>>> >> >> segfaulting
>>>> >> >> libc...
>>>> >> >>
>>>> >> >> On Wed, Jan 28, 2015 at 11:23 AM, Ryan Gonzalez <rymg19 at gmail.com>
>>>> >> >> wrote:
>>>> >> >>>
>>>> >> >>>  On Wed, Jan 28, 2015 at 10:43 AM, Guido van Rossum
>>>> >> >>> <guido at python.org>
>>>> >> >>> wrote:
>>>> >> >>>>
>>>> >> >>>>
>>>> >> >>>>  What I see in the strace:
>>>> >> >>>>
>>>> >> >>>>  ... load libpython3.4m.so.1.0
>>>> >> >>>>  ... load libm
>>>> >> >>>>  ... open /dev/__properties__ and do something to it
>>>> >> >>>> (what?)
>>>> >> >>>>  ... get current time
>>>> >> >>>>  ... allocate memory
>>>> >> >>>>  ... getuid
>>>> >> >>>>  ... segfault
>>>> >> >>>>
>>>> >> >>>>  That's not a lot to go on, but it doesn't look as if it has
>>>> >> >>>> started
>>>> >> >>>> to
>>>> >> >>>>  load modules yet.
>>>> >> >>>>
>>>> >> >>>>  Does /dev/__properties__ ring a bell? Not to me.
>>>> >> >>>
>>>> >> >>>
>>>> >> >>>
>>>> >> >>>
>>>> >> >>>
>>>> >> >>>
>>>> >> >>> https://android.googlesource.com/platform/system/core/+/tools_r22/init/property_service.c
>>>> >> >>>  is the code that works with that file.
>>>> >> >>>
>>>> >> >>>  This explains it a bit (slides 24-29). Looks like something to do
>>>> >> >>> with
>>>> >> >>>  interprocess communication. Likely has nothing to do with Python
>>>> >> >>> itself.
>>>> >> >>>
>>>> >> >>>  Maybe this would be useful?
>>>> >> >>>
>>>> >> >>>>
>>>> >> >>>>  That stack trace would be really helpful.
>>>> >> >>>>
>>>> >> >>>>  On Wed, Jan 28, 2015 at 8:34 AM, Cyd Haselton
>>>> >> >>>> <chaselton at gmail.com>
>>>> >> >>>> wrote:
>>>> >> >>>>>
>>>> >> >>>>>
>>>> >> >>>>>  Apologies...I'm not sure what a stack track is, but I do have
>>>> >> >>>>> the
>>>> >> >>>>>  strace.  Nearest I can tell, it happens due to an open call,
>>>> >> >>>>> though
>>>> >> >>>>> I
>>>> >> >>>>>  am probably wrong.
>>>> >> >>>>>  Attaching the strace output to this email.  I'm going to head
>>>> >> >>>>> back
>>>> >> >>>>> to
>>>> >> >>>>>  the documentation and to back out of some Android-related
>>>> >> >>>>> changes
>>>> >> >>>>> in
>>>> >> >>>>>  _localemodule.c
>>>> >> >>>>>
>>>> >> >>>>>  On Wed, Jan 28, 2015 at 9:43 AM, Guido van Rossum
>>>> >> >>>>> <guido at python.org>
>>>> >> >>>>>  wrote:
>>>> >> >>>>>>
>>>> >> >>>>>>  There could be a million differences relevant (unicode, ints,
>>>> >> >>>>>> ...).
>>>> >> >>>>>>  Perhaps
>>>> >> >>>>>>  the importlib bootstrap is failing. Perhaps the dynamic loading
>>>> >> >>>>>> code
>>>> >> >>>>>>  changed. Did you get a stack track? (IIRC strace shows a
>>>> >> >>>>>> syscall
>>>> >> >>>>>> trace
>>>> >> >>>>>>  --
>>>> >> >>>>>>  also useful, but doesn't tell you precisely how
>>>> >> >>>>>> it segfaulted.)
>>>> >> >>>>>>
>>>> >> >>>>>>  On Wed, Jan 28, 2015 at 6:43 AM, Cyd Haselton
>>>> >> >>>>>> <chaselton at gmail.com>
>>>> >> >>>>>>  wrote:
>>>> >> >>>>>>>
>>>> >> >>>>>>>
>>>> >> >>>>>>>  All,
>>>> >> >>>>>>>  I recently ditched my attempts to port Python 2.7.8 to Android
>>>> >> >>>>>>> in
>>>> >> >>>>>>>  favor of Python 3.4.2.  Unfortunately, after using the same
>>>> >> >>>>>>> configure
>>>> >> >>>>>>>  options in the same environment, and modifying the setup.py as
>>>> >> >>>>>>> needed,
>>>> >> >>>>>>>  the newly built binary throws a segfault when the
>>>> >> >>>>>>> generate-posix-vars
>>>> >> >>>>>>>  portion of the build is reached...and when it is run as well
>>>> >> >>>>>>> (i.e.
>>>> >> >>>>>>>  ./python --help, ./python -E -S -m sysconfig, or similar)
>>>> >> >>>>>>>
>>>> >> >>>>>>>  I took a strace of ./python, however I'm a bit lost when
>>>> >> >>>>>>> reviewing
>>>> >> >>>>>>> it.
>>>> >> >>>>>>>  Any ideas as to what may be going on...i.e. why Python 2.7
>>>> >> >>>>>>> works
>>>> >> >>>>>>> but
>>>> >> >>>>>>>  3.x throws a segfault?
>>>> >> >>>>>>>
>>>> >> >>>>>>>  Thanks in advance,
>>>> >> >>>>>>>  Cyd
>>>> >> >>>>>>> ________________________________
>>>> >> >>>>>>>
>>>> >> >>>>>>>  Python-Dev mailing list
>>>> >> >>>>>>>
>>>> >> >>>>>>> Python-Dev at python.org
>>>> >> >>>>>>>  https://mail.python.org/mailman/listinfo/python-dev
>>>> >> >>>>>>>  Unsubscribe:
>>>> >> >>>>>>>
>>>> >> >>>>>>>
>>>> >> >>>>>>>
>>>> >> >>>>>>> https://mail.python.org/mailman/options/python-dev/guido%40python.org
>>>> >> >>>>>>
>>>> >> >>>>>>
>>>> >> >>>>>>
>>>> >> >>>>>>
>>>> >> >>>>>>
>>>> >> >>>>>>  --
>>>> >> >>>>>>  --Guido van Rossum (python.org/~guido)
>>>> >> >>>>
>>>> >> >>>>
>>>> >> >>>>
>>>> >> >>>>
>>>> >> >>>>
>>>> >> >>>>  --
>>>> >> >>>>  --Guido van Rossum (python.org/~guido)
>>>> >> >>>>
>>>> >> >>>> ________________________________
>>>> >> >>>>
>>>> >> >>>>  Python-Dev mailing list
>>>> >> >>>>  Python-Dev at python.org
>>>> >> >>>>  https://mail.python.org/mailman/listinfo/python-dev
>>>> >> >>>>  Unsubscribe:
>>>> >> >>>>
>>>> >> >>>>
>>>> >> >>>> https://mail.python.org/mailman/options/python-dev/rymg19%40gmail.com
>>>> >> >>>
>>>> >> >>>
>>>> >> >>>
>>>> >> >>>
>>>> >> >>>
>>>> >> >>>  --
>>>> >> >>>  Ryan
>>>> >> >>>  If anybody ever asks me why I prefer C++ to C, my answer will be
>>>> >> >>> simple:
>>>> >> >>>  "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think
>>>> >> >>> that
>>>> >> >>> was
>>>> >> >>>  nul-terminated."
>>>> >> >>>  Personal reality distortion fields are immune to contradictory
>>>> >> >>> evidence.
>>>> >> >>> -
>>>> >> >>>  srean
>>>> >> >>>  Check out my website: http://kirbyfan64.github.io/
>>>> >> >
>>>> >> >
>>>> >> > --
>>>> >> > Sent from my Android phone with K-9 Mail. Please excuse my brevity.
>>>> >> > Check out my website: http://kirbyfan64.github.io/
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> > Ryan
>>>> > If anybody ever asks me why I prefer C++ to C, my answer will be simple:
>>>> > "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was
>>>> > nul-terminated."
>>>> > Personal reality distortion fields are immune to contradictory evidence.
>>>> > -
>>>> > srean
>>>> > Check out my website: http://kirbyfan64.github.io/
>>>
>>>
>>>
>>>
>>> --
>>> Ryan
>>> If anybody ever asks me why I prefer C++ to C, my answer will be simple:
>>> "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was
>>> nul-terminated."
>>> Personal reality distortion fields are immune to contradictory evidence. -
>>> srean
>>> Check out my website: http://kirbyfan64.github.io/
>>>
>>> _______________________________________________
>>> Python-Dev mailing list
>>> Python-Dev at python.org
>>> https://mail.python.org/mailman/listinfo/python-dev
>>> Unsubscribe:
>>> https://mail.python.org/mailman/options/python-dev/victor.stinner%40gmail.com
>>>


More information about the Python-Dev mailing list