116bfeaf2SMichal Simek/* 216bfeaf2SMichal Simek * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu> 316bfeaf2SMichal Simek * Copyright (C) 2008-2009 PetaLogix 416bfeaf2SMichal Simek * Copyright (C) 2006 Atmark Techno, Inc. 516bfeaf2SMichal Simek * 616bfeaf2SMichal Simek * This file is subject to the terms and conditions of the GNU General Public 716bfeaf2SMichal Simek * License. See the file "COPYING" in the main directory of this archive 816bfeaf2SMichal Simek * for more details. 916bfeaf2SMichal Simek */ 1016bfeaf2SMichal Simek 1116bfeaf2SMichal SimekOUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze") 1216bfeaf2SMichal SimekOUTPUT_ARCH(microblaze) 1316bfeaf2SMichal SimekENTRY(_start) 1416bfeaf2SMichal Simek 158cc11f5aSTim Abbott#include <asm/page.h> 16a061dd52SMichal Simek#include <asm-generic/vmlinux.lds.h> 178cc11f5aSTim Abbott#include <asm/thread_info.h> 1816bfeaf2SMichal Simek 1916bfeaf2SMichal Simekjiffies = jiffies_64 + 4; 2016bfeaf2SMichal Simek 2116bfeaf2SMichal SimekSECTIONS { 22d4c1285eSMichal Simek . = CONFIG_KERNEL_START; 23cfa9a775SMichal Simek _start = CONFIG_KERNEL_BASE_ADDR; 24a061dd52SMichal Simek .text : AT(ADDR(.text) - LOAD_OFFSET) { 2516bfeaf2SMichal Simek _text = . ; 2616bfeaf2SMichal Simek _stext = . ; 2716bfeaf2SMichal Simek *(.text .text.*) 2816bfeaf2SMichal Simek *(.fixup) 291dcdd091SMichal Simek EXIT_TEXT 301dcdd091SMichal Simek EXIT_CALL 3116bfeaf2SMichal Simek SCHED_TEXT 3216bfeaf2SMichal Simek LOCK_TEXT 3316bfeaf2SMichal Simek KPROBES_TEXT 3416bfeaf2SMichal Simek . = ALIGN (4) ; 3516bfeaf2SMichal Simek _etext = . ; 3616bfeaf2SMichal Simek } 3716bfeaf2SMichal Simek 3816bfeaf2SMichal Simek . = ALIGN (4) ; 39a061dd52SMichal Simek __fdt_blob : AT(ADDR(__fdt_blob) - LOAD_OFFSET) { 4016bfeaf2SMichal Simek _fdt_start = . ; /* place for fdt blob */ 41a061dd52SMichal Simek *(__fdt_blob) ; /* Any link-placed DTB */ 42a061dd52SMichal Simek . = _fdt_start + 0x4000; /* Pad up to 16kbyte */ 4316bfeaf2SMichal Simek _fdt_end = . ; 44a061dd52SMichal Simek } 4516bfeaf2SMichal Simek 4616bfeaf2SMichal Simek . = ALIGN(16); 4716bfeaf2SMichal Simek RODATA 488cc11f5aSTim Abbott EXCEPTION_TABLE(16) 4916bfeaf2SMichal Simek 5016bfeaf2SMichal Simek /* 5116bfeaf2SMichal Simek * sdata2 section can go anywhere, but must be word aligned 5216bfeaf2SMichal Simek * and SDA2_BASE must point to the middle of it 5316bfeaf2SMichal Simek */ 54a061dd52SMichal Simek .sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) { 5516bfeaf2SMichal Simek _ssrw = .; 5616bfeaf2SMichal Simek . = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */ 5716bfeaf2SMichal Simek *(.sdata2) 5816bfeaf2SMichal Simek . = ALIGN(8); 5916bfeaf2SMichal Simek _essrw = .; 6016bfeaf2SMichal Simek _ssrw_size = _essrw - _ssrw; 6116bfeaf2SMichal Simek _KERNEL_SDA2_BASE_ = _ssrw + (_ssrw_size / 2); 6216bfeaf2SMichal Simek } 6316bfeaf2SMichal Simek 6416bfeaf2SMichal Simek _sdata = . ; 658cc11f5aSTim Abbott RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE) 6616bfeaf2SMichal Simek _edata = . ; 6716bfeaf2SMichal Simek 6816bfeaf2SMichal Simek /* Reserve some low RAM for r0 based memory references */ 6916bfeaf2SMichal Simek . = ALIGN(0x4) ; 7016bfeaf2SMichal Simek r0_ram = . ; 7116bfeaf2SMichal Simek . = . + 4096; /* a page should be enough */ 7216bfeaf2SMichal Simek 7316bfeaf2SMichal Simek /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ 7416bfeaf2SMichal Simek . = ALIGN(8); 75a061dd52SMichal Simek .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) { 7616bfeaf2SMichal Simek _ssro = .; 7716bfeaf2SMichal Simek *(.sdata) 7816bfeaf2SMichal Simek } 7916bfeaf2SMichal Simek 80a061dd52SMichal Simek .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { 8116bfeaf2SMichal Simek _ssbss = .; 8216bfeaf2SMichal Simek *(.sbss) 8316bfeaf2SMichal Simek _esbss = .; 8416bfeaf2SMichal Simek _essro = .; 8516bfeaf2SMichal Simek _ssro_size = _essro - _ssro ; 8616bfeaf2SMichal Simek _KERNEL_SDA_BASE_ = _ssro + (_ssro_size / 2) ; 8716bfeaf2SMichal Simek } 8816bfeaf2SMichal Simek 8913cdee23SMichal Simek . = ALIGN(PAGE_SIZE); 9016bfeaf2SMichal Simek __init_begin = .; 9116bfeaf2SMichal Simek 928cc11f5aSTim Abbott INIT_TEXT_SECTION(PAGE_SIZE) 9316bfeaf2SMichal Simek 94a061dd52SMichal Simek .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { 9505bf7d46SMichal Simek INIT_DATA 9605bf7d46SMichal Simek } 9716bfeaf2SMichal Simek 9816bfeaf2SMichal Simek . = ALIGN(4); 99a061dd52SMichal Simek .init.ivt : AT(ADDR(.init.ivt) - LOAD_OFFSET) { 10016bfeaf2SMichal Simek __ivt_start = .; 10116bfeaf2SMichal Simek *(.init.ivt) 10216bfeaf2SMichal Simek __ivt_end = .; 10316bfeaf2SMichal Simek } 10416bfeaf2SMichal Simek 105a061dd52SMichal Simek .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) { 1068cc11f5aSTim Abbott INIT_SETUP(0) 10716bfeaf2SMichal Simek } 10816bfeaf2SMichal Simek 109a061dd52SMichal Simek .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET ) { 1108cc11f5aSTim Abbott INIT_CALLS 11116bfeaf2SMichal Simek } 11216bfeaf2SMichal Simek 113a061dd52SMichal Simek .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) { 1148cc11f5aSTim Abbott CON_INITCALL 11516bfeaf2SMichal Simek } 11616bfeaf2SMichal Simek 1176b437426SArnd Bergmann SECURITY_INIT 1186b437426SArnd Bergmann 11916bfeaf2SMichal Simek __init_end_before_initramfs = .; 12016bfeaf2SMichal Simek 121a061dd52SMichal Simek .init.ramfs ALIGN(4096) : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { 12216bfeaf2SMichal Simek __initramfs_start = .; 12316bfeaf2SMichal Simek *(.init.ramfs) 12416bfeaf2SMichal Simek __initramfs_end = .; 12516bfeaf2SMichal Simek . = ALIGN(4); 12616bfeaf2SMichal Simek LONG(0); 12716bfeaf2SMichal Simek/* 12816bfeaf2SMichal Simek * FIXME this can break initramfs for MMU. 12916bfeaf2SMichal Simek * Pad init.ramfs up to page boundary, 13016bfeaf2SMichal Simek * so that __init_end == __bss_start. This will make image.elf 13116bfeaf2SMichal Simek * consistent with the image.bin 13216bfeaf2SMichal Simek */ 13316bfeaf2SMichal Simek /* . = ALIGN(4096); */ 13416bfeaf2SMichal Simek } 13516bfeaf2SMichal Simek __init_end = .; 13616bfeaf2SMichal Simek 137a061dd52SMichal Simek .bss ALIGN (4096) : AT(ADDR(.bss) - LOAD_OFFSET) { 138a061dd52SMichal Simek /* page aligned when MMU used */ 13916bfeaf2SMichal Simek __bss_start = . ; 14016bfeaf2SMichal Simek *(.bss*) 14116bfeaf2SMichal Simek *(COMMON) 14216bfeaf2SMichal Simek . = ALIGN (4) ; 14316bfeaf2SMichal Simek __bss_stop = . ; 14416bfeaf2SMichal Simek _ebss = . ; 14516bfeaf2SMichal Simek } 14616bfeaf2SMichal Simek . = ALIGN(4096); 14716bfeaf2SMichal Simek _end = .; 148405d967dSTejun Heo 149023bf6f1STejun Heo DISCARDS 15016bfeaf2SMichal Simek} 151