xref: /openbmc/qemu/linux-user/i386/vdso.ld (revision 516fffc9933cb21fad41ca8f7bf465d238d4d375)
1*a1367443SRichard Henderson/*
2*a1367443SRichard Henderson * Linker script for linux i386 replacement vdso.
3*a1367443SRichard Henderson *
4*a1367443SRichard Henderson * Copyright 2023 Linaro, Ltd.
5*a1367443SRichard Henderson *
6*a1367443SRichard Henderson * SPDX-License-Identifier: GPL-2.0-or-later
7*a1367443SRichard Henderson */
8*a1367443SRichard Henderson
9*a1367443SRichard HendersonENTRY(__kernel_vsyscall)
10*a1367443SRichard Henderson
11*a1367443SRichard HendersonVERSION {
12*a1367443SRichard Henderson        LINUX_2.6 {
13*a1367443SRichard Henderson        global:
14*a1367443SRichard Henderson                __vdso_clock_gettime;
15*a1367443SRichard Henderson                __vdso_gettimeofday;
16*a1367443SRichard Henderson                __vdso_time;
17*a1367443SRichard Henderson                __vdso_clock_getres;
18*a1367443SRichard Henderson                __vdso_clock_gettime64;
19*a1367443SRichard Henderson                __vdso_getcpu;
20*a1367443SRichard Henderson        };
21*a1367443SRichard Henderson
22*a1367443SRichard Henderson        LINUX_2.5 {
23*a1367443SRichard Henderson        global:
24*a1367443SRichard Henderson                __kernel_vsyscall;
25*a1367443SRichard Henderson                __kernel_sigreturn;
26*a1367443SRichard Henderson                __kernel_rt_sigreturn;
27*a1367443SRichard Henderson        local: *;
28*a1367443SRichard Henderson        };
29*a1367443SRichard Henderson}
30*a1367443SRichard Henderson
31*a1367443SRichard HendersonPHDRS {
32*a1367443SRichard Henderson        phdr            PT_PHDR         FLAGS(4) PHDRS;
33*a1367443SRichard Henderson        load            PT_LOAD         FLAGS(7) FILEHDR PHDRS; /* FLAGS=RWX */
34*a1367443SRichard Henderson        dynamic         PT_DYNAMIC      FLAGS(4);
35*a1367443SRichard Henderson        eh_frame_hdr    PT_GNU_EH_FRAME;
36*a1367443SRichard Henderson        note            PT_NOTE         FLAGS(4);
37*a1367443SRichard Henderson}
38*a1367443SRichard Henderson
39*a1367443SRichard HendersonSECTIONS {
40*a1367443SRichard Henderson        . = SIZEOF_HEADERS;
41*a1367443SRichard Henderson
42*a1367443SRichard Henderson        /*
43*a1367443SRichard Henderson         * The following, including the FILEHDRS and PHDRS, are modified
44*a1367443SRichard Henderson         * when we relocate the binary.  We want them to be initially
45*a1367443SRichard Henderson         * writable for the relocation; we'll force them read-only after.
46*a1367443SRichard Henderson         */
47*a1367443SRichard Henderson        .note           : { *(.note*) }         :load :note
48*a1367443SRichard Henderson        .dynamic        : { *(.dynamic) }       :load :dynamic
49*a1367443SRichard Henderson        .dynsym         : { *(.dynsym) }        :load
50*a1367443SRichard Henderson        .data           : {
51*a1367443SRichard Henderson                /*
52*a1367443SRichard Henderson                 * There ought not be any real read-write data.
53*a1367443SRichard Henderson                 * But since we manipulated the segment layout,
54*a1367443SRichard Henderson                 * we have to put these sections somewhere.
55*a1367443SRichard Henderson                 */
56*a1367443SRichard Henderson                *(.data*)
57*a1367443SRichard Henderson                *(.sdata*)
58*a1367443SRichard Henderson                *(.got.plt) *(.got)
59*a1367443SRichard Henderson                *(.gnu.linkonce.d.*)
60*a1367443SRichard Henderson                *(.bss*)
61*a1367443SRichard Henderson                *(.dynbss*)
62*a1367443SRichard Henderson                *(.gnu.linkonce.b.*)
63*a1367443SRichard Henderson        }
64*a1367443SRichard Henderson
65*a1367443SRichard Henderson        .rodata         : { *(.rodata*) }
66*a1367443SRichard Henderson        .hash           : { *(.hash) }
67*a1367443SRichard Henderson        .gnu.hash       : { *(.gnu.hash) }
68*a1367443SRichard Henderson        .dynstr         : { *(.dynstr) }
69*a1367443SRichard Henderson        .gnu.version    : { *(.gnu.version) }
70*a1367443SRichard Henderson        .gnu.version_d  : { *(.gnu.version_d) }
71*a1367443SRichard Henderson        .gnu.version_r  : { *(.gnu.version_r) }
72*a1367443SRichard Henderson        .eh_frame_hdr   : { *(.eh_frame_hdr) }  :load :eh_frame_hdr
73*a1367443SRichard Henderson        .eh_frame       : { *(.eh_frame) }      :load
74*a1367443SRichard Henderson
75*a1367443SRichard Henderson        .text           : { *(.text*) }         :load   =0x90909090
76*a1367443SRichard Henderson}
77