Install: the launcher accepts a romfs folder with no game files in it, and the build crashes at boot (indirect call to 0x1000200000000) #467

Closed
opened 2026-11-14 15:57:33 +00:00 by akreao · 0 comments

What you used

Linux AppImage

Version

Launcher nightly-30-286144f5, Longshot nightly-133-55e5599c (source dd3d611f); also nightly-132-5e072fc8

Channel

Nightly

Where it stopped

Starting the game

The error

[hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8bc8, thread sead::MainThread)
[hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8c20, thread sead::MainThread)
[hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8c4c, thread sead::MainThread)
[hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8c78, thread sead::MainThread)
[hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8ca4, thread sead::MainThread)
[hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8cd0, thread sead::MainThread)
[hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8d54, thread sead::MainThread)
[hos sead::MainThread] FATAL: indirect call to an address with no function at 0x1000200000000 (insn 00000000) (lr 0x836d8de8 sp 0x10faf10)
[hos] guest backtrace: lr 0x836d8de8 0x83bb7610 0x83b7b47c 0x83b7a838 0x83b79e88 0x802eaad8 0x80966920 0x80966840 0x80966780 0x80f48d04 0x81223200 0

Operating system and free space on the output drive

CachyOS (Linux 7.3.3), 217 GB free (btrfs)

Visual Studio or Build Tools version, and Windows SDK version

No response

Log

What happened

I set the launcher's romfs to a folder that did not hold the extracted romfs. It held another tool's packed copy (NX2Navi's format): just index.json and a single 25 GB romfs.bin. The launcher accepted the folder and the build finished, hard-linking those two files into <build>/romfs. The game then crashed every time at boot with the error above.

The exefs build ids match the supported version (main e0f3ccfa…, sdk 1643a838…, subsdk0 b0110087…, rtld 8e213f22…), so the dump itself was fine. Only the romfs folder was wrong.

Cause

With HOS_TRACE=1, the game can't find its own system files:

fs: OpenFile(content:/System/HeapSize/Product.Nin_Ounce_NVN2.HeapDef.byml.zs): not found
fs: OpenFile(content:/System/HeapSize/Default.Nin_Ounce_NVN2.HeapDef.byml.zs): not found
fs: OpenFile(content:/System/RegionLangMask.txt): not found
fs: OpenFile(content:/System/GameRomConfig/Product.game__RomConfig.bgyml): not found
fs: OpenFile(content:/System/AddressTable/All.dev.Nin_Ounce_NVN2.atbl.byml.zs): not found

With no HeapDef, the function at 0x836d8ad0 calls sead::ExpHeap::create(0, "ares::System", parent, 8, …) on a parent heap with no free space. That returns null and the game doesn't check it. Low guest memory reads back as zeros, so the vtable calls through it become the "skipped an indirect call to 0" lines. The last one, vtable[16] at 0x836d8de4, reads garbage (0x1000200000000) and the game stops.

Suggestion

The launcher (or nx2/make_game.py) could check the romfs before building and refuse a folder that is missing System/HeapSize/Product.Nin_Ounce_NVN2.HeapDef.byml.zs, or that has far fewer files than the expected ~186,583. It could also recognise an index.json + romfs.bin pair and explain that this is a packed copy that has to be extracted first. Right now the build takes about 15 minutes and 27 GB, and the only symptom is an unexplained crash at boot.

Log

The full longshot_log.txt is the error above, preceded by the normal boot lines (nothing else unusual).

Before you send it

  • It still fails on the newest release.
  • I searched the open issues for this error.
  • I'm not attaching game files or anything built from them.
### What you used Linux AppImage ### Version Launcher nightly-30-286144f5, Longshot nightly-133-55e5599c (source dd3d611f); also nightly-132-5e072fc8 ### Channel Nightly ### Where it stopped Starting the game ### The error ```text [hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8bc8, thread sead::MainThread) [hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8c20, thread sead::MainThread) [hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8c4c, thread sead::MainThread) [hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8c78, thread sead::MainThread) [hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8ca4, thread sead::MainThread) [hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8cd0, thread sead::MainThread) [hos sead::MainThread] skipped an indirect call to 0 (lr 0x836d8d54, thread sead::MainThread) [hos sead::MainThread] FATAL: indirect call to an address with no function at 0x1000200000000 (insn 00000000) (lr 0x836d8de8 sp 0x10faf10) [hos] guest backtrace: lr 0x836d8de8 0x83bb7610 0x83b7b47c 0x83b7a838 0x83b79e88 0x802eaad8 0x80966920 0x80966840 0x80966780 0x80f48d04 0x81223200 0 ``` ### Operating system and free space on the output drive CachyOS (Linux 7.3.3), 217 GB free (btrfs) ### Visual Studio or Build Tools version, and Windows SDK version _No response_ ### Log ### What happened I set the launcher's romfs to a folder that did not hold the extracted romfs. It held another tool's packed copy (NX2Navi's format): just `index.json` and a single 25 GB `romfs.bin`. The launcher accepted the folder and the build finished, hard-linking those two files into `<build>/romfs`. The game then crashed every time at boot with the error above. The exefs build ids match the supported version (main `e0f3ccfa…`, sdk `1643a838…`, subsdk0 `b0110087…`, rtld `8e213f22…`), so the dump itself was fine. Only the romfs folder was wrong. ### Cause With `HOS_TRACE=1`, the game can't find its own system files: ```text fs: OpenFile(content:/System/HeapSize/Product.Nin_Ounce_NVN2.HeapDef.byml.zs): not found fs: OpenFile(content:/System/HeapSize/Default.Nin_Ounce_NVN2.HeapDef.byml.zs): not found fs: OpenFile(content:/System/RegionLangMask.txt): not found fs: OpenFile(content:/System/GameRomConfig/Product.game__RomConfig.bgyml): not found fs: OpenFile(content:/System/AddressTable/All.dev.Nin_Ounce_NVN2.atbl.byml.zs): not found ``` With no HeapDef, the function at 0x836d8ad0 calls `sead::ExpHeap::create(0, "ares::System", parent, 8, …)` on a parent heap with no free space. That returns null and the game doesn't check it. Low guest memory reads back as zeros, so the vtable calls through it become the "skipped an indirect call to 0" lines. The last one, `vtable[16]` at 0x836d8de4, reads garbage (0x1000200000000) and the game stops. ### Suggestion The launcher (or `nx2/make_game.py`) could check the romfs before building and refuse a folder that is missing `System/HeapSize/Product.Nin_Ounce_NVN2.HeapDef.byml.zs`, or that has far fewer files than the expected ~186,583. It could also recognise an `index.json` + `romfs.bin` pair and explain that this is a packed copy that has to be extracted first. Right now the build takes about 15 minutes and 27 GB, and the only symptom is an unexplained crash at boot. ### Log The full `longshot_log.txt` is the error above, preceded by the normal boot lines (nothing else unusual). ### Before you send it - [x] It still fails on the newest release. - [x] I searched the open issues for this error. - [x] I'm not attaching game files or anything built from them.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot#467
No description provided.