Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#include <asm/vdso.h>
  3
  4/*
  5 * Linker script for vDSO.  This is an ELF shared object prelinked to
  6 * its virtual address, and with only one read-only segment.
  7 * This script controls its layout.
  8 */
  9
 10SECTIONS
 11{
 12	/*
 13	 * User/kernel shared data is before the vDSO.  This may be a little
 14	 * uglier than putting it after the vDSO, but it avoids issues with
 15	 * non-allocatable things that dangle past the end of the PT_LOAD
 16	 * segment.
 17	 */
 18
 19	vvar_start = . - 4 * PAGE_SIZE;
 20	vvar_page  = vvar_start;
 21
 22	/* Place all vvars at the offsets in asm/vvar.h. */
 23#define EMIT_VVAR(name, offset) vvar_ ## name = vvar_page + offset;
 24#include <asm/vvar.h>
 25#undef EMIT_VVAR
 26
 27	pvclock_page = vvar_start + PAGE_SIZE;
 28	hvclock_page = vvar_start + 2 * PAGE_SIZE;
 29	timens_page  = vvar_start + 3 * PAGE_SIZE;
 30
 31#undef _ASM_X86_VVAR_H
 32	/* Place all vvars in timens too at the offsets in asm/vvar.h. */
 33#define EMIT_VVAR(name, offset) timens_ ## name = timens_page + offset;
 34#include <asm/vvar.h>
 35#undef EMIT_VVAR
 36
 37	. = SIZEOF_HEADERS;
 38
 39	.hash		: { *(.hash) }			:text
 40	.gnu.hash	: { *(.gnu.hash) }
 41	.dynsym		: { *(.dynsym) }
 42	.dynstr		: { *(.dynstr) }
 43	.gnu.version	: { *(.gnu.version) }
 44	.gnu.version_d	: { *(.gnu.version_d) }
 45	.gnu.version_r	: { *(.gnu.version_r) }
 46
 47	.dynamic	: { *(.dynamic) }		:text	:dynamic
 48
 49	.rodata		: {
 50		*(.rodata*)
 51		*(.data*)
 52		*(.sdata*)
 53		*(.got.plt) *(.got)
 54		*(.gnu.linkonce.d.*)
 55		*(.bss*)
 56		*(.dynbss*)
 57		*(.gnu.linkonce.b.*)
 58	}						:text
 59
 60	/*
 61	 * Discard .note.gnu.property sections which are unused and have
 62	 * different alignment requirement from vDSO note sections.
 63	 */
 64	/DISCARD/ : {
 65		*(.note.gnu.property)
 66	}
 67	.note		: { *(.note.*) }		:text	:note
 68
 69	.eh_frame_hdr	: { *(.eh_frame_hdr) }		:text	:eh_frame_hdr
 70	.eh_frame	: { KEEP (*(.eh_frame)) }	:text
 71
 72
 73	/*
 74	 * Text is well-separated from actual data: there's plenty of
 75	 * stuff that isn't used at runtime in between.
 76	 */
 77
 78	.text		: {
 79		*(.text*)
 80	}						:text	=0x90909090,
 81
 82
 83
 84	.altinstructions	: { *(.altinstructions) }	:text
 85	.altinstr_replacement	: { *(.altinstr_replacement) }	:text
 86
 87	__ex_table		: { *(__ex_table) }		:text
 88
 89	/DISCARD/ : {
 90		*(.discard)
 91		*(.discard.*)
 92		*(__bug_table)
 93	}
 94}
 95
 96/*
 97 * Very old versions of ld do not recognize this name token; use the constant.
 98 */
 99#define PT_GNU_EH_FRAME	0x6474e550
100
101/*
102 * We must supply the ELF program headers explicitly to get just one
103 * PT_LOAD segment, and set the flags explicitly to make segments read-only.
104 */
105PHDRS
106{
107	text		PT_LOAD		FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
108	dynamic		PT_DYNAMIC	FLAGS(4);		/* PF_R */
109	note		PT_NOTE		FLAGS(4);		/* PF_R */
110	eh_frame_hdr	PT_GNU_EH_FRAME;
111}