405d967dc7
x86 throws away .discard section but no other archs do. Also, .discard is not thrown away while linking modules. Make every arch and module linking throw it away. This will be used to define dummy variables for percpu declarations and definitions. This patch is based on Ivan Kokshaysky's alpha percpu patch. [ Impact: always throw away everything in .discard ] Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Richard Henderson <rth@twiddle.net> Cc: Russell King <linux@arm.linux.org.uk> Cc: Haavard Skinnemoen <hskinnemoen@atmel.com> Cc: Bryan Wu <cooloney@kernel.org> Cc: Mikael Starvik <starvik@axis.com> Cc: Jesper Nilsson <jesper.nilsson@axis.com> Cc: David Howells <dhowells@redhat.com> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Tony Luck <tony.luck@intel.com> Cc: Hirokazu Takata <takata@linux-m32r.org> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Michal Simek <monstr@monstr.eu> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Kyle McMartin <kyle@mcmartin.ca> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Paul Mundt <lethal@linux-sh.org> Cc: David S. Miller <davem@davemloft.net> Cc: Jeff Dike <jdike@addtoit.com> Cc: Chris Zankel <chris@zankel.net> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Ingo Molnar <mingo@elte.hu>
139 lines
2.7 KiB
ArmAsm
139 lines
2.7 KiB
ArmAsm
/*
|
|
* AVR32 linker script for the Linux kernel
|
|
*
|
|
* Copyright (C) 2004-2006 Atmel Corporation
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
#define LOAD_OFFSET 0x00000000
|
|
#include <asm-generic/vmlinux.lds.h>
|
|
#include <asm/cache.h>
|
|
#include <asm/thread_info.h>
|
|
|
|
OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32")
|
|
OUTPUT_ARCH(avr32)
|
|
ENTRY(_start)
|
|
|
|
/* Big endian */
|
|
jiffies = jiffies_64 + 4;
|
|
|
|
SECTIONS
|
|
{
|
|
. = CONFIG_ENTRY_ADDRESS;
|
|
.init : AT(ADDR(.init) - LOAD_OFFSET) {
|
|
_stext = .;
|
|
__init_begin = .;
|
|
_sinittext = .;
|
|
*(.text.reset)
|
|
INIT_TEXT
|
|
/*
|
|
* .exit.text is discarded at runtime, not
|
|
* link time, to deal with references from
|
|
* __bug_table
|
|
*/
|
|
EXIT_TEXT
|
|
_einittext = .;
|
|
. = ALIGN(4);
|
|
__tagtable_begin = .;
|
|
*(.taglist.init)
|
|
__tagtable_end = .;
|
|
INIT_DATA
|
|
. = ALIGN(16);
|
|
__setup_start = .;
|
|
*(.init.setup)
|
|
__setup_end = .;
|
|
. = ALIGN(4);
|
|
__initcall_start = .;
|
|
INITCALLS
|
|
__initcall_end = .;
|
|
__con_initcall_start = .;
|
|
*(.con_initcall.init)
|
|
__con_initcall_end = .;
|
|
__security_initcall_start = .;
|
|
*(.security_initcall.init)
|
|
__security_initcall_end = .;
|
|
#ifdef CONFIG_BLK_DEV_INITRD
|
|
. = ALIGN(32);
|
|
__initramfs_start = .;
|
|
*(.init.ramfs)
|
|
__initramfs_end = .;
|
|
#endif
|
|
. = ALIGN(PAGE_SIZE);
|
|
__init_end = .;
|
|
}
|
|
|
|
.text : AT(ADDR(.text) - LOAD_OFFSET) {
|
|
_evba = .;
|
|
_text = .;
|
|
*(.ex.text)
|
|
*(.irq.text)
|
|
KPROBES_TEXT
|
|
TEXT_TEXT
|
|
SCHED_TEXT
|
|
LOCK_TEXT
|
|
*(.fixup)
|
|
*(.gnu.warning)
|
|
_etext = .;
|
|
} = 0xd703d703
|
|
|
|
. = ALIGN(4);
|
|
__ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
|
|
__start___ex_table = .;
|
|
*(__ex_table)
|
|
__stop___ex_table = .;
|
|
}
|
|
|
|
RODATA
|
|
|
|
. = ALIGN(THREAD_SIZE);
|
|
|
|
.data : AT(ADDR(.data) - LOAD_OFFSET) {
|
|
_data = .;
|
|
_sdata = .;
|
|
/*
|
|
* First, the init task union, aligned to an 8K boundary.
|
|
*/
|
|
*(.data.init_task)
|
|
|
|
/* Then, the page-aligned data */
|
|
. = ALIGN(PAGE_SIZE);
|
|
*(.data.page_aligned)
|
|
|
|
/* Then, the cacheline aligned data */
|
|
. = ALIGN(L1_CACHE_BYTES);
|
|
*(.data.cacheline_aligned)
|
|
|
|
/* And the rest... */
|
|
*(.data.rel*)
|
|
DATA_DATA
|
|
CONSTRUCTORS
|
|
|
|
_edata = .;
|
|
}
|
|
|
|
|
|
. = ALIGN(8);
|
|
.bss : AT(ADDR(.bss) - LOAD_OFFSET) {
|
|
__bss_start = .;
|
|
*(.bss)
|
|
*(COMMON)
|
|
. = ALIGN(8);
|
|
__bss_stop = .;
|
|
_end = .;
|
|
}
|
|
|
|
/* When something in the kernel is NOT compiled as a module, the module
|
|
* cleanup code and data are put into these segments. Both can then be
|
|
* thrown away, as cleanup code is never called unless it's a module.
|
|
*/
|
|
/DISCARD/ : {
|
|
EXIT_DATA
|
|
*(.exitcall.exit)
|
|
*(.discard)
|
|
}
|
|
|
|
DWARF_DEBUG
|
|
}
|