Commit 414cefc7 authored by WANG Rui's avatar WANG Rui Committed by Huacai Chen
Browse files

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: default avatarWANG Rui <wangrui@loongson.cn>
Signed-off-by: default avatarWANG Xuerui <git@xen0n.name>
[chenhuacai: Fix build with !CONFIG_EFI_STUB]
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent 0d03e9dc
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@
	.byte	0x02					/* MajorLinkerVersion */
	.byte	0x14					/* MinorLinkerVersion */
	.long	__inittext_end - .Lefi_header_end	/* SizeOfCode */
	.long	_end - __initdata_begin			/* SizeOfInitializedData */
	.long	_kernel_vsize				/* SizeOfInitializedData */
	.long	0					/* SizeOfUninitializedData */
	.long	__efistub_efi_pe_entry - _head		/* AddressOfEntryPoint */
	.long	.Lefi_header_end - _head		/* BaseOfCode */
@@ -79,9 +79,9 @@
		IMAGE_SCN_MEM_EXECUTE			/* Characteristics */

	.ascii	".data\0\0\0"
	.long	_end - __initdata_begin			/* VirtualSize */
	.long	_kernel_vsize				/* VirtualSize */
	.long	__initdata_begin - _head		/* VirtualAddress */
	.long	_edata - __initdata_begin		/* SizeOfRawData */
	.long	_kernel_rsize				/* SizeOfRawData */
	.long	__initdata_begin - _head		/* PointerToRawData */

	.long	0					/* PointerToRelocations */
+4 −4
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ _head:
	.word	MZ_MAGIC		/* "MZ", MS-DOS header */
	.org	0x8
	.dword	kernel_entry		/* Kernel entry point */
	.dword	_end - _text		/* Kernel image effective size */
	.dword	_kernel_asize		/* Kernel image effective size */
	.quad	PHYS_LINK_KADDR		/* Kernel image load offset from start of RAM */
	.org	0x38			/* 0x20 ~ 0x37 reserved */
	.long	LINUX_PE_MAGIC
@@ -32,9 +32,9 @@ _head:
pe_header:
	__EFI_PE_HEADER

SYM_DATA(kernel_asize, .long _end - _text);
SYM_DATA(kernel_fsize, .long _edata - _text);
SYM_DATA(kernel_offset, .long kernel_offset - _text);
SYM_DATA(kernel_asize, .long _kernel_asize);
SYM_DATA(kernel_fsize, .long _kernel_fsize);
SYM_DATA(kernel_offset, .long _kernel_offset);

#endif

+9 −0
Original line number Diff line number Diff line
@@ -136,6 +136,15 @@ SECTIONS
	DWARF_DEBUG
	ELF_DETAILS

#ifdef CONFIG_EFI_STUB
	/* header symbols */
	_kernel_asize = _end - _text;
	_kernel_fsize = _edata - _text;
	_kernel_vsize = _end - __initdata_begin;
	_kernel_rsize = _edata - __initdata_begin;
	_kernel_offset = kernel_offset - _text;
#endif

	.gptab.sdata : {
		*(.gptab.data)
		*(.gptab.sdata)