Defining a fixed-address section in a linker script for a static-pie binary
Eugene Sh.
tprism@gmail.com
Fri Feb 7 22:52:32 GMT 2025
Is there a way to compile/link a `static-pie` binary with a linker
script where *some* sections (NOLOAD ones) should be always located in
the same position, regardless of where the binary is being loaded to?
To put in a perspective, I write a bare-metal firmware (for risc-v if
it matters) which should be PIE. However it has certain memory regions
that are "special". Think like shared memory with other processors. So
for position-dependent FW I'd do something like this:
__attribute__((section(".special_section")))
volatile uint8_t shared_mem[100];
and in the linker script:
SECTIONS {
.....
.special_section 0x12340000 (NOLOAD): {
*(.special_section)
}
.....
}
---
However this does not work with static-pie. The accesses to shared_mem
which are generated by the compiler are relative to the address the
binary is loaded to (well.. as expected) and not to the absolute
`0x12340000` address. Is such a use case even supported? What is the
proper way to achieve this?
More information about the Gcc-help
mailing list