cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

gate.lds.S (2740B)


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