Re: [Gc] "include/private/gcconfig.h", line 604: #error: "The collector has not been ported to this machine/OS combination."
Dennis Clarke <[email protected]> Wed, 23 Nov 2016 14:20:53 -0500
| Newsgroups | gmane.comp.programming.garbage-collection.boehmgc |
|---|---|
| Message-ID | <[email protected]> |
On 11/22/2016 10:59 PM, Ivan Maidanski wrote:
> The following commit treats __amd64 as __amd64__ and __sun as sun:
> https://github.com/ivmai/bdwgc/commit/7f82ed2046cbc4bb594e7c2162d40c819daee111
>
Thank you for the reply and the patch. However I am past that point in
that I stopped using the C99 compiler and switched to the general cc
compiler which generally works for all code. However it is not going
to accept a lot of gnu'isms or clang special tricks. It is just a flat
C compiler and still has a lot of strict code standards expectations.
Having said all that, I was making goog progress however the atomic ops
code fails in a strange way. I detailed all that earlier. However here
it is :
---------------------- from 22nd Nov -------------------
Seems to be libatomic_ops is broken somewhere.
I found the world is a lot easier to deal with by just letting go
of the reins a small bit :-) so I stopped trying with the c99 compiler
which is obscenely strict and switched over to just cc. That works.
Sort of.
The whole process seems to work fine past configure and into the
compile right up until we need to deal with :
libtool: error: 'libatomic_ops/src/atomic_ops_sysdeps.lo' is not a
valid libtool object
Weird error.
There appears to be a strange assembly language source file in
the libatomic_ops area called libatomic_ops/src/atomic_ops_sysdeps.S
however there isn't much in it :
mimas$ cat libatomic_ops/src/atomic_ops_sysdeps.S
/*
* Include the appropriate system-dependent assembly file, if any.
* This is used only if the platform supports neither inline assembly
* code, nor appropriate compiler intrinsics.
*/
#if !defined(__GNUC__) && (defined(sparc) || defined(__sparc))
# include
"atomic_ops/sylibatomic_ops/src/atomic_ops_sysdeps.sdeps/sunc/sparc.S"
#endif
Well that is strange because assembly can be compiled no problem.
I look and see that something was done for sure :
mimas$ ls -lap .libs/atomic_ops_sysdeps.o
-rw-r--r-- 1 dclarke devl 656 Nov 21 14:47
.libs/atomic_ops_sysdeps.o
mimas$ ls -lap atomic_ops_sysdeps.o
-rw-r--r-- 1 dclarke devl 656 Nov 21 14:47 atomic_ops_sysdeps.o
So evil libtool comes along later and seems to go looking for
libatomic_ops/src/atomic_ops_sysdeps.lo which does not exist at all and
the whole process comes to a halt.
In fact the entire build process related to that file looks like :
Step 1 :
/usr/local/bin/bash ./libtool --tag=CC --mode=compile
/opt/solarisstudio12.4/bin/cc -DHAVE_CONFIG_H -I./include -I./include
-I./libatomic_ops/src -I./libatomic_ops/src -D_TS_ERRNO
-D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE -m64 -xtarget=ultra2
-xarch=sparcvis -xchip=ultra2 -xcache=generic -errwarn=%none
-errhdr=%user -erroff=%none -errtags=yes -errfmt=error -errshort=full
-xstrconst -xildoff -xmemalign=8s -xnolibmil -Xa -xcode=pic32
-xregs=no%appl -xlibmieee -mc -g -xs -ftrap=%none -Qy -xbuiltin=%none
-xdebugformat=dwarf -xunroll=1 -D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS
-D_LARGEFILE64_SOURCE -c libatomic_ops/src/atomic_ops_sysdeps.S
Step 2 :
libtool: compile: /opt/solarisstudio12.4/bin/cc -DHAVE_CONFIG_H
-I./include -I./include -I./libatomic_ops/src -I./libatomic_ops/src
-D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE -m64
-xtarget=ultra2 -xarch=sparcvis -xchip=ultra2 -xcache=generic
-errwarn=%none -errhdr=%user -erroff=%none -errtags=yes -errfmt=error
-errshort=full -xstrconst -xildoff -xmemalign=8s -xnolibmil -Xa
-xcode=pic32 -xregs=no%appl -xlibmieee -mc -g -xs -ftrap=%none -Qy
-xbuiltin=%none -xdebugformat=dwarf -xunroll=1 -D_TS_ERRNO
-D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE -c
libatomic_ops/src/atomic_ops_sysdeps.S -KPIC -DPIC -o
.libs/atomic_ops_sysdeps.o
Step 3 :
libtool: compile: /opt/solarisstudio12.4/bin/cc -DHAVE_CONFIG_H
-I./include -I./include -I./libatomic_ops/src -I./libatomic_ops/src
-D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE -m64
-xtarget=ultra2 -xarch=sparcvis -xchip=ultra2 -xcache=generic
-errwarn=%none -errhdr=%user -erroff=%none -errtags=yes -errfmt=error
-errshort=full -xstrconst -xildoff -xmemalign=8s -xnolibmil -Xa
-xcode=pic32 -xregs=no%appl -xlibmieee -mc -g -xs -ftrap=%none -Qy
-xbuiltin=%none -xdebugformat=dwarf -xunroll=1 -D_TS_ERRNO
-D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE -c
libatomic_ops/src/atomic_ops_sysdeps.S -o atomic_ops_sysdeps.o
>/dev/null 2>&1
Step 4 :
/usr/local/bin/bash ./libtool --tag=CC --mode=link
/opt/solarisstudio12.4/bin/cc -m64 -xtarget=ultra2 -xarch=sparcvis
-xchip=ultra2 -xcache=generic -errwarn=%none -errhdr=%user -erroff=%none
-errtags=yes -errfmt=error -errshort=full -xstrconst -xildoff
-xmemalign=8s -xnolibmil -Xa -xcode=pic32 -xregs=no%appl -xlibmieee -mc
-g -xs -ftrap=%none -Qy -xbuiltin=%none -xdebugformat=dwarf -xunroll=1
-D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE
-version-info 1:3:0 -no-undefined -L/usr/local/lib -o libgc.la -rpath
/usr/local/lib allchblk.lo alloc.lo blacklst.lo checksums.lo dbg_mlc.lo
dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo headers.lo mach_dep.lo
malloc.lo mallocx.lo mark.lo mark_rts.lo misc.lo new_hblk.lo obj_map.lo
os_dep.lo pcr_interface.lo ptr_chck.lo real_malloc.lo reclaim.lo
specific.lo stubborn.lo thread_local_alloc.lo typd_mlc.lo
pthread_start.lo pthread_support.lo pthread_stop_world.lo fnlz_mlc.lo
libatomic_ops/src/atomic_ops_sysdeps.lo sparc_mach_dep.lo
-L/usr/lib/lwp/ -R/usr/lib/lwp/ -lpthread -lrt -ldl
libtool: error: 'libatomic_ops/src/atomic_ops_sysdeps.lo' is not a
valid libtool object
So this is quite strange. The absence of the weird ".lo" file which only
libtool needs.
Something went sadly wrong with libatomic_ops :
mimas$ cd libatomic_ops/src/
mimas$ ls -lo atomic_op*
-rw-r--r-- 1 dclarke 7446 May 24 2016 atomic_ops.c
-rw-r--r-- 1 dclarke 18806 May 24 2016 atomic_ops.h
-rw-r--r-- 1 dclarke 8063 May 24 2016 atomic_ops_malloc.c
-rw-r--r-- 1 dclarke 1665 May 24 2016 atomic_ops_malloc.h
-rw-r--r-- 1 dclarke 9869 May 24 2016 atomic_ops_stack.c
-rw-r--r-- 1 dclarke 6606 May 24 2016 atomic_ops_stack.h
-rw-r--r-- 1 dclarke 306 May 24 2016 atomic_ops_sysdeps.S
atomic_ops:
total 150
-rw-r--r-- 1 dclarke 1854 May 24 2016 ao_version.h
-rw-r--r-- 1 dclarke 127867 May 24 2016 generalize-arithm.h
-rw-r--r-- 1 dclarke 32899 May 24 2016 generalize-arithm.template
-rw-r--r-- 1 dclarke 102089 May 24 2016 generalize-small.h
-rw-r--r-- 1 dclarke 20649 May 24 2016 generalize-small.template
-rw-r--r-- 1 dclarke 27996 May 24 2016 generalize.h
drwxr-xr-x 10 dclarke 25 May 24 2016 sysdeps
No object files seen there at all and that means
libatomic_ops/src/atomic_ops_sysdeps.lo is missing and so is the object
file. However it does exist as :
mimas$ find . | grep "atomic_ops_sysdeps"
./.libs/atomic_ops_sysdeps.o
./atomic_ops_sysdeps.o
./libatomic_ops-7.4.4/src/.deps/atomic_ops_sysdeps.Plo
./libatomic_ops-7.4.4/src/atomic_ops_sysdeps.S
./atomic_ops_sysdeps.lo
The problem is somewhere down inside the libatomic sources.
I wrote a simple link hack.sh thus and ran it :
mimas$ cat hack.sh
#!/bin/ksh
/opt/solarisstudio12.4/bin/cc -\# -H \
-m64 -xtarget=ultra2 -xarch=sparcvis \
-xchip=ultra2 -xcache=generic -errwarn=%none -errhdr=%user \
-erroff=%none -errtags=yes -errfmt=error -errshort=full -xstrconst \
-xildoff -xmemalign=8s -xnolibmil -Xa -xcode=pic32 -xregs=no%appl \
-xlibmieee -mc -g -xs -ftrap=%none -Qy -xbuiltin=%none \
-xdebugformat=dwarf -xunroll=1 \
-D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE \
-L/usr/local/lib -L/usr/lib/lwp -R/usr/lib/lwp \
\
allchblk.o alloc.o blacklst.o checksums.o dbg_mlc.o dyn_load.o \
finalize.o gc_dlopen.o gcj_mlc.o headers.o mach_dep.o malloc.o \
mallocx.o mark.o mark_rts.o misc.o new_hblk.o obj_map.o os_dep.o \
pcr_interface.o ptr_chck.o real_malloc.o reclaim.o specific.o \
stubborn.o thread_local_alloc.o typd_mlc.o pthread_start.o \
pthread_support.o pthread_stop_world.o fnlz_mlc.o \
\
atomic_ops_sysdeps.o \
\
sparc_mach_dep.o \
\
-o libgc.foo -lpthread -lrt -ldl
Which works ( other than undefined symbols that must exist somewhere ) :
mimas$ ./hack.sh
### cc: Note: NLSPATH =
/opt/solarisstudio12.4/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/solarisstudio12.4/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat
### command line files and options (expanded):
### -# -H -m64 -xarch=sparcvis -xchip=ultra2 -xcache=generic
-errwarn=%none -errhdr=%user -erroff=%none -errtags=yes -errfmt=error
-errshort=full -xstrconst -xmemalign=8s -xnolibmil -Xa -xcode=pic32
-xregs=no%appl -xlibmieee -mc
-xdebuginfo=line,param,variable,tagtype,codetag,decl -xglobalize=yes
-xpatchpadding=fix -xkeep_unref=funcs,vars -xs=yes -ftrap=%none -Qy
-xbuiltin=%none -xdebugformat=dwarf -xunroll=1 -D_TS_ERRNO
-D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE -L/usr/local/lib
-L/usr/lib/lwp -R/usr/lib/lwp allchblk.o alloc.o blacklst.o checksums.o
dbg_mlc.o dyn_load.o finalize.o gc_dlopen.o gcj_mlc.o headers.o
mach_dep.o malloc.o mallocx.o mark.o mark_rts.o misc.o new_hblk.o
obj_map.o os_dep.o pcr_interface.o ptr_chck.o real_malloc.o reclaim.o
specific.o stubborn.o thread_local_alloc.o typd_mlc.o pthread_start.o
pthread_support.o pthread_stop_world.o fnlz_mlc.o atomic_ops_sysdeps.o
sparc_mach_dep.o -olibgc.foo -lpthread -lrt -ldl
### cc: Note: LD_LIBRARY_PATH = (null)
### cc: Note: LD_LIBRARY_PATH_64 = (null)
### cc: Note: LD_RUN_PATH = /usr/local/lib
### cc: Note: LD_OPTIONS = -64 -L/usr/local/lib -R/usr/local/lib
ln -s /opt/solarisstudio12.4/lib/compilers /tmp/lib_link.1479836266.19734.01
/usr/ccs/bin/ld
-zld32=-S/tmp/lib_link.1479836266.19734.01/libldstab_ws.so
-zld64=-S/tmp/lib_link.1479836266.19734.01/sparcv9/libldstab_ws.so
-zld32=-S/tmp/lib_link.1479836266.19734.01/libld_annotate.so
-zld64=-S/tmp/lib_link.1479836266.19734.01/sparcv9/libld_annotate.so
/opt/solarisstudio12.4/lib/compilers/sparcv9/crti.o
/opt/solarisstudio12.4/lib/compilers/sparcv9/crt1.o
/opt/solarisstudio12.4/lib/compilers/sparcv9/values-xi.o
-L/usr/local/lib -L/usr/lib/lwp allchblk.o alloc.o blacklst.o
checksums.o dbg_mlc.o dyn_load.o finalize.o gc_dlopen.o gcj_mlc.o
headers.o mach_dep.o malloc.o mallocx.o mark.o mark_rts.o misc.o
new_hblk.o obj_map.o os_dep.o pcr_interface.o ptr_chck.o real_malloc.o
reclaim.o specific.o stubborn.o thread_local_alloc.o typd_mlc.o
pthread_start.o pthread_support.o pthread_stop_world.o fnlz_mlc.o
atomic_ops_sysdeps.o sparc_mach_dep.o -lpthread -lrt -ldl -o libgc.foo
-Y
"P,/opt/solarisstudio12.4/lib/compilers/staticlib/sparcv9:/opt/solarisstudio12.4/lib/compilers/sparcvis/sparcv9:/opt/solarisstudio12.4/lib/compilers/sparcv9:/usr/ccs/lib/sparcv9:/lib/64:/usr/lib/64"
-Qy -R/usr/lib/lwp -lc /opt/solarisstudio12.4/lib/compilers/sparcv9/crtn.o
Undefined first referenced
symbol in file
main /opt/solarisstudio12.4/lib/compilers/sparcv9/crt1.o
AO_compare_double_and_swap_double_emulation allchblk.o
AO_fetch_compare_and_swap_emulation allchblk.o
AO_store_full_emulation mark.o
ld: fatal: symbol referencing errors. No output written to libgc.foo
mimas$
So the problem seems to be in the libatomic_ops region.
Dennis