Question

I need to include a binary program in my project. I use objcopy to create an object file from a binary file. The object file can be linked in my program. objcopy creates appropriate symbols to access the binary data.

Example

objcopy -I binary -O elf32-littlearm --binary-architecture arm D:\Src\data.jpg data.o

The generated symbols are:

_binary_D__Src_data_jpg_end
_binary_D__Src_data_jpg_size
_binary_D__Src_data_jpg_start

The problem is that the symbols include the path to the binary file D__Src_. This may help when binary files are included from different location. But it bothers me that the symbols changes when I get the file from a different location. Since this shall run on several build stations, the path can't be stripped with the --redefine-sym option.

How do I get rid of the path in the symbol name?

Était-ce utile?

La solution

I solved this problem by using this switch in objcopy:

--prefix-sections=abc

This gives a way to uniquely identify the data in your binary object file (ex. binary.o)

In your linker script you can then define your own labels around where you include the binary.o. Since you are no longer referencing anything in binary.o the binary will be thrown out by the linker if you use -gc-sections switch. The section in binary.o will now be abc.data. Use KEEP in your linker script to tell the linker not to throw out binary.o. Your linker script will contain the following:

__binary_start__ = .;
KEEP(*(abc.data))
binary.o
*(abc.data)
. = ALIGN(4);
__binary_end__ = .;

Autres conseils

The switch --localize-symbols works for me.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top