Il compilatore mette le costanti literal nella sezione .rodata e quindi rende il codice della funzione dipendente da quella sezione.
Dato che le costanti sono tutte literal mi piacerebbe che il compilatore le mescolasse con il codice eseguibile (come fa con le costanti intere) in modo da poter caricare e spostare facilmente il codice senza dipendere da altre sezioni.
E' fattibile?
EDIT
Vorrei ottenere lo stesso risultato che produce con gli interi
codice:
void _start (int *i, int *o, int *m)
{
i[0] = m[0] + 3;
}
codice:
$ gcc -O3 -c code.c
$ objdump -d code.o
code.o: formato del file elf64-x86-64
Disassemblamento della sezione .text:
0000000000000000 <_start>:
0: 8b 02 mov (%rdx),%eax
2: 83 c0 03 add $0x3,%eax
5: 89 07 mov %eax,(%rdi)
7: c3 retq
in questo caso la costante 3 è nel codice eseguibile non in un'altra sezione