xref: /linux/arch/xtensa/kernel/vmlinux.lds.S (revision 03ce34cf)
15a0015d6SChris Zankel/*
25a0015d6SChris Zankel * arch/xtensa/kernel/vmlinux.lds.S
35a0015d6SChris Zankel *
45a0015d6SChris Zankel * Xtensa linker script
55a0015d6SChris Zankel *
65a0015d6SChris Zankel * This file is subject to the terms and conditions of the GNU General Public
75a0015d6SChris Zankel * License.  See the file "COPYING" in the main directory of this archive
85a0015d6SChris Zankel * for more details.
95a0015d6SChris Zankel *
102d1c645cSMarc Gauthier * Copyright (C) 2001 - 2008 Tensilica Inc.
115a0015d6SChris Zankel *
125a0015d6SChris Zankel * Chris Zankel <chris@zankel.net>
135a0015d6SChris Zankel * Marc Gauthier <marc@tensilica.com, marc@alumni.uwaterloo.ca>
145a0015d6SChris Zankel * Joe Taylor <joe@tensilica.com, joetylr@yahoo.com>
155a0015d6SChris Zankel */
165a0015d6SChris Zankel
1794174c9bSKees Cook#define RO_EXCEPTION_TABLE_ALIGN	16
1894174c9bSKees Cook
195a0015d6SChris Zankel#include <asm-generic/vmlinux.lds.h>
20cd3db323STim Abbott#include <asm/page.h>
21cd3db323STim Abbott#include <asm/thread_info.h>
225a0015d6SChris Zankel
238f8d5745SMax Filippov#include <asm/core.h>
24e85e335fSMax Filippov#include <asm/vectors.h>
25fc862ee9SMax Filippov
265a0015d6SChris ZankelOUTPUT_ARCH(xtensa)
275a0015d6SChris ZankelENTRY(_start)
285a0015d6SChris Zankel
29173d6681SChris Zankel#ifdef __XTENSA_EB__
305a0015d6SChris Zankeljiffies = jiffies_64 + 4;
315a0015d6SChris Zankel#else
325a0015d6SChris Zankeljiffies = jiffies_64;
335a0015d6SChris Zankel#endif
345a0015d6SChris Zankel
355a0015d6SChris Zankel/* Note: In the following macros, it would be nice to specify only the
365a0015d6SChris Zankel   vector name and section kind and construct "sym" and "section" using
375a0015d6SChris Zankel   CPP concatenation, but that does not work reliably.  Concatenating a
385a0015d6SChris Zankel   string with "." produces an invalid token.  CPP will not print a
395a0015d6SChris Zankel   warning because it thinks this is an assembly file, but it leaves
405a0015d6SChris Zankel   them as multiple tokens and there may or may not be whitespace
415a0015d6SChris Zankel   between them.  */
425a0015d6SChris Zankel
435a0015d6SChris Zankel/* Macro for a relocation entry */
445a0015d6SChris Zankel
455a0015d6SChris Zankel#define RELOCATE_ENTRY(sym, section)		\
465a0015d6SChris Zankel	LONG(sym ## _start);			\
475a0015d6SChris Zankel	LONG(sym ## _end);			\
485a0015d6SChris Zankel	LONG(LOADADDR(section))
495a0015d6SChris Zankel
505e4417f9SMax Filippov#if !defined(CONFIG_VECTORS_ADDR) && XCHAL_HAVE_VECBASE
515e4417f9SMax Filippov#define MERGED_VECTORS 1
525e4417f9SMax Filippov#else
535e4417f9SMax Filippov#define MERGED_VECTORS 0
545e4417f9SMax Filippov#endif
555e4417f9SMax Filippov
56f8f02ca7SMax Filippov/*
575e4417f9SMax Filippov * Macro to define a section for a vector. When MERGED_VECTORS is 0
585e4417f9SMax Filippov * code for every vector is located with other init data. At startup
59f8f02ca7SMax Filippov * time head.S copies code for every vector to its final position according
60f8f02ca7SMax Filippov * to description recorded in the corresponding RELOCATE_ENTRY.
615a0015d6SChris Zankel */
625a0015d6SChris Zankel
634f17664aSMax Filippov#define SECTION_VECTOR4(sym, section, addr, prevsec)			    \
64f8f02ca7SMax Filippov  section addr : AT(((LOADADDR(prevsec) + SIZEOF(prevsec)) + 3) & ~ 3)      \
655a0015d6SChris Zankel  {									    \
665a0015d6SChris Zankel    . = ALIGN(4);							    \
675a0015d6SChris Zankel    sym ## _start = ABSOLUTE(.);		 			    \
685a0015d6SChris Zankel    *(section)								    \
695a0015d6SChris Zankel    sym ## _end = ABSOLUTE(.);						    \
705a0015d6SChris Zankel  }
714f17664aSMax Filippov
724f17664aSMax Filippov#define SECTION_VECTOR2(section, addr)					    \
73b46dcfa3SMax Filippov  . = addr;								    \
74b46dcfa3SMax Filippov  *(section)
755a0015d6SChris Zankel
765a0015d6SChris Zankel/*
775a0015d6SChris Zankel *  Mapping of input sections to output sections when linking.
785a0015d6SChris Zankel */
795a0015d6SChris Zankel
805a0015d6SChris ZankelSECTIONS
815a0015d6SChris Zankel{
82173d6681SChris Zankel  . = KERNELOFFSET;
835a0015d6SChris Zankel  /* .text section */
845a0015d6SChris Zankel
855a0015d6SChris Zankel  _text = .;
865a0015d6SChris Zankel  _stext = .;
875a0015d6SChris Zankel
885a0015d6SChris Zankel  .text :
895a0015d6SChris Zankel  {
900ebdcb4dSTim Abbott    /* The HEAD_TEXT section must be the first section! */
910ebdcb4dSTim Abbott    HEAD_TEXT
92b46dcfa3SMax Filippov
935e4417f9SMax Filippov#if MERGED_VECTORS
94b46dcfa3SMax Filippov    . = ALIGN(PAGE_SIZE);
95b46dcfa3SMax Filippov    _vecbase = .;
96b46dcfa3SMax Filippov
97da0a4e5cSMax Filippov#ifdef SUPPORT_WINDOWED
984f17664aSMax Filippov    SECTION_VECTOR2 (.WindowVectors.text, WINDOW_VECTORS_VADDR)
99da0a4e5cSMax Filippov#endif
100b46dcfa3SMax Filippov#if XCHAL_EXCM_LEVEL >= 2
1014f17664aSMax Filippov    SECTION_VECTOR2 (.Level2InterruptVector.text, INTLEVEL2_VECTOR_VADDR)
102b46dcfa3SMax Filippov#endif
103b46dcfa3SMax Filippov#if XCHAL_EXCM_LEVEL >= 3
1044f17664aSMax Filippov    SECTION_VECTOR2 (.Level3InterruptVector.text, INTLEVEL3_VECTOR_VADDR)
105b46dcfa3SMax Filippov#endif
106b46dcfa3SMax Filippov#if XCHAL_EXCM_LEVEL >= 4
1074f17664aSMax Filippov    SECTION_VECTOR2 (.Level4InterruptVector.text, INTLEVEL4_VECTOR_VADDR)
108b46dcfa3SMax Filippov#endif
109b46dcfa3SMax Filippov#if XCHAL_EXCM_LEVEL >= 5
1104f17664aSMax Filippov    SECTION_VECTOR2 (.Level5InterruptVector.text, INTLEVEL5_VECTOR_VADDR)
111b46dcfa3SMax Filippov#endif
112b46dcfa3SMax Filippov#if XCHAL_EXCM_LEVEL >= 6
1134f17664aSMax Filippov    SECTION_VECTOR2 (.Level6InterruptVector.text, INTLEVEL6_VECTOR_VADDR)
114b46dcfa3SMax Filippov#endif
1154f17664aSMax Filippov    SECTION_VECTOR2 (.DebugInterruptVector.text, DEBUG_VECTOR_VADDR)
1164f17664aSMax Filippov    SECTION_VECTOR2 (.KernelExceptionVector.text, KERNEL_VECTOR_VADDR)
1174f17664aSMax Filippov    SECTION_VECTOR2 (.UserExceptionVector.text, USER_VECTOR_VADDR)
1184f17664aSMax Filippov    SECTION_VECTOR2 (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR)
11950722f0bSMax Filippov
12050722f0bSMax Filippov    *(.exception.text)
121*03ce34cfSMax Filippov    *(.xiptext)
122b46dcfa3SMax Filippov#endif
123b46dcfa3SMax Filippov
124f8f02ca7SMax Filippov    IRQENTRY_TEXT
125f8f02ca7SMax Filippov    SOFTIRQENTRY_TEXT
126f8f02ca7SMax Filippov    ENTRY_TEXT
12778f3cdfaSChris Zankel    TEXT_TEXT
128f8f02ca7SMax Filippov    SCHED_TEXT
129f8f02ca7SMax Filippov    LOCK_TEXT
130f5fae679SMax Filippov    *(.fixup)
1315a0015d6SChris Zankel  }
1325a0015d6SChris Zankel  _etext = .;
133de4f6e5bSChris Zankel  PROVIDE (etext = .);
1345a0015d6SChris Zankel
1355a0015d6SChris Zankel  . = ALIGN(16);
1365a0015d6SChris Zankel
137c8231825SKees Cook  RO_DATA(4096)
1385a0015d6SChris Zankel
1395a0015d6SChris Zankel  /* Data section */
1405a0015d6SChris Zankel
1417af710d9SMax Filippov#ifdef CONFIG_XIP_KERNEL
1427af710d9SMax Filippov  INIT_TEXT_SECTION(PAGE_SIZE)
1437af710d9SMax Filippov#else
1445e7b6ed8SGeert Uytterhoeven  _sdata = .;
145c9174047SKees Cook  RW_DATA(XCHAL_ICACHE_LINESIZE, PAGE_SIZE, THREAD_SIZE)
1465a0015d6SChris Zankel  _edata = .;
1475a0015d6SChris Zankel
1485a0015d6SChris Zankel  /* Initialization code and data: */
1495a0015d6SChris Zankel
150cd3db323STim Abbott  . = ALIGN(PAGE_SIZE);
1515a0015d6SChris Zankel  __init_begin = .;
152cd3db323STim Abbott  INIT_TEXT_SECTION(PAGE_SIZE)
1535a0015d6SChris Zankel
1545a0015d6SChris Zankel  .init.data :
1555a0015d6SChris Zankel  {
15601ba2bdcSSam Ravnborg    INIT_DATA
1577af710d9SMax Filippov  }
1587af710d9SMax Filippov#endif
1597af710d9SMax Filippov
1607af710d9SMax Filippov  .init.rodata :
1617af710d9SMax Filippov  {
1625a0015d6SChris Zankel    . = ALIGN(0x4);
1635a0015d6SChris Zankel    __tagtable_begin = .;
1645a0015d6SChris Zankel    *(.taglist)
1655a0015d6SChris Zankel    __tagtable_end = .;
166de4f6e5bSChris Zankel
167de4f6e5bSChris Zankel    . = ALIGN(16);
168de4f6e5bSChris Zankel    __boot_reloc_table_start = ABSOLUTE(.);
169de4f6e5bSChris Zankel
1705e4417f9SMax Filippov#if !MERGED_VECTORS
171da0a4e5cSMax Filippov#ifdef SUPPORT_WINDOWED
172de4f6e5bSChris Zankel    RELOCATE_ENTRY(_WindowVectors_text,
173de4f6e5bSChris Zankel		   .WindowVectors.text);
174da0a4e5cSMax Filippov#endif
1752d1c645cSMarc Gauthier#if XCHAL_EXCM_LEVEL >= 2
1762d1c645cSMarc Gauthier    RELOCATE_ENTRY(_Level2InterruptVector_text,
1772d1c645cSMarc Gauthier		   .Level2InterruptVector.text);
1782d1c645cSMarc Gauthier#endif
1792d1c645cSMarc Gauthier#if XCHAL_EXCM_LEVEL >= 3
1802d1c645cSMarc Gauthier    RELOCATE_ENTRY(_Level3InterruptVector_text,
1812d1c645cSMarc Gauthier		   .Level3InterruptVector.text);
1822d1c645cSMarc Gauthier#endif
1832d1c645cSMarc Gauthier#if XCHAL_EXCM_LEVEL >= 4
1842d1c645cSMarc Gauthier    RELOCATE_ENTRY(_Level4InterruptVector_text,
1852d1c645cSMarc Gauthier		   .Level4InterruptVector.text);
1862d1c645cSMarc Gauthier#endif
1872d1c645cSMarc Gauthier#if XCHAL_EXCM_LEVEL >= 5
1882d1c645cSMarc Gauthier    RELOCATE_ENTRY(_Level5InterruptVector_text,
1892d1c645cSMarc Gauthier		   .Level5InterruptVector.text);
1902d1c645cSMarc Gauthier#endif
1912d1c645cSMarc Gauthier#if XCHAL_EXCM_LEVEL >= 6
1922d1c645cSMarc Gauthier    RELOCATE_ENTRY(_Level6InterruptVector_text,
1932d1c645cSMarc Gauthier		   .Level6InterruptVector.text);
1942d1c645cSMarc Gauthier#endif
195de4f6e5bSChris Zankel    RELOCATE_ENTRY(_KernelExceptionVector_text,
196de4f6e5bSChris Zankel		   .KernelExceptionVector.text);
197de4f6e5bSChris Zankel    RELOCATE_ENTRY(_UserExceptionVector_text,
198de4f6e5bSChris Zankel		   .UserExceptionVector.text);
199de4f6e5bSChris Zankel    RELOCATE_ENTRY(_DoubleExceptionVector_text,
200de4f6e5bSChris Zankel		   .DoubleExceptionVector.text);
2016d15d109SMarc Gauthier    RELOCATE_ENTRY(_DebugInterruptVector_text,
2026d15d109SMarc Gauthier		   .DebugInterruptVector.text);
20350722f0bSMax Filippov    RELOCATE_ENTRY(_exception_text,
20450722f0bSMax Filippov		   .exception.text);
205*03ce34cfSMax Filippov#ifdef CONFIG_XIP_KERNEL
206*03ce34cfSMax Filippov    RELOCATE_ENTRY(_xip_text, .xiptext);
207*03ce34cfSMax Filippov#endif
208b46dcfa3SMax Filippov#endif
2097af710d9SMax Filippov#ifdef CONFIG_XIP_KERNEL
2107af710d9SMax Filippov    RELOCATE_ENTRY(_xip_data, .data);
2117af710d9SMax Filippov    RELOCATE_ENTRY(_xip_init_data, .init.data);
2124f17664aSMax Filippov#endif
21389b184f9SMax Filippov#if defined(CONFIG_SECONDARY_RESET_VECTOR)
214f615136cSMax Filippov    RELOCATE_ENTRY(_SecondaryResetVector_text,
215f615136cSMax Filippov		   .SecondaryResetVector.text);
216f615136cSMax Filippov#endif
217de4f6e5bSChris Zankel
218de4f6e5bSChris Zankel    __boot_reloc_table_end = ABSOLUTE(.) ;
219cd3db323STim Abbott
220cd3db323STim Abbott    INIT_SETUP(XCHAL_ICACHE_LINESIZE)
221cd3db323STim Abbott    INIT_CALLS
222cd3db323STim Abbott    CON_INITCALL
223cd3db323STim Abbott    INIT_RAM_FS
2245a0015d6SChris Zankel  }
2255a0015d6SChris Zankel
2260415b00dSTejun Heo  PERCPU_SECTION(XCHAL_ICACHE_LINESIZE)
227de4f6e5bSChris Zankel
2285a0015d6SChris Zankel  /* We need this dummy segment here */
2295a0015d6SChris Zankel
2305a0015d6SChris Zankel  . = ALIGN(4);
2315a0015d6SChris Zankel  .dummy : { LONG(0) }
2325a0015d6SChris Zankel
2334f17664aSMax Filippov#undef LAST
2344f17664aSMax Filippov#define LAST	.dummy
2354f17664aSMax Filippov
2365e4417f9SMax Filippov#if !MERGED_VECTORS
2375a0015d6SChris Zankel  /* The vectors are relocated to the real position at startup time */
2385a0015d6SChris Zankel
239da0a4e5cSMax Filippov#ifdef SUPPORT_WINDOWED
2404f17664aSMax Filippov  SECTION_VECTOR4 (_WindowVectors_text,
2415a0015d6SChris Zankel		  .WindowVectors.text,
242f8f02ca7SMax Filippov		  WINDOW_VECTORS_VADDR,
243da0a4e5cSMax Filippov		  LAST)
244da0a4e5cSMax Filippov#undef LAST
245da0a4e5cSMax Filippov#define LAST	.WindowVectors.text
246da0a4e5cSMax Filippov#endif
2474f17664aSMax Filippov  SECTION_VECTOR4 (_DebugInterruptVector_text,
2485a0015d6SChris Zankel		  .DebugInterruptVector.text,
249e85e335fSMax Filippov		  DEBUG_VECTOR_VADDR,
250da0a4e5cSMax Filippov		  LAST)
2512d1c645cSMarc Gauthier#undef LAST
2522d1c645cSMarc Gauthier#define LAST	.DebugInterruptVector.text
2532d1c645cSMarc Gauthier#if XCHAL_EXCM_LEVEL >= 2
2544f17664aSMax Filippov  SECTION_VECTOR4 (_Level2InterruptVector_text,
2552d1c645cSMarc Gauthier		  .Level2InterruptVector.text,
256e85e335fSMax Filippov		  INTLEVEL2_VECTOR_VADDR,
257f8f02ca7SMax Filippov		  LAST)
2582d1c645cSMarc Gauthier# undef LAST
2592d1c645cSMarc Gauthier# define LAST	.Level2InterruptVector.text
2602d1c645cSMarc Gauthier#endif
2612d1c645cSMarc Gauthier#if XCHAL_EXCM_LEVEL >= 3
2624f17664aSMax Filippov  SECTION_VECTOR4 (_Level3InterruptVector_text,
2632d1c645cSMarc Gauthier		  .Level3InterruptVector.text,
264e85e335fSMax Filippov		  INTLEVEL3_VECTOR_VADDR,
265f8f02ca7SMax Filippov		  LAST)
2662d1c645cSMarc Gauthier# undef LAST
2672d1c645cSMarc Gauthier# define LAST	.Level3InterruptVector.text
2682d1c645cSMarc Gauthier#endif
2692d1c645cSMarc Gauthier#if XCHAL_EXCM_LEVEL >= 4
2704f17664aSMax Filippov  SECTION_VECTOR4 (_Level4InterruptVector_text,
2712d1c645cSMarc Gauthier		  .Level4InterruptVector.text,
272e85e335fSMax Filippov		  INTLEVEL4_VECTOR_VADDR,
273f8f02ca7SMax Filippov		  LAST)
2742d1c645cSMarc Gauthier# undef LAST
2752d1c645cSMarc Gauthier# define LAST	.Level4InterruptVector.text
2762d1c645cSMarc Gauthier#endif
2772d1c645cSMarc Gauthier#if XCHAL_EXCM_LEVEL >= 5
2784f17664aSMax Filippov  SECTION_VECTOR4 (_Level5InterruptVector_text,
2792d1c645cSMarc Gauthier		  .Level5InterruptVector.text,
280e85e335fSMax Filippov		  INTLEVEL5_VECTOR_VADDR,
281f8f02ca7SMax Filippov		  LAST)
2822d1c645cSMarc Gauthier# undef LAST
2832d1c645cSMarc Gauthier# define LAST	.Level5InterruptVector.text
2842d1c645cSMarc Gauthier#endif
2852d1c645cSMarc Gauthier#if XCHAL_EXCM_LEVEL >= 6
2864f17664aSMax Filippov  SECTION_VECTOR4 (_Level6InterruptVector_text,
2872d1c645cSMarc Gauthier		  .Level6InterruptVector.text,
288e85e335fSMax Filippov		  INTLEVEL6_VECTOR_VADDR,
289f8f02ca7SMax Filippov		  LAST)
2902d1c645cSMarc Gauthier# undef LAST
2912d1c645cSMarc Gauthier# define LAST	.Level6InterruptVector.text
2922d1c645cSMarc Gauthier#endif
2934f17664aSMax Filippov  SECTION_VECTOR4 (_KernelExceptionVector_text,
2945a0015d6SChris Zankel		  .KernelExceptionVector.text,
295e85e335fSMax Filippov		  KERNEL_VECTOR_VADDR,
296f8f02ca7SMax Filippov		  LAST)
297f8f02ca7SMax Filippov#undef LAST
2984f17664aSMax Filippov  SECTION_VECTOR4 (_UserExceptionVector_text,
2995a0015d6SChris Zankel		  .UserExceptionVector.text,
300e85e335fSMax Filippov		  USER_VECTOR_VADDR,
301f8f02ca7SMax Filippov		  .KernelExceptionVector.text)
3024f17664aSMax Filippov  SECTION_VECTOR4 (_DoubleExceptionVector_text,
3035a0015d6SChris Zankel		  .DoubleExceptionVector.text,
304e85e335fSMax Filippov		  DOUBLEEXC_VECTOR_VADDR,
305f8f02ca7SMax Filippov		  .UserExceptionVector.text)
30650722f0bSMax Filippov#define LAST .DoubleExceptionVector.text
307f615136cSMax Filippov
308b46dcfa3SMax Filippov#endif
30989b184f9SMax Filippov#if defined(CONFIG_SECONDARY_RESET_VECTOR)
310f615136cSMax Filippov
3114f17664aSMax Filippov  SECTION_VECTOR4 (_SecondaryResetVector_text,
312f615136cSMax Filippov		  .SecondaryResetVector.text,
313f615136cSMax Filippov		  RESET_VECTOR1_VADDR,
3144f17664aSMax Filippov		  LAST)
31550722f0bSMax Filippov#undef LAST
31650722f0bSMax Filippov#define LAST .SecondaryResetVector.text
317f615136cSMax Filippov
318f615136cSMax Filippov#endif
3195e4417f9SMax Filippov#if !MERGED_VECTORS
3204f17664aSMax Filippov  SECTION_VECTOR4 (_exception_text,
32150722f0bSMax Filippov		  .exception.text,
32250722f0bSMax Filippov		  ,
32350722f0bSMax Filippov		  LAST)
32450722f0bSMax Filippov#undef LAST
32550722f0bSMax Filippov#define LAST .exception.text
326*03ce34cfSMax Filippov  SECTION_VECTOR4 (_xip_text,
327*03ce34cfSMax Filippov		  .xiptext,
328*03ce34cfSMax Filippov		  ,
329*03ce34cfSMax Filippov		  LAST)
330*03ce34cfSMax Filippov#undef LAST
331*03ce34cfSMax Filippov#define LAST .xiptext
33250722f0bSMax Filippov#endif
33350722f0bSMax Filippov  . = (LOADADDR(LAST) + SIZEOF(LAST) + 3) & ~ 3;
334f615136cSMax Filippov
3355e4417f9SMax Filippov  .dummy1 : AT(ADDR(.dummy1)) { LONG(0) }
336cd3db323STim Abbott  . = ALIGN(PAGE_SIZE);
3375a0015d6SChris Zankel
3387af710d9SMax Filippov#ifndef CONFIG_XIP_KERNEL
3395a0015d6SChris Zankel  __init_end = .;
3405a0015d6SChris Zankel
341cd3db323STim Abbott  BSS_SECTION(0, 8192, 0)
3427af710d9SMax Filippov#endif
343de4f6e5bSChris Zankel
3445a0015d6SChris Zankel  _end = .;
3455a0015d6SChris Zankel
3467af710d9SMax Filippov#ifdef CONFIG_XIP_KERNEL
3477af710d9SMax Filippov  . = CONFIG_XIP_DATA_ADDR;
3487af710d9SMax Filippov
3497af710d9SMax Filippov  _xip_start = .;
3507af710d9SMax Filippov
3517af710d9SMax Filippov#undef LOAD_OFFSET
3527af710d9SMax Filippov#define LOAD_OFFSET \
3535e4417f9SMax Filippov  (CONFIG_XIP_DATA_ADDR - (LOADADDR(.dummy1) + SIZEOF(.dummy1) + 3) & ~ 3)
3547af710d9SMax Filippov
3557af710d9SMax Filippov  _xip_data_start = .;
3567af710d9SMax Filippov  _sdata = .;
3574d7048f5SLinus Torvalds  RW_DATA(XCHAL_ICACHE_LINESIZE, PAGE_SIZE, THREAD_SIZE)
3587af710d9SMax Filippov  _edata = .;
3597af710d9SMax Filippov  _xip_data_end = .;
3607af710d9SMax Filippov
3617af710d9SMax Filippov  /* Initialization data: */
3627af710d9SMax Filippov
3637af710d9SMax Filippov  STRUCT_ALIGN();
3647af710d9SMax Filippov
3657af710d9SMax Filippov  _xip_init_data_start = .;
3667af710d9SMax Filippov  __init_begin = .;
3677af710d9SMax Filippov  .init.data :
3687af710d9SMax Filippov  {
3697af710d9SMax Filippov    INIT_DATA
3707af710d9SMax Filippov  }
3717af710d9SMax Filippov  _xip_init_data_end = .;
3727af710d9SMax Filippov  __init_end = .;
3737af710d9SMax Filippov  BSS_SECTION(0, 8192, 0)
3747af710d9SMax Filippov
3757af710d9SMax Filippov  _xip_end = .;
3767af710d9SMax Filippov
3777af710d9SMax Filippov#undef LOAD_OFFSET
3787af710d9SMax Filippov#endif
3797af710d9SMax Filippov
3801026ded6SMax Filippov  DWARF_DEBUG
3815a0015d6SChris Zankel
382960b82c3SMax Filippov  .xt.prop 0 : { KEEP(*(.xt.prop .xt.prop.* .gnu.linkonce.prop.*)) }
383960b82c3SMax Filippov  .xt.insn 0 : { KEEP(*(.xt.insn .xt.insn.* .gnu.linkonce.x*)) }
384960b82c3SMax Filippov  .xt.lit  0 : { KEEP(*(.xt.lit  .xt.lit.*  .gnu.linkonce.p*)) }
385023bf6f1STejun Heo
386023bf6f1STejun Heo  /* Sections to be discarded */
387023bf6f1STejun Heo  DISCARDS
3885a0015d6SChris Zankel}
389