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