|  | 
 | #include <asm/cache.h> | 
 | #include <asm/ptrace.h> | 
 | #include <asm/pgtable.h> | 
 |  | 
 | #include <asm-generic/vmlinux.lds.h> | 
 |  | 
 | OUTPUT_FORMAT("elf64-ia64-little") | 
 | OUTPUT_ARCH(ia64) | 
 | ENTRY(phys_start) | 
 | jiffies = jiffies_64; | 
 |  | 
 | PHDRS { | 
 | 	code   PT_LOAD; | 
 | 	percpu PT_LOAD; | 
 | 	data   PT_LOAD; | 
 | 	note   PT_NOTE; | 
 | 	unwind 0x70000001; /* PT_IA_64_UNWIND, but ld doesn't match the name */ | 
 | } | 
 |  | 
 | SECTIONS { | 
 | 	/* | 
 | 	 * unwind exit sections must be discarded before | 
 | 	 * the rest of the sections get included. | 
 | 	 */ | 
 | 	/DISCARD/ : { | 
 | 		*(.IA_64.unwind.exit.text) | 
 | 		*(.IA_64.unwind_info.exit.text) | 
 | 		*(.comment) | 
 | 		*(.note) | 
 | 	} | 
 |  | 
 | 	v = PAGE_OFFSET; /* this symbol is here to make debugging easier... */ | 
 | 	phys_start = _start - LOAD_OFFSET; | 
 |  | 
 | 	code : { | 
 | 	} :code | 
 | 	. = KERNEL_START; | 
 |  | 
 | 	_text = .; | 
 | 	_stext = .; | 
 |  | 
 | 	.text : AT(ADDR(.text) - LOAD_OFFSET) { | 
 | 		__start_ivt_text = .; | 
 | 		*(.text..ivt) | 
 | 		__end_ivt_text = .; | 
 | 		TEXT_TEXT | 
 | 		SCHED_TEXT | 
 | 		LOCK_TEXT | 
 | 		KPROBES_TEXT | 
 | 		*(.gnu.linkonce.t*) | 
 | 	} | 
 |  | 
 | 	.text2 : AT(ADDR(.text2) - LOAD_OFFSET)	{ | 
 | 		*(.text2) | 
 | 	} | 
 |  | 
 | #ifdef CONFIG_SMP | 
 | 	.text..lock : AT(ADDR(.text..lock) - LOAD_OFFSET) { | 
 | 		*(.text..lock) | 
 | 	} | 
 | #endif | 
 | 	_etext = .; | 
 |  | 
 | 	/* | 
 | 	 * Read-only data | 
 | 	 */ | 
 | 	NOTES :code :note       /* put .notes in text and mark in PT_NOTE  */ | 
 | 	code_continues : { | 
 | 	} : code               /* switch back to regular program...  */ | 
 |  | 
 | 	EXCEPTION_TABLE(16) | 
 |  | 
 | 	/* MCA table */ | 
 | 	. = ALIGN(16); | 
 | 	__mca_table : AT(ADDR(__mca_table) - LOAD_OFFSET) { | 
 | 		__start___mca_table = .; | 
 | 		*(__mca_table) | 
 | 		__stop___mca_table = .; | 
 | 	} | 
 |  | 
 | 	.data..patch.phys_stack_reg : AT(ADDR(.data..patch.phys_stack_reg) - LOAD_OFFSET) { | 
 | 		__start___phys_stack_reg_patchlist = .; | 
 | 		*(.data..patch.phys_stack_reg) | 
 | 		__end___phys_stack_reg_patchlist = .; | 
 | 	} | 
 |  | 
 | 	/* | 
 | 	 * Global data | 
 | 	 */ | 
 | 	_data = .; | 
 |  | 
 | 	/* Unwind info & table: */ | 
 | 	. = ALIGN(8); | 
 | 	.IA_64.unwind_info : AT(ADDR(.IA_64.unwind_info) - LOAD_OFFSET) { | 
 | 		*(.IA_64.unwind_info*) | 
 | 	} | 
 | 	.IA_64.unwind : AT(ADDR(.IA_64.unwind) - LOAD_OFFSET) { | 
 | 		__start_unwind = .; | 
 | 		*(.IA_64.unwind*) | 
 | 		__end_unwind = .; | 
 | 	} :code :unwind | 
 | 	code_continues2 : { | 
 | 	} : code | 
 |  | 
 | 	RODATA | 
 |  | 
 | 	.opd : AT(ADDR(.opd) - LOAD_OFFSET) { | 
 | 		*(.opd) | 
 | 	} | 
 |  | 
 | 	/* | 
 | 	 * Initialization code and data: | 
 | 	 */ | 
 | 	. = ALIGN(PAGE_SIZE); | 
 | 	__init_begin = .; | 
 |  | 
 | 	INIT_TEXT_SECTION(PAGE_SIZE) | 
 | 	INIT_DATA_SECTION(16) | 
 |  | 
 | 	.data..patch.vtop : AT(ADDR(.data..patch.vtop) - LOAD_OFFSET) { | 
 | 		__start___vtop_patchlist = .; | 
 | 		*(.data..patch.vtop) | 
 | 		__end___vtop_patchlist = .; | 
 | 	} | 
 |  | 
 | 	.data..patch.rse : AT(ADDR(.data..patch.rse) - LOAD_OFFSET) { | 
 | 		__start___rse_patchlist = .; | 
 | 		*(.data..patch.rse) | 
 | 		__end___rse_patchlist = .; | 
 | 	} | 
 |  | 
 | 	.data..patch.mckinley_e9 : AT(ADDR(.data..patch.mckinley_e9) - LOAD_OFFSET) { | 
 | 		__start___mckinley_e9_bundles = .; | 
 | 		*(.data..patch.mckinley_e9) | 
 | 		__end___mckinley_e9_bundles = .; | 
 | 	} | 
 |  | 
 | #if defined(CONFIG_PARAVIRT) | 
 | 	. = ALIGN(16); | 
 | 	.paravirt_bundles : AT(ADDR(.paravirt_bundles) - LOAD_OFFSET) { | 
 | 		__start_paravirt_bundles = .; | 
 | 		*(.paravirt_bundles) | 
 | 		__stop_paravirt_bundles = .; | 
 | 	} | 
 | 	. = ALIGN(16); | 
 | 	.paravirt_insts : AT(ADDR(.paravirt_insts) - LOAD_OFFSET) { | 
 | 		__start_paravirt_insts = .; | 
 | 		*(.paravirt_insts) | 
 | 		__stop_paravirt_insts = .; | 
 | 	} | 
 | 	. = ALIGN(16); | 
 | 	.paravirt_branches : AT(ADDR(.paravirt_branches) - LOAD_OFFSET) { | 
 | 		__start_paravirt_branches = .; | 
 | 		*(.paravirt_branches) | 
 | 		__stop_paravirt_branches = .; | 
 | 	} | 
 | #endif | 
 |  | 
 | #if defined(CONFIG_IA64_GENERIC) | 
 | 	/* Machine Vector */ | 
 | 	. = ALIGN(16); | 
 | 	.machvec : AT(ADDR(.machvec) - LOAD_OFFSET) { | 
 | 		machvec_start = .; | 
 | 		*(.machvec) | 
 | 		machvec_end = .; | 
 | 	} | 
 | #endif | 
 |  | 
 | #ifdef	CONFIG_SMP | 
 | 	. = ALIGN(PERCPU_PAGE_SIZE); | 
 | 	__cpu0_per_cpu = .; | 
 | 	. = . + PERCPU_PAGE_SIZE;   /* cpu0 per-cpu space */ | 
 | #endif | 
 |  | 
 | 	. = ALIGN(PAGE_SIZE); | 
 | 	__init_end = .; | 
 |  | 
 | 	.data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET) { | 
 | 		PAGE_ALIGNED_DATA(PAGE_SIZE) | 
 | 		. = ALIGN(PAGE_SIZE); | 
 | 		__start_gate_section = .; | 
 | 		*(.data..gate) | 
 | 		__stop_gate_section = .; | 
 | 	} | 
 | 	/* | 
 | 	 * make sure the gate page doesn't expose | 
 | 	 * kernel data | 
 | 	 */ | 
 | 	. = ALIGN(PAGE_SIZE); | 
 |  | 
 | 	/* Per-cpu data: */ | 
 | 	. = ALIGN(PERCPU_PAGE_SIZE); | 
 | 	PERCPU_VADDR(SMP_CACHE_BYTES, PERCPU_ADDR, :percpu) | 
 | 	__phys_per_cpu_start = __per_cpu_load; | 
 | 	/* | 
 | 	 * ensure percpu data fits | 
 | 	 * into percpu page size | 
 | 	 */ | 
 | 	. = __phys_per_cpu_start + PERCPU_PAGE_SIZE; | 
 |  | 
 | 	data : { | 
 | 	} :data | 
 | 	.data : AT(ADDR(.data) - LOAD_OFFSET) { | 
 | 		_sdata  =  .; | 
 | 		INIT_TASK_DATA(PAGE_SIZE) | 
 | 		CACHELINE_ALIGNED_DATA(SMP_CACHE_BYTES) | 
 | 		READ_MOSTLY_DATA(SMP_CACHE_BYTES) | 
 | 		DATA_DATA | 
 | 		*(.data1) | 
 | 		*(.gnu.linkonce.d*) | 
 | 		CONSTRUCTORS | 
 | 	} | 
 |  | 
 | 	. = ALIGN(16);	/* gp must be 16-byte aligned for exc. table */ | 
 | 	.got : AT(ADDR(.got) - LOAD_OFFSET) { | 
 | 		*(.got.plt) | 
 | 		*(.got) | 
 | 	} | 
 | 	__gp = ADDR(.got) + 0x200000; | 
 |  | 
 | 	/* | 
 | 	 * We want the small data sections together, | 
 | 	 * so single-instruction offsets can access | 
 | 	 * them all, and initialized data all before | 
 | 	 * uninitialized, so we can shorten the | 
 | 	 * on-disk segment size. | 
 | 	 */ | 
 | 	.sdata : AT(ADDR(.sdata) - LOAD_OFFSET) { | 
 | 		*(.sdata) | 
 | 		*(.sdata1) | 
 | 		*(.srdata) | 
 | 	} | 
 | 	_edata  =  .; | 
 |  | 
 | 	BSS_SECTION(0, 0, 0) | 
 |  | 
 | 	_end = .; | 
 |  | 
 | 	code : { | 
 | 	} :code | 
 |  | 
 | 	STABS_DEBUG | 
 | 	DWARF_DEBUG | 
 |  | 
 | 	/* Default discards */ | 
 | 	DISCARDS | 
 | } |