( apal | 2024. 01. 17., sze – 00:38 )

Kozben meg a ((section(...))) trukkozessel sikerult egy ilyesmit kifundalni:

void __attribute__((section(".text.unlikely"), naked, used, retain)) _startup(void);
void _start(void);
void _startup(void)
{
 /* __asm__ ("j _start\n"); */
 _start();
}

Hogy miert unlikely, na az is egy jo dilemma, de az xPack eseten a gyari linker script (elf32lriscv.xn) az ilyen:

  .text           :
  {
    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
    *(.text.exit .text.exit.*)
    *(.text.startup .text.startup.*)
    *(.text.hot .text.hot.*)
    *(SORT(.text.sorted.*))
    *(.text .stub .text.* .gnu.linkonce.t.*)
    /* .gnu.warning sections are handled specially by elf.em.  */
    *(.gnu.warning)
  }

Az osszes tobbi (.startup, .start, .init) az nem jott be, maradt az unlikely... 

Az mas kerdes hogy ez sem jo megoldas, mert pl ez a newlib-es libc szereti hasznalni az ecall-okat ugy bele a vakvilagba, ami meg szinten tobb egyeb kerdest vet fel :/ de az mar (kicsit) mas tema.