xref: /openbmc/linux/arch/x86/um/vdso/vdso-layout.lds.S (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
25c48b108SAl Viro/*
35c48b108SAl Viro * Linker script for vDSO.  This is an ELF shared object prelinked to
45c48b108SAl Viro * its virtual address, and with only one read-only segment.
55c48b108SAl Viro * This script controls its layout.
65c48b108SAl Viro */
75c48b108SAl Viro
85c48b108SAl ViroSECTIONS
95c48b108SAl Viro{
105c48b108SAl Viro	. = VDSO_PRELINK + SIZEOF_HEADERS;
115c48b108SAl Viro
125c48b108SAl Viro	.hash		: { *(.hash) }			:text
135c48b108SAl Viro	.gnu.hash	: { *(.gnu.hash) }
145c48b108SAl Viro	.dynsym		: { *(.dynsym) }
155c48b108SAl Viro	.dynstr		: { *(.dynstr) }
165c48b108SAl Viro	.gnu.version	: { *(.gnu.version) }
175c48b108SAl Viro	.gnu.version_d	: { *(.gnu.version_d) }
185c48b108SAl Viro	.gnu.version_r	: { *(.gnu.version_r) }
195c48b108SAl Viro
205c48b108SAl Viro	.note		: { *(.note.*) }		:text	:note
215c48b108SAl Viro
225c48b108SAl Viro	.eh_frame_hdr	: { *(.eh_frame_hdr) }		:text	:eh_frame_hdr
235c48b108SAl Viro	.eh_frame	: { KEEP (*(.eh_frame)) }	:text
245c48b108SAl Viro
255c48b108SAl Viro	.dynamic	: { *(.dynamic) }		:text	:dynamic
265c48b108SAl Viro
275c48b108SAl Viro	.rodata		: { *(.rodata*) }		:text
285c48b108SAl Viro	.data		: {
295c48b108SAl Viro	      *(.data*)
305c48b108SAl Viro	      *(.sdata*)
315c48b108SAl Viro	      *(.got.plt) *(.got)
325c48b108SAl Viro	      *(.gnu.linkonce.d.*)
335c48b108SAl Viro	      *(.bss*)
345c48b108SAl Viro	      *(.dynbss*)
355c48b108SAl Viro	      *(.gnu.linkonce.b.*)
365c48b108SAl Viro	}
375c48b108SAl Viro
385c48b108SAl Viro	.altinstructions	: { *(.altinstructions) }
395c48b108SAl Viro	.altinstr_replacement	: { *(.altinstr_replacement) }
405c48b108SAl Viro
415c48b108SAl Viro	/*
425c48b108SAl Viro	 * Align the actual code well away from the non-instruction data.
435c48b108SAl Viro	 * This is the best thing for the I-cache.
445c48b108SAl Viro	 */
455c48b108SAl Viro	. = ALIGN(0x100);
465c48b108SAl Viro
475c48b108SAl Viro	.text		: { *(.text*) }			:text	=0x90909090
485c48b108SAl Viro}
495c48b108SAl Viro
505c48b108SAl Viro/*
515c48b108SAl Viro * Very old versions of ld do not recognize this name token; use the constant.
525c48b108SAl Viro */
535c48b108SAl Viro#define PT_GNU_EH_FRAME	0x6474e550
545c48b108SAl Viro
555c48b108SAl Viro/*
565c48b108SAl Viro * We must supply the ELF program headers explicitly to get just one
575c48b108SAl Viro * PT_LOAD segment, and set the flags explicitly to make segments read-only.
585c48b108SAl Viro */
595c48b108SAl ViroPHDRS
605c48b108SAl Viro{
615c48b108SAl Viro	text		PT_LOAD		FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
625c48b108SAl Viro	dynamic		PT_DYNAMIC	FLAGS(4);		/* PF_R */
635c48b108SAl Viro	note		PT_NOTE		FLAGS(4);		/* PF_R */
645c48b108SAl Viro	eh_frame_hdr	PT_GNU_EH_FRAME;
655c48b108SAl Viro}
66