Я не думаю, что это можно сделать только с ld
и скриптом компоновщика. С учетом этой линии от here:
Если имя файла соответствует более чем одному шаблону, или если имя файла появляется в явном виде и также подкреплен подстановочные паттерна, компоновщик будет использовать первый матч в скрипт компоновщика.
Похоже, что скрипт компоновщика будет помещать только данные (или что-либо) в один раздел.
Однако всякая надежда не потеряна. Вы можете скопировать раздел с помощью objcopy
, а затем добавить раздел с помощью objcopy
снова
objcopy -O binary --only-section=.data your-file temp.bin
objcopy --add-section .dummydata=temp.bin your-file
Это добавит раздел, чтобы последняя секция с VMA/ЛМ 0. Вы можете использовать objcopy
переместить раздел в желаемое местоположение.
objcopy --change-section-address .dummydata=desired-address your-file
Конечно, если что-то уже существует, это было бы проблематично. К счастью, вы можете создать отверстие сразу после первого .data
что-то вроде:
data_start = .;
.data : { *(.data) }
data_end = .;
. += (data_end - data_start);
Это должно создать отверстие сразу после первых данных, достаточно большой, чтобы поместить еще одну копию данных сразу после него. Если это не совсем то, куда вы хотите, просто добавьте (data_end - data_start)
, где вы хотите отверстие.
Наконец, вы можете изменить раздел флаги, снова objcopy
objcopy --set-section-flags .dummydata=the-flags-you-want your-file
не как чистый, как только что-то дублируя в скрипте линкера, но он должен работать.
И почему вы думаете, что хотите сделать это? Это похоже на [проблема XY] (http://mywiki.wooledge.org/XyProblem). –
@Jonathan Моя платформа ожидает, что копия содержимого раздела данных будет загружена в предопределенное местоположение, чтобы использовать его в качестве данных ПЗУ. В основном это соглашение было до сих пор связано с цепочкой инструментов компилятора третьей стороны, но мы хотим сейчас перейти на цепочку инструментов GNU с открытым исходным кодом. Существует возможность изменить код сборки, который работает с данными ПЗУ, чтобы удовлетворить требованиям этой новой версии нашего изображения ELF для загрузки, но я не хочу нарушать код сборки, поэтому я хочу достичь этого с помощью создание дублирующей копии раздела данных в скрипте компоновщика. –
Удачи! Я не знаю, что это невозможно, но я не знаю, как это сделать. –