Next: Pragma Long_Float, Previous: Pragma Linker_Destructor, Up: Implementation Defined Pragmas
pragma Linker_Section ( [Entity =>] local_NAME [Section =>] static_string_EXPRESSION);
local_NAME must refer to an object that is declared at the library
level. This pragma specifies the name of the linker section for the given
entity. It is equivalent to __attribute__((section))
in GNU C and
causes local_NAME to be placed in the static_string_EXPRESSION
section of the executable (assuming the linker doesn't rename the section).
The compiler normally places library-level objects in standard sections
depending on their type: procedures and functions generally go in the
.text
section, initialized variables in the .data
section
and uninitialized variables in the .bss
section.
Other, special sections may exist on given target machines to map special hardware, for example I/O ports or flash memory. This pragma is a means to defer the final layout of the executable to the linker, thus fully working at the symbolic level with the compiler.
Some file formats do not support arbitrary sections so not all target
machines support this pragma. The use of this pragma may cause a program
execution to be erroneous if it is used to place an entity into an
inappropriate section (e.g. a modified variable into the .text
section). See also pragma Persistent_BSS
.
-- Example of the use of pragma Linker_Section package IO_Card is Port_A : Integer; pragma Volatile (Port_A); pragma Linker_Section (Port_A, ".bss.port_a"); Port_B : Integer; pragma Volatile (Port_B); pragma Linker_Section (Port_B, ".bss.port_b"); end IO_Card;