From: Kyle Moffett <mrmacman_g4@mac.com>
To: Linus Torvalds <torvalds@osdl.org>
Cc: LKML Kernel <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@osdl.org>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>
Subject: Re: Mach-O binary format support and Darwin syscall personality [Was: uts banner changes]
Date: Tue, 12 Dec 2006 12:56:51 -0500 [thread overview]
Message-ID: <D571C4CB-3D52-446C-802E-024C4C333562@mac.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0612120815550.6452@woody.osdl.org>
NOTE: If at all possible I'd like to keep the userspace stuff is set
in stone; I want to just load some Mach-O binaries, libraries and
dynamic linker onto the Linux system, "chroot /darwin" and go. There
may very well be huge game-over show-stoppers, but I might as well
try, dammit! :-D
On Dec 12, 2006, at 11:23:58, Linus Torvalds wrote:
> On Tue, 12 Dec 2006, Kyle Moffett wrote:
>> So now I have to figure out how to set up a new syscall
>> personality with a bunch of wrapper syscalls which reorder
>> arguments and translate constant values before calling into the
>> rest of the Linux code. I'm fairly sure it's possible because you
>> can run some Solaris binaries under Linux if you turn on the
>> appropriate BINFMT_* config option(s), but I'm totally unsure as
>> to _how_.
>
> What system call interface do Mach-O binaries use? Is it the old
> stupid "lcall 7,0" thing, or does it use "sysenter" or something
> like that?
>
> If it's sysenter, it's going to be "interesting". That code
> currently doesn't support any kind of emulation, and the whole
> "sysenter" interface is pretty grotty at a CPU level (it doesn't
> even save EIP etc). So you'd need to delve into x86 asm and arch/
> i386/kernel/entry.S (or the x86-64 equivalent).
Virtually all of my easily accessible computers right now are PowerPC
and all of my assembly experience is PPC and MIPS, so as far as the
x86-syscall support I have no clue whatsoever. I hadn't even really
considered it till you mentioned it. I might get around to X86
support at some point in the future assuming I get the PPC side to
work, or I might just leave that for some enterprising person with a
hell of a lot better understanding of X86 assembly fundamentals.
PPC seems to be a lot more straightforward and constrained than
the... umm... "eccentric" privilege rings that x86 has (which I only
minimally grasp). I've only really studied RISC architectures in any
detail.
With a little bit of Google and a lot of greping darwin sources I've
been able to puzzle out that they don't use slow call gates and that
they probably use sysenter/sysexit (Or possibly syscall/sysret if
it's available? I'm way over my head as far as x86 assembly and
architecture goes)
The PPC syscall stuff on the other hand is fairly straightforward.
The code loads the argument registers (which I _think_ follow the
same syscall ABI on Linux and Darwin due to somebody having a flash
of inspiration and putting that recommendation in the PPC spec
documents) and runs the sc instruction. Kernel code takes over,
saves some state, loads some state, bumbles around with the argument
registers a bit and looks up the syscall function in the syscall
table (marked "asmlinkage"? what does that do?) and wanders off into
the per-syscall handling code.
From what I understand (for PPC at least), from the "sc" instruction
till we actually call the in-kernel syscall-specific handler function
the code is effectively the same. We save the same state, set up
similar kernel state, etc, so that the customary kernel services are
available as soon as our syscall-handler-function starts.
So I guess all I have to do is:
(A) Write a bunch of new syscall handlers taking arguments of the
same types as the Darwin syscall handlers,
(B) Figure out how to switch tables depending on the "syscall
personality" of "current"
(C) Figure out how to set the "syscall personality" of "current"
from my Mach-O binary format module.
(A) seems fairly straightforward, if unusually tedious and error-
prone, but I'm totally in the dark for (B) and (C). Any help would
be much appreciated.
Cheers,
Kyle Moffett
next prev parent reply other threads:[~2006-12-12 17:57 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-11 15:11 2.6.19-git13: uts banner changes break SLES9 (at least) Andy Whitcroft
2006-12-11 16:33 ` Olaf Hering
2006-12-11 16:44 ` Linus Torvalds
2006-12-11 16:52 ` Linus Torvalds
2006-12-11 18:04 ` Olaf Hering
2006-12-11 18:18 ` Olaf Hering
2006-12-11 18:26 ` Linus Torvalds
2006-12-11 18:29 ` Herbert Poetzl
2006-12-11 18:43 ` Linus Torvalds
2006-12-11 18:55 ` Olaf Hering
2006-12-11 19:11 ` Linus Torvalds
2006-12-11 22:04 ` Paul Mackerras
2006-12-12 0:05 ` David Miller
2006-12-12 9:10 ` Gerd Hoffmann
2006-12-11 19:20 ` Andy Whitcroft
2006-12-11 19:36 ` Linus Torvalds
2006-12-11 22:42 ` Andy Whitcroft
2006-12-11 19:37 ` Herbert Poetzl
2006-12-11 19:56 ` Olaf Hering
2006-12-11 20:05 ` Linus Torvalds
2006-12-11 20:09 ` Linus Torvalds
2006-12-11 20:21 ` Greg KH
2006-12-11 20:16 ` Olaf Hering
2006-12-11 20:15 ` Theodore Tso
2006-12-11 20:23 ` Arjan van de Ven
2006-12-11 21:16 ` H. Peter Anvin
2006-12-11 18:49 ` Olaf Hering
2006-12-12 12:23 ` Mach-O binary format support and Darwin syscall personality [Was: uts banner changes] Kyle Moffett
2006-12-12 16:23 ` Linus Torvalds
2006-12-12 17:56 ` Kyle Moffett [this message]
2006-12-12 18:20 ` Linus Torvalds
2006-12-12 22:34 ` Kyle Moffett
2006-12-12 22:38 ` Benjamin Herrenschmidt
2006-12-12 22:57 ` Linus Torvalds
2006-12-12 22:21 ` Benjamin Herrenschmidt
2006-12-15 12:53 ` Pavel Machek
2006-12-11 17:50 ` 2.6.19-git13: uts banner changes break SLES9 (at least) Olaf Hering
2006-12-11 17:57 ` Arjan van de Ven
2006-12-11 18:00 ` Olaf Hering
2006-12-11 18:08 ` Arjan van de Ven
2006-12-11 18:14 ` Olaf Hering
2006-12-11 19:03 ` Arjan van de Ven
2006-12-11 19:37 ` Jan Engelhardt
2006-12-11 18:19 ` Linus Torvalds
2006-12-11 18:40 ` Olaf Hering
2006-12-11 18:52 ` Linus Torvalds
2006-12-11 19:34 ` Jan Engelhardt
2006-12-11 21:15 ` H. Peter Anvin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=D571C4CB-3D52-446C-802E-024C4C333562@mac.com \
--to=mrmacman_g4@mac.com \
--cc=akpm@osdl.org \
--cc=benh@kernel.crashing.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®