Skip to content

WoW Classic on Android (box64 + Wine x86_64): after fixing dynarec FillBlock storm, startup still fails on INT 0x2c -> STATUS_ASSERTION_FAILURE (0xC0000420) #3588

@FrontMage

Description

@FrontMage

Environment

  • Device: Snapdragon 8 Gen 2 (Android)
  • Stack: box64 + Wine x86_64 (Winlator-based environment)
  • Wine baseline: Proton 9.0 codebase, with local integration/debug patches
  • box64: local debug build with extra instrumentation for FillBlock + INT paths

Summary

This was debugged in two stages:

  1. Stage A (fixed): dynarec FillBlock storm
  2. Stage B (current blocker): INT 0x2c -> c0000420 unhandled

Stage A: FillBlock storm (pre-fix)

Before the current assertion failure, runs repeatedly hit FillBlock segfault/cancel loops.
From /tmp/winlator_cmod/wfm_2026-02-24_20-24-56.txt:

[BOX64] FillBlock triggered a segfault at 0x2 from 0x6237543b08
[BOX64] FillBlock at 0x6edec400 triggered a segfault, canceling
[BOX64] FillBlock triggered a segfault at 0x2 from 0x6237543b08
[BOX64] FillBlock at 0x6edec400 triggered a segfault, canceling
[BOX64] FillBlock triggered a segfault at 0x2 from 0x6237543b08
[BOX64] FillBlock at 0x6edec409 triggered a segfault, canceling
[BOX64] FillBlock triggered a segfault at 0x2 from 0x6237543b08
[BOX64] FillBlock at 0x6edec40f triggered a segfault, canceling

After fixing this path (safe diagnostics + robust fault-path handling), startup proceeds further and no longer dies at this stage.


Stage B: Current blocker (INT 0x2c -> c0000420)

WoW loader attach completes

01b4:err:module:process_attach [LDRDBG] process_attach initdll leave tid=01b4 dll=L"WowClassic_loader.dll" status=00000000
01b4:err:module:process_attach [LDRDBG] process_attach end tid=01b4 dll=L"WowClassic_loader.dll" status=00000000

box64 emits INT 0x2c

[BOX64] [BOX64_INTDBG] EmitInterruption num=0x2c rip=0x7fff623ea0 rsp=0x7dafd18 rbp=0x7dafd50 cs=0x33 ss=0x2b si_code=44 si_errno=0xdead addr=0x7fff623ea0
[BOX64] [BOX64_INTDBG] signal-map int=0x2c trapno=13 err=0x162 skip=3 rip=0x7fff623ea0 rsp=0x7dafd18 rbp=0x7dafd50 si_code=44

Wine sees assertion failure and does not recover

01c4:err:seh:dispatch_exception [LDRDBG] dispatch_exception enter tid=01c4 code=c0000420 flags=00000000 addr=0000007FFF623EA0 rip=7fff623ea0 rsp=7dafd18 rbp=7dafd50
01c4:err:seh:dispatch_exception unknown exception (code=c0000420) raised

Current understanding

  • WowClassic_loader.dll attach completes successfully.
  • Fatal path is later: INT 0x2c -> STATUS_ASSERTION_FAILURE.
  • This is no longer the old FillBlock crash.
  • Likely compatibility/semantics issue in assertion delivery/handling under box64 + Wine.

Questions

  1. Is current box64 INT 0x2c mapping/delivery (trapno=13, err=0x162) correct for Wine x86_64 expectation?
  2. Is this a known compatibility gap for WoW/Blizzard binaries on this stack?
  3. Any recommended box64-side handling tweak for this specific assertion path?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions