linux/arch/mips/vdso/vdso.lds.S
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2015 Imagination Technologies
   3 * Author: Alex Smith <alex.smith@imgtec.com>
   4 *
   5 * This program is free software; you can redistribute it and/or modify it
   6 * under the terms of the GNU General Public License as published by the
   7 * Free Software Foundation;  either version 2 of the  License, or (at your
   8 * option) any later version.
   9 */
  10
  11#include <asm/sgidefs.h>
  12
  13#if _MIPS_SIM == _MIPS_SIM_ABI64
  14OUTPUT_FORMAT("elf64-tradlittlemips", "elf64-tradbigmips", "elf64-tradlittlemips")
  15#elif _MIPS_SIM == _MIPS_SIM_NABI32
  16OUTPUT_FORMAT("elf32-ntradlittlemips", "elf32-ntradbigmips", "elf32-ntradlittlemips")
  17#else
  18OUTPUT_FORMAT("elf32-tradlittlemips", "elf32-tradbigmips", "elf32-tradlittlemips")
  19#endif
  20
  21OUTPUT_ARCH(mips)
  22
  23SECTIONS
  24{
  25        PROVIDE(_start = .);
  26        . = SIZEOF_HEADERS;
  27
  28        /*
  29         * In order to retain compatibility with older toolchains we provide the
  30         * ABI flags section ourself. Newer assemblers will automatically
  31         * generate .MIPS.abiflags sections so we discard such input sections,
  32         * and then manually define our own section here. genvdso will patch
  33         * this section to have the correct name/type.
  34         */
  35        .mips_abiflags  : { *(.mips_abiflags) }         :text :abiflags
  36
  37        .reginfo        : { *(.reginfo) }               :text :reginfo
  38
  39        .hash           : { *(.hash) }                  :text
  40        .gnu.hash       : { *(.gnu.hash) }
  41        .dynsym         : { *(.dynsym) }
  42        .dynstr         : { *(.dynstr) }
  43        .gnu.version    : { *(.gnu.version) }
  44        .gnu.version_d  : { *(.gnu.version_d) }
  45        .gnu.version_r  : { *(.gnu.version_r) }
  46
  47        .note           : { *(.note.*) }                :text :note
  48
  49        .text           : { *(.text*) }                 :text
  50        PROVIDE (__etext = .);
  51        PROVIDE (_etext = .);
  52        PROVIDE (etext = .);
  53
  54        .eh_frame_hdr   : { *(.eh_frame_hdr) }          :text :eh_frame_hdr
  55        .eh_frame       : { KEEP (*(.eh_frame)) }       :text
  56
  57        .dynamic        : { *(.dynamic) }               :text :dynamic
  58
  59        .rodata         : { *(.rodata*) }               :text
  60
  61        _end = .;
  62        PROVIDE(end = .);
  63
  64        /DISCARD/       : {
  65                *(.MIPS.abiflags)
  66                *(.gnu.attributes)
  67                *(.note.GNU-stack)
  68                *(.data .data.* .gnu.linkonce.d.* .sdata*)
  69                *(.bss .sbss .dynbss .dynsbss)
  70        }
  71}
  72
  73PHDRS
  74{
  75        /*
  76         * Provide a PT_MIPS_ABIFLAGS header to assign the ABI flags section
  77         * to. We can specify the header type directly here so no modification
  78         * is needed later on.
  79         */
  80        abiflags        0x70000003;
  81
  82        /*
  83         * The ABI flags header must exist directly after the PT_INTERP header,
  84         * so we must explicitly place the PT_MIPS_REGINFO header after it to
  85         * stop the linker putting one in at the start.
  86         */
  87        reginfo         0x70000000;
  88
  89        text            PT_LOAD         FLAGS(5) FILEHDR PHDRS; /* PF_R|PF_X */
  90        dynamic         PT_DYNAMIC      FLAGS(4);               /* PF_R */
  91        note            PT_NOTE         FLAGS(4);               /* PF_R */
  92        eh_frame_hdr    PT_GNU_EH_FRAME;
  93}
  94
  95VERSION
  96{
  97        LINUX_2.6 {
  98#ifndef DISABLE_MIPS_VDSO
  99        global:
 100                __vdso_clock_gettime;
 101                __vdso_gettimeofday;
 102#endif
 103        local: *;
 104        };
 105}
 106