Annotation of qemu/roms/ipxe/src/arch/i386/scripts/i386-kir.lds, revision 1.1

1.1     ! root        1: /* -*- sh -*- */
        !             2: 
        !             3: /*
        !             4:  * Linker script for i386 images
        !             5:  *
        !             6:  */
        !             7: 
        !             8: OUTPUT_FORMAT ( "elf32-i386", "elf32-i386", "elf32-i386" )
        !             9: OUTPUT_ARCH ( i386 )
        !            10: 
        !            11: SECTIONS {
        !            12: 
        !            13:     /* All sections in the resulting file have consecutive load
        !            14:      * addresses, but may have individual link addresses depending on
        !            15:      * the memory model being used.
        !            16:      *
        !            17:      * The linker symbols _prefix_link_addr, load_addr, and
        !            18:      * _max_align may be specified explicitly.  If not specified, they
        !            19:      * will default to:
        !            20:      *
        !            21:      *   _prefix_link_addr     = 0
        !            22:      *   _load_addr            = 0
        !            23:      *   _max_align            = 16
        !            24:      * 
        !            25:      * We guarantee alignment of virtual addresses to any alignment
        !            26:      * specified by the constituent object files (e.g. via
        !            27:      * __attribute__((aligned(x)))).  Load addresses are guaranteed
        !            28:      * only up to _max_align.  Provided that all loader and relocation
        !            29:      * code honours _max_align, this means that physical addresses are
        !            30:      * also guaranteed up to _max_align.
        !            31:      *
        !            32:      * Note that when using -DKEEP_IT_REAL, the UNDI segments are only
        !            33:      * guaranteed to be loaded on a paragraph boundary (i.e. 16-byte
        !            34:      * alignment).  Using _max_align>16 will therefore not guarantee
        !            35:      * >16-byte alignment of physical addresses when -DKEEP_IT_REAL is
        !            36:      * used (though virtual addresses will still be fully aligned).
        !            37:      *
        !            38:      */
        !            39: 
        !            40:     /*
        !            41:      * The prefix
        !            42:      */
        !            43: 
        !            44:     _prefix_link_addr = DEFINED ( _prefix_link_addr ) ? _prefix_link_addr : 0;
        !            45:     . = _prefix_link_addr;
        !            46:     _prefix = .;
        !            47: 
        !            48:     .prefix : AT ( _prefix_load_offset + __prefix ) {
        !            49:        __prefix = .;
        !            50:        _entry = .;
        !            51:        *(.prefix)
        !            52:        *(.prefix.*)
        !            53:        _eprefix_progbits = .;
        !            54:     }
        !            55:     
        !            56:     _eprefix = .;
        !            57: 
        !            58:     /*
        !            59:      * The 16-bit sections
        !            60:      */
        !            61: 
        !            62:     _text16_link_addr = 0;
        !            63:     . = _text16_link_addr;
        !            64:     _text16 = .;
        !            65: 
        !            66:     . += 1;                    /* Prevent NULL being valid */
        !            67: 
        !            68:     .text16 : AT ( _text16_load_offset + __text16 ) {
        !            69:        __text16 = .;
        !            70:        KEEP(*(.text.null_trap))
        !            71:        KEEP(*(.text.null_trap.*))
        !            72:        *(.text16)
        !            73:        *(.text16.*)
        !            74:        *(.text)
        !            75:        *(.text.*)
        !            76:        _etext16_progbits = .;
        !            77:     } = 0x9090
        !            78: 
        !            79:     _etext16 = .;
        !            80: 
        !            81:     _data16_link_addr = 0;
        !            82:     . = _data16_link_addr;
        !            83:     _data16 = .;
        !            84: 
        !            85:     . += 1;                    /* Prevent NULL being valid */
        !            86: 
        !            87:     .rodata16 : AT ( _data16_load_offset + __rodata16 ) {
        !            88:        __rodata16 = .;
        !            89:        *(.rodata16)
        !            90:        *(.rodata16.*)
        !            91:        *(.rodata)
        !            92:        *(.rodata.*)
        !            93:     }
        !            94:     .data16 : AT ( _data16_load_offset + __data16 ) {
        !            95:        __data16 = .;
        !            96:        *(.data16)
        !            97:        *(.data16.*)
        !            98:        *(.data)
        !            99:        *(.data.*)
        !           100:        KEEP(*(SORT(.tbl.*)))   /* Various tables.  See include/tables.h */
        !           101:        _edata16_progbits = .;
        !           102:     }
        !           103:     .bss16 : AT ( _data16_load_offset + __bss16 ) {
        !           104:        __bss16 = .;
        !           105:        _bss16 = .;
        !           106:        *(.bss16)
        !           107:        *(.bss16.*)
        !           108:        *(.bss)
        !           109:        *(.bss.*)
        !           110:        *(COMMON)
        !           111:        _ebss16 = .;
        !           112:     }
        !           113:     .stack16 : AT ( _data16_load_offset + __stack16 ) {
        !           114:        __stack16 = .;
        !           115:        *(.stack16)
        !           116:        *(.stack16.*)
        !           117:        *(.stack)
        !           118:        *(.stack.*)
        !           119:     }
        !           120: 
        !           121:     _edata16 = .;
        !           122: 
        !           123:     _end = .;
        !           124: 
        !           125:     /*
        !           126:      * Dispose of the comment and note sections to make the link map
        !           127:      * easier to read
        !           128:      */
        !           129: 
        !           130:     /DISCARD/ : {
        !           131:        *(.comment)
        !           132:        *(.comment.*)
        !           133:        *(.note)
        !           134:        *(.note.*)
        !           135:        *(.discard)
        !           136:        *(.discard.*)
        !           137:     }
        !           138: 
        !           139:     /*
        !           140:      * Load address calculations.  The slightly obscure nature of the
        !           141:      * calculations is because ALIGN(x) can only operate on the
        !           142:      * location counter.
        !           143:      */
        !           144: 
        !           145:     _max_align             = DEFINED ( _max_align ) ? _max_align : 16;
        !           146:     _load_addr             = DEFINED ( _load_addr ) ? _load_addr : 0;
        !           147: 
        !           148:     .                      = _load_addr;
        !           149: 
        !           150:     .                     -= _prefix_link_addr;
        !           151:     _prefix_load_offset            = ALIGN ( _max_align );
        !           152:     _prefix_load_addr      = _prefix_link_addr + _prefix_load_offset;
        !           153:     _prefix_size           = _eprefix - _prefix;
        !           154:     _prefix_progbits_size   = _eprefix_progbits - _prefix;
        !           155:     .                      = _prefix_load_addr + _prefix_progbits_size;
        !           156: 
        !           157:     .                     -= _text16_link_addr;
        !           158:     _text16_load_offset            = ALIGN ( _max_align );
        !           159:     _text16_load_addr      = _text16_link_addr + _text16_load_offset;
        !           160:     _text16_size           = _etext16 - _text16;
        !           161:     _text16_progbits_size   = _etext16_progbits - _text16;
        !           162:     .                      = _text16_load_addr + _text16_progbits_size;
        !           163: 
        !           164:     .                     -= _data16_link_addr;
        !           165:     _data16_load_offset            = ALIGN ( _max_align );
        !           166:     _data16_load_addr      = _data16_link_addr + _data16_load_offset;
        !           167:     _data16_size           = _edata16 - _data16;
        !           168:     _data16_progbits_size   = _edata16_progbits - _data16;
        !           169:     .                      = _data16_load_addr + _data16_progbits_size;
        !           170: 
        !           171:     .                      = ALIGN ( _max_align );
        !           172: 
        !           173:     _load_size             = . - _load_addr;
        !           174: 
        !           175:     /*
        !           176:      * Alignment checks.  ALIGN() can only operate on the location
        !           177:      * counter, so we set the location counter to each value we want
        !           178:      * to check.
        !           179:      */
        !           180: 
        !           181:     . = _prefix_load_addr - _prefix_link_addr;
        !           182:     _assert = ASSERT ( ( . == ALIGN ( _max_align ) ),
        !           183:                       "_prefix is badly aligned" );
        !           184: 
        !           185:     . = _text16_load_addr - _text16_link_addr;
        !           186:     _assert = ASSERT ( ( . == ALIGN ( _max_align ) ),
        !           187:                       "_text16 is badly aligned" );
        !           188: 
        !           189:     . = _data16_load_addr - _data16_link_addr;
        !           190:     _assert = ASSERT ( ( . == ALIGN ( _max_align ) ),
        !           191:                       "_data16 is badly aligned" );
        !           192: 
        !           193:     /*
        !           194:      * Values calculated to save code from doing it
        !           195:      */
        !           196:     _text16_size_pgh   = ( ( _text16_size + 15 ) / 16 );
        !           197:     _data16_size_pgh   = ( ( _data16_size + 15 ) / 16 );
        !           198:     _load_size_pgh     = ( ( _load_size + 15 ) / 16 );
        !           199:     _load_size_sect    = ( ( _load_size + 511 ) / 512 );
        !           200: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.