Коллеги, как можно установить вручную адрес секции .data? У меня .data всегда устанавливается в адрес (.code + 0x2000)
Хотя по содержимому скрипта pdp11-aout.ld этого и не скажешь.
То есть, когда юзаются библиотеки с переменными, я получаю бинарник от 8 Кб.
Простые неинициализированные переменные в .data ложатся раньше константного массива.
Если выкусить секцию .data вообще:
Код:
pdp11-aout-objcopy.exe --only-section .text --output-target binary %1.out ..\%1.bin
то мы получаем нормальный маленький бинарь, но константные массивы тоже выкусываются.
В идеале хотелось бы, чтобы константный массив ложился в секцию .data раньше, чем неинициализированные переменные (чтобы не увеличивать ими размер бинаря).
Пробовал пихать код и данные в одну секцию .text:
Код:
OUTPUT_FORMAT("a.out-pdp11")
ENTRY(start)
phys = 00001000;
SECTIONS
{
.text phys : AT(phys) {
code = .;
*(.text)
*(.rodata);
data = .;
*(.data)
}
end = .;
}
Но с таким скриптом сборки переменные налазят на константный массив и занимают с ним одно адресное пространство. Помогает ALIGN:
Код:
OUTPUT_FORMAT("a.out-pdp11")
ENTRY(start)
phys = 00001000;
SECTIONS
{
.text phys : AT(phys) {
code = .;
*(.text)
*(.rodata)
. = ALIGN(0100);
data = .;
*(.data)
}
end = .;
}
Но при таком решении приходится регулировать размер в ALIGN ручками, чтобы константный массив не налазил на переменные.
В общем, нужен хороший совет. Как сделать, чтобы секция .data ложилась сразу после секции кода?