Перемещаемые символы в формате ELF (язык ассемблера) - PullRequest
10 голосов
/ 06 декабря 2008

Мы разрабатываем порт GNU Assembler для клиентской архитектуры. Теперь проблема в том, что:

Если непосредственным операндом для инструкции является выражение, содержащее более одного перемещаемого символа, как это обрабатывается в выходном файле в формате elf. Какова будет информация о переезде в таком случае?

Например:

j label1 + label2

где label1 и label2 определены в перемещаемых разделах, это могут быть одинаковые разделы или разные перемещаемые разделы.

Ответы [ 3 ]

7 голосов
/ 07 декабря 2008

ELF не знает инструкций как таковых. Он знает о конкретных кодировках смещения символов в инструкциях. В ассемблере вам потребуется вывести две записи перемещения, каждая с соответствующим триплетом [адрес, тип, символ], чтобы правильно исправить эту часть инструкции. Компоновщик не обязательно знает, что эти две записи указывают на одну и ту же инструкцию.

Типы перемещений ELF полностью зависят от ЦП (или, если быть более точным, зависят от ISA), поэтому вы можете свободно определять любые перемещения, необходимые для новой архитектуры.

Трудно быть более конкретным без подробностей кодировки инструкций.

0 голосов
/ 07 декабря 2008

Я ожидаю одну запись на адрес для каждой инструкции, которая требует перемещения.

Objdump мог бы отображать таблицу перемещения исполняемого или объектного файла, но я не знаю флаги от руки.

Мое предложение состоит в том, чтобы попытаться выкопать инструкцию x86 (или другую CISC), которая делает нечто похожее на то, что делает ваша клиентская арка, и посмотреть, какие перемещения генерируются, когда вы собираете / связываете ее.

0 голосов
/ 06 декабря 2008

Я знаю Джека об ELF и немного больше о связывании, но ...

Я ожидаю, что каждый операнд обрабатывается так же, как если бы был только один.

OTOH может быть проблема в том, что формат для j меняется в зависимости от того, где находятся метки? Если это так, я думаю , что вы затонули, так как линкеры недостаточно умны, чтобы делать подобные вещи (система сборки ADA IIRC может быть умнее, чем большинство, так что вы можете посмотреть на это).

...