| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  * Linker script for gate DSO.  The gate pages are an ELF shared object prelinked to its | 
 | 3 |  * virtual address, with only one read-only segment and one execute-only segment (both fit | 
 | 4 |  * in one page).  This script controls its layout. | 
 | 5 |  */ | 
 | 6 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 7 |  | 
 | 8 | #include <asm/system.h> | 
 | 9 |  | 
 | 10 | SECTIONS | 
 | 11 | { | 
 | 12 |   . = GATE_ADDR + SIZEOF_HEADERS; | 
 | 13 |  | 
 | 14 |   .hash				: { *(.hash) }				:readable | 
| Roland McGrath | 0b0bf7a | 2006-07-30 03:04:06 -0700 | [diff] [blame] | 15 |   .gnu.hash			: { *(.gnu.hash) } | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 16 |   .dynsym			: { *(.dynsym) } | 
 | 17 |   .dynstr			: { *(.dynstr) } | 
 | 18 |   .gnu.version			: { *(.gnu.version) } | 
 | 19 |   .gnu.version_d		: { *(.gnu.version_d) } | 
 | 20 |   .gnu.version_r		: { *(.gnu.version_r) } | 
 | 21 |   .dynamic			: { *(.dynamic) }			:readable :dynamic | 
 | 22 |  | 
 | 23 |   /* | 
 | 24 |    * This linker script is used both with -r and with -shared.  For the layouts to match, | 
 | 25 |    * we need to skip more than enough space for the dynamic symbol table et al.  If this | 
 | 26 |    * amount is insufficient, ld -shared will barf.  Just increase it here. | 
 | 27 |    */ | 
 | 28 |   . = GATE_ADDR + 0x500; | 
 | 29 |  | 
 | 30 |   .data.patch			: { | 
 | 31 | 				    __start_gate_mckinley_e9_patchlist = .; | 
 | 32 | 				    *(.data.patch.mckinley_e9) | 
 | 33 | 				    __end_gate_mckinley_e9_patchlist = .; | 
 | 34 |  | 
 | 35 | 				    __start_gate_vtop_patchlist = .; | 
 | 36 | 				    *(.data.patch.vtop) | 
 | 37 | 				    __end_gate_vtop_patchlist = .; | 
 | 38 |  | 
 | 39 | 				    __start_gate_fsyscall_patchlist = .; | 
 | 40 | 				    *(.data.patch.fsyscall_table) | 
 | 41 | 				    __end_gate_fsyscall_patchlist = .; | 
 | 42 |  | 
 | 43 | 				    __start_gate_brl_fsys_bubble_down_patchlist = .; | 
 | 44 | 				    *(.data.patch.brl_fsys_bubble_down) | 
 | 45 | 				    __end_gate_brl_fsys_bubble_down_patchlist = .; | 
 | 46 |   }									:readable | 
 | 47 |   .IA_64.unwind_info		: { *(.IA_64.unwind_info*) } | 
 | 48 |   .IA_64.unwind			: { *(.IA_64.unwind*) }			:readable :unwind | 
 | 49 | #ifdef HAVE_BUGGY_SEGREL | 
 | 50 |   .text (GATE_ADDR + PAGE_SIZE)	: { *(.text) *(.text.*) }		:readable | 
 | 51 | #else | 
 | 52 |   . = ALIGN (PERCPU_PAGE_SIZE) + (. & (PERCPU_PAGE_SIZE - 1)); | 
 | 53 |   .text				: { *(.text) *(.text.*) }		:epc | 
 | 54 | #endif | 
 | 55 |  | 
 | 56 |   /DISCARD/			: { | 
 | 57 |   	*(.got.plt) *(.got) | 
 | 58 | 	*(.data .data.* .gnu.linkonce.d.*) | 
 | 59 | 	*(.dynbss) | 
 | 60 | 	*(.bss .bss.* .gnu.linkonce.b.*) | 
 | 61 | 	*(__ex_table) | 
| Jes Sorensen | 3283a67 | 2006-03-30 10:13:22 -0500 | [diff] [blame] | 62 | 	*(__mca_table) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 63 |   } | 
 | 64 | } | 
 | 65 |  | 
 | 66 | /* | 
 | 67 |  * We must supply the ELF program headers explicitly to get just one | 
 | 68 |  * PT_LOAD segment, and set the flags explicitly to make segments read-only. | 
 | 69 |  */ | 
 | 70 | PHDRS | 
 | 71 | { | 
 | 72 |   readable  PT_LOAD	FILEHDR	PHDRS	FLAGS(4);	/* PF_R */ | 
 | 73 | #ifndef HAVE_BUGGY_SEGREL | 
 | 74 |   epc	    PT_LOAD	FILEHDR PHDRS	FLAGS(1);	/* PF_X */ | 
 | 75 | #endif | 
 | 76 |   dynamic   PT_DYNAMIC			FLAGS(4);	/* PF_R */ | 
 | 77 |   unwind    0x70000001; /* PT_IA_64_UNWIND, but ld doesn't match the name */ | 
 | 78 | } | 
 | 79 |  | 
 | 80 | /* | 
 | 81 |  * This controls what symbols we export from the DSO. | 
 | 82 |  */ | 
 | 83 | VERSION | 
 | 84 | { | 
 | 85 |   LINUX_2.5 { | 
 | 86 |     global: | 
 | 87 | 	__kernel_syscall_via_break; | 
 | 88 | 	__kernel_syscall_via_epc; | 
 | 89 | 	__kernel_sigtramp; | 
 | 90 |  | 
 | 91 |     local: *; | 
 | 92 |   }; | 
 | 93 | } | 
 | 94 |  | 
 | 95 | /* The ELF entry point can be used to set the AT_SYSINFO value.  */ | 
 | 96 | ENTRY(__kernel_syscall_via_epc) |