]> git.dujemihanovic.xyz Git - linux.git/commitdiff
LoongArch: Calculate various sizes in the linker script
authorWANG Rui <wangrui@loongson.cn>
Thu, 29 Jun 2023 12:58:42 +0000 (20:58 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Thu, 29 Jun 2023 12:58:42 +0000 (20:58 +0800)
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 <wangrui@loongson.cn>
Signed-off-by: WANG Xuerui <git@xen0n.name>
[chenhuacai: Fix build with !CONFIG_EFI_STUB]
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/kernel/efi-header.S
arch/loongarch/kernel/head.S
arch/loongarch/kernel/vmlinux.lds.S

index 8c1d229a2afa10b69f2a3f3688c0900ff3399f78..5f23b85d78cad84067b48a38cb7c5acbfa0f02bd 100644 (file)
@@ -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 */
index aa64b179744f52ac4332bfe82302490e14a8210a..5e828a8bc0a0e0b95006449d2a1ab10b14ca2d4a 100644 (file)
@@ -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
 
index 0c7b041be9d8de9ef82e878fa0904c88818044f0..b1686afcf876663c99e010c40ec84f44d8d55a88 100644 (file)
@@ -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)