kern.ldscript revision 1.11
11.6Sryo#include "assym.h" 21.6Sryo 31.1Smatt/* Default linker script, for normal executables */ 41.1SmattOUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64", 51.1Smatt "elf64-littleaarch64") 61.1SmattOUTPUT_ARCH(aarch64) 71.1SmattENTRY(_start) 81.8Smaxv 91.1SmattSECTIONS 101.1Smatt{ 111.8Smaxv .text : 121.8Smaxv { 131.9Smaxv PROVIDE(__kernel_text = .); 141.8Smaxv *(.text) 151.9Smaxv *(.text.*) 161.9Smaxv *(.stub) 171.8Smaxv } =0 181.8Smaxv 191.8Smaxv /* Move .rodata to the next L2 block to set unexecutable */ 201.9Smaxv . = ALIGN(L2_SIZE); 211.9Smaxv 221.9Smaxv PROVIDE(__rodata_start = .); 231.9Smaxv .rodata : 241.9Smaxv { 251.9Smaxv *(.rodata) 261.9Smaxv *(.rodata.*) 271.11Smaxv . = ALIGN(64); 281.11Smaxv __CTOR_LIST__ = .; 291.11Smaxv *(.ctors) 301.11Smaxv *(.init_array) 311.11Smaxv __CTOR_END__ = .; 321.9Smaxv } 331.9Smaxv 341.9Smaxv PROVIDE(_etext = .); 351.9Smaxv PROVIDE(etext = .); 361.8Smaxv 371.8Smaxv /* 381.8Smaxv * Adjust the address for the data segment. Move .data to the next 391.8Smaxv * L2 block, and .text and .rodata will be set readonly if needed. 401.8Smaxv */ 411.9Smaxv PROVIDE(_erodata = .); 421.9Smaxv . = ALIGN(L2_SIZE); 431.9Smaxv 441.9Smaxv .data : 451.8Smaxv { 461.9Smaxv PROVIDE(__data_start = .); 471.9Smaxv *(.data) 481.8Smaxv } 491.8Smaxv 501.10Sskrll . = ALIGN(COHERENCY_UNIT); 511.8Smaxv .data.cacheline_aligned : 521.8Smaxv { 531.8Smaxv *(.data.cacheline_aligned) 541.8Smaxv } 551.10Sskrll . = ALIGN(COHERENCY_UNIT); 561.8Smaxv .data.read_mostly : 571.8Smaxv { 581.8Smaxv *(.data.read_mostly) 591.8Smaxv } 601.10Sskrll . = ALIGN(COHERENCY_UNIT); 611.8Smaxv 621.9Smaxv _edata = .; 631.9Smaxv PROVIDE (edata = .); 641.8Smaxv 651.8Smaxv __bss_start = .; 661.8Smaxv __bss_start__ = .; 671.8Smaxv .bss : 681.8Smaxv { 691.9Smaxv *(.bss) 701.9Smaxv *(.bss.*) 711.8Smaxv *(COMMON) 721.8Smaxv 731.8Smaxv /* 741.8Smaxv * Align here to ensure that the .bss section occupies space 751.8Smaxv * up to _end. Align after .bss to ensure correct alignment 761.8Smaxv * even if the .bss section disappears because there are no 771.8Smaxv * input sections. 781.8Smaxv * 791.8Smaxv * FIXME: Why do we need it? When there is no .bss section, 801.8Smaxv * we don't pad the .data section. 811.8Smaxv */ 821.8Smaxv . = ALIGN(. != 0 ? 32 / 8 : 1); 831.8Smaxv } 841.9Smaxv _bss_end__ = . ; 851.9Smaxv __bss_end__ = . ; 861.8Smaxv . = ALIGN(32 / 8); 871.8Smaxv 881.8Smaxv __end__ = . ; 891.9Smaxv _end = .; 901.9Smaxv PROVIDE(end = .); 911.1Smatt} 92