Как переместить символы размера bfd?

При встраивании двоичных файлов в изображение эльфа с помощью gcc, есть ли способ изменить адрес автоматически сгенерированных символов _binary_*_size? В отличие от символов _binary_*_start и _binary_*_end, символы _binary_*_size, похоже, не следуют за базовым адресом кода. Они находятся в абсолютном разделе bfd (*ABS*).

Например:

$ arm-linux-gnueabihf-gcc -nostdlib -Wl,-Ttext=0x80000000,--format=binary,foo.bin,--format=default boot.S
$ arm-linux-gnueabihf-nm a.out | sort
00000010 A _binary_foo_bin_size
80000000 T _start
80008004 D _binary_foo_bin_start
80008014 D _binary_foo_bin_end
80008014 A __bss_start
80008014 A __bss_start__
80008014 A __bss_end__
80008014 A _bss_end__
80008014 A _edata
80008014 A _end
80008014 A __end__

Я бы хотел, чтобы _binary_foo_bin_size был в 0x80008*** вместо 0x00000***. (Желательно без написания собственного сценария компоновщика или использования дополнительных команд objcopy.)


person Dominic    schedule 01.11.2013    source источник


Ответы (1)


Я думаю, что символ _size записывает размер раздела. Таким образом, смещение этого символа было бы неправильным - он больше не записывал бы размер.

Мне любопытно, зачем тебе это нужно. Вы не сказали. Может быть, есть другой способ достичь своей цели.

person Tom Tromey    schedule 04.11.2013
comment
Мне нужно избавиться от символов _size, потому что, когда я загружаю ELF на свою плату, отладчик пытается записать данные _size по адресу 0x00000010, который является загрузочным ПЗУ на моей плате. - person Dominic; 05.11.2013
comment
Также я удивлен, что есть какие-то данные для записи. Думаю, я бы начал с более непосредственной попытки удалить символ. - person Tom Tromey; 05.11.2013
comment
Это ARM DS-5 5.16 (с DSTREAM). - person Dominic; 05.11.2013