Во-первых, посмотрите, как раздел .text определен в вашем скрипте компоновщика gcc по умолчанию (так что вам не нужно создавать свой собственный), вызвав его как:
gcc -Wl,-verbose
который распечатает сценарий компоновщика по умолчанию. Мой показывает это для раздела .text:
/* text: Program code section */
.text :
{
*(.text)
*(.text.*)
*(.gnu.linkonce.t.*)
}
Таким образом, чтобы функция «main» была первой в разделе .text (а остальные были непрерывными), вы должны установить атрибут «section» для всех остальных функций. Например:
void main(void);
void funct1(....) __attribute__ ((section (".text.A")));
void funct2(....) __attribute__ ((section (".text.A")));
void funct3(....) __attribute__ ((section (".text.A")));
Достаточно «атрибутировать» прототипы функций. Таким образом, когда вы сейчас скомпилируете, «основная» функция будет первой в разделе «.text», а все остальные будут следовать сразу же по последовательным адресам.
Если вы хотите разместить раздел «.text» (т. е. «основную» функцию) по определенному адресу (например, 0x1000), не забудьте связать его с:
gcc .... -Wl,-Ttext=0x1000
person
Galland
schedule
21.01.2015