оригинальное сообщение
MEMORY {
TEST_SECTION: ORIGIN = 0x43840000 LENGTH = 0x50
}
SECTIONS{
.testsection: > TEST_SECTION
}
В будущем отметьте строку, на которую жалуется инструмент, по крайней мере, первая ошибка. также добавьте больше текста к вопросу, показывающему прогресс проблемы, чтобы комментарии и другие вещи имели смысл для читателей в будущем. вместо того, чтобы просто исправить код в вопросе, добавьте вторую копию внизу, показывающую первое исправление, и новую строку, показывающую ошибку, спасибо.
решение
MEMORY {
TEST_SECTION: ORIGIN = 0x43840000, LENGTH = 0x50
}
SECTIONS{
.testsection: { *(.testsection*) } > TEST_SECTION
}
Я думаю, что это было отсутствуют две вещи
Во-первых, запятая между значением источника и длиной.
Во-вторых, отсутствовала команда раздела. Я не думаю, что синтаксис сценария компоновщика GNU допускает это, вам, вероятно, нужно что-то добавить туда, чтобы это было полезно. Вы можете попробовать
.testsection: { } > TEST_SECTION
, но я думаю, не пытаясь это сделать, вы ничего не получите в этой памяти.
РЕДАКТИРОВАТЬ
после проведения эксперимента:
so.s
.text
add r0,r0,r0
add r1,r2,r3
add r1,r1,r1
add r2,r2,r2
so.ld
MEMORY
{
bob : ORIGIN = 0x30000000, LENGTH = 0x1000
ted : ORIGIN = 0x20000000, LENGTH = 0x1000
}
SECTIONS
{
.hello : { *(.text*) } > bob
.world : { } > ted
.text : { } > ted
}
Disassembly of section .hello:
30000000 <.hello>:
30000000: e0800000 add r0, r0, r0
30000004: e0821003 add r1, r2, r3
30000008: e0811001 add r1, r1, r1
3000000c: e0822002 add r2, r2, r2
как я и подозревал, сначала я уже ввел новые имена в MEMORY, как вы хотите, как вы видели RAM, ROM и т. Д. c не являются специальными именами, просто не могут использовать зарезервированные имена, если таковые имеются. Я подозревал, что РАЗДЕЛЫ работают так же, как слева - новое имя, которое вы создаете для вывода. Это встроенное и связанное просто отлично (не настоящая программа, очевидно, достаточная для того, чтобы получить инструменты для демонстрации).
Компоновщик не жаловался, но в то же время, так как тогда в ted фактически ничего не помещалось ничего не было помещено в это пространство памяти в выходном двоичном файле. .hello и .text не должны совпадать, одно - это выходное имя, одно - входное имя, очень часто простые люди заставляют их совпадать, зачем создавать новое имя. Это было сделано здесь только в демонстрационных целях, чтобы показать, что при использовании того же имени слева автоматически не включается раздел ввода в вывод.
Я настоятельно рекомендую проводить подобные эксперименты и использовать такие инструменты, как readelf и objdump и другие, чтобы изучить, что происходит. (а также чтение документации по языку сценариев).