mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	 e55645ec57
			
		
	
	
		e55645ec57
		
	
	
	
	
		
			
			All the ia64 pvops code is now dead code since both xen and kvm support have been ripped out [0] [1]. Just that no one had troubled to rip this stuff out. The only useful remaining pieces were the old pvops docs but that was recently also generalized and moved out from ia64 [2]. This has been run time tested on an ia64 Madison system. [0]003f7de625"KVM: ia64: remove" since v3.19-rc1 [1]d52eefb47d"ia64/xen: Remove Xen support for ia64" since v3.14-rc1 [2] "virtual: Documentation: simplify and generalize paravirt_ops.txt" Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
		
			
				
	
	
		
			228 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			228 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| 
 | |
| #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_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
 | |
| }
 |