Minor feature for ld
Ian Lance Taylor
ian@airs.com
Tue Sep 3 09:03:00 GMT 2002
Pete Gonzalez <pgonzalez@bluel.com> writes:
> I think the linker should support segments whose address is a
> function of the segment name. It would allow definitions like
> this in GCC:
>
> __attribute__((section("/0x123456/"))) int IOPort;
>
> In the above example, the linker would locate the variable at
> the given address, so these two statements would be equivalent:
>
> IOPort = x;
> *(int *)0x123456 = x;
>
> Really this feature belongs in the compiler, but sections are
> the closest C/C++ compilers come to letting you control the
> address of variables. Everything else is handled by the linker,
> so that seems like the simplest place to fix. (If not, maybe
> I should be pestering the GCC people.)
It's easy enough to do this in C by doing
int* IOPort = (int*) 0x123456;
*IOPort = x;
In most uses you will want volatile, as in
volatile int* IOPort = (int*) 0x123456;
What's the advantage of doing it in a linker section?
Ian
More information about the Binutils
mailing list