[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#640672: moving files to arch specific include breaks compilations with -m32



Hi!

On Mon, Sep 12, 2011 at 10:29:30PM -0700, Steve Langasek wrote:
> On Tue, Sep 06, 2011 at 03:14:58PM +0100, Ben Hutchings wrote:
> > On Tue, 2011-09-06 at 14:44 +0200, Daniel Bayer wrote:
> > > Package: linux-libc-dev
> > > Version: 3.0.0-3
> > > Severity: normal
> > > File: /usr/include/x86_64-linux-gnu/asm/errno.h
> 
> > > since asm/errno.h was moved to the arch specific sub directory it is
> > > no longer possible to create 32 Bit Binaries on amd64:
> 
> > > | $ echo '#include <errno.h>' | gcc -E -o -  -m32 -                                                                       
> > > | [...]
> > > | # 1 "/usr/include/bits/errno.h" 1 3 4
> > > | # 25 "/usr/include/bits/errno.h" 3 4
> > > | # 1 "/usr/include/linux/errno.h" 1 3 4
> > > | In file included from /usr/include/bits/errno.h:25:0,
> > > |                  from /usr/include/errno.h:36,
> > > |                  from <stdin>:1:
> > > | /usr/include/linux/errno.h:4:23: fatal error: asm/errno.h: No such file or directory
> > > | compilation terminated.
> 
> > > I guess with multiarch I should install the i386 deb, too. But this is
> > > not yet supported by dpkg in unstable, is it?
> > [...]
> 
> > It's not.  And since the kernel uses the same set of header files for
> > 32-bit and 64-bit versions of each architecture, I wonder whether that
> > would make sense.
> 
> > Maybe the right way to do this is:
> 
> > - linux-libc-dev (multiarch: same) becomes a metapackage depending on
> >   linux-libc-dev-$SRCARCH
> > - linux-libc-dev-$SRCARCH (not multiarch) provides headers for all
> >   architectures built from kernel $SRCARCH, with symlinks
> 
> I think this entire bug report is based on a misunderstanding of how gcc
> -m32 is supposed to work.  'gcc -m32' is not guaranteed to work unless the
> gcc-multilib package is installed;

gcc-multilib was always installed:
| ii  gcc-multilib        4:4.6.1-2           GNU C compiler (multilib files)

> and if gcc-multilib is installed, you get
> a /usr/include/asm compatibility symlink pointing to
> /usr/include/$triplet/asm. 

nope. With linux-libc-dev 3.0.0-1 installed /usr/include/asm is a
directory containing header files provided by linux-libc6-dev. E.g.:
| linux-libc-dev: /usr/include/asm/a.out.h
| linux-libc-dev: /usr/include/asm/auxvec.h
| linux-libc-dev: /usr/include/asm/bitsperlong.h
| linux-libc-dev: /usr/include/asm/boot.h

and:
| $ dpkg -S /usr/include/asm
| gcc-multilib, linux-libc-dev: /usr/include/asm

Now I updated to linux-libc-dev 3.0.0-3 to test. After this /usr/include/asm
is an empty directory which belongs to gcc-multilib:

| $ ls /usr/include/asm -lha 
| insgesamt 88K
| drwxr-xr-x  2 root root 12K 13. Sep 20:53 .
| drwxr-xr-x 78 root root 72K  8. Sep 21:52 ..
| $ dpkg -S  /usr/include/asm 
| gcc-multilib: /usr/include/asm

> There are still some problems with this setup,
> but I don't agree that the issue reported here is one of them and I don't
> see any reason to change the linux-libc-dev package.

So it is a bug in gcc-multilib? Or where is the link supposed to come
from?

I got to this point from a working setup (I use -m32 almost every day
since more then 3 years) by daily distupgrade using unstable.


Daniel

Attachment: pgpFVfG6uXbI8.pgp
Description: PGP signature


Reply to: