lkml.org 
[lkml]   [2008]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 16/58] microblaze_v5: head.S + linker script
    Date
    From: Michal Simek <monstr@monstr.eu>

    Acked-by: Stephen Neuendorffer <stephen.neuendorffer@xilinx.com>
    Signed-off-by: Michal Simek <monstr@monstr.eu>
    ---
    arch/microblaze/kernel/head.S | 38 +++++++++
    arch/microblaze/kernel/vmlinux.lds.S | 142 ++++++++++++++++++++++++++++++++++
    2 files changed, 180 insertions(+), 0 deletions(-)
    create mode 100644 arch/microblaze/kernel/head.S
    create mode 100644 arch/microblaze/kernel/vmlinux.lds.S

    diff --git a/arch/microblaze/kernel/head.S b/arch/microblaze/kernel/head.S
    new file mode 100644
    index 0000000..8f87626
    --- /dev/null
    +++ b/arch/microblaze/kernel/head.S
    @@ -0,0 +1,38 @@
    +/*
    + * This file is subject to the terms and conditions of the GNU General Public
    + * License. See the file "COPYING" in the main directory of this archive
    + * for more details.
    + *
    + * Copyright (C) 2007 Michal Simek <monstr@monstr.eu>
    + * Copyright (C) 2006 Atmark Techno, Inc.
    + */
    +
    +#include <linux/linkage.h>
    +#include <asm/thread_info.h>
    +
    + .text
    +ENTRY(_start)
    + mfs r1, rmsr
    + andi r1, r1, ~2
    + mts rmsr, r1
    +
    + /* Initialize small data anchors */
    + la r13, r0, _KERNEL_SDA_BASE_
    + la r2, r0, _KERNEL_SDA2_BASE_
    +
    + /* Initialize stack pointer */
    + la r1, r0, init_thread_union + THREAD_SIZE - 4
    +
    + /* Initialize r31 with current task address */
    + la r31, r0, init_task
    +
    + /* Call platform dependent initialize function.
    + * Please see $(ARCH)/mach-$(SUBARCH)/setup.c for
    + * the function. */
    + la r8, r0, machine_early_init
    + brald r15, r8
    + nop
    +
    + la r15, r0, machine_halt
    + braid start_kernel
    + nop
    diff --git a/arch/microblaze/kernel/vmlinux.lds.S b/arch/microblaze/kernel/vmlinux.lds.S
    new file mode 100644
    index 0000000..5abd468
    --- /dev/null
    +++ b/arch/microblaze/kernel/vmlinux.lds.S
    @@ -0,0 +1,142 @@
    +/*
    + * Copyright (C) 2006 Atmark Techno, Inc.
    + *
    + * This file is subject to the terms and conditions of the GNU General Public
    + * License. See the file "COPYING" in the main directory of this archive
    + * for more details.
    + */
    +
    +OUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze")
    +OUTPUT_ARCH(microblaze)
    +ENTRY(_start)
    +
    +#include <asm-generic/vmlinux.lds.h>
    +
    +jiffies = jiffies_64 + 4;
    +
    +SECTIONS {
    + . = CONFIG_KERNEL_BASE_ADDR;
    +
    + .text : {
    + _text = . ;
    + _stext = . ;
    + TEXT_TEXT
    + SCHED_TEXT
    + LOCK_TEXT
    + . = ALIGN (4) ;
    + _etext = . ;
    + }
    +
    + . = ALIGN(16);
    + RODATA
    +
    + /* sdata2 section can go anywhere, but must be word aligned
    + and SDA2_BASE must point to the middle of it */
    + .sdata2 : {
    + _ssrw = .;
    + . = ALIGN(0x8);
    + *(.sdata2)
    + . = ALIGN(8);
    + _essrw = .;
    + _ssrw_size = _essrw - _ssrw;
    + _KERNEL_SDA2_BASE_ = _ssrw + (_ssrw_size / 2);
    + }
    +
    + _sdata = . ;
    + .data ALIGN (0x4) : {
    + DATA_DATA
    + }
    + . = ALIGN(32);
    + .data.cacheline_aligned : { *(.data.cacheline_aligned) }
    + _edata = . ;
    +
    + /* The initial task */
    + . = ALIGN(8192);
    + .data.init_task : { *(.data.init_task) }
    +
    + /* Under the microblaze ABI, .sdata and .sbss must be contiguous */
    + . = ALIGN(8);
    + .sdata : {
    + _ssro = .;
    + *(.sdata)
    + }
    +
    + .sbss : {
    + _ssbss = .;
    + *(.sbss)
    + _esbss = .;
    + _essro = .;
    + _ssro_size = _essro - _ssro ;
    + _KERNEL_SDA_BASE_ = _ssro + (_ssro_size / 2) ;
    + }
    +
    + . = ALIGN(16);
    + __start___ex_table = .;
    + __ex_table : { *(__ex_table) }
    + __stop___ex_table = .;
    +
    + __init_begin = .;
    +
    + . = ALIGN(4096);
    + .init.text : {
    + _sinittext = . ;
    + *(.init.text)
    + *(.exit.text)
    + *(.exit.data)
    + _einittext = .;
    + }
    +
    + .init.data : { *(.init.data) }
    +
    + . = ALIGN(4);
    + .init.ivt : {
    + __ivt_start = .;
    + *(.init.ivt)
    + __ivt_end = .;
    + }
    +
    + .init.setup : {
    + __setup_start = .;
    + *(.init.setup)
    + __setup_end = .;
    + }
    +
    + .initcall.init : {
    + __initcall_start = .;
    + INITCALLS
    + __initcall_end = .;
    + }
    +
    + .con_initcall.init : {
    + __con_initcall_start = .;
    + *(.con_initcall.init)
    + __con_initcall_end = .;
    + }
    +
    + __init_end_before_initramfs = .;
    +
    + .init.ramfs ALIGN(4096) : {
    + __initramfs_start = .;
    + *(.init.ramfs)
    + __initramfs_end = .;
    + . = ALIGN(4);
    + LONG(0);
    + . = ALIGN(4096);/* Pad init.ramfs up to page boundary, so
    + that __init_end == __bss_start. This will
    + make image.elf consistent with the image.bin */
    + }
    +
    + __init_end = .;
    +
    + .bss ALIGN (4096) : {
    + __bss_start = . ;
    + *(.bss*)
    + *(COMMON)
    + . = ALIGN (4) ;
    + __bss_stop = . ;
    + _ebss = . ;
    + }
    + . = ALIGN(4096);
    + _end = .;
    +}
    +
    --
    1.5.4.GIT


    \
     
     \ /
      Last update: 2008-07-08 14:19    [W:2.597 / U:0.596 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site