Date: Wed, 10 Mar 2010 08:10:10 -0500 From: John Baldwin <jhb@freebsd.org> To: freebsd-ia64@freebsd.org Cc: freebsd-emulation@freebsd.org, Nathan Whitehorn <nwhitehorn@freebsd.org>, freebsd-amd64@freebsd.org Subject: Re: Request for review/comments: 32-bit compat for non-x86 architectures Message-ID: <201003100810.10696.jhb@freebsd.org> In-Reply-To: <4B971CA3.9090301@freebsd.org> References: <4B971CA3.9090301@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 09 March 2010 11:14:27 pm Nathan Whitehorn wrote: > The patch at http://people.freebsd.org/~nwhitehorn/compat_freebsd32.diff > (pre-generated freebsd32 syscalls stuff is included, which will be done > in two steps on commit) provides groundwork for supporting 32-bit > compatibility for 64-bit MIPS and PowerPC systems. It has been tested on > amd64 and powerpc64, and compile-tested on ia64. There are two main > parts to the patch: > > 1) COMPAT_IA32 is renamed COMPAT_FREEBSD32, in analogy to > COMPAT_LINUX32, etc. This requires updating kernel configurations, but > is less painful than filling machine-independent bits of the kernel with > #if defined(COMPAT_IA32) || defined(COMPAT_PPC32) || > defined(COMPAT_MIPS32) || ..., and is no less descriptive than the old name. > > 2) Modifications to the freebsd32 compat layer to support big-endian > architectures. > > I would appreciate any comments, bugs, or test results on ia64. This doesn't look right for non-x86 32-bit ABIs: Index: sys/kern/imgact_elf.c =================================================================== --- sys/kern/imgact_elf.c (revision 204681) +++ sys/kern/imgact_elf.c (working copy) @@ -1439,7 +1439,7 @@ ehdr->e_ident[EI_ABIVERSION] = 0; ehdr->e_ident[EI_PAD] = 0; ehdr->e_type = ET_CORE; -#if defined(COMPAT_IA32) && __ELF_WORD_SIZE == 32 +#if defined(COMPAT_FREEBSD32) && __ELF_WORD_SIZE == 32 ehdr->e_machine = EM_386; #else ehdr->e_machine = ELF_ARCH; It would be nice to eliminate having <compat/ia32*> includes in MI code by instead including those headers in appropriate headers in <machine/*>. For example, we could change <machine/reg.h> on amd64 and ia64 to include these headers, perhaps under an #ifdef COMPAT_FREEBSD32. Hmm, actually, I'm quite convinced now that <machine/reg.h> for ia64 and amd64 should include <compat/ia32/ia32_reg.h> in the #ifdef _KERNEL section to avoid polluting those includes in MI code. I'm not sure what the various <machine/fpu.h> includes are for, but fixing ia32_reg.h would be a good first step. It would make your diffs smaller I think. The rest of the diff looks fine to me. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003100810.10696.jhb>