[Python-Dev] Newly Built Python3 Binary Throws Segfault

Victor Stinner victor.stinner at gmail.com
Fri Jan 30 21:07:07 CET 2015


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
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: android_utf8-2.patch
Type: text/x-patch
Size: 4241 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-dev/attachments/20150130/2bce669d/attachment-0001.bin>


More information about the Python-Dev mailing list