Keywords: Inmos ANSI-C toolset, Solaris 2.6 , icconf, icollect, problem *** INMOS ANSI-C problem: reported and fixed by Kees Lemmens, Feb. 2000 *** Most of the Inmos tools for the Parsytec transputer system work fine on all our SUN systems, except for "icconf" or "icollect" on SUN UltraSparc10 and SUN Classic systems. Symptoms: The iccconf program gets very confused while reading the setconf.inc file, and the icconf program exits with a Segmentation Fault. However on an older system (SUN IPX) the same binaries work fine, although they all have the same Operating System (Solaris 2.6), installed from the same CDROM! And even more: the whole INMOS toolset system is NFS mounted from the same server for all SUN systems. I can't recall if it has worked before on dutind7 while running Solaris 2.6, but it has worked for years on the very same Sparc Classic while running Solaris 2.2, 2.3 and 2.4. Examples (with hello.c from examples/simple) : ====================================================================== Without a .cfs file : ======= Classic ======= icollect hello.lku -t -i # single transputer code icollect : INMOS toolset collector Sun Version 3.0.17 Aug 25 1993 15:45:06 Opened hello.lku for reading Using system library file : sysproc.lib Using bootstrap library file : linkboot.lib Opened hello.btl for writing Opened hello.cfb for writing Building single processor boot from link program Segmentation Fault - core dumped ======= IPX ======= icollect hello.lku -i -t icollect : INMOS toolset collector Sun Version 3.0.17 Aug 25 1993 15:45:06 Opened hello.lku for reading Using system library file : sysproc.lib Using bootstrap library file : linkboot.lib Opened hello.btl for writing Opened hello.cfb for writing Building single processor boot from link program Total memory required on this processor is 19080 bytes ============================================================================ And with a .cfs file : ======= Classic ======= icconf -i hello.cfs Information-icconf-setconf.inc(1)- parsing source file Information-icconf-setconf.inc(25)- checking source file Information-icconf-hello.cfs(1)- parsing source file Information-icconf-hello.cfs(7)- checking source file Error-icconf-hello.cfs(7)- reference to undefined symbol 'T800' Error-icconf-hello.cfs(9)- reference to undefined symbol 'Single' Error-icconf-hello.cfs(20)- reference to undefined symbol 'process' Error-icconf-hello.cfs(25)- reference to undefined symbol 'Simple' Error-icconf-hello.cfs(26)- reference to undefined symbol 'Simple' Error-icconf-hello.cfs(30)- reference to undefined symbol 'Simple' Error-icconf-hello.cfs(31)- reference to undefined symbol 'Simple' Error-icconf-hello.cfs(33)- reference to undefined symbol 'host' Error-icconf-hello.cfs(34)- reference to undefined symbol 'host' Error-icconf- host edge 'host' undefined Information-icconf- calculating network boot path Information-icconf- checking node definitions Information-icconf- checking network description ======= IPX ======= icconf -i hello.cfs Information-icconf-setconf.inc(1)- parsing source file Information-icconf-setconf.inc(25)- checking source file Information-icconf-hello.cfs(1)- parsing source file Information-icconf-hello.cfs(7)- checking source file Information-icconf- calculating network boot path Information-icconf- checking node definitions Information-icconf- checking network description Information-icconf- placed channel 'Simple.FromHost' onto link 'Single.link[0]' Information-icconf- placed channel 'Simple.ToHost' onto link 'Single.link[0]' Information-icconf- calculating node memory maps Information-icconf-hello.cfb- writing to binary file icollect -i hello.cfb icollect : INMOS toolset collector Sun Version 3.0.17 Aug 25 1993 15:45:06 Opened hello.cfb for reading Using system library file : sysproc.lib Using bootstrap library file : linkboot.lib Opened hello.btl for writing Building configured network boot from link program Building for processor 0 Load start on this processor is 0x800000A0 CODE AND DATA patching required Total memory used on processor 0 is 72236 bytes Finished build for processor 0 ============================================================================ I tried many things to no avail : - I mounted the complete /usr from the Classic over the IPX /usr tree, but even then the IPX icconf/icollect works fine. Other way round is more complicated as the IPX doesn't have NFS server installed (the disk is too small). - I removed the if statements from the setconf.inc file in the /opt/ictools/libs dir: no difference. - I copied the /etc/csh.cshrc and .cshrc files from the IPX to the Classic : no difference. - I replaced the linkboot.lib file with the original one from Inmos : no difference. Differences between Classic/IPX : - processor - 500 MB <-> 200 MB - X-windows <-> getty on console - NFS server <-> only NFS client !!!!!!!!!!!!!!!!!!!!!!!! March 16, 2000 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!! Problem finally solved !! !!!!!!!!!!!!!!!!!!!!!!!!!! What did I do ? I still had an old boot disk with Solaris 2.4 on it, which I used to boot the Classic. Icconf worked fine there. ldd on the icconf exectuable showed the following (on Solaris 2.4) : libc.so.1.6 => /usr/4lib/libc.so.1.8 libucb.so.1 => /usr/ucblib/libucb.so.1 libc.so.1 => /lib/libc.so.1 libw.so.1 => /lib/libw.so.1 librpcsoc.so.1 => /usr/ucblib//librpcsoc.so.1 libnsl.so.1 => /lib/libnsl.so.1 libsocket.so.1 => /lib/libsocket.so.1 libdl.so.1 => /lib/libdl.so.1 libaio.so.1 => /lib/libaio.so.1 libelf.so.1 => /lib/libelf.so.1 libintl.so.1 => /lib/libintl.so.1 ldd on the same icconf exectuable for Solaris 2.6 : libc.so.1.6 => /usr/4lib/libc.so.1.9 libucb.so.1 => /usr/ucblib/libucb.so.1 libc.so.1 => /lib/libc.so.1 librpcsoc.so.1 => /usr/ucblib/librpcsoc.so.1 libnsl.so.1 => /lib/libnsl.so.1 libsocket.so.1 => /lib/libsocket.so.1 libdl.so.1 => /lib/libdl.so.1 libaio.so.1 => /lib/libaio.so.1 libelf.so.1 => /lib/libelf.so.1 libmp.so.2 => /lib/libmp.so.2 I copied the 2.4 libraries to the ictools tree, wrote a wrapper for icconf / icollect that changes LD_LIBRARY_PATH to this library tree, moved the original binaries to icconf.org / icollect.org and - alas - everything worked just fine, even on Solaris 2.6 !! Wrapper script : ========================================================================== #!/bin/sh -f # # Wrapper for icconf to fix the icconf problem with new Solaris libraries. # It just uses the old Solaris 2.4 libraries instead, which seems to work # fine. # BTW : these are the oldest libs I could find, but 2.3 or even 2.5 may # work fine as well ! # Also note that on an IPX icconf runs fine even with the new Solaris libs. # The only problem arises on UltraSparcs and SparcClassics. # # Kees Lemmens, March 2000 # LD_LIBRARY_PATH=$ICTOOLS/LibsSol2.4 export LD_LIBRARY_PATH exec $ICTOOLS/tools/icconf.org $* ========================================================================== So, the problem seems to be fixed for now. Later I found that only the libc.so.1 and libucb.so.1 where important and that the rest didn't matter, but I keep them anyway to fix problems in the future. KL