LINUX.ORG.RU

Размер секции в elf-файле


0

0

Вопрос к знатокам binutils

Каким образом можно сделать так, чтобы после линковки заданная секция в результирующем файле имела размер, кратный заданному? Или хотя бы чтобы начала всех секций были выровнены по адресам, кратным заданному? Нужно для того, чтобы можно было работать с данными, расположенными в этой секции, блоками по N байт, не залезая при этом в данные других секций.

★★

ld -T myldscript foobar.o stuff.o -o stuff

myldscript:
OUTPUT_FORMAT("elf32-i386")
ENTRY(your_entry_point)

SECTIONS
{
. = this_address;

.text : AT(ADDR(.text) - this_address)
{
*(.text);
}

. = ALIGN(0xYOUR_ALIGN_ADDRESS);

.data : AT(ADDR(.data) - this_address)
{
*(.data);
*(.rodata);
}

. = ALIGN(0xYOUR_ALIGN_ADDRESS);

.bss : AT(ADDR(.bss) - this_address)
{
*(COMMON);
*(.bss);
}

. = ALIGN(0xYOUR_ALIGN_ADDRESS);

.your_section : AT(where_you_want)
{
// CONTEXT
}
}

asgard
()

Спасибо, сделал проще - взял стандартный ldscript и добавил туда описание для своей секции (просто добавил после неё нужное количество нулевых данных). Приведённый выше ldscript не работает - ругается на отсутствующие символы __init_array_end и __init_array_start.

Другой вопрос - есть ли стандартный способ линковать с модифицированым стандартным ldscript (т. е. чтобы туда, к примеру, добавлялось только описание одной секции, а остальное не изменялось)? Скопировать - изменить - подсунуть ld, конечно, работает, но выглядит кривовато как-то. Указание его как просто параметра к ld не работает - ругается что ему не хватает места для программных заголовков.

slav ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.