blob: e027053721bff0f4c3a17b497044fb521fe3f7d2 [file] [log] [blame]
/* -----------------------------------------------------------------------
*
* Copyright 2008-2009 H. Peter Anvin - All Rights Reserved
* Copyright 2009 Intel Corporation; author: H. Peter Anvin
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston MA 02110-1301, USA; either version 2 of the License, or
* (at your option) any later version; incorporated herein by reference.
*
* ----------------------------------------------------------------------- */
/*
* Linker script for the SYSLINUX core
*/
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(_start)
SECTIONS
{
. = 0;
ImageBase = .; /* For gnu-efi's crt0 */
__module_start = .;
. = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
.text : {
FILL(0x90909090)
__text_start = .;
*(.text)
*(.text.*)
__text_end = .;
}
. = ALIGN(16);
.rodata : {
__rodata_start = .;
*(.rodata)
*(.rodata.*)
__rodata_end = .;
}
. = ALIGN(4);
.ctors : {
__ctors_start = .;
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
__ctors_end = .;
}
.dtors : {
__dtors_start = .;
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
__dtors_end = .;
}
. = ALIGN(4096);
.rel : {
*(.rel.got)
*(.rel.data)
*(.rel.data.*)
*(.rel.ctors)
}
. = ALIGN(4);
.gnu.hash : {
__gnu_hash_start = .;
*(.gnu.hash)
__gnu_hash_end = .;
}
.dynsym : {
__dynsym_start = .;
*(.dynsym)
__dynsym_end = .;
}
. = ALIGN(4);
.dynstr : {
__dynstr_start = .;
*(.dynstr)
__dynstr_end = .;
}
. = ALIGN(4);
.dynlink : {
__dynlink_start = .;
*(.dynlink)
__dynlink_end = .;
}
. = ALIGN(4);
.got : {
__got_start = .;
KEEP (*(.got.plt))
KEEP (*(.got))
__got_end = .;
}
. = ALIGN(4);
.dynamic : {
__dynamic_start = .;
*(.dynamic)
__dynamic_end = .;
}
. = ALIGN(16);
.data : {
__data_start = .;
*(.data)
*(.data.*)
*(.lowmem)
__data_end = .;
}
.reloc : {
*(.reloc)
}
.comment : {
*(.commet)
}
.symtab : {
*(.symtab)
}
.strtab : {
*(.strtab)
}
.bss : {
/* the EFI loader doesn't seem to like a .bss section,
so we stick it all into .data: */
__bss_start = .;
*(.bss)
*(.bss.*)
*(.bss16)
*(.hugebss)
*(COMMON)
__bss_end = .;
*(.sbss)
*(.scommon)
}
__bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
__bss_dwords = (__bss_len + 3) >> 2;
. = ALIGN(128);
/* Very large objects which don't need to be zeroed */
.hugebss : {
__hugebss_start = .;
*(.hugebss)
*(.hugebss.*)
__hugebss_end = .;
}
_end = .;
/* Stuff we don't need... */
/DISCARD/ : {
*(.eh_frame)
}
}