Commit Graph
35 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5 a6dd949df4 Load ELF debug info regardless of the symbol auto-save setting
bAutoSaveLoadSymbols is about writing .ppsym files back out and reading them in
again. It had also come to gate reading debug info that's simply sitting next to
the game, which is a different thing and shouldn't need asking for: the main
ELF's own symbols were already loaded unconditionally, but the companion ELF's
symbols and all line info were not.

Now the ELF is always the baseline - main or companion, symbols and line info -
and the setting only adds the .ppsym half on top of it.

Line info also loads from the module being loaded, not just from a companion,
so an ELF launched directly brings its own. A PRX has no .debug section for it
to find (prxgen strips them), so that's a cheap no-op for the usual EBOOT case,
which the companion path still covers.

That second source needs the two shapes distinguished, so AddModule takes an
explicit address delta rather than assuming a base: a companion links at zero
and wants the module's base added, while an ELF loaded at the addresses it asked
for already has final ones (bRelocate is just e_type != ET_EXEC). Rows that
don't land inside the module after that are dropped either way, which is a
better check than the old "offset smaller than the module" one.

Splitting the companion's identity check out of the symbol loader lets line info
reuse it, and drops an accidental requirement along the way: it used to reject
any companion without a symbol table, so an ELF built with -g but stripped of
its symbols would have contributed no line numbers either.

Verified with --auto-save-load-symbols off: CrossCraft's companion app.elf loads
3734 symbols and 98383 line rows where it previously loaded neither.

The direct-ELF path is not verified at runtime - it needs a bootable ELF that
carries DWARF, and there isn't one to hand. Both candidates here (pspautotests'
.elf builds and CrossCraft's own app.elf) are linked at address 0 and fail to
boot on that alone, which is pre-existing loader behaviour and nothing to do
with this.

pspautotests 314/314, UnitTest 55/55.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZq8ZtJmFY7bkX5FVkr3P9
2026-08-18 13:58:03 +02:00
Henrik RydgårdandClaude Opus 5 d72623c4a0 Load symbols from the unstripped ELF homebrew ships next to its EBOOT
Homebrew almost always ships the ELF it was built from alongside the EBOOT -
app.elf next to app.prx - but prxgen strips the symbol table on the way to the
PRX, so the module PPSSPP loads has no names at all and MIPSAnalyst calls every
function it finds z_un_<address>. Working out what any of them are meant hand-
parsing that ELF with a throwaway script, which is how the CrossCraft
relocation bug got identified.

So read it directly. On module load, scan the game's own directory for an ELF
with a symbol table and add its STT_FUNC/STT_OBJECT entries at the module's
base. CrossCraft picks up 3734 symbols, and the disassembly turns from
z_un_088c00f0 into world.init_empty, with static_allocator.alloc at the vtable
entry it calls - the two functions that took the longest to identify by hand.

Matching is the part worth getting right, since a wrong match puts confident
nonsense at real addresses, which beats having no names only in the sense that
it's worse. A candidate has to be a 32-bit ELF with a symbol table whose
highest section ends within a page of the loaded module's size - the companion
links at base 0 and covers the same image, so that's a tight check, and
unrelated ELFs sitting in the same folder fail it. Symbols outside the module
are skipped individually too.

Names go in with updateName, so they win over the analyzer's placeholders
rather than losing to whichever got there first. Gated on the existing
bAutoSaveLoadSymbols setting (off by default), which already means "keep symbol
names around for me" and avoids a directory scan per module load otherwise.

pspautotests 314/314.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZq8ZtJmFY7bkX5FVkr3P9
2026-08-18 09:32:04 +02:00
Henrik Rydgård b304fbe0c9 Build armips in libretro builds (requirement for some lua functionality) 2025-10-08 09:45:44 -06:00
Henrik Rydgård 50285f6bf6 Revert "Revert "Loader: Validate offsets and truncation in ELF.""
This reverts commit 470edac18a.
2022-10-10 13:29:09 +02:00
Henrik Rydgård 6833589e38 Update elfSize to uncompressed elf size when needed. Fixes infinite loading in Wipeout.
Also minor cleanups.
2022-10-10 12:22:05 +02:00
Henrik Rydgård 470edac18a Revert "Loader: Validate offsets and truncation in ELF."
This reverts commit 4ecdce2a37.
2022-10-10 11:42:24 +02:00
Unknown W. Brackets 4ecdce2a37 Loader: Validate offsets and truncation in ELF. 2022-10-09 16:41:32 -07:00
shenweip 807de037bb IMP sceKernelFindModuleByUID and sceKernelFindModuleByName. 2020-10-27 20:48:34 +08:00
Unknown W. Brackets 30b2d05bac Module: Correct detection of executable sections. 2018-01-02 21:53:13 -08:00
Henrik Rydgård b1b3b7c9d7 Refuse to load truncated ~PSP files. 2017-06-06 23:41:23 +02:00
Henrik Rydgård e981139e71 Some constification in ElfReader, sanity checks in sceKernelMutex. Might help #9718 a little bit, though probably not the Elf issue (and if the workarea pointer is bad, it's not likely the game will limp along for much longer) 2017-05-24 10:52:19 +02:00
Henrik Rydgard 853ea02201 Minor cleanups in elfreader 2016-09-18 23:11:41 +02:00
Lioncash f830d5dec7 Core: Mark some functions as const 2014-12-03 15:16:11 -05:00
Unknown W. Brackets 71e8c0f6e0 Sum all .bss* sections when counting bss size. 2014-08-17 14:25:58 -07:00
Unknown W. Brackets 1d310ad8bb Allocate module memory from top/bottom per request. 2014-08-17 14:25:54 -07:00
Unknown W. Brackets 4a94a30ba6 Calculate the module info data/text/bss size. 2014-07-13 19:53:00 -07:00
Unknown W. Brackets 1c7873e2f5 Fill the module info segment addresses and sizes. 2014-07-13 19:16:25 -07:00
Henrik Rydgård 00c32ddadb Mostly get rid of including "Globals.h" 2013-12-30 10:17:11 +01:00
Unknown W. Brackets 1f32720d8f Return much more correct values for module info.
sceKernelQueryModuleInfo() was just completely wrong before.
2013-12-09 00:45:54 -08:00
Henrik Rydgard 32f479b0a6 Assorted log spam reductions.
Also let Java know of some important events. Not used for anything yet.
2013-12-04 17:43:00 +01:00
Henrik Rydgard 9d4ece0f58 Robustify the ELF loader a little - it didn't like unaligned addresses.. 2013-11-14 11:44:14 +01:00
Kingcom 7f1fca8e74 Check e_ident of elf header 2013-10-05 10:05:55 +02:00
Unknown W. Brackets 0b5bdeb1d3 Fix some compile failures under big endian. 2013-07-28 21:04:17 -07:00
Unknown W. Brackets ae5851a393 Use _le typedefs in elf reading. 2013-07-25 08:04:35 -07:00
Unknown W. Brackets cc647ed910 Add logging of more relocation errors. 2013-06-01 09:29:38 -07:00
tpu cf8309b783 add relocate type 0x700000a1 support 2013-05-31 18:34:47 +08:00
Unknown W. Brackets acac847af2 Cleanup sceKernelGetModuleIdByAddress().
Actual firmware seems to accept any address in the range, and also
correct the error result.

Now people won't think this is broken anymore.
2013-04-10 21:03:43 -07:00
Henrik Rydgard 8277d901e2 Smash some memory leaks 2013-01-13 16:46:45 +01:00
Arthur Blot 8ed8f57a7f Hopefully fix all the ELF loading issues 2012-12-28 01:07:19 +01:00
Arthur Blot a7af13b523 Implemented classic segment relocations 2012-12-27 21:32:12 +01:00
Arthur Blot d0542e3531 Fixed a few issues related to encrypted PRXes 2012-11-05 16:56:40 +01:00
Henrik Rydgard 6bed1afb72 Merge branch 'master' of https://github.com/artart78/ppsspp into artart78-master 2012-11-04 23:59:26 +01:00
Henrik Rydgard 64cc573703 Switch to "GPL 2.0 or later" for various reasons. I wrote most of the code I imported from Dolphin (which is GPL2-but-not-later), so it should be OK. 2012-11-04 23:24:00 +01:00
Arthur Blot 9be8be6b7f Implemented sceKernelLoadModule()
Note that it wasn't tested because all the games I tested had other problems (already implemented modules, encrypted modules, using different functions etc).
But code looks good so it'd probably need few (no?) fixes.
2012-11-04 19:01:20 +01:00
Henrik Rydgard 4f7ad15758 Add snapshot of the whole source code. 2012-11-01 16:19:01 +01:00