[ python-Bugs-1530448 ] ctypes build fails on Solaris 10

SourceForge.net noreply at sourceforge.net
Wed Aug 2 15:20:42 CEST 2006


Bugs item #1530448, was opened at 2006-07-28 17:04
Message generated for change (Comment added) made by theller
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1530448&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Build
Group: Python 2.5
Status: Open
Resolution: None
Priority: 5
Submitted By: Skip Montanaro (montanaro)
Assigned to: Thomas Heller (theller)
Summary: ctypes build fails on Solaris 10

Initial Comment:
Thomas,

I tried to build Python from cvs (svn rev 50905) on
Solaris 10 today.
Compiler was gcc 3.4.  I got a text relocation error
when linking
ctypes.so:

/opt/app/g++lib6/gcc-3.4/bin/gcc -shared
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/_ctypes.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callbacks.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callproc.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/stgdict.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/cfield.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/malloc_closure.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/prep_cif.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi64.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/unix64.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/sysv.o
-L/usr/local/lib -o
build/lib.solaris-2.10-i86pc-2.5/_ctypes.so
Text relocation remains                         referenced
    against symbol                  offset      in file
ffi_closure_SYSV_inner              0x8e       
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/sysv.o
ld: fatal: relocations remain against allocatable but
non-writable sections
collect2: ld returned 1 exit status

I tried configuring both with and without the
--with-system-ffi flag.
The error was the same in both cases.

If you need more information, let me know.

Skip


----------------------------------------------------------------------

>Comment By: Thomas Heller (theller)
Date: 2006-08-02 15:20

Message:
Logged In: YES 
user_id=11105

It seems that the files 'src/x86/ffi.c' and 'src/x86/sysv.S'
are not needed for the X86_64 platform in fficonfig.py.in.

They *should* compile to nothing, anyway, because their
contents is protected by 'ifndef __x86_64__'.

Does removing them from fficonfig.py.in change the
situation, so that only this remains:

    'X86_64': ['src/x86/ffi64.c', 'src/x86/unix64.S'],

I can build _ctypes on an unbuntu amd64 system with this change.

----------------------------------------------------------------------

Comment By: Skip Montanaro (montanaro)
Date: 2006-08-02 15:08

Message:
Logged In: YES 
user_id=44345

I don't understand.  I swapped the order of ffi.c and sysv.S
in the platforms dict.  I confirmed that the order of the .o
files on the link line changed so that ffi.o followed
sysv.o.  I still get the same error.  I've also confirmed
that ffi.o exports the symbol and that sysv.o references it:

    % nm -p
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi.o


   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi.o:
    0000000000 s
    0000000000 s
    0000000000 s
    0000000000 s
    0000000000 s
    0000000000 s
    0000000000 s
    0000000000 s
    0000000000 s
    0000000000 s
    0000000000 s
    0000000000 U _GLOBAL_OFFSET_TABLE_
    0000000000 f ffi.c
    0000000332 T ffi_call
    0000000000 U ffi_call_SYSV
    0000000000 U ffi_closure_SYSV
    0000000456 T ffi_closure_SYSV_inner
    0000000000 T ffi_prep_args
    0000000252 T ffi_prep_cif_machdep
    0000000612 T ffi_prep_closure
    0000000000 U memcpy
    % nm -p
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/sysv.o


   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/sysv.o:
    0000000000 s
    0000000000 s
    0000000000 s
    0000000000 s
    0000000109 n epilogue
    0000000000 T ffi_call_SYSV
    0000000116 T ffi_closure_SYSV
    0000000000 U ffi_closure_SYSV_inner
    0000000000 U ffi_prep_args
    0000000109 n noretval
    0000000071 n retdouble
    0000000059 n retfloat
    0000000046 n retint
    0000000095 n retint64
    0000000083 n retlongdouble
    0000000109 n retstruct

All the object files were compiled with -fPIC.  Here's the
relevant chunk of make's output:

    creating build/temp.solaris-2.10-i86pc-2.5/libffi
    checking build system type... i386-pc-solaris2.10
    checking host system type... i386-pc-solaris2.10
    checking target system type... i386-pc-solaris2.10
    checking for gcc... /opt/app/g++lib6/gcc-3.4/bin/gcc
    checking for C compiler default output file name... a.out
    checking whether the C compiler works... yes
    checking whether we are cross compiling... no
    checking for suffix of executables...
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether /opt/app/g++lib6/gcc-3.4/bin/gcc
accepts -g... yes
    checking for /opt/app/g++lib6/gcc-3.4/bin/gcc option to
accept ANSI C... none needed
    checking how to run the C preprocessor...
/opt/app/g++lib6/gcc-3.4/bin/gcc -E
    checking for egrep... egrep
    checking for ANSI C header files... yes
    checking for sys/types.h... yes
    checking for sys/stat.h... yes
    checking for stdlib.h... yes
    checking for string.h... yes
    checking for memory.h... yes
    checking for strings.h... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for unistd.h... yes
    checking sys/mman.h usability... yes
    checking sys/mman.h presence... yes
    checking for sys/mman.h... yes
    checking for mmap... yes
    checking for sys/mman.h... (cached) yes
    checking for mmap... (cached) yes
    checking whether read-only mmap of a plain file works... yes
    checking whether mmap from /dev/zero works... yes
    checking for MAP_ANON(YMOUS)... yes
    checking whether mmap with MAP_ANON(YMOUS) works... yes
    checking for ANSI C header files... (cached) yes
    checking for memcpy... yes
    checking for working alloca.h... yes
    checking for alloca... yes
    checking for double... yes
    checking size of double... 8
    checking for long double... yes
    checking size of long double... 12
    checking whether byte ordering is bigendian... no
    checking whether .eh_frame section should be read-only... no
    checking for __attribute__((visibility("hidden")))... no
    configure: creating ./config.status
    config.status: creating include/ffi.h
    config.status: creating fficonfig.py
    config.status: creating fficonfig.h
    config.status: linking
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffitarget.h
to include/ffitarget.h
    config.status: linking
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/include/ffi_common.h
to include/ffi_common.h
    config.status: executing include commands
    config.status: executing src commands
    >>> X86_64
    ['src/prep_cif.c', 'src/x86/ffi64.c',
'src/x86/unix64.S', 'src/x86/sysv.S', 'src/x86/ffi.c']
    building '_ctypes' extension
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/_ctypes.c
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/_ctypes.o
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callbacks.c
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callbacks.o
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callproc.c
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callproc.o
   
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callproc.c:
In function `_CallProc':
   
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callproc.c:917:
warning: implicit declaration of function `alloca'
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/stgdict.c
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/stgdict.o
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/cfield.c
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/cfield.o
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/malloc_closure.c
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/malloc_closure.o
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/prep_cif.c
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/prep_cif.o
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi64.c
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi64.o
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/unix64.S
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/unix64.o
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/sysv.S
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/sysv.o
    /opt/app/g++lib6/gcc-3.4/bin/gcc -fPIC
-fno-strict-aliasing -DNDEBUG -g -O3 -Wall
-Wstrict-prototypes -I.
-I/home/ink/skipm/src/python-svn/trunk/./Include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi/include
-Ibuild/temp.solaris-2.10-i86pc-2.5/libffi
-I/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src
-I/opt/app/nonc++/BerkleyDB-4.3/include
-I/opt/app/nonc++/tcl-8.4/include
-I/opt/app/nonc++/readline-4.3/include
-I/opt/app/nonc++/gdbm-1.8/include -I../Include -I.
-I/usr/local/include
-I/home/ink/skipm/src/python-svn/trunk/Include
-I/home/ink/skipm/src/python-svn/trunk/build -c
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi.c
-o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi.o
   
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi.c:177:
warning: function declaration isn't a prototype
   
/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi.c:194:
warning: function declaration isn't a prototype
    /opt/app/g++lib6/gcc-3.4/bin/gcc -shared
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/_ctypes.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callbacks.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callproc.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/stgdict.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/cfield.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/malloc_closure.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/prep_cif.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi64.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/unix64.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/sysv.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi.o
-L/usr/local/lib -o build/lib.solaris-2.10-i86pc-2.5/_ctypes.so
    Text relocation remains                         referenced
	against symbol                  offset      in file
    ffi_closure_SYSV_inner              0x8e       
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/sysv.o
    ld: fatal: relocations remain against allocatable but
non-writable sections
    collect2: ld returned 1 exit status

I added a couple prints to fficonfig.py.in to demonstrate
the file order and platform name (and to make sure
fficonfig.py was being rebuilt).

Oddly enough, if I remove both ffi.o and sysv.o from the
link line, it links successfully.  Is that significant or am
I just getting desparate?



----------------------------------------------------------------------

Comment By: Thomas Heller (theller)
Date: 2006-08-01 22:02

Message:
Logged In: YES 
user_id=11105

I didn't know there are any systems that depend on the order
of object files on the linker command line any more ;-).

IIUC, the objects list is derived by distutils from the
sources list, so the attached patch (for
Modules/_ctypes/libffi/fficonfig.py.in) *could* do the
trick.  Please make sure that fficonfig.py is recreated (by
doing make clean before building or whatever).
Thanks for looking into this.

----------------------------------------------------------------------

Comment By: Skip Montanaro (montanaro)
Date: 2006-08-01 18:16

Message:
Logged In: YES 
user_id=44345

    Thomas> Skip, do you have *any* idea what might be
    Thomas> wrong, or could you even come up with a patch?

    Skip> I've no idea so far.  I'll try to find some time
    Skip> to take a look at it later today.

Thomas,

Sorry for the delay.  I think I have it figured out and it
was fairly straightforward.  Looking at the files in order
on the _ctypes.so link line we see that the definition of
ffi_closure_SYSV_inner is defined before it's referenced:

    for obj in
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/_ctypes.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callbacks.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callproc.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/stgdict.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/cfield.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/malloc_closure.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/prep_cif.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi64.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/unix64.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi.o
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/sysv.o
 ; do echo $obj; nm -p $obj | egrep ffi_closure_SYSV_inner; done
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/_ctypes.o
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callbacks.o
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/callproc.o
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/stgdict.o
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/cfield.o
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/malloc_closure.o
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/prep_cif.o
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi64.o
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/unix64.o
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/ffi.o
    0000000456 T ffi_closure_SYSV_inner
   
build/temp.solaris-2.10-i86pc-2.5/home/ink/skipm/src/python-svn/trunk/Modules/_ctypes/libffi/src/x86/sysv.o
    0000000000 U ffi_closure_SYSV_inner

Since we're linking from object files, it's a one-pass link
algorithm.  At the time ffo.o is examined, sysv.o hasn't
been seen.  Consequently, ffi_closure_SYSV_inner is not yet
known and its definition isn't picked up from ffi.o.

I couldn't quickly figure out where the link command is
generated, but I'm sure you'll know where it resides.
Either swap ffi.o and sysv.o on the link line, or add ffi.o
a second time to resolve the new reference.

Skip


----------------------------------------------------------------------

Comment By: Thomas Heller (theller)
Date: 2006-07-31 12:54

Message:
Logged In: YES 
user_id=11105

Skip, do you have *any* idea what might be wrong, or could
you even come up with a patch?

----------------------------------------------------------------------

Comment By: Skip Montanaro (montanaro)
Date: 2006-07-29 00:03

Message:
Logged In: YES 
user_id=44345

Yeah, you'd definitely need -fPIC on any brand of Solaris.  That test might be 
changed to

    plat = get_platform()
    if plat in (... buncha platforms ...) or "solaris" in plat:
        os.environ["CFLAGS"] = "-fPIC"

That doesn't seem to be what's happening in this case though.  I rm'd the .o 
files in .../Modules/_ctypes and tried again.  The compile commands *do* 
have -fPIC on them.  I don't think it's required on the link line.

S


----------------------------------------------------------------------

Comment By: Thomas Heller (theller)
Date: 2006-07-28 18:19

Message:
Logged In: YES 
user_id=11105

Skip,

This looks *somewhat* like the problems reported in bugs
1529269 and 1528620 (although they have a sparc, and you
seem to have x86 solaris).

Hm, in the standalone ctypes setup script, I find this code
snippet:

if get_platform() in ["solaris-2.9-sun4u", "linux-x86_64"]:
    os.environ["CFLAGS"] = "-fPIC"

Can it be that -fPIC must be used, but is not specified?

It is also funny that the solaris buildbot does NOT seem to
have a problem.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1530448&group_id=5470


More information about the Python-bugs-list mailing list