Skip to content

Releases: rotmanjanez/x86sim

v0.1.4

Choose a tag to compare

@rotmanjanez rotmanjanez released this 27 Jun 20:33

What's changed

  • Logging: basic-block-cache dumps now write through an atomic file pointer on each Machine's own instance logger instead of shared global logging state, so concurrent Machines no longer race on log output (fcbf8bf).

Earlier in the 0.1.x line (already in v0.1.3): portable mprotect(2) support and transparent code-cache invalidation on map/unmap/mprotect.

Full changelog: v0.1.3...v0.1.4

v0.1.3

Choose a tag to compare

@rotmanjanez rotmanjanez released this 27 Jun 19:12

New: portable mprotect (syscall 10)

Adds a portable mprotect(addr, len, prot) handler so guests can change
page protections at runtime — e.g. JITs marking freshly written pages
executable, or glibc relocating then read-only-protecting GOT segments.

The address space is now bound to its Machine, so map/unmap/protect
(and direct caller edits) transparently invalidate any decoded basic blocks
cached for the affected pages. A page's execute permission is baked into a
decoded block at translation time, so without this a stale block would keep
executing under the old protection after an mprotect. Wired into both the
Python glibc=True chain and the native frontend.

Internal: per-instance loggers

Logging moved from global state to per-Machine instance loggers, so
multiple simulator instances in one process no longer share or clobber
logging configuration.

Full changelog: v0.1.2...v0.1.3

v0.1.2

Choose a tag to compare

@rotmanjanez rotmanjanez released this 27 Jun 17:01

New: portable getrandom (syscall 318)

Adds a portable getrandom(buf, buflen, flags) handler so newer glibc
(>= 2.36) — which seeds its stack canary / pointer guard via getrandom at
startup — now boots in the simulator instead of dying on an unsupported syscall.

The buffer is filled from a fixed-seed std::mt19937_64 stream: deterministic
and host-independent (no host entropy / std::random_device), matching the
library's other synthetic syscalls. Wired into both the Python glibc=True
chain and the native frontend.

v0.1.1

Choose a tag to compare

@rotmanjanez rotmanjanez released this 27 Jun 15:52

Bug fix

Fix the out-of-order core stalling forever on unaligned memory loads.

The alignment-fixup path copied the split load uop back into the fetch slot
inside an assert(), so the call was compiled out under -DNDEBUG (release
builds, including the PyPI wheel). The original unaligned load then re-faulted
on every refetch until the deadlock detector aborted the run, surfacing as a
misleading clean guest_exit.

With the fix, unaligned loads work on the default out-of-order core, and a real
static glibc binary now runs end to end on either core (core="ooo" or
core="seq") — previously glibc required core="seq".

v0.1.0

Choose a tag to compare

@rotmanjanez rotmanjanez released this 27 Jun 11:17