Нет необходимости в написании более одной команды SECTIONS
или MEMORY
в сценарии компоновщика.
SECTIONS
{
/* Commands... */
}
SECTIONS
{
/* More commands... */
}
эквивалентно:
SECTIONS
{
/* Commands... */
/* More commands... */
}
и аналогично для MEMORY
.
Тем не менее, поддерживаемость нетривиального тела сценариев-компоновщиков поддерживается, если сценарий компоновщика может включать несколько SECTIONS
илиMEMORY
команд.Например, если:
foobar.lds (1)
MEMORY
{
FOOMEM (rx) : ORIGIN = 0x000FB000, LENGTH = 0x05000
BARMEM (r) : ORIGIN = 0x000FA000, LENGTH = 0x01000
}
SECTIONS
{
.foo : {
*(.foo)
} > FOOMEM
.bar : {
*(.bar)
} > BARMEM
}
были чем-то гораздо менее тривиальным, чем оно есть, лучше было бы реорганизовать его следующим образом:
foobar.lds (2)
INCLUDE ./foo.lds
INCLUDE ./bar.lds
foo.lds
MEMORY
{
FOOMEM (rx) : ORIGIN = 0x000FB000, LENGTH = 0x05000
}
SECTIONS
{
.foo : {
*(.foo)
} > FOOMEM
}
bar.lds
MEMORY
{
BARMEM (r) : ORIGIN = 0x000FA000, LENGTH = 0x01000
}
SECTIONS
{
.bar : {
*(.bar)
} > BARMEM
}
, чтобы компоновщик foobar.lds
(2) расширялся до
foobar.lds (3)
MEMORY
{
FOOMEM (rx) : ORIGIN = 0x000FB000, LENGTH = 0x05000
}
SECTIONS
{
.foo : {
*(.foo)
} > FOOMEM
}
MEMORY
{
BARMEM (r) : ORIGIN = 0x000FA000, LENGTH = 0x01000
}
SECTIONS
{
.bar : {
*(.bar)
} > BARMEM
}
Историческая справка: В этом устаревшем руководстве GNU ld
из давно минувших дней мы можем найти ограничения:
Вы можете использовать не более одного РАЗДЕЛАкоманды в файле сценария, но вы можете иметь в ней столько операторов, сколько пожелаете.
и:
Файл команды может содержать не более одного использованияКоманда ПАМЯТЬ;однако вы можете определить столько блоков памяти внутри него, сколько пожелаете.
, которые отсутствуют в текущего руководства .