Skip to content

Latest commit

 

History

History
381 lines (304 loc) · 19.8 KB

SourceOutline.md

File metadata and controls

381 lines (304 loc) · 19.8 KB

FEX-2303

External/FEXCore

See FEXCore/Readme.md for more details

Glossary

  • Splatter: a code generator backend that concaternates configurable macros instead of doing isel
  • IR: Intermediate Representation, our high-level opcode representation, loosely modeling arm64
  • SSA: Single Static Assignment, a form of representing IR in memory
  • Basic Block: A block of instructions with no control flow, terminated by control flow
  • Fragment: A Collection of basic blocks, possibly an entire guest function or a subset of it

backend

IR to host code generation

arm64

interpreter

shared

x86-64

frontend

x86-meta-blocks

  • Frontend.cpp: Extracts instruction & block meta info, frontend multiblock logic

x86-tables

Metadata that drives the frontend x86/64 decoding

x86-to-ir

glue

Logic that binds various parts together

block-database

  • LookupCache.cpp: Stores information about blocks, and provides C++ implementations to lookup the blocks

driver

Emulation mainloop related glue logic

  • Core.cpp: Glues Frontend, OpDispatcher and IR Opts & Compilation, LookupCache, Dispatcher and provides the Execution loop entrypoint

gdbserver

log-manager

thunks

FEXCore side of thunks: Registration, Lookup

x86-guest-code

ir

dumper

IR -> Text

emitter

C++ Functions to generate IR. See IR.json for spec.

opts

IR to IR Optimization

parser

Text -> IR

opcodes

cpuid

  • CPUID.cpp: Handles presented capability bits for guest cpu

dispatcher-implementations

ThunkLibs

See ThunkLibs/README.md for more details

thunklibs

These are generated + glue logic 1:1 thunks unless noted otherwise

EGL

GL

SDL2

VDSO

Vulkan

X11

asound

cef

drm

fex_malloc

  • Guest.cpp: Handles allocations between guest and host thunks
  • Host.cpp: Handles allocations between guest and host thunks

fex_malloc_loader

  • Guest.cpp: Delays malloc symbol replacement until it is safe to run constructors

fex_malloc_symbols

  • Host.cpp: Allows FEX to export allocation symbols

xcb

xcb-dri2

xcb-dri3

xcb-glx

xcb-present

xcb-randr

xcb-shm

xcb-sync

xcb-xfixes

xshmfence

Source/Tests

Bin

FEXLoader

  • FEXLoader.cpp: Glues the ELF loader, FEXCore and LinuxSyscalls to launch an elf under fex

IRLoader

TestHarnessRunner

UnitTestGenerator

LinuxSyscalls

Linux syscall emulation, marshaling and passthrough

android-syscalls-shared

common

syscalls-arm64

syscalls-shared

Syscall implementations shared between x86 and x86-64

syscalls-x86-32

x86-32 specific syscall implementations

syscalls-x86-64

x86-64 specific syscall implementations

unittests

See unittests/Readme.md for more details