123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /*
- * This is a pile of crap that tells the linker how to link the kernel,
- * because it's too stupid to be able to work it out on its own.
- */
- /* UW - TBB - Jan, 2012
- * Adopted from kern/arch/mips/conf/ldscript that is used
- * for the kernel to be used with user programs.
- * Mainly done to have data segments start at 0x10000000 but
- * also may clean things up a bit relative to previous versions.
- */
- ENTRY(__start)
- _DYNAMIC_LINK = 0;
- SECTIONS
- {
- /*
- * Base address for the user programs.
- */
- . = 0x00400000;
- /*
- * Read-only loaded sections.
- */
- /* code */
- .text : { *(.text) }
- /* linker-provided symbol for end of code */
- _etext = .;
- /* read-only data */
- .rodata : { *(.rodata) *(.rodata.*) }
- /* MIPS register-usage blather */
- .reginfo : { *(.reginfo) }
- /*
- * Move to a fresh page. This method puts read-only and
- * read-write material on separate pages without having to
- * waste space on page-alignment in the on-disk file; the
- * on-disk page that contains both text and data is mapped
- * twice.
- *
- * For mips kernels we can't write-protect the text anyhow so
- * there's no point doing it.
- */
- /* . = . + 0x1000; */
- /*
- * Read-write loaded sections.
- */
- /* UW - TBB start data segment at 0x10000000 */
- . = 0x10000000;
- /* initialized data */
- .data : {
- *(.data)
- CONSTRUCTORS
- }
- /* Value for GP register */
- _gp = ALIGN(16) + 0x7ff0;
- /* Small data accessed via GP register */
- .lit8 : { *(.lit8) }
- .lit4 : { *(.lit4) }
- .sdata : { *(.sdata) }
- /* cleared-to-zero data */
- .sbss : { *(.sbss *.scommon) }
- .bss : { *(.bss) *(COMMON) }
- /* linker-provided symbol for end of program */
- _end = .;
- /*
- * Debug info
- */
- /* stabs debug sections */
- .stab 0: { *(.stab) }
- .stabstr 0: { *(.stabstr) }
- /* DWARF debug sections */
- .debug 0: { *(.debug) }
- .line 0: { *(.line) }
- .debug_srcinfo 0: { *(.debug_srcinfo) }
- .debug_sfnames 0: { *(.debug_sfnames) }
- .debug_aranges 0: { *(.debug_aranges) }
- .debug_pubnames 0: { *(.debug_pubnames) }
- .debug_info 0: { *(.debug_info .gnu.linkonce.wi.*) }
- .debug_abbrev 0: { *(.debug_abbrev) }
- .debug_line 0: { *(.debug_line) }
- .debug_frame 0: { *(.debug_frame) }
- .debug_str 0: { *(.debug_str) }
- .debug_loc 0: { *(.debug_loc) }
- .debug_macinfo 0: { *(.debug_macinfo) }
- .debug_weaknames 0: { *(.debug_weaknames) }
- .debug_funcnames 0: { *(.debug_funcnames) }
- .debug_typenames 0: { *(.debug_typenames) }
- .debug_varnames 0: { *(.debug_varnames) }
- /* These must appear regardless of . */
- .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
- .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
- }
|