Коллеги, как можно установить вручную адрес секции .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:
Но с таким скриптом сборки переменные налазят на константный массив и занимают с ним одно адресное пространство. Помогает ALIGN:Код: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 = .; }
В общем, нужен хороший совет. Как сделать, чтобы секция .data ложилась сразу после секции кода?




Ответить с цитированием