Skip to content
Open
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
cc4e86e
feat(ghidra): record the RISC-V float-ABI calling-convention decision
Entrpi Oct 27, 2026
a11b43c
feat(ghidra): admit RISC-V ilp32 ELF with a derived calling convention
Entrpi Oct 27, 2026
4a09705
test(ghidra): verify RISC-V ilp32 against real Ghidra
Entrpi Oct 27, 2026
383b87c
fix(ghidra): pass RISC-V ilp32 values over 8 bytes by reference
Entrpi Oct 28, 2026
244c423
feat(ghidra): record the RISC-V ilp32f calling-convention decision
Entrpi Oct 28, 2026
88c82b8
feat(ghidra): apply the RISC-V ilp32f calling convention in the bridge
Entrpi Oct 28, 2026
4f97b92
test(ghidra): verify RISC-V ilp32f against real Ghidra
Entrpi Oct 28, 2026
bbe7410
Merge upstream main into feat-ghidra-riscv-ilp32
Entrpi Oct 30, 2026
51419dc
Merge feat-ghidra-riscv-ilp32 into feat-ghidra-riscv-ilp32f
Entrpi Oct 30, 2026
1515524
test(ghidra): check RISC-V lane limitations by their facts
Entrpi Oct 30, 2026
5fd1774
Merge feat-ghidra-riscv-ilp32 into feat-ghidra-riscv-ilp32f
Entrpi Oct 30, 2026
6940199
test(ghidra): check the ilp32f limitations by their facts
Entrpi Oct 30, 2026
656badf
Merge upstream main into feat-ghidra-riscv-ilp32
Entrpi Oct 30, 2026
d02fc6b
test(ghidra): check return storage in stripped RISC-V ilp32 builds
Entrpi Oct 30, 2026
688c1d5
Merge feat-ghidra-riscv-ilp32 into feat-ghidra-riscv-ilp32f
Entrpi Oct 30, 2026
d8ae325
docs(ghidra): record decision D3 as decided in #7477
Entrpi Oct 31, 2026
2db1fa8
Merge feat-ghidra-riscv-ilp32 into feat-ghidra-riscv-ilp32f
Entrpi Oct 31, 2026
8acebd1
Merge upstream main e6d061897 into feat-ghidra-riscv-ilp32f
Entrpi Oct 31, 2026
a5c020a
Merge #8229's squash e669365c3 into feat-ghidra-riscv-ilp32f
Entrpi Oct 31, 2026
ba174af
Merge upstream main 6e9ee97a6 into feat-ghidra-riscv-ilp32f
Entrpi Oct 31, 2026
bfef697
Merge upstream main into feat-ghidra-riscv-ilp32f
Entrpi Nov 1, 2026
b8e5da9
fix(ghidra): flatten RISC-V arrays and bit-fields as the psABI does
Entrpi Nov 4, 2026
87fdfc8
Merge upstream main into feat-ghidra-riscv-ilp32f
Entrpi Nov 4, 2026
0933597
fix(ghidra): refuse flexible array members in ilp32f signatures
Entrpi Nov 4, 2026
042d25f
docs(ghidra): state that hidden-reference C++ classes are not modelled
Entrpi Nov 4, 2026
c6659e3
fix(ghidra): refuse ilp32f shapes and D hardware the prototype misplaces
Entrpi Nov 4, 2026
ef3ea15
fix(ghidra): refuse ilp32f values Ghidra left untyped
Entrpi Nov 4, 2026
808271a
docs(ghidra): match the RISC-V verification notes to the lane
Entrpi Nov 4, 2026
7f54aca
Merge upstream main into feat-ghidra-riscv-ilp32f
Entrpi Nov 5, 2026
c6345b0
fix(ghidra): refuse padded untyped RISC-V values
Entrpi Nov 5, 2026
cca4435
fix(ghidra): walk each RISC-V field type once
Entrpi Nov 5, 2026
82a28e5
Merge main into feat-ghidra-riscv-ilp32f
Entrpi Nov 8, 2026
a1fddbe
Merge main into feat-ghidra-riscv-ilp32f
Entrpi Nov 9, 2026
823083f
fix(ghidra): refuse ilp32f values whose bytes may hide a bit-field
Entrpi Nov 9, 2026
4d7f0f6
perf(ghidra): cache the ilp32f layout checks per type, document padding
Entrpi Nov 9, 2026
4748c92
Merge main into feat-ghidra-riscv-ilp32f
Entrpi Nov 9, 2026
4edcda1
Merge remote-tracking branch 'origin/main' into feat-ghidra-riscv-ilp32f
Entrpi Nov 11, 2026
719f3d2
fix(ghidra): refuse ilp32f union parameters that may be transparent
Entrpi Nov 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
331 changes: 298 additions & 33 deletions bridge/ghidra/ReaGhidraRiscvCallingConvention.java

Large diffs are not rendered by default.

265 changes: 179 additions & 86 deletions docs/ghidra-riscv.md

Large diffs are not rendered by default.

22 changes: 11 additions & 11 deletions docs/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -1077,17 +1077,17 @@ installation (`application.java.min` through `application.java.max`). Current
12.1 releases require JDK 21 or newer and set no maximum. The lanes below still
prove behavior on the verified Ghidra 12.1.4 and JDK 21 build.

| Ghidra lane | Supported runner/target | Additional local tools |
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| `npm run verify:ghidra` | Linux x64/arm64 ELF or macOS x64/arm64 Mach-O | Host C compiler, Ghidra 12.1.4, and full JDK 21 |
| `npm run verify:ghidra:seeds` | POSIX; raw x86 fixture; seed ordering, BSS labels, analyzer readback, not-applicable and unknown analyzer names | Ghidra 12.1.4 and full JDK 21 |
| `npm run verify:ghidra:swift` | macOS x64/arm64 Mach-O | Host Swift compiler, Ghidra 12.1.4, and full JDK 21 |
| `npm run verify:ghidra:riscv` | Linux/macOS x64/arm64 host; source-owned RV32/RV64 double-float and RV32 ilp32 ELF through CLI and MCP | RISC-V Clang, LLD, LLVM readelf and objdump, Ghidra 12.1.4, and full JDK 21 |
| `npm run verify:ghidra:switch` | Linux x64 ELF; GCC/Clang optimized and stripped switch fixtures | GCC, Clang, GNU nm/objdump/strip, Ghidra 12.1.4, and full JDK 21 |
| `npm run verify:ghidra:aarch64-jump-table` | Any supported Ghidra host; AArch64 ELF; signed/unsigned byte/halfword tables; host ARM64 Mach-O | Clang with AArch64 target support, Ghidra 12.1.4, and full JDK 21 |
| `npm run verify:ghidra:cross-format` | Any supported Ghidra host; also analyzes AArch64 ELF, x86-64 PE, and x86-64 Mach-O | `clang`, LLD, and `lld-link` in addition to host-lane prerequisites |
| `npm run verify:ghidra:windows` | Controlled Windows x64 with native x86-64 PE; `-- --x86` selects native x86 PE | Ghidra 12.1.4, full JDK 21, and the matching native artifact |
| `npm run verify:ghidra:dol` | Any supported Ghidra host; source-owned PowerPC GameCube DOL fixture built from a linker script (never executed) | Clang with PowerPC target, LLD, GNU readelf, Ghidra 12.1.4, and full JDK 21 |
| Ghidra lane | Supported runner/target | Additional local tools |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| `npm run verify:ghidra` | Linux x64/arm64 ELF or macOS x64/arm64 Mach-O | Host C compiler, Ghidra 12.1.4, and full JDK 21 |
| `npm run verify:ghidra:seeds` | POSIX; raw x86 fixture; seed ordering, BSS labels, analyzer readback, not-applicable and unknown analyzer names | Ghidra 12.1.4 and full JDK 21 |
| `npm run verify:ghidra:swift` | macOS x64/arm64 Mach-O | Host Swift compiler, Ghidra 12.1.4, and full JDK 21 |
| `npm run verify:ghidra:riscv` | Linux/macOS x64/arm64 host; source-owned RV32/RV64 double-float and RV32 ilp32 and ilp32f ELF through CLI and MCP | RISC-V Clang, LLD, LLVM readelf and objdump, Ghidra 12.1.4, and full JDK 21 |
| `npm run verify:ghidra:switch` | Linux x64 ELF; GCC/Clang optimized and stripped switch fixtures | GCC, Clang, GNU nm/objdump/strip, Ghidra 12.1.4, and full JDK 21 |
| `npm run verify:ghidra:aarch64-jump-table` | Any supported Ghidra host; AArch64 ELF; signed/unsigned byte/halfword tables; host ARM64 Mach-O | Clang with AArch64 target support, Ghidra 12.1.4, and full JDK 21 |
| `npm run verify:ghidra:cross-format` | Any supported Ghidra host; also analyzes AArch64 ELF, x86-64 PE, and x86-64 Mach-O | `clang`, LLD, and `lld-link` in addition to host-lane prerequisites |
| `npm run verify:ghidra:windows` | Controlled Windows x64 with native x86-64 PE; `-- --x86` selects native x86 PE | Ghidra 12.1.4, full JDK 21, and the matching native artifact |
| `npm run verify:ghidra:dol` | Any supported Ghidra host; source-owned PowerPC GameCube DOL fixture built from a linker script (never executed) | Clang with PowerPC target, LLD, GNU readelf, Ghidra 12.1.4, and full JDK 21 |

The optional Swift lane compiles a source-owned fixture and checks modern and
provider-demangled procedure names through real stdio MCP, with and without the
Expand Down
Loading
Loading