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

Модератор: Модераторы разделов

Аватара пользователя
savigm
Сообщения: 127
ОС: openSUSE

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

Сообщение savigm »

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

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

Сообщение DRUID3 »

Дам Вам еще один свой индусский совет :D ...

savigm писал(а):
14.09.2009 02:33
Или может как-то можно влепить Си'шный файл в startup.S?
P.S. компилятор - gcc, линкер - gnu ld.

Как вариант -S - даст Вам листинг на asm возьмите и сделайте его одним целым с startup.S :D .

Но вообще непонятно ограничение на редактирование скрипта линкера. Прописать там руками и все будет ОК, зачем себя мучить?
Спасибо сказали:
Аватара пользователя
savigm
Сообщения: 127
ОС: openSUSE

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

Сообщение savigm »

DRUID3 писал(а):
15.09.2009 09:27
Но вообще непонятно ограничение на редактирование скрипта линкера. Прописать там руками и все будет ОК, зачем себя мучить?

Ок, а что можно сделать со скриптом линкера? Я посмотрел мануал по gnu ld, пока идей нет.
Спасибо сказали:
Аватара пользователя
AestheteAnimus
Сообщения: 135
ОС: FreeBSD 8.0-RELEASE amd64

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

Сообщение AestheteAnimus »

savigm писал(а):
14.09.2009 02:33
Мне же надо чтобы секция .text из Cи'шного файла была как можно ближе к началу выходного файла, скажем сразу после startup.S, но желательно без редактироваия скрипта линкера. Или может как-то можно влепить Си'шный файл в startup.S?

Так что, сишный файл всего один? Тогда я бы разместил все функции в этом файле в отдельной секции (__attribute__ ((section ("section_name")))) и эту секцию разместил бы в нужном месте. К тому же, на порядок линковки влияет порядок объектных файлов в командой строке, вот только бага это или фича - я не знаю ;)

savigm писал(а):
15.09.2009 13:05
Ок, а что можно сделать со скриптом линкера?

Показать его нам. А иначе Вы вынуждаете нас заниматься гаданием на кофейной гуще.
Спасибо сказали:
Аватара пользователя
savigm
Сообщения: 127
ОС: openSUSE

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

Сообщение savigm »

AestheteAnimus писал(а):
15.09.2009 14:45
savigm писал(а):
15.09.2009 13:05
Ок, а что можно сделать со скриптом линкера?

Показать его нам. А иначе Вы вынуждаете нас заниматься гаданием на кофейной гуще.

В скрипте примерно следующее:

Код: Выделить всё

SECTIONS
{
    .text ALIGN(0x8):
        *(.text);
    .data ALIGN(0x8):
        *(.data);
    .rodata ALIGN(0x8):
        *(.rodata);
    .sdata ALIGN(0x8):
        *(.sdata);
    .bss ALIGN(0x8):
        *(.bss);
}
Спасибо сказали: