Skip to content

Answer four SDK 22 calls that would reach an unserved service (Ocarina of Time: fonts, sensor fusion's end, pctl, getaddrinfo) - #1434

Closed
lunks wants to merge 1 commit into
seedds:mainfrom
lunks:pr/sdk22-unserved
Closed

lunks wants to merge 1 commit into
seedds:mainfrom
lunks:pr/sdk22-unserved

Conversation

@lunks

@lunks lunks commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

What and why

Ocarina of Time (SDK 22.2.8) imports 891 functions in main and 218 in subsdk0 that no host hook names directly. Following each one's direct calls in its sdk to ConnectToHipcService or a request svc found 8 that would end in [RED] sf: the game connects to service ... itself and an abort. This answers four of them, as their neighbours are answered:

  • pl::RequestLoadNxFont(buffer, size): a no-op; the stand-in fonts answer the calls that follow.
  • hid::FinalizeSensorFusion: nothing to disable on the host.
  • pctl::CheckAgcPermissionUnderMinimumAge(Uid): false, as the other communication permission queries.
  • nnsocketGetAddrInfoWithOptions: EAI_FAIL, as nnsocketGetAddrInfo.

A fifth, hid::IsOunceVibrationDeviceMounted (#1433, the abort when the player plays an ocarina note), was in this change; main 8feddfe has added the same hook for Kirby Air Riders, so this PR keeps main's and no longer carries one.

Checked

  • Rebased onto main 8feddfe by editing only; no hook defined twice (hle_dupes.py: 994 hooks, none in a different file).
  • Before the rebase: the Mac host built; t_hid, t_pctl, test_docs.py, docs_symptoms.py --check passed. Not run again on this head.
  • Games run: none. The survey is static, from the game's imports.

Docs

  • The finding is in its game note or its docs/reference/<subsystem>.md entry, and python3 dm/tools/docs_symptoms.py was run (the symptom index)
  • No game files, keys or data extracted from a game in the change or the attachments

@github-actions github-actions Bot added host The Horizon host: SVCs, services, threads, memory (dm/host) docs Documentation labels Nov 6, 2026
AnkMister added a commit to AnkMister/nxnative that referenced this pull request Nov 6, 2026
Revised brief: keep only PR seedds#1434 (9eeacbb), seedds#1332 (7f5f2fc), seedds#1417 (1c1d453), and seedds#1428 (f537147). Remove all other prior ports and their follow-ups while preserving published history. Other glass and Mac agents own those items. Update the scoped report and references; exclude disabled SDK hooks from hit diagnostics.

Python tools match the baseline failure set; 12 docs/environment checks pass. Portable SDK gate and diagnostic checks pass GCC ASan/UBSan. Mac and Metal checks remain open.
fpedrolucas95 added a commit to fpedrolucas95/nxnative that referenced this pull request Nov 6, 2026
… sensor fusion's end, a pctl check, getaddrinfo with options)

The Legend of Zelda: Ocarina of Time (SDK 22.2.8) imports 891 functions in main and 218 in subsdk0 (NintendoSDK_movie) that no host hook names directly. Following each one's direct calls in its sdk (through the PLT, stopping at functions the host takes over) to ConnectToHipcService or a request svc left 8 that would end in "[RED] sf: the game connects to service ... itself" and an abort. The ones the game calls are now answered as the host answers their neighbours:

- pl::RequestLoadNxFont(buffer, size): SDK 22 has the system load the Switch 1 shared fonts into a 0x1300000-byte buffer of the game's (a transfer memory, through the pl service; sdk+0x5a3ab0). The game allocates it and calls this at start (main+0x3782c20), then asks GetSharedFontLoadState / Address / Size, which the host answers with its stand-in fonts: a no-op.
- hid::FinalizeSensorFusion (DisableNpadImu, at the input system's end, main+0x3469314): nothing to disable.
- prepo::PlayReport::Send(Uid) was on the list too; seedds#1299's hook (a completed AsyncContext in the caller's x8 storage, hle_offline.c) answers it.
- pctl::CheckAgcPermissionUnderMinimumAge(Uid) (bool): false, as the other communication permission queries.
- nnsocketGetAddrInfoWithOptions: EAI_FAIL, as nnsocketGetAddrInfo.

fs::SetAllocator and diag::detail::DevNotifyImpl reach a service only with the fs access log or a development notification on, and are left. subsdk0's imports reach none: its nn::codec calls (AV1, the movies' codec) are the SDK 22 forms hle_codec_video.c registers through CV_FAMILY / CV_SDK22, macros the survey's import table does not read, so they show there as missing.

IsOunceVibrationDeviceMounted was one of the 8 and is answered on main now (8feddfe, seedds#1433): this change keeps main's hook.

Checked: rebased onto main 8feddfe by editing only; not built or run since (it was before the rebase: the Mac host built, t_hid and t_pctl, test_docs.py, docs_symptoms.py --check). Not played.
@lunks
lunks force-pushed the pr/sdk22-unserved branch from 9eeacbb to e5fa1df Compare November 6, 2026 05:30
@lunks lunks changed the title Answer five SDK 22 calls that would reach an unserved service (Ocarina's note abort, #1433) Answer four SDK 22 calls that would reach an unserved service (Ocarina of Time: fonts, sensor fusion's end, pctl, getaddrinfo) Nov 6, 2026
gnosticgeek pushed a commit to gnosticgeek/nxforge that referenced this pull request Nov 6, 2026
…ach an unserved service (Ocarina of Time: fonts, sensor fusion's end, pctl, getaddrinfo)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qteK29T18U8p1c9LsVY8g
@seedds

seedds commented Nov 6, 2026

Copy link
Copy Markdown
Owner

Thank you for the survey. The four answers are on main in 6121fd7, with you as co-author. Final checks on the rebased tree (full shader build, walks, regression) are still running, so please report anything you see.

@seedds seedds closed this Nov 6, 2026
gnosticgeek pushed a commit to gnosticgeek/nxforge that referenced this pull request Nov 6, 2026
) replaces the pull request heads

Upstream landed Ocarina of Time in main (chain adec7d81d970: "holds 60 fps in
Kokiri Forest, 4 GB less") and closed the pull requests it folded in, with
reworded and partly different code. Mixing a pull request head with its landed
version hunk by hunk silently broke things (two GlobalToStorage tables, a
duplicate AF2ip, two mtk_pso definitions), so the rule here is one version per
feature:

- Pull requests upstream closed (seedds#1299, seedds#1300, seedds#1312, seedds#1343, seedds#1345, seedds#1353,
  seedds#1354, seedds#1359, seedds#1360, seedds#1373, seedds#1428, seedds#1430, seedds#1434): their hunks are taken out
  of our side before the three-way merge, so upstream's landed version stands
  alone. Gone with them: bindless pool table patching (reg_bump), the ghost
  table's per-submission hold, the growing raw pool table and its write-log
  sizing, seedds#1428's pool_buf spares (upstream's pool_table_take is the same
  idea), the ixc-based indirect mesh draw (upstream uses mdx), and their tests
  (t_pool_table, t_mesh_indirect, t_gmem_raw, finalized_bindless_pool,
  test_bnsh_nvn2, test_ndve).
- Open pull requests that upstream's landing supersedes: seedds#1394 (upstream's
  mtl_pool_addressed) and seedds#1393 pool_skip_retired (upstream's budgeted pool
  walk; the profile does not use it) are dropped with their tests and docs.
  seedds#1368's mesh pipeline prewarm is dropped too: upstream kept the background
  build in nvn_geometry.inc, and the prewarm's mtk_build / mtk_claim /
  g_warm_mps went with it.
- Kept, as upstream does not have them: NXForge's own features (GPU watchdog,
  present filters and anti-aliasing, aniso floor, quick settings, pipeline
  archive compaction, upload breakdown, memory report lines) and the still
  open pull requests seedds#1304, seedds#1305, seedds#1308, seedds#1320, seedds#1331, seedds#1332, seedds#1355, seedds#1356,
  seedds#1369, seedds#1376, seedds#1377, seedds#1379, seedds#1382, seedds#1390, seedds#1391, seedds#1392, seedds#1414, seedds#1420,
  seedds#1436, seedds#1439, seedds#1446, seedds#1453.
- Combined where both sides changed the same lines: GW_N 1 << 16 with seedds#1320's
  wide-write intervals (GW_PAGES = SBW_WPAGES, 128 slots), the CPU upload log
  with upstream's linear upload route, arch_open_end before the compaction
  limit, cbn_prog in geo_gs_one (seedds#1382).
- Translator: upstream's sources and binaries, plus seedds#1414's
  InstEmitAmpereMem diff and the LDSM SubgroupBarrier in
  InstEmitAmpereTensor.cs. The binaries and dmsh_chain.lock are upstream's
  until the Mac rebuilds them (dotnet publish, tool_lock --update-lock,
  dmsh_chain --header); dmsh_chain.h is regenerated for now.
- RED_ONCE keys: upstream took 153 and 154, so the present anti-aliasing lines
  move to 156 and 157 and seedds#1420's packaged-entry line to 158 (array 159).
- Host: hle_net.c and t_net_eventfd.c are upstream's (its eventfd poll waits
  out the whole timeout, which our 5d7920c fixed another way).
- Kept ours: dm/tools/romfs_image.py and its test, so the 26 GB RomFS image is
  not packed again.

dm/tools tests on Linux: same failures as on 875449e (Linux-only quirks),
plus test_nlg4 and test_dmsh_pool_arrays, which fail on upstream main too.
Not yet built on the Mac.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qteK29T18U8p1c9LsVY8g
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Documentation host The Horizon host: SVCs, services, threads, memory (dm/host)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants