FEX 2203 Tagged!

More changes all over this place this month.

  • Implemented some new CPU extensions
    • RDRAND/RDSEED and 3DNow!
      • RDRAND only exposed if your host CPU supports the extension
      • 3DNow! implementation also including the Extended and Geode exclusive instructions
  • Implemented a way for guest applications to use CPUID to see FEX hypervisor
    • Any additional options we want the guest to see can be passed through
  • Preparation work for JIT code caching
    • Switching over to loading function pointers from our state options to make the JIT code PIC compliant
    • Adding robin_map which the code cache will use
    • Updating vixl to have finer grained cursor control for JIT relocations
  • A new IR JSON format
    • This allows cleaner IR implementations and more consistent emitter functions
    • Allow emitter functions to have validation inside of them for strict validation
    • Automatic SSA argument type validation to remove invalid IR generation
      • Already found a bug in our x87 code generation
  • Musl fixes
    • FEX-Emu can now both be compiled for Musl and run Musl compiled applications
  • Termux fixes
    • FEX-Emu now more cleanly compiles under Termux
      • Hard to use due to raw syscall usage and Android seccomp
      • proot is likely required here

FEXCore

  • JIT
    • Implements x87 fallback helpers as lookups in to state (b65194f)
  • ARMJIT
    • Switches over to loading pointers from state (1ef78d0)
    • Allow non-optimizing LoadConstant (e9c7c76)
  • JITx86
    • Switches over to loading pointers from state (99dcda7)
  • OpcodeDispatcher
    • Adds support for RDRAND/RDSEED (bebcab0)
    • Fixes CMPXCHG8B/16B with 66h/72h/73h prefix (d8a3687)
    • Implements all the 3DNow! instructions (ac32eca)
    • Fixes weirdo edge case in segment moving (ffcaf29)
  • IR
    • New IR JSON format (3e8c6d0)
  • CPUID
    • Implements leaf 4000_0000 (4a3cbf1)
      • Allows guest applications to see through CPUID that they are running in a FEX “hypervisor”
  • UContext
    • Fixes 32-bit siginfo_t copying definition (cb491a8)

Frontend

  • ELFCodeLoader
    • Fixes typo in AT_BASE calculation (43fada7)
      • Fixing running MUSL compiled applications
  • FEXGetConfig
    • Fix –current-rootfs option (76f86e5)
  • FEXLoader
    • Adds back required MAP_GROWSDOWN (252dcfe)
      • Fixes Ender Lilies
    • Removes memory mapping check on startup (a8e5a0a)
      • Fixes assert when running under proot
  • Linux
    • Fix missing types for syscall strace (64d1840)
    • x32: Fixes tricky stat64 defines (287c65d)
    • Make sure to use correct accessors for sigevent (62397bb)
    • Allow classifying syscalls with flags (2933a00)
      • Speeds up some syscalls during emulation
  • LinuxAllocator
    • Fixes bug with old kernels and hint allocation (08938ec)
  • Scripts
    • Stop using deprecated Distutils (46ac05e)
    • Updates CPU fitting script for latest CPUs (2af23d9)
      • Ensures that Cortex-X2, A710, and A510 native features are enabled
  • Telemetry
    • Fix missing telemetry names (30803c6)
  • TestHarnessRunner
    • Wire up environment variable option setting (3ba2d6c)
  • Misc
    • Adds tsl::robin_map (a7ad7f4)
    • Update vixl to fix assert (57a5654)
      • Affects new Cortex-X2, A710, A510 CPUs which support MTE
    • Termux fixes (b4e0565)
    • Improve compatibility with older uapi kernel headers (fa554d3)
    • Updates vixl for new cursor updating methods (5ec6ee5)
    • Adds option to disable ccache (0db7205)
    • Fixes Host and guest thunks install path (a5fb7e7)
    • Removes MAP_GROWSDOWN usage (afa7172)
    • Miscellaneous thunk cleanups (4bb3a54)
    • Enable proper IDE integration of thunk libraries (5854d4a)
    • Updates Readme to fix install script (defd3be)
    • Some fixes for older environments (1b99495)
  • unittests
    • Disables Interpreter tests when its disabled (3453023)

See the 2203 Release Notes or the detailed change log in Github.

Written on March 6, 2022