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