123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*
- * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
- *
- * 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.
- */
- #include <asm-generic/vmlinux.lds.h>
- #include <asm/cache.h>
- #include <asm/page.h>
- #include <asm/thread_info.h>
- OUTPUT_ARCH(arc)
- ENTRY(res_service)
- #ifdef CONFIG_CPU_BIG_ENDIAN
- jiffies = jiffies_64 + 4;
- #else
- jiffies = jiffies_64;
- #endif
- SECTIONS
- {
- /*
- * ICCM starts at 0x8000_0000. So if kernel is relocated to some other
- * address, make sure peripheral at 0x8z doesn't clash with ICCM
- * Essentially vector is also in ICCM.
- */
- . = CONFIG_LINUX_LINK_BASE;
- _int_vec_base_lds = .;
- .vector : {
- *(.vector)
- . = ALIGN(PAGE_SIZE);
- }
- #ifdef CONFIG_ARC_HAS_ICCM
- .text.arcfp : {
- *(.text.arcfp)
- . = ALIGN(CONFIG_ARC_ICCM_SZ * 1024);
- }
- #endif
- /*
- * The reason for having a seperate subsection .init.ramfs is to
- * prevent objump from including it in kernel dumps
- *
- * Reason for having .init.ramfs above .init is to make sure that the
- * binary blob is tucked away to one side, reducing the displacement
- * between .init.text and .text, avoiding any possible relocation
- * errors because of calls from .init.text to .text
- * Yes such calls do exist. e.g.
- * decompress_inflate.c:gunzip( ) -> zlib_inflate_workspace( )
- */
- __init_begin = .;
- .init.ramfs : { INIT_RAM_FS }
- . = ALIGN(PAGE_SIZE);
- _stext = .;
- HEAD_TEXT_SECTION
- INIT_TEXT_SECTION(L1_CACHE_BYTES)
- /* INIT_DATA_SECTION open-coded: special INIT_RAM_FS handling */
- .init.data : {
- INIT_DATA
- INIT_SETUP(L1_CACHE_BYTES)
- INIT_CALLS
- CON_INITCALL
- SECURITY_INITCALL
- }
- .init.arch.info : {
- __arch_info_begin = .;
- *(.arch.info.init)
- __arch_info_end = .;
- }
- PERCPU_SECTION(L1_CACHE_BYTES)
- . = ALIGN(PAGE_SIZE);
- __init_end = .;
- .text : {
- _text = .;
- TEXT_TEXT
- SCHED_TEXT
- CPUIDLE_TEXT
- LOCK_TEXT
- KPROBES_TEXT
- *(.fixup)
- *(.gnu.warning)
- }
- EXCEPTION_TABLE(L1_CACHE_BYTES)
- _etext = .;
- _sdata = .;
- RO_DATA_SECTION(PAGE_SIZE)
- /*
- * 1. this is .data essentially
- * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned
- */
- RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
- _edata = .;
- BSS_SECTION(4, 4, 4)
- #ifdef CONFIG_ARC_DW2_UNWIND
- . = ALIGN(PAGE_SIZE);
- .eh_frame : {
- __start_unwind = .;
- *(.eh_frame)
- __end_unwind = .;
- }
- #else
- /DISCARD/ : { *(.eh_frame) }
- #endif
- NOTES
- . = ALIGN(PAGE_SIZE);
- _end = . ;
- STABS_DEBUG
- DISCARDS
- .arcextmap 0 : {
- *(.gnu.linkonce.arcextmap.*)
- *(.arcextmap.*)
- }
- #ifndef CONFIG_DEBUG_INFO
- /DISCARD/ : { *(.debug_frame) }
- /DISCARD/ : { *(.debug_aranges) }
- /DISCARD/ : { *(.debug_pubnames) }
- /DISCARD/ : { *(.debug_info) }
- /DISCARD/ : { *(.debug_abbrev) }
- /DISCARD/ : { *(.debug_line) }
- /DISCARD/ : { *(.debug_str) }
- /DISCARD/ : { *(.debug_loc) }
- /DISCARD/ : { *(.debug_macinfo) }
- /DISCARD/ : { *(.debug_ranges) }
- #endif
- #ifdef CONFIG_ARC_HAS_DCCM
- . = CONFIG_ARC_DCCM_BASE;
- __arc_dccm_base = .;
- .data.arcfp : {
- *(.data.arcfp)
- }
- . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
- #endif
- }
|