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) }
 | 
						|
}
 |