-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CrossOver not working #6
Comments
From that link:
I am not a developer, so I'm not 100% sure on this, but 0 32-bit code works on AMD because of (missing) OPEMU, so this is why CrossOver does not work. |
You cannot run 32-bit code on AMD systems. It indeed has to do with OPEMU or rather the lack thereof. |
Wine/CodeWeavers dev here. A guy on our IRC channel brought my attention to this bug. I am currently waiting for a compile to finish so I am dropping a few quick notes. I'm afraid I can't spend a lot of time though because we don't support hackintoshes. For some technical detail see https://www.winehq.org/pipermail/wine-devel/2019-December/156602.html . The 32 bit execution magic works by creating 32 bit LDT entries via i386_set_ldt. That's what the special permission is needed for, although it seems 10.15.4 removed that requirement. The other way around the permission is to disable system integrity protection. LDT entries aren't CPU specific (unlike HW Hypervisors, and the Apple hypervisor API that is very intel specific), so in theory this should work. If I understand the screenshots right and taskmgr is at least starting up, and if that cmd is running in 32 bit code, the important thing is working. What is probably a problem is system calls and signal delivery to a process/thread that currently has %cs pointing to a 32 bit code segment. If you have some custom kernel modifications or modules that's the first place to look. Try to build yourself a C program that builds as a 64 bit C program but calls 32 bit bytecode via a 32 bit code segment entry and see if you can get this working on AMD. It's somewhat tricky - beware address space, stack and data segments, return addresses, so first make sure your test program works on a proper mac. |
Ah yes, the CrossOver 19 source code, or at least the Wine parts, are available at https://www.codeweavers.com/products/more-information/source. I believe the modifications we made to Clang to handle 32 bit pointer sizes in 64 bit environments are also in there. At very least I don't think we're deliberately keeping them secret, it's just a really messy piece of code. Upstream Wine doesn't want it as is, the plan there is to eventually work without a magic compiler. |
Another Wine/CodeWeavers dev here. :) CrossOver is still running 32-bit code directly on the CPU. It is not emulating or translating that code to 64-bit. If I understand the purpose of OPEMU correctly, it's for emulating certain Intel-only instructions that AMD CPUs don't support natively in 32-bit mode. So, IOIIIO is correct, the lack of OPEMU will prevent CrossOver from running 32-bit Windows programs. The fact that it ran some to a certain extent might simply be because they didn't attempt to execute one of the instructions that require emulation until relatively late in the run. I would expect that the same would be true on Mojave and earlier using this project. So, it's not directly related to our 32-on-64-bit support. The reason why OPEMU is deprecated with Catalina is because one is not expected to run any 32-bit code on Catalina, so it shouldn't be necessary. Well, surprise! It is necessary for CrossOver's 32-on-64-bit support because we are running 32-bit code. |
To add on to this, whilst OPEMU is deprecated with Catalina for the purpose of hackintoshing, it still genuinely may be useful for some 64-bit apps that require Intel-specific instructions to be present, i.e. Adobe, REAPER, etc. |
Doubt that what crossover19 needs is OPEMU.
I think a conclusion can be deduced from all above: what blocks crossover19 from running on Catalina is NOT simply lacking of OPEMU. Though I also don't know what it actually IS, yet : ) |
Can you test CrossOver 20 beta? I'm in work now, I want to see what happens when you run it on Ryzentosh. |
Sorry for the late reply, but I cannot. Not owe a copy :( Using build here, so need waiting new open source releases.
@stefand Could you please give a simple code example? That will helps greatly! Thanks in advance. |
You can test Crossover 20 by downloading it from beta section on CodeWeavers site (there was no official release so far). |
@palxex Ken once built such a thing, I'll ask him if he still has it. A few Linux-specific examples are floating around on stackoverflow, e.g. https://stackoverflow.com/questions/18272384/far-call-into-user32-cs-from-64-bit-code-on-linux . The unfortunate thing about Linux is that it allocates a lot of memory in the low 4GB even in a 64 bit process, so patched together examples are much more likely to work by luck than on Mac. |
I tested
When running |
@HoshiYamazaki I saw your request on IRC. Unfortunately I don't have any 32<->64 bit call code on my computers and Ken is away for a while. I am afraid I can't provide you with example code in the near future :-( . |
Crossover 20 beta 3 works neither, same stack overflow at the same address... |
CrossOver 20 final release too doesn't work (at least when running 32bit code, for example FF XIV works fine), also with newest patch from @Shaneee that fixes MTRR/PAT functionality (mapping) it still raises stack overflow error with the same address. Not sure at all what is the problem now. @palxex From your response I see: Why it even uses opemu_systenter call if that is not used? I don't quite get that but I'm not familiar with XNU kernel at all. |
For some reason Crossover started to report correctly processes and memory usage now on my rig until it crashes. Also, it crashes too when using win 98/xp/7 x32 bit bottle. Here is my log:
From what I understand, the error is not fixable by CodeWeavers team (@stefand) but the problem is in (probably) Fix PAT patch which is still broken and is not allocating memory regions correctly in MTRR/PAT values. Confirmed also by @Pavo-IM it does work without Fix PAT patch which is not needed on threadrippers. @Shaneee can you revisite the issue in free time? |
Nope, you can configure macOS VM under Proxmox with GPU Passthrough and CrossOver will run and that's the only solution. |
Steam installs correctly, downloads its updates fine but hangs updating. Need to find out why! |
Can confirm that CrossOver update to 21.1 version does not resolve the issue. |
Version 21.2 does not work either. Version 22.0.0 beta 2 does not work either, but gives new errors when creating Windows 10 32-bit based bottle. I also tried to create Windows 7 32-bit bottle, and then install steam in it. It gives similar errors: What surprises me the most that using |
Okey, so CrossOver 22.0.1 and 22.1-b1 are not working either - anyway I managed to get again different errors when I started to debug the issue on my Ryzen rig (on Ventura 13.1 stable):
I'm getting these errors during Steam installation, and they seem to be releated to memory allocation - I'm still unsure what we can do about this, and I'm still curious why CrossOver is working without hassle on Ryzens from 5xxx/7xxx series (according to AMD OSX discord). I maybe will try to look into the issue but I don't give any hope because maybe soon I will be not able todo it since I'm planning to switch to Intel/ARM based Mac. |
Have this same issue. Wine programs in general seem to be very unstable on my Ryzen 2xxx. They work great comparatively on an Intel MacBook. Is this not an issue on the Ryzen 5xxx/7xxx? |
Have the same issue on Ventura 13.4.1 Ryzen 5 3600
|
Hey, can anybody from people posting here try to test CrossOver 23 beta version? I don't have anymore access to my old AMD build, but I will really appreciate if somebody will do it. You don't need to install Sonoma, just try to download the beta version from website and install it on for e.g. Ventura. Thanks in advance! |
Moved to Intel, though could maybe test on the old AMD machine, but not a part of their beta tester program |
Can confirm Crossover 23 works perfectly fine on my AMD 5600x. |
Good to know that the Ryzen 5xxx's work |
Its still not working on amd rayzen 5 5625u, |
Please re-test it on CrossOver 24, the new release probably has different WoW64 mechanism that can fix 32-bit issue. |
Both 3DMark 2001 and 3DMark 2005 run perfectly with Crossover 24, AMD 7950x based Hackintosh |
Can anybody test in any laptop with Vega 8 / 10 that uses |
I have a Ryzen 5 3550H and Vega 8. |
Thanks, I very much appreciate your post! Anyone else has also tried to run OSX on AMD + NootedRed and tested CrossOver 24? |
I know this is a bit ancient but, have you ever found a way to make it work? I've tried countless times to install Steam wether through PlayOnMac or the superior CrossOver. I've seen some people in the AMD Hackintosh server talk about how you could run steam and stop it from crashing through an implementation in WoW64, but I don't think that makes sense because Steam never had a 64-Bit release on Windows unlike on mac. Have you found a way to get it working? I'm having the same issue as you did on Crossover 24.0.4 on macOS 14.6.1. Thanks! |
It has sense because For example, Box64-based solutions for running games on Android (mostly Snapdragon phones) also uses So, if you run Steam as 32-bit process (and the Windows version is a 32-bit release), @stefand can you respond to that? Does CrossOver 24 rely on |
CrossOver uses the new Wine WoW64 architecture, with some parts that are in the process of being upstreamed to Wine and some parts that are Mac-specific hacks (e.g. using some mach kernel calls to duplicate a GL/Vulkan buffer map to an address below 4GB). A possible misunderstanding is that Wine/CrossOver now does those far calls at something similar to the Windows syscall interface - we have something that looks very similar to the original ntdll syscall thunk but has a carefully crafted relative jump instead of an int 0x2e, followed by a far call. Chromium's sandbox and DRM systems can successfully patch this syscall thunk because it is very close to the original one, but it never performs an actual syscall or int. Wine creates LDT entries for 32 bit code, stack and data segments and uses far calls to jump between them. The far calls are handled inside Wine, but we need kernel support for correct task switching and signal delivery when executing 32 bit code - this is the reason why you can't run 16 bit code. On a x86 CPU MacOS allows us to create 16 bit segments and jump to them, but as soon as a signal arrives the signal handler gets broken information from the kernel. On Rosetta, attempting to create 16 bit LDT entries runs into an assert() that says this is unimplemented. CrossOver never used syscalls for the 32/64 boundary. Hangover did, but those "syscalls" were just the easiest way to jump out of qemu's emulation. We experimented with HW virtualization for running 32 bit code in CrossOver before Apple gave us support for 32 bit code segments. Those used vmcalls to jump out of the emulation and the performance was unusable. Even CrossOver 20 didn't use syscalls (fake or real), it was always far calls/rets. The difference between earlier CrossOver versions and newer ones is that previously we used a special compiler to generate far call thunks at the Win32 API level. The new wow64.dll, win32u.dll etc layer doesn't need a magic compiler and makes Chromium's sandbox happy. |
Ok, I can confirm it crashes on my Thinkpad T14 G1 with AMD R5 4650U CPU. Gonna post my NeoFetch here: And now this is log I created using "launch with options" feature: Gonna see what I can do with it (or maybe I will help again somebody to debug this issue). And now, this is fairly interesting exception:
I don't see anything more interesting in the logs anyway, bad the exception appear to happen multiple times during the CrossOver launch time. |
@stefand any ideas about this |
Not much I can see in there. Exception codes 4001000a and 40010006 are DBG_PRINTEXCEPTION_WIDE_C and DBG_PRINTEXCEPTION_C, i.e. produced by OutputDebugString() and caught by the same functions immediately. You can ignore them, they are a way for debuggers to be notified about calls to OutputDebugString. If those exceptions cause problems then exception handling as a whole is broken and you are in deep trouble. |
Here on my Ryzen 5 3600 build with macOS 14.6.1, I get a similar result as what @PSzczepanski1996 has gotten in their steam install, in my case specifically it would crash after the update window would initially close to bring the steam menu, Sometimes i was able to get into my library and things but it would've been very slow and it would crash every time after a while. Here's my neofetch and logfile i got after i ran Steam. I've also seen some people say that steam/crossover works fine on their ryzentoshes on anything lower than macOS Sonoma (i,e macOS Ventura and such). As far as i could tell there shouldn't be a reason for it to not work because of macOS 14 but who knows. Thanks again for taking an interest at this peculiar thing again |
Got it working with a few fixes, https://www.applegamingwiki.com/wiki/CrossOver#Upgrading_DXVK_and_MoltenVK I applied the update for MoltenVK and DXVK. Unsure if it was necessary and I applied the fix here, https://github.com/Gcenx/CrossOver-fixes Now steam loads up. Logged in scanning QR code from Steam Mobile. Latest Crossover version on Sequoia beta 8 :) |
Hey @Shaneee, I've tried the tweaks that managed to get your machine working with steam but mine ends up the same way, crashing after this specific window. |
So far, your answer can be true because I encountered previously crashes of Steam if graphic drivers were not correctly loaded. Back then I experienced that on Dell laptop with Ubuntu installed and I needed to install |
I've gotten a way to run Steam finally, turns out CrossOver steam cannot run IF you have a third party input manager (Like Razer Synapse or 1Password). This issue dates back to even the OS X Mavericks days and i don't believe it can be fixed in CrossOver. And While I got CrossOver steam working along with a couple of games running (barely anyway because of the lack of good AMD drivers in wine) I've noticed A LOT of excessive crashes and even some weird stuff happening in some games that REQUIRE steam to be open in the background. Everytime steam would crash i noticed that there were only 2 error codes affecting those crashes. 90% of the time when steam crashes before it even launches or if it crashes after a bit, it starts complaining about : Couldn't get first exception for process 059c C:\Program Files (x86)\Steam\steamerrorreporter.exe (WOW64) (no backtrace available). The odd thing is that whenever it would crash with that error, steamerrorreporter.exe would remain open as shown in task manager. The other error code i've gotten i rarely get but whenever i do get it most of the time it doesn't even crash steam: Unhandled exception: stack overflow in wow64 32-bit code (0x7bfa444c). I do notice most of these have to do with 32-bit code and WoW64, which could mean that like we thought before, 32-bit apps (at least most) wont work on AMD Hackintosh through crossover due to lack of actual support, but i believe that could be unlikely. I'm still going to try other stuff, I noticed some people got it working some didn't (like me) but I'll look more into it. On the bright side, I managed (through the crashing) to test a couple of games and successfully enough most "work" as shown in the next screenshots: Deadlock (LOWEST SETTINGS POSSIBLE) (It looks like it's made for the nintendo DS) I've also tried: @stefand would you know what those error codes mean from my big wall of text? Thanks |
Yesterday, I successfully updated my ThinkPad T14 G1 to Sequoia 15.0.1 Log without network: Log with network: Any ideas? |
CPU: r5 3600
macOS version: 10.15.4
15h/16h or 17h: 17h
I am using and can reproduce on the latest patches: yes, using newest kexts from Acidanthera and OpenCore
Describe the bug
CrossOver is not working on Catalina, but I don't quite understand why, since OPEMU is deprecated in Catalina. From far what I know CrossOver is using
com.apple.security.ldt-in-64bit-process
function to work properly, according to this:https://twitter.com/comex/status/1204919560010223618
Not sure if that's an bug, support request, and where bugfix should be implemented.
Screenshots
The text was updated successfully, but these errors were encountered: