* feat(ghidra): admit 32-bit big-endian PowerPC ELF Recognize EM_PPC as a provider-neutral `powerpc` family that keeps its ELF class, byte order, type and flags, and admit ELF32 big-endian ET_EXEC through a bounded Ghidra lane. ELF64, little-endian, relocatable/shared objects and EF_PPC_EMB are refused with a specific reason; Hopper and IDA do not gain PowerPC support, and Windows Ghidra P0 is unchanged. Ghidra's ELF loader selects PowerPC:BE:32:e500:default for a plain EM_PPC header, which misreads 750-family code. The lane binds PowerPC:BE:32:default/default in the profile (language_selection "admitted-lane-v1"), imports with it and checks the reported language. A language set through REA_GHIDRA_LANGUAGE_ID still replaces the lane default. Add a source-owned fixture, fixed-encoding probe, GNU readelf cross-check and the optional `verify:ghidra:ppc` real-provider lane, plus docs/ghidra-ppc.md. Refs #1741 * style(ghidra): format shared PowerPC profile integration * fix(ghidra): preserve caller-selected PowerPC languages --------- Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>
15 lines
524 B
C
15 lines
524 B
C
/* Freestanding, source-owned static-analysis fixture. Never executed by REA. */
|
|
volatile unsigned int rea_ppc_global = 7;
|
|
const char rea_ppc_marker[] = "rea-ppc-source-owned-fixture";
|
|
|
|
__attribute__((noinline)) unsigned int rea_ppc_leaf(unsigned int value)
|
|
{
|
|
return value * 3u + rea_ppc_global;
|
|
}
|
|
|
|
__attribute__((noinline)) unsigned int rea_ppc_entry(unsigned int selector)
|
|
{
|
|
unsigned int adjusted = selector > 10u ? selector : selector + 1u;
|
|
return rea_ppc_leaf(adjusted) + (unsigned char)rea_ppc_marker[0];
|
|
}
|