LINUX.ORG.RU

Компановка - Си и Ассемблер


0

0

Ситуация следующая: есть исходники на ассемблере и один на Си. Линкуются они следующим образом: есть входной файл, указанный в STARTUP в линкере(startup.S), т.е. он первый по адресам, далее идет все остальное, т.е. по секциям в выходную секцию .text. идет все секции .text из всех исходников, тоже для .data, .bss и т.д., где-то посредине вставляется секция .text из Си'шного файла. Мне же надо чтобы секция .text из Cи'шного файла была как можно ближе к началу выходного файла, скажем сразу после startup.S, но желательно без редактироваия скрипта линкера. Или может как-то можно влепить Си'шный файл в startup.S? P.S. компилятор - gcc, линкер - gnu ld.


Правильнее всего, конечно, именно поправить скрипт линкера.
В этом случае позиционирование м.б. точнейшим.
Если хочется миксить startup.S и C-файл, то, если нет
пересечения по именам, то что м.б. проще:

gcc -S something.c

и добавить
#include "something.s"

в startup.S (например, в конец), ну и makefile рихтануть.

io ★★
()
Ответ на: комментарий от io

Сегодня самостоятельно додумался именно до такого решения. Ок, а что можно сделать в скрипте линкера? Там примерно следующее:

SECTIONS
{
    .text ALIGN(0x8): *(.text)
}
, ну и rodata, sdata, data, bss в том-же духе. Вообще это общий скрипт, а компановка Си'шного файла - частный случай, поэтому хотелось-бы сохранить универсальность скрипта.

savigm
() автор топика

>Компановка

К логопеду не забудь заглянуть.

sindikat
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.