kern.ldscript revision 1.9
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.9Smaxv } 281.9Smaxv 291.9Smaxv PROVIDE(_etext = .); 301.9Smaxv PROVIDE(etext = .); 311.8Smaxv 321.8Smaxv /* 331.8Smaxv * Adjust the address for the data segment. Move .data to the next 341.8Smaxv * L2 block, and .text and .rodata will be set readonly if needed. 351.8Smaxv */ 361.9Smaxv PROVIDE(_erodata = .); 371.9Smaxv . = ALIGN(L2_SIZE); 381.9Smaxv 391.9Smaxv .data : 401.8Smaxv { 411.9Smaxv PROVIDE(__data_start = .); 421.9Smaxv *(.data) 431.8Smaxv } 441.8Smaxv 451.8Smaxv . = ALIGN(64); /* COHERENCY_UNIT */ 461.8Smaxv .data.cacheline_aligned : 471.8Smaxv { 481.8Smaxv *(.data.cacheline_aligned) 491.8Smaxv } 501.8Smaxv . = ALIGN(64); /* COHERENCY_UNIT */ 511.8Smaxv .data.read_mostly : 521.8Smaxv { 531.8Smaxv *(.data.read_mostly) 541.8Smaxv } 551.8Smaxv . = ALIGN(64); /* COHERENCY_UNIT */ 561.8Smaxv 571.9Smaxv _edata = .; 581.9Smaxv PROVIDE (edata = .); 591.8Smaxv 601.8Smaxv __bss_start = .; 611.8Smaxv __bss_start__ = .; 621.8Smaxv .bss : 631.8Smaxv { 641.9Smaxv *(.bss) 651.9Smaxv *(.bss.*) 661.8Smaxv *(COMMON) 671.8Smaxv 681.8Smaxv /* 691.8Smaxv * Align here to ensure that the .bss section occupies space 701.8Smaxv * up to _end. Align after .bss to ensure correct alignment 711.8Smaxv * even if the .bss section disappears because there are no 721.8Smaxv * input sections. 731.8Smaxv * 741.8Smaxv * FIXME: Why do we need it? When there is no .bss section, 751.8Smaxv * we don't pad the .data section. 761.8Smaxv */ 771.8Smaxv . = ALIGN(. != 0 ? 32 / 8 : 1); 781.8Smaxv } 791.9Smaxv _bss_end__ = . ; 801.9Smaxv __bss_end__ = . ; 811.8Smaxv . = ALIGN(32 / 8); 821.8Smaxv 831.8Smaxv __end__ = . ; 841.9Smaxv _end = .; 851.9Smaxv PROVIDE(end = .); 861.1Smatt} 87