blob: cd4e652c305b12cefbb2602181c646f6d28e09cf [file] [log] [blame]
ENTRY (_start)
MEMORY {
flatmem : ORIGIN = 0x0, LENGTH = 0xfffffff
}
SECTIONS {
.text 0x0 : {
. = . + 4;
. = ALIGN(0x4) ;
_stext = . ;
*(.text)
*(.text.*)
*(.gnu.warning)
*(.stub)
*(.gnu.linkonce.t*)
*(.glue_7t)
*(.glue_7)
*(.jcr)
*(.init)
*(.fini)
W_RODAT *(.rodata)
W_RODAT *(.rodata1)
W_RODAT *(.rodata.*)
W_RODAT *(.gnu.linkonce.r*)
/* This is special code area at the end of the normal
text section. It contains a small lookup table at
the start followed by the code pointed to by entries
in the lookup table. */
. = ALIGN (4) ;
PROVIDE(__ctbp = .);
*(.call_table_data)
*(.call_table_text)
. = ALIGN(0x20) ;
_etext = . ;
} > flatmem
.data : {
. = ALIGN(0x4) ;
_sdata = . ;
__data_start = . ;
data_start = . ;
*(.got.plt)
*(.got)
FILL(0) ;
. = ALIGN(0x20) ;
LONG(-1)
. = ALIGN(0x20) ;
R_RODAT *(.rodata)
R_RODAT *(.rodata1)
R_RODAT *(.rodata.*)
R_RODAT *(.gnu.linkonce.r*)
*(.data)
*(.data1)
*(.data.*)
*(.gnu.linkonce.d*)
*(.data1)
*(.eh_frame)
*(.gcc_except_table)
/* Microblaze has .sdata and .sbss (small bss). They must
be contiguous, so please don't move any of this. JW */
_ssrw = . ;
*(.sdata)
*(.sdata.*)
*(.sbss) /* Don't move this! */
_essrw = . ;
_ssrw_size = _essrw - _ssrw;
PROVIDE(_SDA_BASE_ = _ssrw + (_ssrw_size / 2));
*(.gnu.linkonce.s.*)
*(__libc_atexit)
*(__libc_subinit)
*(__libc_subfreeres)
*(.note.ABI-tag)
/* microblaze-specific read-only small data area
and associated locating symbols */
_ssro = . ;
*(.sdata2)
_essro = . ;
_ssro_size = _essro - _ssro;
PROVIDE(_SDA2_BASE_ = _ssro + (_ssro_size / 2));
. = ALIGN(4) ;
__CTOR_LIST__ = .;
LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
SINGLE_LINK: /* gcc uses crtbegin.o to find the start of
SINGLE_LINK: the constructors, so we make sure it is
SINGLE_LINK: first. Because this is a wildcard, it
SINGLE_LINK: doesn't matter if the user does not
SINGLE_LINK: actually link against crtbegin.o; the
SINGLE_LINK: linker won't look for a file to match a
SINGLE_LINK: wildcard. The wildcard also means that it
SINGLE_LINK: doesn't matter which directory crtbegin.o
SINGLE_LINK: is in. */
SINGLE_LINK: KEEP (*crtbegin*.o(.ctors))
SINGLE_LINK: /* We don't want to include the .ctor section from
SINGLE_LINK: from the crtend.o file until after the sorted ctors.
SINGLE_LINK: The .ctor section from the crtend file contains the
SINGLE_LINK: end of ctors marker and it must be last */
SINGLE_LINK: KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
SINGLE_LINK: KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
LONG(0)
__CTOR_END__ = .;
__DTOR_LIST__ = .;
LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
SINGLE_LINK: KEEP (*crtbegin*.o(.dtors))
SINGLE_LINK: KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
SINGLE_LINK: KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
LONG(0)
__DTOR_END__ = .;
PROVIDE (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
PROVIDE (__fini_array_end = .);
. = ALIGN(0x10) ;
_edata = . ;
} > flatmem
.bss : {
. = ALIGN(0x4) ;
_sbss = ALIGN(0x4) ;
__bss_start = . ;
*(.dynsbss)
*(.sbss)
*(.sbss.*)
*(.scommon)
*(.dynbss)
*(.bss)
*(.bss.*)
*(.bss*)
*(.gnu.linkonce.b*)
*(COMMON)
. = ALIGN(0x10) ;
_ebss = . ;
_end = . ;
end = . ;
} > flatmem
.stack : {
. = ALIGN(0x4);
__stack_start = .;
}
.junk 0 : { *(.rel*) *(.rela*) }
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_info 0 : { *(.debug_info) }
.debug_line 0 : { *(.debug_line) }
.debug_pubnames 0 : { *(.debug_pubnames) }
.debug_aranges 0 : { *(.debug_aranges) }
}