linux/arch/openrisc/kernel/vmlinux.lds.S
<<
>>
Prefs
   1/*
   2 * OpenRISC vmlinux.lds.S
   3 *
   4 * Linux architectural port borrowing liberally from similar works of
   5 * others.  All original copyrights apply as per the original source
   6 * declaration.
   7 *
   8 * Modifications for the OpenRISC architecture:
   9 * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
  10 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
  11 *
  12 *      This program is free software; you can redistribute it and/or
  13 *      modify it under the terms of the GNU General Public License
  14 *      as published by the Free Software Foundation; either version
  15 *      2 of the License, or (at your option) any later version.
  16 *
  17 * ld script for OpenRISC architecture
  18 */
  19
  20/* TODO
  21 *              - clean up __offset & stuff
  22 *              - change all 8192 alignment to PAGE !!!
  23 *              - recheck if all alignments are really needed
  24 */
  25
  26#  define LOAD_OFFSET  PAGE_OFFSET
  27#  define LOAD_BASE    PAGE_OFFSET
  28
  29#include <asm/page.h>
  30#include <asm/cache.h>
  31#include <asm/thread_info.h>
  32#include <asm-generic/vmlinux.lds.h>
  33
  34#ifdef __OR1K__
  35#define __OUTPUT_FORMAT        "elf32-or1k"
  36#else
  37#define __OUTPUT_FORMAT        "elf32-or32"
  38#endif
  39
  40OUTPUT_FORMAT(__OUTPUT_FORMAT, __OUTPUT_FORMAT, __OUTPUT_FORMAT)
  41jiffies = jiffies_64 + 4;
  42
  43SECTIONS
  44{
  45        /* Read-only sections, merged into text segment: */
  46        . = LOAD_BASE ;
  47
  48        _text = .;
  49
  50        /* _s_kernel_ro must be page aligned */
  51        . = ALIGN(PAGE_SIZE);
  52        _s_kernel_ro = .;
  53
  54        .text                   : AT(ADDR(.text) - LOAD_OFFSET)
  55        {
  56          _stext = .;
  57          TEXT_TEXT
  58          SCHED_TEXT
  59          CPUIDLE_TEXT
  60          LOCK_TEXT
  61          KPROBES_TEXT
  62          IRQENTRY_TEXT
  63          SOFTIRQENTRY_TEXT
  64          *(.fixup)
  65          *(.text.__*)
  66          _etext = .;
  67        }
  68        /* TODO: Check if fixup and text.__* are really necessary
  69         * fixup is definitely necessary
  70         */
  71
  72        _sdata = .;
  73
  74        /* Page alignment required for RO_DATA_SECTION */
  75        RO_DATA_SECTION(PAGE_SIZE)
  76        _e_kernel_ro = .;
  77
  78        /* Whatever comes after _e_kernel_ro had better be page-aligend, too */
  79
  80        /* 32 here is cacheline size... recheck this */
  81        RW_DATA_SECTION(32, PAGE_SIZE, PAGE_SIZE)
  82
  83        _edata  =  .;
  84
  85        EXCEPTION_TABLE(4)
  86        NOTES
  87
  88        /* Init code and data */
  89        . = ALIGN(PAGE_SIZE);
  90        __init_begin = .;
  91
  92        HEAD_TEXT_SECTION
  93
  94        /* Page aligned */
  95        INIT_TEXT_SECTION(PAGE_SIZE)
  96
  97        /* Align __setup_start on 16 byte boundary */
  98        INIT_DATA_SECTION(16)
  99
 100        PERCPU_SECTION(L1_CACHE_BYTES)
 101
 102        __init_end = .;
 103
 104        . = ALIGN(PAGE_SIZE);
 105        .initrd                 : AT(ADDR(.initrd) - LOAD_OFFSET)
 106        {
 107                __initrd_start = .;
 108                *(.initrd)
 109                __initrd_end = .;
 110                FILL (0);
 111                . = ALIGN (PAGE_SIZE);
 112        }
 113
 114        __vmlinux_end = .;            /* last address of the physical file */
 115
 116        BSS_SECTION(0, 0, 0x20)
 117
 118        _end = .;
 119
 120        /* Throw in the debugging sections */
 121        STABS_DEBUG
 122        DWARF_DEBUG
 123
 124        /* Sections to be discarded -- must be last */
 125        DISCARDS
 126}
 127