OS X Lion, make check stalls

Stijn Vanden Eynde djcomidi at gmail.com
Thu Jul 28 15:19:49 CEST 2011


Hello again

I applied the patches to acinclude.m4 and configure.
GMP now installs without a flaw.
None of the checks fails or stalls anymore.

Thanks for the quick replies.
I consider it case closed.
Greetings, Stijn

On Thu, Jul 28, 2011 at 14:32, Jack Howarth <howarth at bromo.med.uc.edu>wrote:

> On Thu, Jul 28, 2011 at 12:16:42PM +0200, Torbjorn Granlund wrote:
> > Stijn Vanden Eynde <djcomidi at gmail.com> writes:
> >
> >   I am currently trying to build gmp-5.0.2 on OS X Lion.
> >   What is the problem:
> >   Both ./configure and make run succesfully.
> >   But "make check" stalls at a certain point.
> >   The last lines I get are:
> >   > PASS: t-fdiv_ui
> >   > PASS: t-cdiv_ui
> >   Up to this point there is nothing but a blinking cursor,
> >   my guess is that the next check is in an infinite loop or so.
> >   Which is strange, cause it didn't had this issue on Snow Leopard.
> >
> > Thanks for the bug report!
> >
> > Unfortunately, I cannot do much, since I have no adequate system where I
> > could attempt to reproduce this odd problem.  You need to isolate it
> > yourself, and report it to Apple or us, depending on the nature of the
> > problem.  Alternatively, if somebody else on this list want to make a
> > contribution to the project, please help with isolating this problem.
> >
> > I brave a guess: This is a compiler problem.  Apple's track record is
> > really poor in this area.  I see the LLVM name in your report.  That
> > compiler is very immature, and miscompiles most non-trivial programs at
> > at least some optimisation level.
>
> Torbjörn,
>   I emailed you about this before. The patch applied for gmp-5.0.2 had
> a minor flaw.
>
> http://gmplib.org/list-archives/gmp-bugs/2011-May/002255.html
> http://gmplib.org/list-archives/gmp-bugs/2011-May/002256.html
>
> The test in the generated configure for "checking how to switch to
> read-only data section... "
> should be...
>
> const int foo[] = {1,2,3};
>
> but since acinclude.m4 is missing the extra braces, the single braces are
> chewed away by autoconf leaving...
>
> const int foo = {1,2,3};
>
> This flawed test case produces a warning under clang but an error under
> llvm-gcc.
>
> --- acinclude.m4.orig   2011-05-17 19:03:09.000000000 -0400
> +++ acinclude.m4        2011-05-17 19:03:43.000000000 -0400
> @@ -1941,8 +1941,8 @@
>  esac
>
>  cat >conftest.c <<EOF
> -extern const int foo[];                /* Suppresses C++'s suppression of
> foo */
> -const int foo[] = {1,2,3};
> +extern const int foo[[]];              /* Suppresses C++'s suppression of
> foo */
> +const int foo[[]] = {1,2,3};
>  EOF
>  echo "Test program:" >&AC_FD_CC
>  cat conftest.c >&AC_FD_CC
> --- configure.orig      2011-05-17 19:15:41.000000000 -0400
> +++ configure   2011-05-17 19:16:00.000000000 -0400
> @@ -26446,8 +26446,8 @@
>  esac
>
>  cat >conftest.c <<EOF
> -extern const int foo;          /* Suppresses C++'s suppression of foo */
> -const int foo = {1,2,3};
> +extern const int foo[];                /* Suppresses C++'s suppression of
> foo */
> +const int foo[] = {1,2,3};
>  EOF
>  echo "Test program:" >&5
>  cat conftest.c >&5
>
> will eliminate the miscompilation of gmp 5.0.2 under llvm-gcc. Again the
> origin of
> this problem is that the flawed test case produces...
>
> define(<RODATA>, <      .section        __TEXT,__literal4,4byte_literals>)
>
> in the generated config.m4 which is wrong.
>                 Jack
> ps The darwin linker developers comments on __literal4 are appended below.
>
>
> --------------------------------------------------------------------------------------
> I don't understand the context of what you sent or how it builds, but this
> line in invert_limb_build/config.m4 is very suspect:
>
> define(<RODATA>, <      .section        __TEXT,__literal4,4byte_literals>)
>
>
> The _literal4 section is special in mach-o.  The linker is free to
> reorganize and coalesce any 4-byte duplicates in the section.
>
> The file ./invert_limb_build/mpn/tmp-invert_limb.s contains:
>
>        mov     approx_tab at GOTPCREL(%rip), %r8
>        add     $-512, %r8
>        movzwl  (%r8,%rax,2), %ecx
> ...
>                .section        __TEXT,__literal4,4byte_literals
>        .align  1, 0x90
> approx_tab:
>        .value  0x7fd,0x7f5,0x7ed,0x7e5,0x7dd,0x7d5,0x7ce,0x7c6
>        .value  0x7bf,0x7b7,0x7b0,0x7a8,0x7a1,0x79a,0x792,0x78b
>        ...
>        .value  0x40e,0x40c,0x40a,0x408,0x406,0x404,0x402,0x400
>
>
> Even if the linker had not asserted on this, the program would surely do
> the wrong thing at runtime, because the linker can rearrange the content of
>  the __literal4,4byte_literals section and this code depends on that big
> table being kept intact.
>
> That table should just be in the __TEXT,__const section which holds any
> non-special constant data. (and RODATA without relocations in it).
>
> ---------------------------------------------------------------------------------------
>
> >
> > --
> > Torbjörn
> > _______________________________________________
> > gmp-bugs mailing list
> > gmp-bugs at gmplib.org
> > https://gmplib.org/mailman/listinfo/gmp-bugs
>


More information about the gmp-bugs mailing list