On 09/10/2018 10:46 PM, Jason A. Donenfeld wrote:
Hello,
I'd like to have a compound literal exist inside a certain linker
section. However, it doesn't appear to work as I'd like:
#define __stuffdata __attribute__((__section__("stuff")))
const u8 works[] __stuffdata = { 0x1, 0x2, 0x3, 0x4 };
const u8 *breaks = (const u8[] __stuffdata){ 0x1, 0x2, 0x3, 0x4 };
Attribute section applies to symbols not to types, so you can't use it
in a cast. In order to access data in another section, we need an
address for it, and symbols have an address, but types do not. The
compound literal could have an address, but we don't have a way to
attach attributes to compound literals.
Since your testcase already has a symbol in the right section, you could
just use that to initialize breaks.
const u8 *breaks = works;
This means defining a bunch of extra symbols, but is a potential
solution to your problem.
Jim