Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- The GNU linker. - <b>memory layout</b> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
Memory Layout
=============

   The linker's default configuration permits allocation of all
available memory.  You can override this configuration by using the
`MEMORY' command.  The `MEMORY' command describes the location and size
of blocks of memory in the target.  By using it carefully, you can
describe which memory regions may be used by the linker, and which
memory regions it must avoid.  The linker does not shuffle sections to
fit into the available regions, but does move the requested sections
into the correct regions and issue errors when the regions become too
full.

   A command file may contain at most one use of the `MEMORY' command;
however, you can define as many blocks of memory within it as you wish.
The syntax is:

     MEMORY
       {
         NAME (ATTR) : ORIGIN = ORIGIN, LENGTH = LEN
         ...
       }

`NAME'
     is a name used internally by the linker to refer to the region. Any
     symbol name may be used.  The region names are stored in a separate
     name space, and will not conflict with symbols, file names or
     section names.  Use distinct names to specify multiple regions.

`(ATTR)'
     is an optional list of attributes, permitted for compatibility
     with the AT&T linker but not used by `ld' beyond checking that the
     attribute list is valid.  Valid attribute lists must be made up of
     the characters "`LIRWX'".  If you omit the attribute list, you may
     omit the parentheses around it as well.

`ORIGIN'
     is the start address of the region in physical memory.  It is an
     expression that must evaluate to a constant before memory
     allocation is performed. The keyword `ORIGIN' may be abbreviated
     to `org' or `o' (but not, for example, `ORG').

`LEN'
     is the size in bytes of the region (an expression).  The keyword
     `LENGTH' may be abbreviated to `len' or `l'.

   For example, to specify that memory has two regions available for
allocation--one starting at 0 for 256 kilobytes, and the other starting
at `0x40000000' for four megabytes:

     MEMORY
       {
       rom : ORIGIN = 0, LENGTH = 256K
       ram : org = 0x40000000, l = 4M
       }

   Once you have defined a region of memory named MEM, you can direct
specific output sections there by using a command ending in `>MEM'
within the `SECTIONS' command (Section Options:.).  If the   
combined output sections directed to a region are too big for the
region, the linker will issue an error message.


See Also: Section Options

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson