/* // C++ Linker file: // // Description: makes the linker do usefull stuff // // // Author: Ulf Vatter <uvatter@ira.uka.de>, (C) 2004 // // Copyright: See COPYING file that comes with this distribution // */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) /* Where sould our programm start */ ENTRY(_start) /* Basic layout of the file */ SECTIONS { /* Build our text session (input: all .text section ; output: .text) */ .text : { __elf_start = ABSOLUTE(.) ; __section_text_start = ABSOLUTE(.) ; /* ia32-crt0.o(.text*) */ /* The startup stuff first (just to make sure) */ *(.text*) /* Now put all the other .text sections */ *(.gnu.linkonce.t.*) /* templates */ __section_text_end = ABSOLUTE(.) ; } /* Read only data (e.g. static const) */ .rodata : { __section_rodata_start = ABSOLUTE(.) ; *(.rodata*) *(.gnu.linkonce.r.*) /* templates */ __section_rodata_end = ABSOLUTE(.) ; } = 0 /* Build our data section */ . = ALIGN(4096) ; .data : { __section_data_start = ABSOLUTE(.) ; *(.data*) *(.gnu.linkonce.d.*) /* templates */ __section_data_end = ABSOLUTE(.) ; } . = ALIGN(4) ; /* This is for the pointers to the constructors of global/static objects */ .ctors : { __section_ctors_start = ABSOLUTE(.) ; /* Make sure, they stay are kinda sorted and not garbage collected by the linker */ KEEP(SORT(*)(.ctors*)) __section_ctors_end = ABSOLUTE(.) ; } . = ALIGN(4) ; /* This is for the pointers to the destructors of global/static objects */ .dtors : { __section_dtors_start = ABSOLUTE(.) ; KEEP(SORT(*)(.dtors*)) __section_dtors_end = ABSOLUTE(.) ; } __section_load_end = . ; /* Put the bss section right behind, but aligned it to page size */ . = ALIGN(4096) ; .bss : { __section_bss_start = ABSOLUTE(.) ; *(.dynbss) *(COMMON) *(.bss*) *(.gnu.linkonce.b.*) /* templates */ __section_bss_end = ABSOLUTE(.) ; __elf_end = . ; } }