linux/arch/arm64/kernel/vmlinux.lds.S
<<
>>
Prefs
   1/*
   2 * ld script to make ARM Linux kernel
   3 * taken from the i386 version by Russell King
   4 * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
   5 */
   6
   7#include <asm-generic/vmlinux.lds.h>
   8#include <asm/thread_info.h>
   9#include <asm/memory.h>
  10#include <asm/page.h>
  11
  12#define ARM_EXIT_KEEP(x)
  13#define ARM_EXIT_DISCARD(x)     x
  14
  15OUTPUT_ARCH(aarch64)
  16ENTRY(stext)
  17
  18jiffies = jiffies_64;
  19
  20SECTIONS
  21{
  22        /*
  23         * XXX: The linker does not define how output sections are
  24         * assigned to input sections when there are multiple statements
  25         * matching the same input section name.  There is no documented
  26         * order of matching.
  27         */
  28        /DISCARD/ : {
  29                ARM_EXIT_DISCARD(EXIT_TEXT)
  30                ARM_EXIT_DISCARD(EXIT_DATA)
  31                EXIT_CALL
  32                *(.discard)
  33                *(.discard.*)
  34        }
  35
  36        . = PAGE_OFFSET + TEXT_OFFSET;
  37
  38        .head.text : {
  39                _text = .;
  40                HEAD_TEXT
  41        }
  42        .text : {                       /* Real text segment            */
  43                _stext = .;             /* Text and read-only data      */
  44                        *(.smp.pen.text)
  45                        __exception_text_start = .;
  46                        *(.exception.text)
  47                        __exception_text_end = .;
  48                        IRQENTRY_TEXT
  49                        TEXT_TEXT
  50                        SCHED_TEXT
  51                        LOCK_TEXT
  52                        *(.fixup)
  53                        *(.gnu.warning)
  54                . = ALIGN(16);
  55                *(.got)                 /* Global offset table          */
  56        }
  57
  58        RO_DATA(PAGE_SIZE)
  59
  60        _etext = .;                     /* End of text and rodata section */
  61
  62        . = ALIGN(PAGE_SIZE);
  63        __init_begin = .;
  64
  65        INIT_TEXT_SECTION(8)
  66        .exit.text : {
  67                ARM_EXIT_KEEP(EXIT_TEXT)
  68        }
  69        . = ALIGN(16);
  70        .init.data : {
  71                INIT_DATA
  72                INIT_SETUP(16)
  73                INIT_CALLS
  74                CON_INITCALL
  75                SECURITY_INITCALL
  76                INIT_RAM_FS
  77        }
  78        .exit.data : {
  79                ARM_EXIT_KEEP(EXIT_DATA)
  80        }
  81
  82        PERCPU_SECTION(64)
  83
  84        __init_end = .;
  85        . = ALIGN(THREAD_SIZE);
  86        __data_loc = .;
  87
  88        .data : AT(__data_loc) {
  89                _data = .;              /* address in memory */
  90                _sdata = .;
  91
  92                /*
  93                 * first, the init task union, aligned
  94                 * to an 8192 byte boundary.
  95                 */
  96                INIT_TASK_DATA(THREAD_SIZE)
  97                NOSAVE_DATA
  98                CACHELINE_ALIGNED_DATA(64)
  99                READ_MOSTLY_DATA(64)
 100
 101                /*
 102                 * The exception fixup table (might need resorting at runtime)
 103                 */
 104                . = ALIGN(32);
 105                __start___ex_table = .;
 106                *(__ex_table)
 107                __stop___ex_table = .;
 108
 109                /*
 110                 * and the usual data section
 111                 */
 112                DATA_DATA
 113                CONSTRUCTORS
 114
 115                _edata = .;
 116        }
 117        _edata_loc = __data_loc + SIZEOF(.data);
 118
 119        NOTES
 120
 121        BSS_SECTION(0, 0, 0)
 122        _end = .;
 123
 124        STABS_DEBUG
 125        .comment 0 : { *(.comment) }
 126}
 127