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.12Sryo PROVIDE(kernel_text = .); 151.8Smaxv *(.text) 161.9Smaxv *(.text.*) 171.9Smaxv *(.stub) 181.8Smaxv } =0 191.8Smaxv 201.8Smaxv /* Move .rodata to the next L2 block to set unexecutable */ 211.9Smaxv . = ALIGN(L2_SIZE); 221.9Smaxv 231.9Smaxv PROVIDE(__rodata_start = .); 241.9Smaxv .rodata : 251.9Smaxv { 261.9Smaxv *(.rodata) 271.9Smaxv *(.rodata.*) 281.11Smaxv . = ALIGN(64); 291.11Smaxv __CTOR_LIST__ = .; 301.11Smaxv *(.ctors) 311.11Smaxv *(.init_array) 321.11Smaxv __CTOR_END__ = .; 331.9Smaxv } 341.9Smaxv 351.9Smaxv PROVIDE(_etext = .); 361.9Smaxv PROVIDE(etext = .); 371.8Smaxv 381.8Smaxv /* 391.8Smaxv * Adjust the address for the data segment. Move .data to the next 401.8Smaxv * L2 block, and .text and .rodata will be set readonly if needed. 411.8Smaxv */ 421.9Smaxv PROVIDE(_erodata = .); 431.9Smaxv . = ALIGN(L2_SIZE); 441.9Smaxv 451.9Smaxv .data : 461.8Smaxv { 471.9Smaxv PROVIDE(__data_start = .); 481.9Smaxv *(.data) 491.8Smaxv } 501.8Smaxv 511.10Sskrll . = ALIGN(COHERENCY_UNIT); 521.8Smaxv .data.cacheline_aligned : 531.8Smaxv { 541.8Smaxv *(.data.cacheline_aligned) 551.8Smaxv } 561.10Sskrll . = ALIGN(COHERENCY_UNIT); 571.8Smaxv .data.read_mostly : 581.8Smaxv { 591.8Smaxv *(.data.read_mostly) 601.8Smaxv } 611.10Sskrll . = ALIGN(COHERENCY_UNIT); 621.8Smaxv 631.9Smaxv _edata = .; 641.9Smaxv PROVIDE (edata = .); 651.8Smaxv 661.8Smaxv __bss_start = .; 671.8Smaxv __bss_start__ = .; 681.8Smaxv .bss : 691.8Smaxv { 701.9Smaxv *(.bss) 711.9Smaxv *(.bss.*) 721.8Smaxv *(COMMON) 731.8Smaxv 741.8Smaxv /* 751.8Smaxv * Align here to ensure that the .bss section occupies space 761.8Smaxv * up to _end. Align after .bss to ensure correct alignment 771.8Smaxv * even if the .bss section disappears because there are no 781.8Smaxv * input sections. 791.8Smaxv * 801.8Smaxv * FIXME: Why do we need it? When there is no .bss section, 811.8Smaxv * we don't pad the .data section. 821.8Smaxv */ 831.8Smaxv . = ALIGN(. != 0 ? 32 / 8 : 1); 841.8Smaxv } 851.9Smaxv _bss_end__ = . ; 861.9Smaxv __bss_end__ = . ; 871.8Smaxv . = ALIGN(32 / 8); 881.8Smaxv 891.8Smaxv __end__ = . ; 901.9Smaxv _end = .; 911.9Smaxv PROVIDE(end = .); 921.1Smatt} 93