Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Aug 2010 22:13:11 +0200
From:      Tijl Coosemans <tijl@coosemans.org>
To:        freebsd-arch@freebsd.org
Cc:        pluknet <pluknet@gmail.com>
Subject:   Re: Support for cc -m32
Message-ID:  <201008302213.12233.tijl@coosemans.org>
In-Reply-To: <AANLkTi=%2BuG4qEpavQVtrAaCuu1SLQ9--kJGmv9LYCvEm@mail.gmail.com>
References:  <201007291718.12687.tijl@coosemans.org> <201008301731.19074.tijl@coosemans.org> <AANLkTi=%2BuG4qEpavQVtrAaCuu1SLQ9--kJGmv9LYCvEm@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--nextPart4396126.INT6yiKNkN
Content-Type: Text/Plain;
  charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

On Monday 30 August 2010 17:40:01 pluknet wrote:
> On 30 August 2010 19:31, Tijl Coosemans <tijl@coosemans.org> wrote:
>> On Thursday 29 July 2010 17:18:03 Tijl Coosemans wrote:
>>> I've put the initial version of some patches online to support cross
>>> compilation of 32 bit binaries on amd64. It's modelled after how NetBSD
>>> does this.
>>>
>>> With these patches something like "cc -m32 -o test test.c -pthread -lm"
>>> generates a program that runs on FreeBSD/i386.
>>>
>>> http://people.freebsd.org/~tijl/cc-m32-1.diff
>>> http://people.freebsd.org/~tijl/cc-m32-2.diff
>>> http://people.freebsd.org/~tijl/cc-m32-3.diff
>>>
>>> *cc-m32-1.diff* : Let ld and cc find 32 bit libraries.
>>>
>>> *cc-m32-2.diff* : Install i386 headers on amd64.
>>>
>>> With this patch headers for a particular $arch are always installed
>>> under /usr/include/$arch and /usr/include/machine becomes a symlink.
>>>
>>> A question I have here is how best to clean up the old machine
>>> directory. The patch currently uses 'rm -rf'.
>>>
>>> Another problem I encountered was that during the build of
>>> usr.bin/kdump all headers are searched for definitions of ioctl
>>> requests and a C source code file is generated that includes all those
>>> headers. This fails when both i386 and amd64 headers are installed
>>> because they can't both be included at the same time. For now the patch
>>> simply blacklists /usr/include/i386, but actually all $arch should be
>>> excluded. The ioctl requests can still be found through the machine
>>> symlink. If someone has a better idea...
>>>
>>> *cc-m32-3.diff* : Modify amd64 headers to include i386 headers when
>>>                   __i386__ is defined.
>>>
>>> This patch modifies the amd64 headers to follow this format:
>>>
>>>   #ifndef _AMD64_HEADER_H
>>>   #define _AMD64_HEADER_H
>>>
>>>   #ifdef __i386__
>>>   #include <i386/header.h>
>>>   #else
>>>
>>>   ...
>>>
>>>   #endif /* __i386__ */
>>>   #endif /* !_AMD64_HEADER_H */
>>>
>>> This way including <machine/header.h> works for -m32. There are a few
>>> i386 headers which don't exist for amd64:
>>>
>>> apm_segments.h
>>> bootinfo.h
>>> cserial.h
>>> elan_mmcr.h
>>> if_wl_wavelan.h
>>> ioctl_bt848.h
>>> ioctl_meteor.h
>>> npx.h
>>> pcaudioio.h
>>> pcb_ext.h
>>> perfmon.h
>>> privatespace.h
>>> smapi.h
>>> speaker.h
>>> vm86.h
>>> xbox.h
>>>
>>> Theoretically a dummy amd64 header should be created for each of them
>>> that just includes the i386 header. The patch does this for npx.h. The
>>> other headers seem to be really i386 specific or even outdated. If it
>>> were ever necessary to cross-compile code that uses them, it would be
>>> easy to modify that code to directly include <i386/header.h>.
>>>
>>>
>>> Feel free to test the patches and to comment on any part of them.
>>
>> I'd like to move forward with this now. I've rebased the patches above
>> against today's CURRENT. If there are no further objections I'd like to
>> commit them a few days from now, let's say Saturday.
>=20
> The trouble I faced while was playing with my -m32 work
> was a cross buildworld error on amd64 with TARGET set to i386.
> Have you checked there is no such an issue?

I tested this with the previous version and now with the current version
and it seems to work.

--nextPart4396126.INT6yiKNkN
Content-Type: application/pgp-signature; name=signature.asc 
Content-Description: This is a digitally signed message part.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.16 (FreeBSD)

iF4EABEIAAYFAkx8ENgACgkQfoCS2CCgtisumQD7B8OyK6SystlYJnVHaWREC8kR
EsdlEu73XyhS/GLajNMBAIcAXvnHGbKugXqHOS+j+q9ubHBHlVKqKS2fu1CqUDq+
=bXRO
-----END PGP SIGNATURE-----

--nextPart4396126.INT6yiKNkN--



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