Я пытаюсь создать свои собственные файлы ELO .o, в которые я хочу записать полосы памяти, которые указывают на другие полосы памяти. Я не хочу давать каждой полосе имя, поэтому я просто отслеживаю их положение относительно начала секции, в которой они находятся.
Итак, я создаю запись о перемещении в виде:
000000000a50 00090000000b R_X86_64_32S 0000000000000000 .section + a70
где на a50 мы ссылаемся на объект в .section + a70, используя 64-битный глобальный указатель. Раздел определяется с помощью:
9: 0000000000000000 0 SECTION LOCAL DEFAULT 6
Предыдущий вывод от readelf, и он фактически делает вид, что все в порядке ... пока я не потяну это через LD, который просто segfaults.
Я обнаружил, что если я использую тип WEAK, он работает ... но похоже, что он использует первый символ раздела, который находит во всех связанных файлах .o, в качестве цели для ВСЕХ перемещений в этом случае. Я действительно хочу, чтобы он был локальным, поэтому ЛОКАЛЬНЫМ он должен быть.
Альтернативой, которую я имею до сих пор, является просто создание символа OBJECT в начале каждого раздела, в котором есть такие объекты, но это просто кажется глупым ... Я что-то не так делаю, или в LD есть ошибка?