Commit Graph
45 Commits
Author SHA1 Message Date
mirkobrombin 5c91120232 chore: merge pull request #47 from rayzorben/feat/set-thread-context 2026-10-30 06:32:58 +00:00
Raymond Bennett f84e160586 fix: keep the clocks in the shared user data page current
KUSER_SHARED_DATA held the tick count, interrupt time and system time of the
moment the process started. Go reads its monotonic and wall clocks straight
from the page, so time stood still in every Go program: restic's scrypt
calibration never saw time pass and asked for parameters too large to use,
and the scheduler never saw a goroutine run long.

The page is now shared with the host, which rewrites the clock fields every
millisecond, in the order KSYSTEM_TIME readers rely on (second high word,
low word, first high word). The tick count counts ticks of 15.625 ms, as the
TickCountMultiplier the page declares says. map_shared can place a view at a
given address for this.

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the shared page, its clock updates and the fixed-address view
(cherry picked from commit 9238cbcfb1c5611df67b295b71085176f5ddbebc)
2026-10-28 23:16:28 -07:00
Raymond Bennett bf53b0b51a feat: add SetThreadContext for suspended 64-bit threads
Go preempts a goroutine that runs too long by suspending its thread, reading
its context and setting it to call the runtime's preemption function. With
the clock now running, restic got that far and stopped on SetThreadContext.

The control and integer groups of the CONTEXT become the registers the
thread continues with: in its own task when it is paused there, in its saved
snapshot otherwise. A thread that is not suspended keeps its registers.

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the handler and NativeProcess::set_thread_registers
(cherry picked from commit b1c31f9ffbea6bb1d91458193357184f305818f4)
2026-10-28 23:14:32 -07:00
mirkobrombin bea2192ed6 fix: leave room for hooking libraries in front of every runtime export 2026-10-27 22:04:55 +00:00
mirkobrombin 41f3c1ba57 perf: trim the parallel host's per-call overhead 2026-10-26 00:17:53 +00:00
mirkobrombin 72ec37d544 perf: answer decided waits inside served calls 2026-10-26 00:17:53 +00:00
mirkobrombin 4d0e2b4be1 fix: preserve thread context during served API calls 2026-10-24 23:29:27 +02:00
mirkobrombin 0a0fe4be89 feat: add shared Windows process state and parallel guest execution 2026-10-24 16:24:23 +00:00
mirkobrombin 58c8551c14 fix: poll a running guest before waiting for it asleep 2026-10-23 19:44:27 +00:00
Mirko Brombin ca7c6a3f13 feat: dispatch exceptions and unwind generated code as Windows does, with the shared user data page 2026-09-23 00:12:49 +00:00
Mirko Brombin 858304afb3 feat: pass negative 32-bit values the handlers widened back to 32-bit callbacks 2026-09-21 14:17:07 +00:00
Mirko Brombin b816d74662 feat: wait for the guest asleep at once unless it had served calls answered in the last few milliseconds 2026-09-21 02:49:39 +02:00
Mirko Brombin 73dacde539 feat: drop the API breakpoints of an unmapped range by its bounds instead of scanning every breakpoint 2026-09-21 02:29:03 +02:00
Mirko Brombin 1a81af0661 feat: add save and restore only the general registers around a callback into the guest 2026-09-21 02:06:58 +02:00
Mirko Brombin f72205299d feat: read each guest page once while registering the API breakpoints on it 2026-09-21 00:49:22 +02:00
Mirko Brombin 4c84e2b913 feat: skip the stop reason for known API breakpoints and let calls return through the RET after their breakpoint 2026-09-20 23:32:00 +02:00
Mirko Brombin e90683e15c feat: answer window data, atom properties, existence and rectangles in the guest from a window table the runtime keeps current 2026-09-20 21:12:26 +02:00
Mirko Brombin 08ecacb4fd feat: let a seccomp filter stop the guest's own system calls when RAVEN_SECCOMP is set, running only the runtime's gate 2026-09-20 19:20:59 +02:00
Mirko Brombin 72986735b7 feat: open the reserved pages around a read-write commit so later commits in the granule need no protection change 2026-09-20 14:35:11 +02:00
Mirko Brombin a081c1ac3c feat: read the extended processor state at its own size and set a thread context without reading it back first 2026-09-20 13:27:44 +02:00
Mirko Brombin 4d4f269262 feat: keep guest mappings ordered by address so lookups and protection changes touch only the affected ones 2026-09-20 13:14:14 +02:00
Mirko Brombin cd1f1faa99 feat: keep only the general registers around a memory system call of the guest 2026-09-20 13:08:56 +02:00
Mirko Brombin dd4dba704e feat: map libraries and read-only file views from the host file, cache guest registers per stop and serve completed one-time inits in the guest 2026-09-20 13:02:13 +02:00
Mirko Brombin eda064950b feat: add place 32-bit allocations in free low gaps and serve completion-routine file I/O, PathCch calls and dependencies beside a library loaded by path 2026-09-20 07:03:09 +00:00
Mirko Brombin ab62d80bea feat: serve leaf API calls without stopping the guest, run blocking Vulkan calls off the scheduler and keep input in order 2026-09-04 04:31:00 +02:00
Mirko Brombin ead54d6b10 feat: run Google Chrome with NT object queries, COM apartments, file completion ports and SDDL descriptors 2026-09-03 21:44:05 +02:00
Mirko Brombin 26fbeabc78 feat: run Steam's web UI with cross-process handles, per-thread message queues, socket events and process identity 2026-09-03 16:48:12 +02:00
Mirko Brombin 66087052d8 feat: run Chromium's helper processes with DirectWrite, named pipes, jobs, inherited handles and shared sections 2026-09-03 06:06:54 +02:00
Mirko Brombin 7b3461c003 feat: run Chromium's web helper further with reserved address space, native registry, tokens and process lists 2026-09-03 03:46:34 +02:00
Mirko Brombin 966069f911 feat: run Steam to its web helper with real sockets, TLS chains, child environments and image protection 2026-09-03 02:50:56 +02:00
Mirko Brombin fa0c3652f8 feat: keep a finished time slice from ending the wait of a later memory operation 2026-08-02 09:18:34 +02:00
Mirko Brombin 0e1fb1bd29 feat: give 64-bit programs the ANSI window functions and present a Direct3D 9 frame through DXVK 2026-08-02 06:14:20 +02:00
Mirko Brombin bc37ed5e58 feat: add time slice guest threads and wait on events through the scheduler 2026-08-02 05:26:50 +02:00
Mirko Brombin 469f7926b9 feat: give 32-bit programs a Vulkan loader over the bridge with layout translation 2026-08-02 02:47:33 +02:00
Mirko Brombin 8789133e17 feat: run guest threads, critical sections, heap and ANSI window calls in 32-bit programs 2026-08-02 00:07:11 +02:00
Mirko Brombin 342f1361e8 feat: marshal Vulkan commands from the registry 2026-08-01 10:46:12 +02:00
Mirko Brombin a52e9e7d1d feat: add scroll bars, carets, clipboard, hooks, key state and fast thread-block paths; Notepad++ shows its window 2026-08-01 00:41:27 +02:00
Mirko Brombin 4a973d4dce feat: add GDI rasterizer, text, image loading, guest user32 component and pinned libpng 2026-08-01 00:12:57 +02:00
Mirko Brombin 659315e3a9 feat: map window and DIB pixels into the host, defer presentation and provision the common controls component 2026-07-31 23:22:18 +02:00
Mirko Brombin cd91b52e20 feat: add menu, window manager, registry, shell, version and platform APIs for Notepad++ bring-up 2026-07-31 22:56:57 +02:00
Mirko Brombin efc6104b5b feat: add kernel32 services, guest threads and structured exceptions for PE64 processes 2026-07-31 21:45:18 +02:00
Mirko Brombin 2c94d9cc31 feat: give empty windows a clipped surface and trace x86 API results 2026-07-31 19:00:22 +02:00
Mirko Brombin 87d631c24b feat: run x86 desktop window and message contracts 2026-07-31 18:22:26 +02:00
Mirko Brombin 3418963433 feat: add native x86 compatibility-mode process execution 2026-07-31 17:23:44 +02:00
Mirko Brombin 154272073d feat: preserve native C++ migration 2026-07-31 16:46:25 +02:00