|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Stubdom GMP build failure for gcc 6
>>> On 28.10.16 at 14:50, <wei.liu2@xxxxxxxxxx> wrote:
> On Fri, Oct 28, 2016 at 06:29:49AM -0600, Jan Beulich wrote:
>> >>> On 28.10.16 at 14:10, <wei.liu2@xxxxxxxxxx> wrote:
>> > There have been a few reports on stubdom build failure with gcc 6
>> > toolchain. I spent some time yesterday to figure what went wrong. Here
>> > is what I found.
>> >
>> > When building GMP library, its configure script generates small C
>> > programs to determine various aspects of the system. Unfortunately the
>> > build rune for it is incorrect, so the test program ends up consuming
>> > newlib headers while linking against the host glibc. It's amazing that
>> > this even worked in the past few years! :-)
>> >
>> > Unfortunately my attempt to fix it by providing LDFLAGS="-nostdlib
>> > -LXXX" doesn't work. It turns out that there is no crt generated in
>> > newlib. I'm not sure if that's because the newlib port is incomplete or
>> > I haven't discovered a way to teach it to generate one.
>>
>> Considering that they can't reasonably try to run any of these
>> test programs (after all this is a cross build), wouldn't it suffice to
>> make up crt*.o just for the configure process, and just providing
>> the necessary symbols to make linking succeed? Agreed this, if
>> anything, makes the present situation even uglier, but it might
>> work.
>
> It might. But that's not sustainable IMO.
I agree, and tried to indicate so with the last sentence. It was just
a thought for a possible non-intrusive workaround for 4.8.
> One thing is that gmp configure doesn't try to run those test programs,
> because the configure rune doesn't indicate a cross-build, although it
> is actually one.
Considering what you write further down, DYM "does try to run"
(in which case indeed we're hosed)?
>> But what I'm not understanding - what did change with gcc 6
>> here? There's surely no libc version dependency in the compiler,
>> so whatever worked in older gcc for linking purposes should work
>> here too.
>>
>
> It's not it doesn't link anymore.
>
> A sample test program:
>
> typedef unsigned short ac__type_sizeof_;
> static long int longval () { return (long int) (sizeof
> (ac__type_sizeof_)); }
> static unsigned long int ulongval () { return (long int) (sizeof
> (ac__type_sizeof_)); }
> #include <stdio.h>
> #include <stdlib.h>
> int
> main ()
> {
>
> FILE *f = fopen ("conftest.val", "w");
> if (! f)
> return 1;
> if (((long int) (sizeof (ac__type_sizeof_))) < 0)
> {
> long int i = longval ();
> if (i != ((long int) (sizeof (ac__type_sizeof_))))
> return 1;
> fprintf (f, "%ld\n", i);
> }
> else
> {
> unsigned long int i = ulongval ();
> if (i != ((long int) (sizeof (ac__type_sizeof_))))
> return 1;
> fprintf (f, "%lu\n", i);
> }
> return ferror (f) || fclose (f) != 0;
> ;
> return 0;
> }
>
> ferror is a macro in newlib, which checks if one certain bit X is set. I
> suppose the same bit X has a different semantics now in glibc, and then
> fprintf (a function from glibc) happens to set bit X. This program will
> then exit with non-zero and configure deems it failed to run.
But how is any of this gcc version dependent?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |