 |
section |
Syntax: section ("section-name")
Normally, the compiler places the objects it generates in sections like
.data
and .bss
. Sometimes, however, you need additional sections,
or you need certain particular variables to appear in special sections,
for example to map to special hardware. The section
attribute specifies that a variable (or function) lives in a particular
section. The use of this attribute is limited in TIGCC, because its linker supports
only a few types of sections, but this may be improved in the future.
For example, this small hypothetical program uses several specific section names:
struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
int init_data __attribute__ ((section ("INITDATA"))) = 0;
main()
{
/* Initialize stack pointer */
init_sp (stack + sizeof (stack));
/* Initialize initialized data */
memcpy (&init_data, &data, &edata - &data);
/* Turn on the serial ports */
init_duart (&a);
init_duart (&b);
}
Use the section
attribute with an initialized definition
of a global variable, as shown in the example. GCC issues
a warning and otherwise ignores the section
attribute in
uninitialized variable declarations.
You may only use the section
attribute with a fully initialized
global definition because of the way linkers work. The linker requires
each object be defined once, with the exception that uninitialized
variables tentatively go in the .bss
section
and can be multiply "defined". You can force a variable to be
initialized with the '-fno-common' flag or the nocommon
attribute.
The section
attribute can also be used for functions.