| 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 | } |