Message ID | 20230625095644.3156349-2-kernel@xen0n.name (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | LoongArch: Preliminary ClangBuiltLinux enablement | expand |
On Sun, Jun 25, 2023 at 5:57 PM WANG Xuerui <kernel@xen0n.name> wrote: > > From: WANG Rui <wangrui@loongson.cn> > > 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> > --- > arch/loongarch/kernel/efi-header.S | 6 +++--- > arch/loongarch/kernel/head.S | 8 ++++---- > arch/loongarch/kernel/vmlinux.lds.S | 7 +++++++ > 3 files changed, 14 insertions(+), 7 deletions(-) > > diff --git a/arch/loongarch/kernel/efi-header.S b/arch/loongarch/kernel/efi-header.S > index 8c1d229a2afa..5f23b85d78ca 100644 > --- a/arch/loongarch/kernel/efi-header.S > +++ b/arch/loongarch/kernel/efi-header.S > @@ -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 */ > diff --git a/arch/loongarch/kernel/head.S b/arch/loongarch/kernel/head.S > index 0d8180153ec0..53b883db0786 100644 > --- a/arch/loongarch/kernel/head.S > +++ b/arch/loongarch/kernel/head.S > @@ -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 > > diff --git a/arch/loongarch/kernel/vmlinux.lds.S b/arch/loongarch/kernel/vmlinux.lds.S > index 0c7b041be9d8..79f238df029e 100644 > --- a/arch/loongarch/kernel/vmlinux.lds.S > +++ b/arch/loongarch/kernel/vmlinux.lds.S > @@ -136,6 +136,13 @@ SECTIONS > DWARF_DEBUG > ELF_DETAILS > > + /* header symbols */ > + _kernel_asize = _end - _text; > + _kernel_fsize = _edata - _text; > + _kernel_offset = kernel_offset - _text; When !CONFIG_EFI_STUB there is a build error, I fixed it when I applied. Huacai > + _kernel_vsize = _end - __initdata_begin; > + _kernel_rsize = _edata - __initdata_begin; > + > .gptab.sdata : { > *(.gptab.data) > *(.gptab.sdata) > -- > 2.40.0 > >
diff --git a/arch/loongarch/kernel/efi-header.S b/arch/loongarch/kernel/efi-header.S index 8c1d229a2afa..5f23b85d78ca 100644 --- a/arch/loongarch/kernel/efi-header.S +++ b/arch/loongarch/kernel/efi-header.S @@ -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 */ diff --git a/arch/loongarch/kernel/head.S b/arch/loongarch/kernel/head.S index 0d8180153ec0..53b883db0786 100644 --- a/arch/loongarch/kernel/head.S +++ b/arch/loongarch/kernel/head.S @@ -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 diff --git a/arch/loongarch/kernel/vmlinux.lds.S b/arch/loongarch/kernel/vmlinux.lds.S index 0c7b041be9d8..79f238df029e 100644 --- a/arch/loongarch/kernel/vmlinux.lds.S +++ b/arch/loongarch/kernel/vmlinux.lds.S @@ -136,6 +136,13 @@ SECTIONS DWARF_DEBUG ELF_DETAILS + /* header symbols */ + _kernel_asize = _end - _text; + _kernel_fsize = _edata - _text; + _kernel_offset = kernel_offset - _text; + _kernel_vsize = _end - __initdata_begin; + _kernel_rsize = _edata - __initdata_begin; + .gptab.sdata : { *(.gptab.data) *(.gptab.sdata)