^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * This is the infamous ld script for the 32 bits vdso
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * library
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <asm/vdso.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #ifdef __LITTLE_ENDIAN__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) OUTPUT_FORMAT("elf32-powerpcle", "elf32-powerpcle", "elf32-powerpcle")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) OUTPUT_ARCH(powerpc:common)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) ENTRY(_start)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) SECTIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) . = VDSO32_LBASE + SIZEOF_HEADERS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) .hash : { *(.hash) } :text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) .gnu.hash : { *(.gnu.hash) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) .dynsym : { *(.dynsym) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) .dynstr : { *(.dynstr) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) .gnu.version : { *(.gnu.version) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) .gnu.version_d : { *(.gnu.version_d) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) .gnu.version_r : { *(.gnu.version_r) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) .note : { *(.note.*) } :text :note
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) . = ALIGN(16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) .text : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) *(.text .stub .text.* .gnu.linkonce.t.* __ftr_alt_*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) } :text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) PROVIDE(__etext = .);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) PROVIDE(_etext = .);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) PROVIDE(etext = .);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) . = ALIGN(8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) __ftr_fixup : { *(__ftr_fixup) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) . = ALIGN(8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) __mmu_ftr_fixup : { *(__mmu_ftr_fixup) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) . = ALIGN(8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) __lwsync_fixup : { *(__lwsync_fixup) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #ifdef CONFIG_PPC64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) . = ALIGN(8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) __fw_ftr_fixup : { *(__fw_ftr_fixup) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) * Other stuff is appended to the text segment:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) .rodata1 : { *(.rodata1) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) .eh_frame : { KEEP (*(.eh_frame)) } :text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) .gcc_except_table : { *(.gcc_except_table) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) .fixup : { *(.fixup) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) .dynamic : { *(.dynamic) } :text :dynamic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) .got : { *(.got) } :text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) .plt : { *(.plt) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) _end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) __end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) PROVIDE(end = .);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) * Stabs debugging sections are here too.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) .stab 0 : { *(.stab) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) .stabstr 0 : { *(.stabstr) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) .stab.excl 0 : { *(.stab.excl) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) .stab.exclstr 0 : { *(.stab.exclstr) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) .stab.index 0 : { *(.stab.index) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) .stab.indexstr 0 : { *(.stab.indexstr) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) .comment 0 : { *(.comment) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) * DWARF debug sections.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) * Symbols in the DWARF debugging sections are relative to the beginning
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) * of the section so we begin them at 0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) /* DWARF 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) .debug 0 : { *(.debug) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) .line 0 : { *(.line) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) /* GNU DWARF 1 extensions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) .debug_srcinfo 0 : { *(.debug_srcinfo) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) .debug_sfnames 0 : { *(.debug_sfnames) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) /* DWARF 1.1 and DWARF 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) .debug_aranges 0 : { *(.debug_aranges) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) .debug_pubnames 0 : { *(.debug_pubnames) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) /* DWARF 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) .debug_abbrev 0 : { *(.debug_abbrev) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) .debug_line 0 : { *(.debug_line) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) .debug_frame 0 : { *(.debug_frame) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) .debug_str 0 : { *(.debug_str) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) .debug_loc 0 : { *(.debug_loc) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) .debug_macinfo 0 : { *(.debug_macinfo) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) /* SGI/MIPS DWARF 2 extensions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) .debug_weaknames 0 : { *(.debug_weaknames) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) .debug_funcnames 0 : { *(.debug_funcnames) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) .debug_typenames 0 : { *(.debug_typenames) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) .debug_varnames 0 : { *(.debug_varnames) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) /DISCARD/ : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) *(.note.GNU-stack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) *(.data .data.* .gnu.linkonce.d.* .sdata*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) *(.bss .sbss .dynbss .dynsbss)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) * Very old versions of ld do not recognize this name token; use the constant.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define PT_GNU_EH_FRAME 0x6474e550
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) * We must supply the ELF program headers explicitly to get just one
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) * PT_LOAD segment, and set the flags explicitly to make segments read-only.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) PHDRS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) text PT_LOAD FILEHDR PHDRS FLAGS(5); /* PF_R|PF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) note PT_NOTE FLAGS(4); /* PF_R */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) eh_frame_hdr PT_GNU_EH_FRAME;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) * This controls what symbols we export from the DSO.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) VERSION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) VDSO_VERSION_STRING {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) global:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) * Has to be there for the kernel to find
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) __kernel_datapage_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) __kernel_get_syscall_map;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) __kernel_gettimeofday;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) __kernel_clock_gettime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) __kernel_clock_getres;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) __kernel_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) __kernel_get_tbfreq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) __kernel_sync_dicache;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) __kernel_sync_dicache_p5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) __kernel_sigtramp32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) __kernel_sigtramp_rt32;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #if defined(CONFIG_PPC64) || !defined(CONFIG_SMP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) __kernel_getcpu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) local: *;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) }