1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 21da177e4SLinus Torvalds 365fddcfcSMike Rapoport#include <linux/pgtable.h> 41da177e4SLinus Torvalds#include <asm/cache.h> 51da177e4SLinus Torvalds#include <asm/ptrace.h> 60500871fSDavid Howells#include <asm/thread_info.h> 71da177e4SLinus Torvalds 8441110a5SKees Cook#define EMITS_PT_NOTE 99b30e704SKees Cook#define RO_EXCEPTION_TABLE_ALIGN 16 10441110a5SKees Cook 111da177e4SLinus Torvalds#include <asm-generic/vmlinux.lds.h> 121da177e4SLinus Torvalds 131da177e4SLinus TorvaldsOUTPUT_FORMAT("elf64-ia64-little") 141da177e4SLinus TorvaldsOUTPUT_ARCH(ia64) 151da177e4SLinus TorvaldsENTRY(phys_start) 161da177e4SLinus Torvaldsjiffies = jiffies_64; 177b313fdfSSam Ravnborg 181da177e4SLinus TorvaldsPHDRS { 19430c6b26SKees Cook text PT_LOAD; 201da177e4SLinus Torvalds percpu PT_LOAD; 211da177e4SLinus Torvalds data PT_LOAD; 22336cdba8SDavid Mosberger-Tang note PT_NOTE; 239bf77d0eSDavid Mosberger-Tang unwind 0x70000001; /* PT_IA_64_UNWIND, but ld doesn't match the name */ 241da177e4SLinus Torvalds} 257b313fdfSSam Ravnborg 267b313fdfSSam RavnborgSECTIONS { 277b313fdfSSam Ravnborg /* 287b313fdfSSam Ravnborg * unwind exit sections must be discarded before 297b313fdfSSam Ravnborg * the rest of the sections get included. 307b313fdfSSam Ravnborg */ 311da177e4SLinus Torvalds /DISCARD/ : { 321da177e4SLinus Torvalds *(.IA_64.unwind.exit.text) 331da177e4SLinus Torvalds *(.IA_64.unwind_info.exit.text) 34023bf6f1STejun Heo *(.comment) 35023bf6f1STejun Heo *(.note) 361da177e4SLinus Torvalds } 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds v = PAGE_OFFSET; /* this symbol is here to make debugging easier... */ 391da177e4SLinus Torvalds phys_start = _start - LOAD_OFFSET; 401da177e4SLinus Torvalds 417b313fdfSSam Ravnborg code : { 42430c6b26SKees Cook } :text 431da177e4SLinus Torvalds . = KERNEL_START; 441da177e4SLinus Torvalds 451da177e4SLinus Torvalds _text = .; 461da177e4SLinus Torvalds _stext = .; 471da177e4SLinus Torvalds 487b313fdfSSam Ravnborg .text : AT(ADDR(.text) - LOAD_OFFSET) { 497b313fdfSSam Ravnborg __start_ivt_text = .; 507b313fdfSSam Ravnborg *(.text..ivt) 517b313fdfSSam Ravnborg __end_ivt_text = .; 527664709bSSam Ravnborg TEXT_TEXT 531da177e4SLinus Torvalds SCHED_TEXT 541da177e4SLinus Torvalds LOCK_TEXT 551f7ad57bSPrasanna S Panchamukhi KPROBES_TEXT 56505a0ef1SAlexander Potapenko IRQENTRY_TEXT 57505a0ef1SAlexander Potapenko SOFTIRQENTRY_TEXT 581da177e4SLinus Torvalds *(.gnu.linkonce.t*) 591da177e4SLinus Torvalds } 607b313fdfSSam Ravnborg 617b313fdfSSam Ravnborg .text2 : AT(ADDR(.text2) - LOAD_OFFSET) { 627b313fdfSSam Ravnborg *(.text2) 637b313fdfSSam Ravnborg } 647b313fdfSSam Ravnborg 651da177e4SLinus Torvalds#ifdef CONFIG_SMP 667b313fdfSSam Ravnborg .text..lock : AT(ADDR(.text..lock) - LOAD_OFFSET) { 677b313fdfSSam Ravnborg *(.text..lock) 687b313fdfSSam Ravnborg } 691da177e4SLinus Torvalds#endif 701da177e4SLinus Torvalds _etext = .; 711da177e4SLinus Torvalds 727b313fdfSSam Ravnborg /* 737b313fdfSSam Ravnborg * Read-only data 747b313fdfSSam Ravnborg */ 751da177e4SLinus Torvalds 76d89cfe7fSRuss Anderson /* MCA table */ 77d89cfe7fSRuss Anderson . = ALIGN(16); 787b313fdfSSam Ravnborg __mca_table : AT(ADDR(__mca_table) - LOAD_OFFSET) { 79d89cfe7fSRuss Anderson __start___mca_table = .; 80d89cfe7fSRuss Anderson *(__mca_table) 81d89cfe7fSRuss Anderson __stop___mca_table = .; 82d89cfe7fSRuss Anderson } 83d89cfe7fSRuss Anderson 847b313fdfSSam Ravnborg .data..patch.phys_stack_reg : AT(ADDR(.data..patch.phys_stack_reg) - LOAD_OFFSET) { 85a0776ec8SChen, Kenneth W __start___phys_stack_reg_patchlist = .; 86dafb9320SDenys Vlasenko *(.data..patch.phys_stack_reg) 87a0776ec8SChen, Kenneth W __end___phys_stack_reg_patchlist = .; 88a0776ec8SChen, Kenneth W } 89a0776ec8SChen, Kenneth W 907b313fdfSSam Ravnborg /* 917b313fdfSSam Ravnborg * Global data 927b313fdfSSam Ravnborg */ 931da177e4SLinus Torvalds _data = .; 941da177e4SLinus Torvalds 951da177e4SLinus Torvalds /* Unwind info & table: */ 961da177e4SLinus Torvalds . = ALIGN(8); 977b313fdfSSam Ravnborg .IA_64.unwind_info : AT(ADDR(.IA_64.unwind_info) - LOAD_OFFSET) { 987b313fdfSSam Ravnborg *(.IA_64.unwind_info*) 997b313fdfSSam Ravnborg } 1007b313fdfSSam Ravnborg .IA_64.unwind : AT(ADDR(.IA_64.unwind) - LOAD_OFFSET) { 1011da177e4SLinus Torvalds __start_unwind = .; 1021da177e4SLinus Torvalds *(.IA_64.unwind*) 1031da177e4SLinus Torvalds __end_unwind = .; 104430c6b26SKees Cook } :text :unwind 1057b313fdfSSam Ravnborg code_continues2 : { 106430c6b26SKees Cook } :text 1071da177e4SLinus Torvalds 108c8231825SKees Cook RO_DATA(4096) 1091da177e4SLinus Torvalds 1107b313fdfSSam Ravnborg .opd : AT(ADDR(.opd) - LOAD_OFFSET) { 1118e307888SSergey Senozhatsky __start_opd = .; 1127b313fdfSSam Ravnborg *(.opd) 1138e307888SSergey Senozhatsky __end_opd = .; 1147b313fdfSSam Ravnborg } 1151da177e4SLinus Torvalds 1167b313fdfSSam Ravnborg /* 1177b313fdfSSam Ravnborg * Initialization code and data: 1187b313fdfSSam Ravnborg */ 1191da177e4SLinus Torvalds . = ALIGN(PAGE_SIZE); 1201da177e4SLinus Torvalds __init_begin = .; 1211da177e4SLinus Torvalds 1226ae86350SNelson Elhage INIT_TEXT_SECTION(PAGE_SIZE) 1236ae86350SNelson Elhage INIT_DATA_SECTION(16) 12439e18de8SChen, Kenneth W 1257b313fdfSSam Ravnborg .data..patch.vtop : AT(ADDR(.data..patch.vtop) - LOAD_OFFSET) { 12639e18de8SChen, Kenneth W __start___vtop_patchlist = .; 127dafb9320SDenys Vlasenko *(.data..patch.vtop) 12839e18de8SChen, Kenneth W __end___vtop_patchlist = .; 12939e18de8SChen, Kenneth W } 13039e18de8SChen, Kenneth W 1317b313fdfSSam Ravnborg .data..patch.rse : AT(ADDR(.data..patch.rse) - LOAD_OFFSET) { 1324dcc29e1STony Luck __start___rse_patchlist = .; 133dafb9320SDenys Vlasenko *(.data..patch.rse) 1344dcc29e1STony Luck __end___rse_patchlist = .; 1354dcc29e1STony Luck } 1364dcc29e1STony Luck 1377b313fdfSSam Ravnborg .data..patch.mckinley_e9 : AT(ADDR(.data..patch.mckinley_e9) - LOAD_OFFSET) { 13839e18de8SChen, Kenneth W __start___mckinley_e9_bundles = .; 139dafb9320SDenys Vlasenko *(.data..patch.mckinley_e9) 14039e18de8SChen, Kenneth W __end___mckinley_e9_bundles = .; 14139e18de8SChen, Kenneth W } 14239e18de8SChen, Kenneth W 14336886478STejun Heo#ifdef CONFIG_SMP 14436886478STejun Heo . = ALIGN(PERCPU_PAGE_SIZE); 14536886478STejun Heo __cpu0_per_cpu = .; 14636886478STejun Heo . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ 14736886478STejun Heo#endif 14836886478STejun Heo 1491da177e4SLinus Torvalds . = ALIGN(PAGE_SIZE); 1501da177e4SLinus Torvalds __init_end = .; 1511da177e4SLinus Torvalds 1527b313fdfSSam Ravnborg .data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET) { 153ed7af3e6SNelson Elhage PAGE_ALIGNED_DATA(PAGE_SIZE) 154ed7af3e6SNelson Elhage . = ALIGN(PAGE_SIZE); 1551da177e4SLinus Torvalds __start_gate_section = .; 156e1cb14b8SDenys Vlasenko *(.data..gate) 1571da177e4SLinus Torvalds __stop_gate_section = .; 1581da177e4SLinus Torvalds } 1597b313fdfSSam Ravnborg /* 1607b313fdfSSam Ravnborg * make sure the gate page doesn't expose 161df8f0ec1SAl Stone * kernel data 162df8f0ec1SAl Stone */ 1637b313fdfSSam Ravnborg . = ALIGN(PAGE_SIZE); 1641da177e4SLinus Torvalds 1651da177e4SLinus Torvalds /* Per-cpu data: */ 1661da177e4SLinus Torvalds . = ALIGN(PERCPU_PAGE_SIZE); 16719df0c2fSTejun Heo PERCPU_VADDR(SMP_CACHE_BYTES, PERCPU_ADDR, :percpu) 16819390c4dSTejun Heo __phys_per_cpu_start = __per_cpu_load; 1697b313fdfSSam Ravnborg /* 1707b313fdfSSam Ravnborg * ensure percpu data fits 171df8f0ec1SAl Stone * into percpu page size 172df8f0ec1SAl Stone */ 1737b313fdfSSam Ravnborg . = __phys_per_cpu_start + PERCPU_PAGE_SIZE; 1741da177e4SLinus Torvalds 1757b313fdfSSam Ravnborg data : { 1767b313fdfSSam Ravnborg } :data 1777b313fdfSSam Ravnborg .data : AT(ADDR(.data) - LOAD_OFFSET) { 17830f7276cSTony Luck _sdata = .; 1796ae86350SNelson Elhage INIT_TASK_DATA(PAGE_SIZE) 1806ae86350SNelson Elhage CACHELINE_ALIGNED_DATA(SMP_CACHE_BYTES) 1816ae86350SNelson Elhage READ_MOSTLY_DATA(SMP_CACHE_BYTES) 182ca967258SSam Ravnborg DATA_DATA 183ca967258SSam Ravnborg *(.data1) 184ca967258SSam Ravnborg *(.gnu.linkonce.d*) 185ca967258SSam Ravnborg CONSTRUCTORS 186ca967258SSam Ravnborg } 1871da177e4SLinus Torvalds 188b5effd38SPeter Zijlstra BUG_TABLE 189b5effd38SPeter Zijlstra 1901da177e4SLinus Torvalds . = ALIGN(16); /* gp must be 16-byte aligned for exc. table */ 1917b313fdfSSam Ravnborg .got : AT(ADDR(.got) - LOAD_OFFSET) { 1927b313fdfSSam Ravnborg *(.got.plt) 1937b313fdfSSam Ravnborg *(.got) 1947b313fdfSSam Ravnborg } 1951da177e4SLinus Torvalds __gp = ADDR(.got) + 0x200000; 1967b313fdfSSam Ravnborg 1977b313fdfSSam Ravnborg /* 1987b313fdfSSam Ravnborg * We want the small data sections together, 1997b313fdfSSam Ravnborg * so single-instruction offsets can access 2007b313fdfSSam Ravnborg * them all, and initialized data all before 2017b313fdfSSam Ravnborg * uninitialized, so we can shorten the 2027b313fdfSSam Ravnborg * on-disk segment size. 2037b313fdfSSam Ravnborg */ 2047b313fdfSSam Ravnborg .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) { 2057b313fdfSSam Ravnborg *(.sdata) 2067b313fdfSSam Ravnborg *(.sdata1) 2077b313fdfSSam Ravnborg *(.srdata) 2087b313fdfSSam Ravnborg } 2091da177e4SLinus Torvalds _edata = .; 2106ae86350SNelson Elhage 2116ae86350SNelson Elhage BSS_SECTION(0, 0, 0) 2121da177e4SLinus Torvalds 2131da177e4SLinus Torvalds _end = .; 2141da177e4SLinus Torvalds 2157b313fdfSSam Ravnborg code : { 216430c6b26SKees Cook } :text 2176ae86350SNelson Elhage 2186ae86350SNelson Elhage STABS_DEBUG 2196ae86350SNelson Elhage DWARF_DEBUG 220*c604abc3SKees Cook ELF_DETAILS 221023bf6f1STejun Heo 222023bf6f1STejun Heo /* Default discards */ 223023bf6f1STejun Heo DISCARDS 2241da177e4SLinus Torvalds} 225