From 4d0e4b32a11fc621671b4d622043b380d42e8ae7 Mon Sep 17 00:00:00 2001 From: Paulo Andrade Date: Wed, 24 Sep 2014 14:32:49 -0300 Subject: [PATCH] x86: Build and pass all tests on 32 bit cygwin * check/lightning.c: Add workaround to conflicting global optind variable in cygwin binutils that have an internal getopt* implementation. * lib/jit_x86-cpu.c: Add a simple define ffsl ffs if building for 32 bit and there is no ffsl function. --- ChangeLog | 9 +++++++++ check/lightning.c | 10 ++++++++++ lib/jit_x86-cpu.c | 6 +++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3e6e0dbe8..059f0aca5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2014-09-24 Paulo Andrade + + * check/lightning.c: Add workaround to conflicting global + optind variable in cygwin binutils that have an internal + getopt* implementation. + + * lib/jit_x86-cpu.c: Add a simple define ffsl ffs if building + for 32 bit and there is no ffsl function. + 2014-09-24 Paulo Andrade * check/lightning.c: Add a hopefully temporary kludge to not use diff --git a/check/lightning.c b/check/lightning.c index 47e39a3c3..83b6ab778 100644 --- a/check/lightning.c +++ b/check/lightning.c @@ -3952,6 +3952,16 @@ main(int argc, char *argv[]) int opt_short; char cmdline[8192]; +#if __WORDSIZE == 32 && defined(__CYGWIN__) + /* Cause a compile warning about redefinition without dllimport + * attribute, *but* cause correct linkage if liblightning.a is + * linked to binutils (that happens to have an internal + * getopt* implementation and an apparently conflicting + * optind global variable) */ + extern int optind; + optind = 1; +#endif + progname = argv[0]; init_jit(progname); diff --git a/lib/jit_x86-cpu.c b/lib/jit_x86-cpu.c index c24ad16e8..8a0ce1149 100644 --- a/lib/jit_x86-cpu.c +++ b/lib/jit_x86-cpu.c @@ -639,8 +639,12 @@ static void _prolog(jit_state_t*, jit_node_t*); static void _epilog(jit_state_t*, jit_node_t*); # define patch_at(node, instr, label) _patch_at(_jit, node, instr, label) static void _patch_at(jit_state_t*, jit_node_t*, jit_word_t, jit_word_t); -# if __WORDSIZE == 64 && !defined(HAVE_FFSL) +# if !defined(HAVE_FFSL) +# if __WORDSIZE == 32 +# define ffsl(i) ffs(i) +# else static int ffsl(long); +# endif # endif #endif