Apresentamos a versão do projeto FEX 2412, que está desenvolvendo um emulador para executar jogos e aplicativos compilados para as arquiteturas x86 e x86-64, em um ambiente Linux em sistemas com processadores ARM64 (AArch64). Entre outras coisas, o emulador FEX é utilizado pelo projeto Asahi para facilitar a execução em ambientes Linux em sistemas com chips ARM Apple Silicon de jogos da biblioteca Steam, compilados para a arquitetura x86_64. O código do projeto é escrito em C++ com inserções de assembly e é distribuído sob a licença MIT.
As bibliotecas necessárias para executar aplicativos x86 em um ambiente ARM64 são conectadas na forma de uma camada de overlay com a imagem do sistema de arquivos raíz (rootfs), fornecida no formato squashfs. Essa camada permite evitar a criação de um ambiente chroot separado. A carga de imagens rootfs já formadas pelo projeto é feita por uma utilidade especialmente preparada chamada FEXRootFSFetcher.
Para organizar o acesso a determinados recursos do ambiente host, como ferramentas para trabalhar com som e gráficos 3D, bibliotecas thunk especiais são colocadas no rootfs, as quais traduzem chamadas para bibliotecas e código do lado do sistema host (por exemplo, chamadas para OpenGL e Vulkan podem ser redirecionadas). Essas bibliotecas também podem ser usadas no lado do host para chamar código no ambiente convidado. Dentre as bibliotecas disponíveis para redirecionamento estão: libEGL, libGL, libSDL2, libX11, libVDSO, libasound, libdrm, libfex_malloc, libvulkan, libwayland-client e libxshmfence.
As mudanças na nova versão incluem a solução de problemas com o lançamento do cliente Steam, a transição da emulação da instrução x86 PAUSE para o uso da instrução ARM WFE em vez de YIELD, a garantia de emulação das chamadas de sistema necessárias para trabalhar com gamepads, melhorias na emulação de CPUID e RDTSCP, reestruturação do FEXCore (back-end de emulação de CPU), e correções em inadequações na emulação das extensões AVX.
Fonte: opennet.ru
