mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-07 03:38:31 +00:00
Rosetta doesn't correctly respect the startup registers as defined in LC_UNIXTHREAD which makes platform detection go awry. But at least Rosetta appears to consistently set rbx to 0x00000000ffffffff and rdx to 0x0000000000000001 at startup for every x64 executable I could get my hands on. So we use that to detect Rosetta's presence and set up the correct registers for XNU.
This commit is contained in:
parent
5297897ba1
commit
9f8e6c10dd
4 changed files with 38 additions and 4 deletions
|
@ -595,11 +595,11 @@ __attribute__((__noreturn__)) void ApeLoader(long di, long *sp, char dl,
|
|||
// detect freebsd
|
||||
if (handoff) {
|
||||
os = handoff->os;
|
||||
} else if (SupportsXnu() && dl == XNU) {
|
||||
os = XNU;
|
||||
} else if (SupportsFreebsd() && di) {
|
||||
os = FREEBSD;
|
||||
sp = (long *)di;
|
||||
} else if (SupportsXnu() && dl == XNU) {
|
||||
os = XNU;
|
||||
} else {
|
||||
os = 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue