Jean Brouwers added the comment:

Attached is a simple test case which demonstrates the problem on Linux 
and MacOS X.  It is not an xxmodule example, though and hope this is OK.

See the comments for build steps and example output with 3 different 
Python builds on both platforms.

If you need another test case which uses Py_AtExit, let me know.

Added file: http://bugs.python.org/file8620/dlibtest.c

__________________________________
Tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue1329>
__________________________________
#include "stdio.h"


#ifndef __GNUC__
# error require GNU compiler
#endif


static void  __attribute__((constructor))  /* called on main() */
_ctor (void)
{
    printf("*** %s called ...\n", "ctor");
}


static void  __attribute__((destructor))  /* called on exit() */
_dtor (void)
{
    printf("*** %s called ...\n", "dtor");
}


/* =====================================================

Build this file into a shared library, then pre-load
that library with the Python binary as follows.

On Linux, compile as

    gcc -o dlibtest.os -c -m32 -Wall -Werror dlibtest.c
    gcc -o dlibtest.so -m32 -ldl -shared dlibtest.os

and then run

    env LD_PRELOAD  dlibtest.so  .../python


On MacOS X, compile as

    gcc -o dlibtest.os -c -Wall -Werror -march=i686 -fPIC dlibtest.c
    gcc -o dlibtest.dylib -undefined dynamic_lookup -lpthread -dynamiclib 
dlibtest.os

and run

   env DYLD_INSERT_LIBRARIES=./dlibtest.dylib  .../python.exe


After Ctrl-D two messages should have been printed, but 3.0a1
prints only the first one.


Here is a log from Linux with my 3.0a1 and 2.51 builds and
with 2.3.4 included with the Linux distro:

$ gcc -o dlibtest.os -c -m32 -Wall -Werror dlibtest.c
$ gcc -o dlibtest.so -m32 -ldl -shared dlibtest.os

$ env LD_PRELOAD=./dlibtest.so ~/Python-3.0a1/python 
*** ctor called ...
Python 3.0a1 (py3k, Oct 26 2007, 09:45:17) 
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$ env LD_PRELOAD=./dlibtest.so ~/Python-2.5.1/python
*** ctor called ...
Python 2.5.1 (r251:54863, Oct 22 2007, 16:19:11) 
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
*** dtor called ...

$ env LD_PRELOAD=./dlibtest.so /usr/bin/python
*** ctor called ...
Python 2.3.4 (#1, May  2 2007, 19:26:00) 
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
*** dtor called ...


Similarly on MacOS X with Python 2.3.5 distributed by Apple:

% env DYLD_INSERT_LIBRARIES=./dlibtest.dylib ~/Python-3.0a1/python.exe
*** ctor called ...
Python 3.0a1 (py3k, Oct 25 2007, 14:55:57) 
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> ^D

% env DYLD_INSERT_LIBRARIES=./dlibtest.dylib ~/Python-2.5.1/python.exe
*** ctor called ...
Python 2.5.1 (r251:54863, Oct 22 2007, 16:18:08) 
[GCC 4.0.1 (Apple Computer, Inc. build 5341)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> ^D
*** dtor called ...

% env DYLD_INSERT_LIBRARIES=./dlibtest.dylib /usr/bin/python
*** ctor called ...
Python 2.3.5 (#1, Jan 13 2006, 20:13:11) 
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> ^D
*** dtor called ...


/Jean Brouwers  <[EMAIL PROTECTED]>


PS) For more details on the con/destructor attributes, see the GNU
    gcc documentation at

    <http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Function-Attributes.html>

    See also Apple's documentation DynamicLibrary.pdf which
    contains some excellent examples plus special MacOS X
    features.  E.g. c/dtor must be ZPRIVATE and a static
    ctor can have main-like argc, argv and envp arguments!

 ===================================================== */

_______________________________________________
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to