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