Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 Nov 2010 13:30:50 -0700
From:      Warner Losh <imp@bsdimp.com>
To:        Tijl Coosemans <tijl@coosemans.org>
Cc:        Dimitry Andric <dim@freebsd.org>, Garrett Cooper <gcooper@freebsd.org>, Warner Losh <imp@freebsd.org>, freebsd-arch@freebsd.org
Subject:   Re: Support for cc -m32
Message-ID:  <4CE43B7A.8030202@bsdimp.com>
In-Reply-To: <201011172058.05683.tijl@coosemans.org>
References:  <201007291718.12687.tijl@coosemans.org> <AANLkTinA1D=fBfDznOaEufaskZxDHV=04%2BRjB3U=J6Hc@mail.gmail.com> <4CE417B3.3030102@bsdimp.com> <201011172058.05683.tijl@coosemans.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 11/17/2010 12:57, Tijl Coosemans wrote:
> On Wednesday 17 November 2010 18:58:11 Warner Losh wrote:
>> On 11/17/2010 10:21, Garrett Cooper wrote:
>>> On Wed, Nov 17, 2010 at 4:19 AM, Dimitry Andric<dim@freebsd.org>   wrote:
>>>> On 2010-08-30 22:09, Tijl Coosemans wrote:
>>>>> On Monday 30 August 2010 20:36:36 M. Warner Losh wrote:
>>>>>> :>     http://people.freebsd.org/~tijl/cc-m32-1.diff
>> This patch looks good.  I agree we should commit it right away.  I can
>> do the honors later today, or dim@ can.  I'm agnostic who does the push.
> Committed as r215439.
>
>>>>>> :>     http://people.freebsd.org/~tijl/cc-m32-2.diff
>>>>>> :>     http://people.freebsd.org/~tijl/cc-m32-3.diff
>> Now that we have tbemd in the tree, we should take a fresh look at these
>> patches.  I'll try to look at these later today as well.
> I've updated them to today's CURRENT. They're a bit smaller now because
> some amd64 headers have been moved to x86. This also solved the problem
> with the kdump build.
>
> Here are the commit logs:
>
> cc-m32-2.diff:
>
>      Install i386 headers on amd64.
>
>      Machine specific headers for an architecture $arch are now installed
>      under /usr/include/$arch. This means machine headers are always in the
>      same location whether you are cross compiling or not.
>
>      /usr/include/machine is a symlink to /usr/include/${MACHINE}.
Yea, I don't like this (the sym link) at all because.  Machine headers 
wind up being wrong for amd64, so you have to resort to the following 
kludge.
> cc-m32-3.diff:
>      Modify amd64 headers to include i386 headers when compiling 32 bit code.
>
>      All amd64 headers follow the following format:
>
>      #ifndef _AMD64_HEADER_H_
>      #define _AMD64_HEADER_H_
>
>      #ifdef __i386__
>      #include<i386/header.h>
>      #else
>
>      /* Amd64 declarations go here. */
>
>      #endif /* __i386__ */
>      #endif /* !_AMD64_HEADER_H_ */
... you wind up with stuff like this, which is also wrong.  It precludes 
implementing -mpc98 for building on amd64, for example.

I'd rather we install {i386,amd64} into /usr/include/ and have machine 
be generated from those two directories (or three, if we supported 
-mpc98 ever).  That way, we wouldn't "forget" to add this code to new 
headers, etc.  The generated code would be trivial:

#ifdef __i386__
#include <i386/foo.h>
#else
#include <amd64/foo.h>
#endif

(which is extensible to support pc98 too, if we wanted to add -mpc98).

Of course, I'd really rather we have a /usr/include32 which has a 
separate, pristine copy of everything in it.  But that's a much larger 
patch.  I think it would be cleaner, but there seems to be universal 
resistance to this sort of scheme.

Warner




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4CE43B7A.8030202>