1779df224SSven Schnelle/* SPDX-License-Identifier: GPL-2.0 */ 2779df224SSven Schnelle/* 3779df224SSven Schnelle * This is the infamous ld script for the 64 bits vdso 4779df224SSven Schnelle * library 5779df224SSven Schnelle */ 6779df224SSven Schnelle 7779df224SSven Schnelle#include <asm/page.h> 8779df224SSven Schnelle#include <asm/vdso.h> 9779df224SSven Schnelle 10779df224SSven SchnelleOUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390") 11779df224SSven SchnelleOUTPUT_ARCH(s390:31-bit) 12779df224SSven SchnelleENTRY(_start) 13779df224SSven Schnelle 14779df224SSven SchnelleSECTIONS 15779df224SSven Schnelle{ 16779df224SSven Schnelle PROVIDE(_vdso_data = . - __VVAR_PAGES * PAGE_SIZE); 17779df224SSven Schnelle#ifdef CONFIG_TIME_NS 18779df224SSven Schnelle PROVIDE(_timens_data = _vdso_data + PAGE_SIZE); 19779df224SSven Schnelle#endif 20779df224SSven Schnelle . = VDSO_LBASE + SIZEOF_HEADERS; 21779df224SSven Schnelle 22779df224SSven Schnelle .hash : { *(.hash) } :text 23779df224SSven Schnelle .gnu.hash : { *(.gnu.hash) } 24779df224SSven Schnelle .dynsym : { *(.dynsym) } 25779df224SSven Schnelle .dynstr : { *(.dynstr) } 26779df224SSven Schnelle .gnu.version : { *(.gnu.version) } 27779df224SSven Schnelle .gnu.version_d : { *(.gnu.version_d) } 28779df224SSven Schnelle .gnu.version_r : { *(.gnu.version_r) } 29779df224SSven Schnelle 30779df224SSven Schnelle .note : { *(.note.*) } :text :note 31779df224SSven Schnelle 32779df224SSven Schnelle . = ALIGN(16); 33779df224SSven Schnelle .text : { 34779df224SSven Schnelle *(.text .stub .text.* .gnu.linkonce.t.*) 35779df224SSven Schnelle } :text 36779df224SSven Schnelle PROVIDE(__etext = .); 37779df224SSven Schnelle PROVIDE(_etext = .); 38779df224SSven Schnelle PROVIDE(etext = .); 39779df224SSven Schnelle 40779df224SSven Schnelle /* 41779df224SSven Schnelle * Other stuff is appended to the text segment: 42779df224SSven Schnelle */ 43779df224SSven Schnelle .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 44779df224SSven Schnelle .rodata1 : { *(.rodata1) } 45779df224SSven Schnelle 46779df224SSven Schnelle .dynamic : { *(.dynamic) } :text :dynamic 47779df224SSven Schnelle 48779df224SSven Schnelle .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr 49779df224SSven Schnelle .eh_frame : { KEEP (*(.eh_frame)) } :text 50779df224SSven Schnelle .gcc_except_table : { *(.gcc_except_table .gcc_except_table.*) } 51779df224SSven Schnelle 52779df224SSven Schnelle .rela.dyn ALIGN(8) : { *(.rela.dyn) } 53779df224SSven Schnelle .got ALIGN(8) : { *(.got .toc) } 54*7561c14dSSumanth Korikkar .got.plt ALIGN(8) : { *(.got.plt) } 55779df224SSven Schnelle 56779df224SSven Schnelle _end = .; 57779df224SSven Schnelle PROVIDE(end = .); 58779df224SSven Schnelle 59779df224SSven Schnelle /* 60779df224SSven Schnelle * Stabs debugging sections are here too. 61779df224SSven Schnelle */ 62779df224SSven Schnelle .stab 0 : { *(.stab) } 63779df224SSven Schnelle .stabstr 0 : { *(.stabstr) } 64779df224SSven Schnelle .stab.excl 0 : { *(.stab.excl) } 65779df224SSven Schnelle .stab.exclstr 0 : { *(.stab.exclstr) } 66779df224SSven Schnelle .stab.index 0 : { *(.stab.index) } 67779df224SSven Schnelle .stab.indexstr 0 : { *(.stab.indexstr) } 68779df224SSven Schnelle .comment 0 : { *(.comment) } 69779df224SSven Schnelle 70779df224SSven Schnelle /* 71779df224SSven Schnelle * DWARF debug sections. 72779df224SSven Schnelle * Symbols in the DWARF debugging sections are relative to the 73779df224SSven Schnelle * beginning of the section so we begin them at 0. 74779df224SSven Schnelle */ 75779df224SSven Schnelle /* DWARF 1 */ 76779df224SSven Schnelle .debug 0 : { *(.debug) } 77779df224SSven Schnelle .line 0 : { *(.line) } 78779df224SSven Schnelle /* GNU DWARF 1 extensions */ 79779df224SSven Schnelle .debug_srcinfo 0 : { *(.debug_srcinfo) } 80779df224SSven Schnelle .debug_sfnames 0 : { *(.debug_sfnames) } 81779df224SSven Schnelle /* DWARF 1.1 and DWARF 2 */ 82779df224SSven Schnelle .debug_aranges 0 : { *(.debug_aranges) } 83779df224SSven Schnelle .debug_pubnames 0 : { *(.debug_pubnames) } 84779df224SSven Schnelle /* DWARF 2 */ 85779df224SSven Schnelle .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } 86779df224SSven Schnelle .debug_abbrev 0 : { *(.debug_abbrev) } 87779df224SSven Schnelle .debug_line 0 : { *(.debug_line) } 88779df224SSven Schnelle .debug_frame 0 : { *(.debug_frame) } 89779df224SSven Schnelle .debug_str 0 : { *(.debug_str) } 90779df224SSven Schnelle .debug_loc 0 : { *(.debug_loc) } 91779df224SSven Schnelle .debug_macinfo 0 : { *(.debug_macinfo) } 92779df224SSven Schnelle /* SGI/MIPS DWARF 2 extensions */ 93779df224SSven Schnelle .debug_weaknames 0 : { *(.debug_weaknames) } 94779df224SSven Schnelle .debug_funcnames 0 : { *(.debug_funcnames) } 95779df224SSven Schnelle .debug_typenames 0 : { *(.debug_typenames) } 96779df224SSven Schnelle .debug_varnames 0 : { *(.debug_varnames) } 97779df224SSven Schnelle /* DWARF 3 */ 98779df224SSven Schnelle .debug_pubtypes 0 : { *(.debug_pubtypes) } 99779df224SSven Schnelle .debug_ranges 0 : { *(.debug_ranges) } 100779df224SSven Schnelle .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } 101779df224SSven Schnelle 102779df224SSven Schnelle /DISCARD/ : { 103779df224SSven Schnelle *(.note.GNU-stack) 104779df224SSven Schnelle *(.branch_lt) 105779df224SSven Schnelle *(.data .data.* .gnu.linkonce.d.* .sdata*) 106779df224SSven Schnelle *(.bss .sbss .dynbss .dynsbss) 107779df224SSven Schnelle } 108779df224SSven Schnelle} 109779df224SSven Schnelle 110779df224SSven Schnelle/* 111779df224SSven Schnelle * Very old versions of ld do not recognize this name token; use the constant. 112779df224SSven Schnelle */ 113779df224SSven Schnelle#define PT_GNU_EH_FRAME 0x6474e550 114779df224SSven Schnelle 115779df224SSven Schnelle/* 116779df224SSven Schnelle * We must supply the ELF program headers explicitly to get just one 117779df224SSven Schnelle * PT_LOAD segment, and set the flags explicitly to make segments read-only. 118779df224SSven Schnelle */ 119779df224SSven SchnellePHDRS 120779df224SSven Schnelle{ 121779df224SSven Schnelle text PT_LOAD FILEHDR PHDRS FLAGS(5); /* PF_R|PF_X */ 122779df224SSven Schnelle dynamic PT_DYNAMIC FLAGS(4); /* PF_R */ 123779df224SSven Schnelle note PT_NOTE FLAGS(4); /* PF_R */ 124779df224SSven Schnelle eh_frame_hdr PT_GNU_EH_FRAME; 125779df224SSven Schnelle} 126779df224SSven Schnelle 127779df224SSven Schnelle/* 128779df224SSven Schnelle * This controls what symbols we export from the DSO. 129779df224SSven Schnelle */ 130779df224SSven SchnelleVERSION 131779df224SSven Schnelle{ 132779df224SSven Schnelle VDSO_VERSION_STRING { 133779df224SSven Schnelle global: 134779df224SSven Schnelle /* 135779df224SSven Schnelle * Has to be there for the kernel to find 136779df224SSven Schnelle */ 137779df224SSven Schnelle __kernel_compat_restart_syscall; 138779df224SSven Schnelle __kernel_compat_rt_sigreturn; 139779df224SSven Schnelle __kernel_compat_sigreturn; 140779df224SSven Schnelle local: *; 141779df224SSven Schnelle }; 142779df224SSven Schnelle} 143