Укажите абсолютный адрес для размещения символа - PullRequest
1 голос
/ 05 марта 2012

У меня есть статическая библиотека, которую я скомпилировал, и когда я создаю исполняемые файлы, я хочу, чтобы определенная функция, которую я создал в библиотеке, всегда помещалась по фиксированному абсолютному адресу.

В частности, моя статическая библиотека представляет собой набор процедур сборки x86, и я хочу, чтобы одна из подпрограмм (называемая _start_exec) всегда находилась по фиксированному виртуальному адресу при загрузке двоичного файла ELF. Я пытался посмотреть на --defsym, хотя я не думаю, что это было то, что я хотел. Я не хочу связываться с начальной точкой исполняемого файла, я просто хочу, чтобы определенная последовательность инструкций всегда находилась по фиксированному виртуальному адресу во всех исполняемых файлах, на которые я ссылаюсь.

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Вы можете написать ld, чтобы сделать то, что вы хотите с ABSOLUTE(expr) и ADDR(section).Из документации ld:

    SECTIONS { ...
      .output1 :
        { 
        start_of_output_1 = ABSOLUTE(.);
        ...
        }
      .output :
        {
        symbol_1 = ADDR(.output1);
        symbol_2 = start_of_output_1;
        }
    ... }

Вы можете изменить приведенный выше скрипт в соответствии с вашими потребностями.

1 голос
/ 05 марта 2012

Как я уже говорил в комментариях, вам, вероятно, нужно сделать скрипт ld. См. binutils документацию по сценариям компоновщика

...