^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (C) 2000 Russell King
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <asm/vmlinux.lds.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #ifdef CONFIG_CPU_ENDIAN_BE8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define ZIMAGE_MAGIC(x) ( (((x) >> 24) & 0x000000ff) | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) (((x) >> 8) & 0x0000ff00) | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) (((x) << 8) & 0x00ff0000) | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) (((x) << 24) & 0xff000000) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define ZIMAGE_MAGIC(x) (x)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) OUTPUT_ARCH(arm)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) ENTRY(_start)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) SECTIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) /DISCARD/ : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) COMMON_DISCARDS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) *(.ARM.exidx*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) *(.ARM.extab*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) *(.note.*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) *(.rel.*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * Discard any r/w data - this produces a link error if we have any,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * which is required for PIC decompression. Local data generates
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * GOTOFF relocations, which prevents it being relocated independently
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * of the text/got segments.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) *(.data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) . = TEXT_START;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) _text = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) .text : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) _start = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) *(.start)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) *(.text)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) *(.text.*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) ARM_STUBS_TEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) .table : ALIGN(4) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) _table_start = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) LONG(ZIMAGE_MAGIC(6))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) LONG(ZIMAGE_MAGIC(0x5a534c4b))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) LONG(ZIMAGE_MAGIC(__piggy_size_addr - _start))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) LONG(ZIMAGE_MAGIC(_kernel_bss_size))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) LONG(ZIMAGE_MAGIC(TEXT_OFFSET))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) LONG(ZIMAGE_MAGIC(MALLOC_SIZE))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) LONG(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) _table_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) .rodata : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) *(.rodata)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) *(.rodata.*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) *(.data.rel.ro)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) .piggydata : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) *(.piggydata)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) __piggy_size_addr = . - 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) . = ALIGN(4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) _etext = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) .got.plt : { *(.got.plt) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #ifndef CONFIG_EFI_STUB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) _got_start = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) .got : { *(.got) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) _got_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) /* ensure the zImage file size is always a multiple of 64 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) /* (without a dummy byte, ld just ignores the empty section) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) .pad : { BYTE(0); . = ALIGN(8); }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #ifdef CONFIG_EFI_STUB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) .data : ALIGN(4096) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) __pecoff_data_start = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) _got_start = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) *(.got)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) _got_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) * The EFI stub always executes from RAM, and runs strictly before the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) * decompressor, so we can make an exception for its r/w data, and keep it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) *(.data.efistub .bss.efistub)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) __pecoff_data_end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) * PE/COFF mandates a file size which is a multiple of 512 bytes if the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) * section size equals or exceeds 4 KB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) . = ALIGN(512);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) __pecoff_data_rawsize = . - ADDR(.data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) _edata = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) * The image_end section appears after any additional loadable sections
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) * that the linker may decide to insert in the binary image. Having
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) * this symbol allows further debug in the near future.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) .image_end (NOLOAD) : {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) * EFI requires that the image is aligned to 512 bytes, and appended
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) * DTB requires that we know where the end of the image is. Ensure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) * that both are satisfied by ensuring that there are no additional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) * sections emitted into the decompressor image.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) _edata_real = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) _magic_sig = ZIMAGE_MAGIC(0x016f2818);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) _magic_start = ZIMAGE_MAGIC(_start);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) _magic_end = ZIMAGE_MAGIC(_edata);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) _magic_table = ZIMAGE_MAGIC(_table_start - _start);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) . = BSS_START;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) __bss_start = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) .bss : { *(.bss) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) _end = .;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) . = ALIGN(8); /* the stack must be 64-bit aligned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) .stack : { *(.stack) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) PROVIDE(__pecoff_data_size = ALIGN(512) - ADDR(.data));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) PROVIDE(__pecoff_end = ALIGN(512));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) STABS_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) DWARF_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) ARM_DETAILS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) ARM_ASSERTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) ASSERT(_edata_real == _edata, "error: zImage file size is incorrect");