Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de6a9520 authored by Mike Frysinger's avatar Mike Frysinger Committed by Bryan Wu
Browse files

Blackfin arch: redo our linker script a bit



 - we can start taking advantages of defines in asm-generic/vmlinux.lds.h
 - move our L1 relocated sections into init so it gets freed after relocation

Signed-off-by: default avatarMike Frysinger <michael.frysinger@analog.com>
Signed-off-by: default avatarBryan Wu <bryan.wu@analog.com>
parent 43a3188e
Loading
Loading
Loading
Loading
+56 −111
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@
 * Description:  Master linker script for blackfin architecture
 *
 * Modified:
 *               Copyright 2004-2006 Analog Devices Inc.
 *               Copyright 2004-2007 Analog Devices Inc.
 *
 * Bugs:         Enter bugs at http://blackfin.uclinux.org/
 *
@@ -32,24 +32,13 @@
#include <asm-generic/vmlinux.lds.h>
#include <asm/mem_map.h>


OUTPUT_FORMAT("elf32-bfin")
ENTRY(__start)
_jiffies = _jiffies_64;

MEMORY
{
	ram         : ORIGIN = CONFIG_BOOT_LOAD, LENGTH = (CONFIG_MEM_SIZE * 1024 * 1024) - (CONFIG_BOOT_LOAD)
	l1_data_a   : ORIGIN = L1_DATA_A_START,  LENGTH = L1_DATA_A_LENGTH
	l1_data_b   : ORIGIN = L1_DATA_B_START,  LENGTH = L1_DATA_B_LENGTH
	l1_code     : ORIGIN = L1_CODE_START,    LENGTH = L1_CODE_LENGTH
	l1_scratch  : ORIGIN = L1_SCRATCH_START, LENGTH = L1_SCRATCH_LENGTH
}

SECTIONS
{
	. = CONFIG_BOOT_LOAD;

	.text :
	{
		__text = .;
@@ -57,73 +46,40 @@ SECTIONS
		__stext = .;
		TEXT_TEXT
		SCHED_TEXT
		LOCK_TEXT
		*(.text.lock)
		*(.fixup)

		. = ALIGN(16);
		___start___ex_table = .;
		*(__ex_table)
		___stop___ex_table = .;

		*($code)
		*(.rodata)
		*(.rodata.*)
		*(__vermagic)		/* Kernel version magic */
		*(.rodata1)
		*(.fixup)
		*(.spinlock.text)

		/* Kernel symbol table: Normal symbols */
		. = ALIGN(4);
		___start___ksymtab = .;
		*(__ksymtab)
		___stop___ksymtab = .;

		/* Kernel symbol table: GPL-only symbols */
		___start___ksymtab_gpl = .;
		*(__ksymtab_gpl)
		___stop___ksymtab_gpl = .;

		/* Kernel symbol table: Normal unused symbols */		\
		___start___ksymtab_unused = .;
		*(__ksymtab_unused)
		___stop___ksymtab_unused = .;

		/* Kernel symbol table: GPL-only unused symbols */
		___start___ksymtab_unused_gpl = .;
		*(__ksymtab_unused_gpl)
		___stop___ksymtab_unused_gpl = .;


		/* Kernel symbol table: GPL-future symbols */
		___start___ksymtab_gpl_future = .;
		*(__ksymtab_gpl_future)
		___stop___ksymtab_gpl_future = .;

		/* Kernel symbol table: Normal symbols */
		___start___kcrctab = .;
		*(__kcrctab)
		___stop___kcrctab = .;
		__etext = .;
	}

		/* Kernel symbol table: GPL-only symbols */
		___start___kcrctab_gpl = .;
		*(__kcrctab_gpl)
		___stop___kcrctab_gpl = .;
	RODATA

		/* Kernel symbol table: GPL-future symbols */
		___start___kcrctab_gpl_future = .;
		*(__kcrctab_gpl_future)
		___stop___kcrctab_gpl_future = .;
	.data :
	{
		__sdata = .;
		. = ALIGN(0x2000);
		*(.data.init_task)
		DATA_DATA
		CONSTRUCTORS

		/* Kernel symbol table: strings */
		*(__ksymtab_strings)
		. = ALIGN(32);
		*(.data.cacheline_aligned)

		 . = ALIGN(4);
		__etext = .;
	} > ram
		. = ALIGN(0x2000);
		__edata = .;
	}

	___init_begin = .;
	.init :
	{
		. = ALIGN(4096);
		___init_begin = .;
		__sinittext = .;
		*(.init.text)
		__einittext = .;
@@ -149,12 +105,11 @@ SECTIONS
		*(.init.ramfs)
		___initramfs_end = .;
		. = ALIGN(4);
		___init_end = .;
	} > ram
	}

	__l1_lma_start = .;

	.text_l1 :
	.text_l1 L1_CODE_START : AT(LOADADDR(.init) + SIZEOF(.init))
	{
		. = ALIGN(4);
		__stext_l1 = .;
@@ -162,9 +117,9 @@ SECTIONS

		. = ALIGN(4);
		__etext_l1 = .;
	} > l1_code AT > ram
	}

	.data_l1 :
	.data_l1 L1_DATA_A_START : AT(LOADADDR(.text_l1) + SIZEOF(.text_l1))
	{
		. = ALIGN(4);
		__sdata_l1 = .;
@@ -180,8 +135,9 @@ SECTIONS

		. = ALIGN(4);
		__ebss_l1 = .;
	} > l1_data_a AT > ram
	.data_b_l1 :
	}

	.data_b_l1 L1_DATA_B_START : AT(LOADADDR(.data_l1) + SIZEOF(.data_l1))
	{
		. = ALIGN(4);
		__sdata_b_l1 = .;
@@ -194,29 +150,11 @@ SECTIONS

		. = ALIGN(4);
		__ebss_b_l1 = .;
	} > l1_data_b AT > ram

	.data :
	{
		 __sdata = .;
		. = ALIGN(0x2000);
		*(.data.init_task)
		DATA_DATA

		. = ALIGN(32);
		*(.data.cacheline_aligned)

		. = ALIGN(0x2000);
		__edata = .;
	} > ram
	}

	/DISCARD/ : {			/* Exit code and data*/
		*(.exit.text)
		*(.exit.data)
		*(.exitcall.exit)
	} > ram
	___init_end = LOADADDR(.data_b_l1) + SIZEOF(.data_b_l1);

	.bss :
	.bss LOADADDR(.data_b_l1) + SIZEOF(.data_b_l1) :
	{
		. = ALIGN(4);
		___bss_start = .;
@@ -225,5 +163,12 @@ SECTIONS
		. = ALIGN(4);
		___bss_stop = .;
		__end = .;
	} > ram
	}

	/DISCARD/ :
	{
		*(.exit.text)
		*(.exit.data)
		*(.exitcall.exit)
	}
}