SGI: Development

Nekoware bash-3.0 bug?

When using SGI's bash (2.05) or any version of bash (2 or 3) on other systems, the command:

Code: Select all

$ /usr/gnu/bin/bash -c 'A=$(( 2 + 3 )); echo $A'
5


... produces, as expected, the result "5".

However, using bash-3 from Nekoware. I get:

Code: Select all

$ /usr/nekoware/bin/bash -c 'A=$(( 2 + 3 )); echo $A'
2: command not found


... which seems to indicate that bash isn't parsing the line correctly.

Could anyone who reads this quickly try this on their own SGI, and see what happens. I'm interested if IRIX release or architecture makes a difference. I've an Octane running 6.5.28.

(I also see this problem when using an auto-compiled bash from NetBSD's pkgsrc or OpenPKG's source RPM. However, another developers using MIPSpro 7.3.1.2m reports that OpenPKG's build works for him (compiled with CFLAGS=-O). I have MIPSpro 7.3.4m, and compiled with significant optimisations.)

Which is a good point - what are (or, indeed, are there) the standard optimisation options/CFLAGS used for building Nekoware builds?

Cheers,

Stuart
Looks like bash was compiled without --enable-dparen-arithmetic, either because configure thought it not to be supported, or because of an explizit --disable... Release notes don't say anything about it, though...
Such bugs and goblins in my life!
(Taken from Hamlet)
This is odd - I've just rebuilt bash from scratch with "--enable-dparen-arithmetic" specifically passed to configure, and yet still the above syntax doesn't work.

Code: Select all

+ CFLAGS='-c99 -O2 -n32 -mips4 -r12000 -apo -float_const -use_readonly_const -TARG:isa=mips4:platform=ip30:processor=r12000 -TENV:zeroinit_in_bss=ON -DEFAULT:platform=ip30 -OPT:fast_io=ON:Olimit=8192:reorg_common=ON:swp=ON -LNO:auto_dist=ON:fusion_peeling_limit=8:gather_scatter=2 -woff 1174,1183,1552'
+ LDFLAGS='-Wl,-v -Wl,-s -Wl,-x -n32 -mips4 -rdata_shared -Wl,-allow_jump_at_eop'
+ ./configure --cache-file=./config.cache --prefix=/usr/local --disable-multibyte --without-gnu-malloc --disable-minimal-config --enable-alias --enable-arith-for-command --enable-array-variables --enable-bang-history --enable-brace-expansion --enable-command-timing --enable-cond-command --enable-cond-regexp --enable-directory-stack --enable-dparen-arithmetic --enable-extended-glob --enable-help-builtin --enable-history --enable-job-control --enable-net-redirections --enable-process-substitution --enable-progcomp --enable-prompt-string-decoding --enable-readline --enable-select --enable-separate-helpfiles --disable-rpath --disable-nls --without-curses
configure: loading cache ./config.cache
checking build system type... mips-sgi-irix6.5
checking host system type... mips-sgi-irix6.5
checking for emacs... no
checking for xemacs... no

Beginning configuration for bash-3.0-release for mips-sgi-irix6.5

checking for gcc... cc
checking for C compiler default output... 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... no
checking whether cc accepts -g... yes
checking for cc option to accept ANSI C... none needed
checking for strerror in -lcposix... no
checking how to run the C preprocessor... cc -E
checking for egrep... grep -E
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 minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking for _LARGE_FILES value needed for large files... no
checking for a BSD-compatible install... ./support/install.sh -c
checking for ar... ar
checking for ranlib... :
checking for bison... bison -y
checking whether make sets $(MAKE)... yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking whether byte ordering is bigendian... yes
checking for preprocessor stringizing operator... yes
checking for working long double with more range or precision than double... yes
checking for function prototypes... yes
checking whether char is unsigned... yes
checking whether NLS is requested... no
checking for msgfmt... no
checking for gmsgfmt... :
checking for xgettext... no
checking for msgmerge... no
checking for off_t... yes
checking for size_t... yes
checking for working alloca.h... yes
checking for alloca... yes
checking for stdlib.h... (cached) yes
checking for unistd.h... (cached) yes
checking for getpagesize... yes
checking for working mmap... yes
checking whether we are using the GNU C Library 2.1 or newer... no
checking whether integer division by zero raises SIGFPE... no
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unsigned long long... yes
checking for inttypes.h... yes
checking whether the inttypes.h PRIxNN macros are broken... no
checking for non-GNU ld... /bin/ld
checking if the linker (/bin/ld) is GNU ld... no
checking for shared library run path origin... done
checking argz.h usability... no
checking argz.h presence... no
checking for argz.h... no
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking nl_types.h usability... yes
checking nl_types.h presence... yes
checking for nl_types.h... yes
checking malloc.h usability... yes
checking malloc.h presence... yes
checking for malloc.h... yes
checking stddef.h usability... yes
checking stddef.h presence... yes
checking for stddef.h... yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking for unistd.h... (cached) yes
checking sys/param.h usability... yes
checking sys/param.h presence... yes
checking for sys/param.h... yes
checking for feof_unlocked... yes
checking for fgets_unlocked... no
checking for getc_unlocked... yes
checking for getcwd... yes
checking for getegid... yes
checking for geteuid... yes
checking for getgid... yes
checking for getuid... yes
checking for mempcpy... no
checking for munmap... yes
checking for putenv... yes
checking for setenv... no
checking for setlocale... yes
checking for stpcpy... no
checking for strcasecmp... yes
checking for strdup... yes
checking for strtoul... yes
checking for tsearch... yes
checking for __argz_count... no
checking for __argz_stringify... no
checking for __argz_next... no
checking for __fsetlocking... no
checking for iconv... yes
checking for iconv declaration...
extern size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
checking for nl_langinfo and CODESET... yes
checking for LC_MESSAGES... yes
checking for bison... bison
checking version of bison... 1.25, bad
checking whether NLS is requested... no
checking whether to use NLS... no
checking for dirent.h that defines DIR... yes
checking for library containing opendir... none required
checking whether time.h and sys/time.h may both be included... yes
checking for inttypes.h... (cached) yes
checking for unistd.h... (cached) yes
checking for stdlib.h... (cached) yes
checking stdarg.h usability... yes
checking stdarg.h presence... yes
checking for stdarg.h... yes
checking varargs.h usability... yes
checking varargs.h presence... yes
checking for varargs.h... yes
checking for limits.h... (cached) yes
checking for string.h... (cached) yes
checking for memory.h... (cached) yes
checking for locale.h... (cached) yes
checking termcap.h usability... no
checking termcap.h presence... no
checking for termcap.h... no
checking termio.h usability... yes
checking termio.h presence... yes
checking for termio.h... yes
checking termios.h usability... yes
checking termios.h presence... yes
checking for termios.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking for stddef.h... (cached) yes
checking for stdint.h... (cached) yes
checking netdb.h usability... yes
checking netdb.h presence... yes
checking for netdb.h... yes
checking grp.h usability... yes
checking grp.h presence... yes
checking for grp.h... yes
checking for strings.h... (cached) yes
checking regex.h usability... yes
checking regex.h presence... yes
checking for regex.h... yes
checking sys/ptem.h usability... no
checking sys/ptem.h presence... no
checking for sys/ptem.h... no
checking sys/pte.h usability... no
checking sys/pte.h presence... no
checking for sys/pte.h... no
checking sys/stream.h usability... yes
checking sys/stream.h presence... yes
checking for sys/stream.h... yes
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking sys/file.h usability... yes
checking sys/file.h presence... yes
checking for sys/file.h... yes
checking sys/resource.h usability... yes
checking sys/resource.h presence... yes
checking for sys/resource.h... yes
checking for sys/param.h... (cached) yes
checking sys/socket.h usability... yes
checking sys/socket.h presence... yes
checking for sys/socket.h... yes
checking for sys/stat.h... (cached) yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking sys/times.h usability... yes
checking sys/times.h presence... yes
checking for sys/times.h... yes
checking for sys/types.h... (cached) yes
checking sys/wait.h usability... yes
checking sys/wait.h presence... yes
checking for sys/wait.h... yes
checking netinet/in.h usability... yes
checking netinet/in.h presence... yes
checking for netinet/in.h... yes
checking arpa/inet.h usability... yes
checking arpa/inet.h presence... yes
checking for arpa/inet.h... yes
checking for working alloca.h... (cached) yes
checking for alloca... (cached) yes
checking whether getpgrp requires zero arguments... yes
checking whether setvbuf arguments are reversed... no
checking for vprintf... yes
checking for _doprnt... yes
checking for working strcoll... yes
checking return type of signal handlers... void
checking for __setostype... no
checking for wait3... yes
checking for isinf... no
checking for mkfifo... yes
checking for dup2... yes
checking for select... yes
checking for getdtablesize... yes
checking for getgroups... yes
checking for gethostname... yes
checking for setdtablesize... no
checking for getpagesize... (cached) yes
checking for killpg... yes
checking for lstat... yes
checking for getpeername... yes
checking for sbrk... yes
checking for getrlimit... yes
checking for getrusage... yes
checking for gettimeofday... yes
checking for waitpid... yes
checking for tcgetpgrp... yes
checking for readlink... yes
checking for rename... yes
checking for bcopy... yes
checking for bzero... yes
checking for confstr... yes
checking for sysconf... yes
checking for pathconf... yes
checking for setenv... (cached) no
checking for putenv... (cached) yes
checking for unsetenv... no
checking for setlinebuf... yes
checking for setvbuf... yes
checking for setlocale... (cached) yes
checking for strchr... yes
checking for tcgetattr... yes
checking for uname... yes
checking for ulimit... yes
checking for tzset... yes
checking for siginterrupt... yes
checking for memmove... yes
checking for ttyname... yes
checking for times... yes
checking for getaddrinfo... yes
checking for gethostbyname... yes
checking for getservbyname... yes
checking for getservent... yes
checking for inet_aton... yes
checking for vsnprintf... yes
checking for snprintf... yes
checking for vasprintf... no
checking for asprintf... no
checking for fnmatch... yes
checking for regcomp... yes
checking for regexec... yes
checking for isascii... yes
checking for isblank... yes
checking for isgraph... yes
checking for isprint... yes
checking for isspace... yes
checking for isxdigit... yes
checking for getcwd... (cached) yes
checking for strcasecmp... (cached) yes
checking for strerror... yes
checking for strftime... yes
checking for strpbrk... yes
checking for memset... yes
checking for strstr... yes
checking for strtod... yes
checking for strtol... yes
checking for strtoul... (cached) yes
checking for strtoll... yes
checking for strtoull... yes
checking for strtoimax... yes
checking for strtoumax... yes
checking whether confstr is declared... yes
checking whether printf is declared... yes
checking whether sbrk is declared... yes
checking whether strcpy is declared... yes
checking whether strsignal is declared... no
checking whether strtold is declared... yes
checking for broken strtold... yes
checking for declaration of strtoimax... yes
checking for declaration of strtol... yes
checking for declaration of strtoll... yes
checking for declaration of strtoul... yes
checking for declaration of strtoull... yes
checking for declaration of strtoumax... yes
checking for sys/time.h... (cached) yes
checking for unistd.h... (cached) yes
checking for alarm... yes
checking for working mktime... no
checking for argz.h... (cached) no
checking errno.h usability... yes
checking errno.h presence... yes
checking for errno.h... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking for malloc.h... (cached) yes
checking stdio_ext.h usability... no
checking stdio_ext.h presence... no
checking for stdio_ext.h... no
checking for stdlib.h... (cached) yes
checking for unistd.h... (cached) yes
checking for getpagesize... (cached) yes
checking for working mmap... (cached) yes
checking for __argz_count... (cached) no
checking for __argz_next... (cached) no
checking for __argz_stringify... (cached) no
checking for dcgettext... no
checking for mempcpy... (cached) no
checking for munmap... (cached) yes
checking for stpcpy... (cached) no
checking for strcspn... yes
checking for strdup... (cached) yes
checking for wctype.h... (cached) no
checking for wchar.h... (cached) no
checking langinfo.h usability... yes
checking langinfo.h presence... yes
checking for langinfo.h... yes
checking for mbsrtowcs... (cached) no
checking for mbrtowc... yes
checking for mbrlen... yes
checking for wctomb... yes
checking for wcwidth... yes
checking for wcsdup... no
checking for mbstate_t... yes
checking for nl_langinfo and CODESET... yes
checking for dlopen in -ldl... yes
checking for dlopen... yes
checking for dlclose... yes
checking for dlsym... yes
checking whether sys_siglist is declared... no
checking for uid_t in sys/types.h... yes
checking type of array argument to getgroups... gid_t
checking for off_t... (cached) yes
checking for mode_t... yes
checking for uid_t in sys/types.h... (cached) yes
checking for pid_t... yes
checking for size_t... (cached) yes
checking for ssize_t... yes
checking for time_t... yes
checking for long long... long long
checking for unsigned long long... unsigned long long
checking return type of signal handlers... (cached) void
checking for char... yes
checking size of char... 1
checking for short... yes
checking size of short... 2
checking for int... yes
checking size of int... 4
checking for long... yes
checking size of long... 4
checking for char *... yes
checking size of char *... 4
checking for double... yes
checking size of double... 8
checking for long long... yes
checking size of long long... 8
checking for u_int... yes
checking for u_long... yes
checking for bits16_t... no
checking for u_bits16_t... no
checking for bits32_t... no
checking for u_bits32_t... no
checking for bits64_t... no
checking for ptrdiff_t... yes
checking whether stat file-mode macros are broken... no
checking whether #! works in shell scripts... yes
checking whether the ctype macros accept non-ascii characters... yes
checking if dup2 fails to clear the close-on-exec flag... no
checking whether pgrps need synchronization... no
checking for type of signal functions... posix
checking for sys_errlist and sys_nerr... yes
checking for sys_siglist in system C library... yes
checking for _sys_siglist in signal.h or unistd.h... yes
checking for _sys_siglist in system C library... yes
checking whether signal handlers are of type void... yes
checking for clock_t... yes
checking for sigset_t... yes
checking for quad_t... no
checking for intmax_t... yes
checking for uintmax_t... yes
checking for socklen_t... yes
checking for size and type of struct rlimit fields... rlim_t
checking for struct termios.c_line... no
checking for struct termio.c_line... yes
checking for struct dirent.d_ino... yes
checking for struct dirent.d_fileno... no
checking for struct dirent.d_namlen... no
checking for struct winsize in sys/ioctl.h and termios.h... sys/ioctl.h
checking for struct timeval in sys/time.h and time.h... yes
checking for struct stat.st_blocks... yes
checking whether struct tm is in sys/time.h or time.h... time.h
checking for struct tm.tm_zone... no
checking for tzname... yes
checking for struct timezone in sys/time.h and time.h... yes
checking for the existence of strsignal... no
checking if opendir() opens non-directories... no
checking whether ulimit can substitute for getdtablesize... yes
checking to see if getenv can be redefined... no
checking if getcwd() will dynamically allocate memory... no
checking for presence of POSIX-style sigsetjmp/siglongjmp... present
checking whether or not strcoll and strcmp differ... no
checking for standard-conformant putenv declaration... no
checking for printf floating point output in hex notation... yes
checking if signal handlers must be reinstalled when invoked... no
checking for presence of necessary job control definitions... present
checking for presence of named pipes... present
checking whether termios.h defines TIOCGWINSZ... yes
checking for TIOCSTAT in sys/ioctl.h... no
checking for FIONREAD in sys/ioctl.h... yes
checking for speed_t in sys/types.h... no
checking whether getpw functions are declared in pwd.h... yes
checking for unusable real-time signals due to large values... no
checking for tgetent... no
checking for tgetent in -ltermcap... yes
checking which library has the termcap functions... using libtermcap
checking whether /dev/fd is available... standard
checking whether /dev/stdin stdout stderr are available... absent
checking for default mail directory... /var/mail
checking shared object configuration for loadable builtins... supported
updating cache ./config.cache
configure: creating ./config.status
config.status: creating Makefile
config.status: creating builtins/Makefile
config.status: creating lib/readline/Makefile
config.status: creating lib/glob/Makefile
config.status: creating lib/intl/Makefile
config.status: creating lib/malloc/Makefile
config.status: creating lib/sh/Makefile
config.status: creating lib/termcap/Makefile
config.status: creating lib/tilde/Makefile
config.status: creating doc/Makefile
config.status: creating support/Makefile
config.status: creating po/Makefile.in
config.status: creating examples/loadables/Makefile
config.status: creating examples/loadables/perl/Makefile
config.status: creating pathnames.h
config.status: creating config.h
config.status: executing default-1 commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: executing default commands


... all of which looks okay to me.

The only other things which look at all suspect are:
    WARNINGs for "textdomain" and "bindtextdomain" saying "The indicated expression has no effect."
    WARNINGs that /usr/include/stdint.h and /usr/include/inttypes.h contain incompatible type definitions(!)
and
    WARNINGs at linking-stage that lib/tilde/libtilde.a and lib/readline/libhistory.a aren't used for resolving any symbol.


Any ideas... ?
I compiled the nekoware bash, although I'm not a full-time bash user, it has worked alright for me. I can try to recompile with the option specified abive.
stuart wrote: This is odd - I've just rebuilt bash from scratch with "--enable-dparen-arithmetic" specifically passed to configure, and yet still the above syntax doesn't work.


This ist strange, since building from scratch works fine for me. Maybe some gccism active there, since I'm building with gcc. Can you take a look into config.h, if DPAREN_ARITHMETIC is indeed defined?
Such bugs and goblins in my life!

(Taken from Hamlet)
zappa wrote: This ist strange, since building from scratch works fine for me. Maybe some gccism active there, since I'm building with gcc. Can you take a look into config.h, if DPAREN_ARITHMETIC is indeed defined?


Yeah - I'm confused: DPAREN_ARITHMETIC is set in config.h, and yet commands which make use of the syntax don't work.

I've even been through and fixed every single WARNING that MIPSpro throws out (except for the binddomain and bindtextdomain ones, but I don't think they're significant).

By default, configure sets config.h to include both <stdint.h> and <inttypes.h> which clash with each other, and I changed config.h to address this. It made no difference...

I tried to look at putting some debugging in to see where things are going wrong, but DPARENS_ARITHMETIC appears in so many of the source files that I don't know where to concentrate.

In any case, I couldn't get paren arithmetic to work at all with MIPSpro (7.4.3m) :(

To assess the depth of this problem, could anyone who reads this please run the command from my initial post, and help to confirm:

* Does this problem affect only me, only people using 6.5.28, or all versions of IRIX on all machines (using neko_bash)?

Assuming more than just me are affected, the next step would be to see whether building with GCC on the same machine works or not...
Might be worthwhile to apply the bash-3.0 patches and see if that resolves anything:

http://ftp.gnu.org/gnu/bash/bash-3.0-patches/
Twitter: @neko_no_ko
IRIX Release 4.0.5 IP12 Version 06151813 System V
Copyright 1987-1992 Silicon Graphics, Inc.
All Rights Reserved.
yes, it is very interesting. neko_bash has the same error on .28m and .26m here.

it seems that one char is eaten by some unknown. try this:

Code: Select all

> /usr/nekoware/bin/bash -c 'A=$(x(2+3)); echo $A'
>/usr/nekoware/bin/bash -c 'A=$(xls ./); echo $A'
nekonoko wrote: Might be worthwhile to apply the bash-3.0 patches and see if that resolves anything


Good thought - but this was with bash-3.00.16, which incorporates the latest patches.

voidfoo wrote: it seems that one char is eaten by some unknown


You're a genius! Well spotted ;)

So I guess the next question is: Can anyone see why this is happening... ?
Same problem happens here on 6.5.27f
Bash is neko_bash GNU bash, version 3.00.0(1)-release (mips-sgi-irix6.5)
I'm working through this one now with one of the bash maintainers ... current thoughts are a GCC-ism that's been missed, or bison doing something silly.

I'll report back with any updates - but if anyone has any further thoughts then please post!

docelic - what version of the compilers are you using? I've an unconfirmed report that 7.3.1m generates working bash binaries, whereas my 7.3.4m definitely doesn't

Cheers,

Stuart
The current, neko_bash, what has it been compiled with? I use it for a long time now, and i've not seen any problems in everyday usage, but then maybe this is specific mischief. in any case, it'd be good to know. and hell, maybe we need a recompile. :)
Works with MIPSPRO IFF -O1 is set.
SGI Systems: R4K :Indigo: /256MB/XS-24, R5K 150MHz :Indy: /160MB/XL-24, R10K 175MHz :O2: /640MB, R12K 400MHz :Octane2: /Vpro6/1GB & R4K 250 MHz :Indigo2IMP: /128 MB/XZ Extreme/GIO64 FDDI

"It's a UNIX system! I know this! "
Nihilus wrote: Works with MIPSPRO IFF -O1 is set.


I can't reproduce this, unfortunately. Certainly, bash-3.2 with -O1 the test suite looks better - but for me it also hangs during the "run-printf" tests.

I built using:

Code: Select all

CC="cc" CFLAGS="-O1 -n32 -mips4 -woff 1174,1183,1185,1552" LDFLAGS="-Wl,-v -Wl,-s -n32 -mips4" ./configure --enable-alias --enable-arith-for-command --enable-array-variables --enable-bang-history --enable-brace-expansion --enable-command-timing --enable-cond-command --enable-cond-regexp --enable-debugger --enable-directory-stack --enable-disabled-builtins --enable-dparen-arithmetic --enable-extended-glob --enable-help-builtin --enable-history --enable-job-control --enable-net-redirections --enable-process-substitution --enable-progcomp --enable-prompt-string-decoding --enable-readline --enable-select --enable-xpg-echo-default
(e.g. very minimal flags)

Looking at the differences between the "/tmp/xx" output from the test suite before hanging, the expected values are:

Code: Select all

4.20
4.20
4.2
4.20
4.20
4.2
4.200000E+00
4.200000e+00
4.2E+00
4.2e+00
... whereas my last output from my test-suite before hanging is:

Code: Select all

0.00
0.00
0.0
0.00
0.00
0.0
-INF
-inf
-INF
-inf
... so I'm wondering if some form of floating-point exception is causing the hang.

Nihilus , could you confirm exactly what configure options you used, and what the content of your /etc/compiler.defaults file is?
The commands in the test-suite which produce this output are:

Code: Select all

# test some simple floating point formats
printf "%4.2f\n" 4.2
printf "%#4.2f\n" 4.2
printf "%#4.1f\n" 4.2

printf "%*.*f\n" 4 2 4.2
printf "%#*.*f\n" 4 2 4.2
printf "%#*.*f\n" 4 1 4.2

printf "%E\n" 4.2
printf "%e\n" 4.2
printf "%6.1E\n" 4.2
printf "%6.1e\n" 4.2

printf "%G\n" 4.2
printf "%g\n" 4.2
printf "%6.2G\n" 4.2
printf "%6.2g\n" 4.2
... so these aren't especially complex tests.

It's clear that the output the MIPSpro bash-3.2 produces is wrong - and it appears to be 'printf "%G\n" 4.2' that hangs.

My current GCC build of bash [3.1.17(1)] outputs "0" when the above command is run (which is also wrong), and running the new build of 3.2 and running the same command also causes bash to lock and need a "kill -9" to abort the process.

Update
I've just spent the eveing rebuilding bash with just about every combination of flags, and the (neko) GCC versions always output 0 when reformatting floats with printf. For me, MIPSpro versions always hang on the same test. Could someone with freeware GCC installed please try building with this?