On 10 Gen, 03:51, Giovanni Bajo <[email protected]> wrote:
> On ven, 2009-01-09 at 12:18 -0800, Antonio Valentino wrote:
>
>
>
>
>
> > On 9 Gen, 20:58, Giovanni Bajo <[email protected]> wrote:
> > > On 1/9/2009 4:44 PM, [email protected] wrote:
>
> > > > I can reproduce this problem on my mandriva x86_64 setup.  I tried a
> > > > few random revisions of SVN trunk yesterday, all with the same
> > > > problem.  The code segfaults at source/common/launch.c:665 for me:
>
> > > >   664
> > > >   665             Py_DECREF(mods);
> > > >   666             free(modbuf);
>
> > > The DECREF is surely not wrong, so removing it is just papering over the
> > > real problem, as far as I can tell.
>
> > > Is mods a valid pointer or is it NULL, when it crashes? If it's NULL,
> > > what's the value of the expression "ntohl(ptoc->ulen) - 8"?
>
> > (gdb) print mods
> > $1 = (PyObject *) 0x23a1460
> > (gdb) print ntohl(ptoc->ulen)
> > $2 = 19728
>
> print *mods ?

(gdb) print *mods
$1 = {ob_refcnt = 0, ob_type = 0x7f8042147ea0}

> So, where exactly does it crash, at the assembly level? What is the
> exact machine instructor? What is the "crash" cause?

Unfortunately I'm not familiar with Python C API and not familiar with
assembly level debugging too.
I hope this can help you.

### GDB ##################################################
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/
gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show
copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu"...
(gdb) run
Starting program: /home/antonio/tmp/pyinstaller-test/dist/test/test
[Thread debugging using libthread_db enabled]
[New Thread 0x7f804318c6e0 (LWP 15640)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7f804318c6e0 (LWP 15640)]
0x0000000000000001 in ?? ()
(gdb) up
#1  0x0000000000403ae3 in importModules () at ../common/launch.c:665
665                             Py_DECREF(mods);
(gdb) list
660                             {
661                                     PI_PyErr_Print();
662                                     PI_PyErr_Clear();
663                             }
664
665                             Py_DECREF(mods);
666                             free(modbuf);
667                     }
668                     ptoc = incrementTocPtr(ptoc);
669             }
(gdb) print *mods
$1 = {ob_refcnt = 0, ob_type = 0x7f8042147ea0}
(gdb) disassemble
Dump of assembler code for function importModules:
0x00000000004039c0 <importModules+0>:   push   %r14
0x00000000004039c2 <importModules+2>:   mov    $0x4056f8,%edi
0x00000000004039c7 <importModules+7>:   push   %r13
0x00000000004039c9 <importModules+9>:   push   %r12
0x00000000004039cb <importModules+11>:  push   %rbp
0x00000000004039cc <importModules+12>:  push   %rbx
0x00000000004039cd <importModules+13>:  callq  0x402658 <p...@plt>
0x00000000004039d2 <importModules+18>:  mov    $0x405179,%edi
0x00000000004039d7 <importModules+23>:  callq  *0x2040a3(%rip)        #
0x607a80 <PI_PyImport_ImportModule>
0x00000000004039dd <importModules+29>:  mov    %rax,%rdi
0x00000000004039e0 <importModules+32>:  callq  *0x2040da(%rip)        #
0x607ac0 <PI_PyModule_GetDict>
0x00000000004039e6 <importModules+38>:  mov    $0x405181,%esi
0x00000000004039eb <importModules+43>:  mov    %rax,%rdi
0x00000000004039ee <importModules+46>:  callq  *0x2040d4(%rip)        #
0x607ac8 <PI_PyDict_GetItemString>
0x00000000004039f4 <importModules+52>:  mov    0x204255(%rip),
%rbx        # 0x607c50 <f_tocbuff>
0x00000000004039fb <importModules+59>:  cmp    0x204256(%rip),
%rbx        # 0x607c58 <f_tocend>
0x0000000000403a02 <importModules+66>:  mov    %rax,%r14
0x0000000000403a05 <importModules+69>:  jb     0x403a2d <importModules
+109>
0x0000000000403a07 <importModules+71>:  jmpq   0x403ac8 <importModules
+264>
0x0000000000403a0c <importModules+76>:  nopl   0x0(%rax)
0x0000000000403a10 <importModules+80>:  cmp    $0x4d,%al
0x0000000000403a12 <importModules+82>:  je     0x403a35 <importModules
+117>
0x0000000000403a14 <importModules+84>:  mov    %rbx,%rdi
0x0000000000403a17 <importModules+87>:  nop
0x0000000000403a18 <importModules+88>:  callq  0x403510
<incrementTocPtr>
0x0000000000403a1d <importModules+93>:  cmp    %rax,0x204234
(%rip)        # 0x607c58 <f_tocend>
0x0000000000403a24 <importModules+100>: mov    %rax,%rbx
0x0000000000403a27 <importModules+103>: jbe    0x403ac8 <importModules
+264>
0x0000000000403a2d <importModules+109>: movzbl 0x11(%rbx),%eax
0x0000000000403a31 <importModules+113>: cmp    $0x6d,%al
0x0000000000403a33 <importModules+115>: jne    0x403a10 <importModules
+80>
0x0000000000403a35 <importModules+117>: lea    0x12(%rbx),%rbp
0x0000000000403a39 <importModules+121>: mov    %rbx,%rdi
0x0000000000403a3c <importModules+124>: callq  0x403830 <extract>
0x0000000000403a41 <importModules+129>: mov    0xc(%rbx),%esi
0x0000000000403a44 <importModules+132>: lea    0x8(%rax),%rdi
0x0000000000403a48 <importModules+136>: mov    %rax,%r13
0x0000000000403a4b <importModules+139>: bswap  %esi
0x0000000000403a4d <importModules+141>: sub    $0x8,%esi
0x0000000000403a50 <importModules+144>: callq  *0x20405a(%rip)
# 0x607ab0 <PI_PyString_FromStringAndSize>
0x0000000000403a56 <importModules+150>: mov    %rbp,%rdi
0x0000000000403a59 <importModules+153>: mov    %rax,%r12
0x0000000000403a5c <importModules+156>: callq  0x402658 <p...@plt>
0x0000000000403a61 <importModules+161>: mov    %r12,%rdx
0x0000000000403a64 <importModules+164>: mov    $0x405187,%esi
0x0000000000403a69 <importModules+169>: mov    %r14,%rdi
0x0000000000403a6c <importModules+172>: xor    %eax,%eax
0x0000000000403a6e <importModules+174>: callq  *0x204044(%rip)
# 0x607ab8 <PI_PyObject_CallFunction>
0x0000000000403a74 <importModules+180>: mov    %rbp,%rdi
0x0000000000403a77 <importModules+183>: mov    %rax,%rsi
0x0000000000403a7a <importModules+186>: callq  *0x203fe8(%rip)
# 0x607a68 <PI_PyImport_ExecCodeModule>
0x0000000000403a80 <importModules+192>: test   %rax,%rax
0x0000000000403a83 <importModules+195>: je     0x403ae8 <importModules
+296>
0x0000000000403a85 <importModules+197>: callq  *0x20404d(%rip)
# 0x607ad8 <PI_PyErr_Occurred>
0x0000000000403a8b <importModules+203>: test   %rax,%rax
0x0000000000403a8e <importModules+206>: xchg   %ax,%ax
0x0000000000403a90 <importModules+208>: je     0x403aa6 <importModules
+230>
0x0000000000403a92 <importModules+210>: nopw   0x0(%rax,%rax,1)
0x0000000000403a98 <importModules+216>: callq  *0x204042(%rip)
# 0x607ae0 <PI_PyErr_Print>
0x0000000000403a9e <importModules+222>: xchg   %ax,%ax
0x0000000000403aa0 <importModules+224>: callq  *0x20402a(%rip)
# 0x607ad0 <PI_PyErr_Clear>
0x0000000000403aa6 <importModules+230>: mov    (%r12),%eax
0x0000000000403aaa <importModules+234>: sub    $0x1,%eax
0x0000000000403aad <importModules+237>: test   %eax,%eax
0x0000000000403aaf <importModules+239>: mov    %eax,(%r12)
0x0000000000403ab3 <importModules+243>: je     0x403ad8 <importModules
+280>
0x0000000000403ab5 <importModules+245>: mov    %r13,%rdi
0x0000000000403ab8 <importModules+248>: callq  0x402708 <f...@plt>
0x0000000000403abd <importModules+253>: jmpq   0x403a14 <importModules
+84>
0x0000000000403ac2 <importModules+258>: nopw   0x0(%rax,%rax,1)
0x0000000000403ac8 <importModules+264>: pop    %rbx
0x0000000000403ac9 <importModules+265>: pop    %rbp
0x0000000000403aca <importModules+266>: pop    %r12
0x0000000000403acc <importModules+268>: pop    %r13
0x0000000000403ace <importModules+270>: xor    %eax,%eax
0x0000000000403ad0 <importModules+272>: pop    %r14
0x0000000000403ad2 <importModules+274>: retq
0x0000000000403ad3 <importModules+275>: nopl   0x0(%rax,%rax,1)
0x0000000000403ad8 <importModules+280>: mov    0x8(%r12),%rax
0x0000000000403add <importModules+285>: mov    %r12,%rdi
0x0000000000403ae0 <importModules+288>: callq  *0x28(%rax)
0x0000000000403ae3 <importModules+291>: jmp    0x403ab5 <importModules
+245>
0x0000000000403ae5 <importModules+293>: nopl   (%rax)
0x0000000000403ae8 <importModules+296>: mov    %rbp,%rdx
0x0000000000403aeb <importModules+299>: mov    $0x405189,%esi
0x0000000000403af0 <importModules+304>: mov    $0x1,%edi
0x0000000000403af5 <importModules+309>: callq  0x402688
<__printf_...@plt>
0x0000000000403afa <importModules+314>: jmp    0x403a85 <importModules
+197>
End of assembler dump.
(gdb) info register
rax            0x7f8042147ea0   140188841180832
rbx            0x25be2b0        39576240
rcx            0x7f8043145000   140188857946112
rdx            0x7f804310a010   140188857704464
rsi            0x25bec60        39578720
rdi            0x262c460        40027232
rbp            0x25be2c2        0x25be2c2
rsp            0x7fff4b1bdab0   0x7fff4b1bdab0
r8             0x7f     127
r9             0x2      2
r10            0x2      2
r11            0x7f8041e6d480   140188838188160
r12            0x262c460        40027232
r13            0x25dc260        39699040
r14            0x7f804315a998   140188858034584
r15            0x0      0
rip            0x403ae3 0x403ae3 <importModules+291>
eflags         0x10246  [ PF ZF IF RF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0
fctrl          0x37f    895
fstat          0x0      0
ftag           0xffff   65535
fiseg          0x0      0
fioff          0x0      0
foseg          0x0      0
fooff          0x0      0
fop            0x0      0
mxcsr          0x1f80   [ IM DM ZM OM UM PM ]
(gdb) quit
The program is running.  Exit anyway? (y or n)
### GDB END ###############################################



> If that's a normal string object created by PyString_FromStringAndSize
> and it's doing a normale DECREF, I can't see why it's crashing.

Some more info that could help you to reproduce the problem:

Ubuntu 8.10 on Macbook 3,1

$ uname .a
Linux mac1 2.6.27-11-generic #1 SMP Thu Jan 8 08:38:38 UTC 2009 x86_64
GNU/Linux

$ cat test.py
#!/usr/bin/env python

if __name__ == '__main__':
    print 'Hello, world!'

$ cat test.spec
# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'),
os.path.join(HOMEPATH,'support/useUnicode.py'), 'test.py'],
             pathex=['/home/antonio/tmp/pyinstaller-test'])
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=1,
          name=os.path.join('build/pyi.linux2/test', 'test'),
          debug=True,
          strip=False,
          upx=False,
          console=1 )
coll = COLLECT( exe,
               a.binaries,
               a.zipfiles,
               strip=False,
               upx=False,
               name=os.path.join('dist', 'test'))

$ ll dist/test/
totale 3464
-rwxr-xr-x 1 antonio antonio   42248 2008-10-05 23:00 array.so
-rwxr-xr-x 1 antonio antonio   24520 2008-10-05 23:00 binascii.so
-rwxr-xr-x 1 antonio antonio   38216 2008-10-05 23:00 bz2.so
-rwxr-xr-x 1 antonio antonio  149616 2008-10-05 23:00 _codecs_cn.so
-rwxr-xr-x 1 antonio antonio  153744 2008-10-05 23:00 _codecs_hk.so
-rwxr-xr-x 1 antonio antonio   22672 2008-10-05 23:00
_codecs_iso2022.so
-rwxr-xr-x 1 antonio antonio  264304 2008-10-05 23:00 _codecs_jp.so
-rwxr-xr-x 1 antonio antonio  133232 2008-10-05 23:00 _codecs_kr.so
-rwxr-xr-x 1 antonio antonio  108656 2008-10-05 23:00 _codecs_tw.so
-rwxr-xr-x 1 antonio antonio   22560 2008-10-05 23:00 cStringIO.so
-rwxr-xr-x 1 antonio antonio   41568 2008-10-05 23:00 itertools.so
-rwxr-xr-x 1 antonio antonio 1503296 2008-10-05 23:00 libpython2.5.so.
1.0
-rwxr-xr-x 1 antonio antonio   34792 2008-10-05 23:00
_multibytecodec.so
-rwxr-xr-x 1 antonio antonio   27456 2008-10-05 23:00 strop.so
-rwxr-xr-x 1 antonio antonio   34976 2008-10-05 23:00 _struct.so
-rwxr-xr-x 1 antonio antonio  366599 2009-01-10 11:48 test
-rwxr-xr-x 1 antonio antonio  483632 2008-10-05 23:00 unicodedata.so
-rwxr-xr-x 1 antonio antonio   22808 2008-10-05 23:00 zlib.so

$ ldd dist/test/test
        linux-vdso.so.1 =>  (0x00007fff101fe000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00007fd607bdd000)
        libdl.so.2 => /lib/libdl.so.2 (0x00007fd6079d9000)
        libutil.so.1 => /lib/libutil.so.1 (0x00007fd6077d6000)
        libm.so.6 => /lib/libm.so.6 (0x00007fd607551000)
        libz.so.1 => /usr/lib/libz.so.1 (0x00007fd607339000)
        libc.so.6 => /lib/libc.so.6 (0x00007fd606fc7000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd607df9000)

$ svn info ~/projects/extern/pyinstaller/
Percorso: /home/antonio/projects/extern/pyinstaller
URL: http://svn.pyinstaller.python-hosting.com/trunk
Repository: http://svn.pyinstaller.python-hosting.com
UUID del Repository: 8dd32b29-ccff-0310-8a9a-9233e24343b1
Revisione: 596
Tipo di Nodo: directory
Azione: normale
Autore dell'Ultimo Cambiamento: lmancini
Revisione dell'Ultimo Cambiamento: 592
Data dell'Ultimo Cambiamento: 2009-01-07 17:01:49 +0100 (mer, 07 gen
2009)

I can also provide an archive with the full pyinstaller directory
(config.dat binary files etc.)
and the fill test directory (duild and dist folders and pyinstaller
log files) about 4.7MB.


> --
> Giovanni Bajo
> Develer S.r.l.http://www.develer.com

ciao

--
Antonio Valentino
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"PyInstaller" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/PyInstaller?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to