Na ez tök kafa, ha jól értem, így maradtál a gyári linker scriptnél, ami jó, mert kevesebb szívás.
Ja, egy megjegyzés: mivel fix toolchain-t használsz, ezért valószínűleg nálad nem gond, de én belefutottam már abba, hogy nem minden linker szereti a "naked" attribútumot (*khm* LLVM/lld).
Hosszas trial-and-error után ez oldotta meg nálam, hogy naked nélkül is garantáltan ne legyen function prologue se function epilogue (gcc-vel is megy):
void __attribute__((noreturn)) _startup(void) {
/* inline assembly-vel kezelve a vermet és a _start hívást meg a visszatérést */
asm volatile(...);
__builtin_unreachable();
}
Iszonyat csúnya, de mivel híváskor nincs még verem, így az inline assembly rész az, ahol a vermet beállítom, emiatt pedig ugye nem lehet function prologue, mert az már használni akarná.