On Sun, 2013-10-20 at 23:44 +0200, Matthias Klose wrote:
Am 20.10.2013 22:58, schrieb Ben Hutchings:
On Sun, 2013-10-20 at 22:21 +0200, Matthias Klose wrote:
Am 20.10.2013 00:25, schrieb Ben Hutchings:
On Sat, 2013-10-19 at 23:38 +0200, Matthias Klose wrote:
Control: severity -1 important Control: tags -1 + moreinfo
In file included from command-line:0:0:
/usr/include/stdc-predef.h:30:26: fatal error: bits/predefs.h:
No such file
or directory
#include bits/predefs.h ^
compilation terminated.
It looks like I can avoid this by changing the compile tests to
use the -nostdinc option. But this change may possibly cause
other problems, and neither the pre-included header nor the fact
that -nostdinc disables it seem to be documented.
please attach the test program and the command line options used for
this test case. I think the issue is within the kernel build system
not being prepared for multiarch and -nostdinc.
gcc-4.8 -m64 -x c -c /dev/null
works for me on a current sid/i386. I assume that gcc-4.8-multilib is
installed?
No, it works if that's installed. But gcc-X.Y-multilib was previously only
needed for building with a 64-bit C library, not for building a 64-bit
kernel.
If this kernel configuration was actually failing to build without
gcc-4.8-multilib, I wouldn't mind so much. The problem is that it's built
wrongly now. Maybe some later version of the kernel will be changed to
detect or work around this problem, but we have to assume people will still
try to build older versions not using -nostdinc for some time to come.
Is this due to the missing /usr/include/asm symlink shipped in gcc-multilib?
It's not ideal, and I think I did file a bug report that this should be
shipped in one of the glibc packages, but can't find it anymore.
The /usr/include/bits symlink in libc6-dev-amd64 is what makes this work
again (which is disgusting, really...). Without that, stdc-predef.h can
be found but not bits/predefs.h.
The options to deal with this include: 1. Make missing headers non-fatal
while pre-including stdc-predef.h.
that would be the responsibility of those packages using non-standard options
like -nostdinc.
Well the problem occurs because Linux uses -nostdinc only in the real
compiles (so they succeed) but not the test compiles (so they fail).
2. Disable pre-inclusion of stdc-predef.h.
no, done upstream to conform to standards.
3. Make 32-bit gcc fail to compile anything with -m64 if gcc-X.Y-multilib
is not installed, even if -nostdinc is used.
welcome to multiarch, and thanks for upstreaming patches to fix these issues.
4. Make gcc-X.Y depend on gcc-X.Y-multilib on architectures where it
exists.
well, then you can merge these again. the whole point to have them separate
were bug reports about being forced to install the non-defaults multilibs by
default.
Indeed, I didn't say any of those options were good.
5. Install the whole glibc headers into the multiarch header path. Would fix
some other things too, like allowing multiarch configurations for non-glibc
based triplets. And I assume it would allow your build to fail.
I don't think this would help.
Ben.
--
Ben Hutchings
Tomorrow will be cancelled due to lack of interest.
signature.asc
Description: This is a digitally signed message part