99 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
|  * 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.
 | |
|  */
 | |
| ENTRY(__start)
 | |
| 
 | |
| _DYNAMIC_LINK = 0;
 | |
| SECTIONS
 | |
| {
 | |
| 	/*
 | |
| 	 * Base address for the kernel.
 | |
| 	 */
 | |
| 	. = 0x80000200;
 | |
| 
 | |
| 	/*
 | |
| 	 * 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.
 | |
| 	 */
 | |
| 
 | |
| 	/* 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) }
 | |
| }
 |