| Jonas Bonn | f8c4a27 | 2011-06-04 21:52:05 +0300 | [diff] [blame] | 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 aligment to PAGE !!! | 
|  | 23 | *		- recheck if all aligments 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-generic/vmlinux.lds.h> | 
|  | 32 |  | 
|  | 33 | OUTPUT_FORMAT("elf32-or32", "elf32-or32", "elf32-or32") | 
|  | 34 | jiffies = jiffies_64 + 4; | 
|  | 35 |  | 
|  | 36 | SECTIONS | 
|  | 37 | { | 
|  | 38 | /* Read-only sections, merged into text segment: */ | 
|  | 39 | . = LOAD_BASE ; | 
|  | 40 |  | 
|  | 41 | /* _s_kernel_ro must be page aligned */ | 
|  | 42 | . = ALIGN(PAGE_SIZE); | 
|  | 43 | _s_kernel_ro = .; | 
|  | 44 |  | 
|  | 45 | .text                   : AT(ADDR(.text) - LOAD_OFFSET) | 
|  | 46 | { | 
|  | 47 | _stext = .; | 
|  | 48 | TEXT_TEXT | 
|  | 49 | SCHED_TEXT | 
|  | 50 | LOCK_TEXT | 
|  | 51 | KPROBES_TEXT | 
|  | 52 | IRQENTRY_TEXT | 
|  | 53 | *(.fixup) | 
|  | 54 | *(.text.__*) | 
|  | 55 | _etext = .; | 
|  | 56 | } | 
|  | 57 | /* TODO: Check if fixup and text.__* are really necessary | 
|  | 58 | * fixup is definitely necessary | 
|  | 59 | */ | 
|  | 60 |  | 
|  | 61 | _sdata = .; | 
|  | 62 |  | 
|  | 63 | /* Page alignment required for RO_DATA_SECTION */ | 
|  | 64 | RO_DATA_SECTION(PAGE_SIZE) | 
|  | 65 | _e_kernel_ro = .; | 
|  | 66 |  | 
|  | 67 | /* Whatever comes after _e_kernel_ro had better be page-aligend, too */ | 
|  | 68 |  | 
|  | 69 | /* 32 here is cacheline size... recheck this */ | 
|  | 70 | RW_DATA_SECTION(32, PAGE_SIZE, PAGE_SIZE) | 
|  | 71 |  | 
|  | 72 | _edata  =  .; | 
|  | 73 |  | 
|  | 74 | EXCEPTION_TABLE(4) | 
|  | 75 | NOTES | 
|  | 76 |  | 
|  | 77 | /* Init code and data */ | 
|  | 78 | . = ALIGN(PAGE_SIZE); | 
|  | 79 | __init_begin = .; | 
|  | 80 |  | 
|  | 81 | HEAD_TEXT_SECTION | 
|  | 82 |  | 
|  | 83 | /* Page aligned */ | 
|  | 84 | INIT_TEXT_SECTION(PAGE_SIZE) | 
|  | 85 |  | 
|  | 86 | /* Align __setup_start on 16 byte boundary */ | 
|  | 87 | INIT_DATA_SECTION(16) | 
|  | 88 |  | 
|  | 89 | PERCPU_SECTION(L1_CACHE_BYTES) | 
|  | 90 |  | 
|  | 91 | __init_end = .; | 
|  | 92 |  | 
|  | 93 | . = ALIGN(PAGE_SIZE); | 
|  | 94 | .initrd			: AT(ADDR(.initrd) - LOAD_OFFSET) | 
|  | 95 | { | 
|  | 96 | __initrd_start = .; | 
|  | 97 | *(.initrd) | 
|  | 98 | __initrd_end = .; | 
|  | 99 | FILL (0); | 
|  | 100 | . = ALIGN (PAGE_SIZE); | 
|  | 101 | } | 
|  | 102 |  | 
|  | 103 | __vmlinux_end = .;            /* last address of the physical file */ | 
|  | 104 |  | 
|  | 105 | BSS_SECTION(0, 0, 0x20) | 
|  | 106 |  | 
|  | 107 | _end = .; | 
|  | 108 |  | 
|  | 109 | /* Throw in the debugging sections */ | 
|  | 110 | STABS_DEBUG | 
|  | 111 | DWARF_DEBUG | 
|  | 112 |  | 
|  | 113 | /* Sections to be discarded -- must be last */ | 
|  | 114 | DISCARDS | 
|  | 115 | } |