Now we can handle GOT and GOT-based relocations properly, remove the
undocumented `-Wa,-mla-{global,local}-with-{pcrel,abs}` assembler hacks.
Adjust assembly code to explicitly use "la.pcrel" where necessary.
Signed-off-by: Xi Ruoyao <[email protected]>
---
arch/loongarch/Makefile | 5 +----
arch/loongarch/kernel/head.S | 10 +++++-----
2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
index 039dcc4fe1f3..9552c7880d34 100644
--- a/arch/loongarch/Makefile
+++ b/arch/loongarch/Makefile
@@ -40,10 +40,7 @@ endif
cflags-y += -G0 -pipe -msoft-float
LDFLAGS_vmlinux += -G0 -static -n -nostdlib
-KBUILD_AFLAGS_KERNEL += -Wa,-mla-global-with-pcrel
-KBUILD_CFLAGS_KERNEL += -Wa,-mla-global-with-pcrel
-KBUILD_AFLAGS_MODULE += -Wa,-mla-global-with-abs
-KBUILD_CFLAGS_MODULE += -fplt -Wa,-mla-global-with-abs,-mla-local-with-abs
+KBUILD_CFLAGS_MODULE += -fplt
cflags-y += -ffreestanding
cflags-y += $(call cc-option, -mno-check-zero-division)
diff --git a/arch/loongarch/kernel/head.S b/arch/loongarch/kernel/head.S
index 74ea7bf6c8d6..193329ed6e8c 100644
--- a/arch/loongarch/kernel/head.S
+++ b/arch/loongarch/kernel/head.S
@@ -60,17 +60,17 @@ SYM_CODE_START(kernel_entry) # kernel entry point
la.abs t0, 0f
jirl zero, t0, 0
0:
- la t0, __bss_start # clear .bss
+ la.pcrel t0, __bss_start # clear .bss
st.d zero, t0, 0
- la t1, __bss_stop - LONGSIZE
+ la.pcrel t1, __bss_stop - LONGSIZE
1:
addi.d t0, t0, LONGSIZE
st.d zero, t0, 0
bne t0, t1, 1b
- la t0, fw_arg0
+ la.pcrel t0, fw_arg0
st.d a0, t0, 0 # firmware arguments
- la t0, fw_arg1
+ la.pcrel t0, fw_arg1
st.d a1, t0, 0
/* KSave3 used for percpu base, initialized as 0 */
@@ -78,7 +78,7 @@ SYM_CODE_START(kernel_entry) # kernel entry point
/* GPR21 used for percpu base (runtime), initialized as 0 */
or u0, zero, zero
- la tp, init_thread_union
+ la.pcrel tp, init_thread_union
/* Set the SP after an empty pt_regs. */
PTR_LI sp, (_THREAD_SIZE - 32 - PT_SIZE)
PTR_ADD sp, sp, tp
--
2.37.0
On 07/28/2022 12:29 AM, Xi Ruoyao wrote:
> Now we can handle GOT and GOT-based relocations properly, remove the
> undocumented `-Wa,-mla-{global,local}-with-{pcrel,abs}` assembler hacks.
>
> Adjust assembly code to explicitly use "la.pcrel" where necessary.
>
> Signed-off-by: Xi Ruoyao <[email protected]>
> ---
> arch/loongarch/Makefile | 5 +----
> arch/loongarch/kernel/head.S | 10 +++++-----
> 2 files changed, 6 insertions(+), 9 deletions(-)
>
> diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
> index 039dcc4fe1f3..9552c7880d34 100644
> --- a/arch/loongarch/Makefile
> +++ b/arch/loongarch/Makefile
> @@ -40,10 +40,7 @@ endif
>
> cflags-y += -G0 -pipe -msoft-float
> LDFLAGS_vmlinux += -G0 -static -n -nostdlib
> -KBUILD_AFLAGS_KERNEL += -Wa,-mla-global-with-pcrel
> -KBUILD_CFLAGS_KERNEL += -Wa,-mla-global-with-pcrel
> -KBUILD_AFLAGS_MODULE += -Wa,-mla-global-with-abs
> -KBUILD_CFLAGS_MODULE += -fplt -Wa,-mla-global-with-abs,-mla-local-with-abs
> +KBUILD_CFLAGS_MODULE += -fplt
The -fplt flag may be removed, the compiler defaults to -fplt if not
specified (riscv is also not manually specified as -fplt).
Thanks,
Youling
On Thu, 2022-07-28 at 17:46 +0800, Youling Tang wrote:
>
> On 07/28/2022 12:29 AM, Xi Ruoyao wrote:
> > Now we can handle GOT and GOT-based relocations properly, remove the
> > undocumented `-Wa,-mla-{global,local}-with-{pcrel,abs}` assembler
> > hacks.
> >
> > Adjust assembly code to explicitly use "la.pcrel" where necessary.
> >
> > Signed-off-by: Xi Ruoyao <[email protected]>
> > ---
> > arch/loongarch/Makefile | 5 +----
> > arch/loongarch/kernel/head.S | 10 +++++-----
> > 2 files changed, 6 insertions(+), 9 deletions(-)
> >
> > diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
> > index 039dcc4fe1f3..9552c7880d34 100644
> > --- a/arch/loongarch/Makefile
> > +++ b/arch/loongarch/Makefile
> > @@ -40,10 +40,7 @@ endif
> >
> > cflags-y += -G0 -pipe -msoft-float
> > LDFLAGS_vmlinux += -G0 -static -n -nostdlib
> > -KBUILD_AFLAGS_KERNEL += -Wa,-mla-global-with-pcrel
> > -KBUILD_CFLAGS_KERNEL += -Wa,-mla-global-with-pcrel
> > -KBUILD_AFLAGS_MODULE += -Wa,-mla-global-with-abs
> > -KBUILD_CFLAGS_MODULE += -fplt -Wa,-mla-global-with-abs,-
> > mla-local-with-abs
> > +KBUILD_CFLAGS_MODULE += -fplt
>
> The -fplt flag may be removed, the compiler defaults to -fplt if not
> specified (riscv is also not manually specified as -fplt).
Will remove explicit -fplt in V2.
By the way, how do you think about "-G0"? It does not have any effect
now because the toolchain does not attempt to use sbss/sdata sections.
Do we have any plan to add sbss and sdata support in the toolchain?
--
Xi Ruoyao <[email protected]>
School of Aerospace Science and Technology, Xidian University