Skip to content

Commit 414cefc

Browse files
heiherchenhuacai
authored andcommitted
LoongArch: Calculate various sizes in the linker script
Taking the address delta between symbols in different sections is not supported by the LLVM IAS. Instead, do this in the linker script, so the same data can be properly referenced in assembly. Signed-off-by: WANG Rui <[email protected]> Signed-off-by: WANG Xuerui <[email protected]> [chenhuacai: Fix build with !CONFIG_EFI_STUB] Signed-off-by: Huacai Chen <[email protected]>
1 parent 0d03e9d commit 414cefc

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

arch/loongarch/kernel/efi-header.S

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
.byte 0x02 /* MajorLinkerVersion */
2525
.byte 0x14 /* MinorLinkerVersion */
2626
.long __inittext_end - .Lefi_header_end /* SizeOfCode */
27-
.long _end - __initdata_begin /* SizeOfInitializedData */
27+
.long _kernel_vsize /* SizeOfInitializedData */
2828
.long 0 /* SizeOfUninitializedData */
2929
.long __efistub_efi_pe_entry - _head /* AddressOfEntryPoint */
3030
.long .Lefi_header_end - _head /* BaseOfCode */
@@ -79,9 +79,9 @@
7979
IMAGE_SCN_MEM_EXECUTE /* Characteristics */
8080

8181
.ascii ".data\0\0\0"
82-
.long _end - __initdata_begin /* VirtualSize */
82+
.long _kernel_vsize /* VirtualSize */
8383
.long __initdata_begin - _head /* VirtualAddress */
84-
.long _edata - __initdata_begin /* SizeOfRawData */
84+
.long _kernel_rsize /* SizeOfRawData */
8585
.long __initdata_begin - _head /* PointerToRawData */
8686

8787
.long 0 /* PointerToRelocations */

arch/loongarch/kernel/head.S

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ _head:
2323
.word MZ_MAGIC /* "MZ", MS-DOS header */
2424
.org 0x8
2525
.dword kernel_entry /* Kernel entry point */
26-
.dword _end - _text /* Kernel image effective size */
26+
.dword _kernel_asize /* Kernel image effective size */
2727
.quad PHYS_LINK_KADDR /* Kernel image load offset from start of RAM */
2828
.org 0x38 /* 0x20 ~ 0x37 reserved */
2929
.long LINUX_PE_MAGIC
@@ -32,9 +32,9 @@ _head:
3232
pe_header:
3333
__EFI_PE_HEADER
3434

35-
SYM_DATA(kernel_asize, .long _end - _text);
36-
SYM_DATA(kernel_fsize, .long _edata - _text);
37-
SYM_DATA(kernel_offset, .long kernel_offset - _text);
35+
SYM_DATA(kernel_asize, .long _kernel_asize);
36+
SYM_DATA(kernel_fsize, .long _kernel_fsize);
37+
SYM_DATA(kernel_offset, .long _kernel_offset);
3838

3939
#endif
4040

arch/loongarch/kernel/vmlinux.lds.S

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,15 @@ SECTIONS
136136
DWARF_DEBUG
137137
ELF_DETAILS
138138

139+
#ifdef CONFIG_EFI_STUB
140+
/* header symbols */
141+
_kernel_asize = _end - _text;
142+
_kernel_fsize = _edata - _text;
143+
_kernel_vsize = _end - __initdata_begin;
144+
_kernel_rsize = _edata - __initdata_begin;
145+
_kernel_offset = kernel_offset - _text;
146+
#endif
147+
139148
.gptab.sdata : {
140149
*(.gptab.data)
141150
*(.gptab.sdata)

0 commit comments

Comments
 (0)