diff mbox series

riscv: add correct as-options for assembly in modules

Message ID 20210712174849.2202287-1-ben.dooks@codethink.co.uk (mailing list archive)
State New, archived
Headers show
Series riscv: add correct as-options for assembly in modules | expand

Commit Message

Ben Dooks July 12, 2021, 5:48 p.m. UTC
When trying to load modules built for riscv which include assembly
the kernel loader errors with "unexpected relocation type 'R_RISCV_ALIGN'"
due to R_RISCV_ALIGN relocations being generated by the assembler.

In commit 7a8e7da42250138 ("RISC-V: Fixes to module loading")
the fix for gcc adds -mno-relax to the command line when building
C files. However this was never applied to assembly flags, and gcc
does no pass -mno-relax to gas when presented with a .S file.

The fix (other than making gcc always pass -mno-relax to gas) is
to add -Wa,-mno-relax to gcc to make sure the as is invoked with
the right options.

Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
---
 arch/riscv/Makefile | 1 +
 1 file changed, 1 insertion(+)

Comments

Ben Dooks July 16, 2021, 10:23 a.m. UTC | #1
On 12/07/2021 18:48, Ben Dooks wrote:
> When trying to load modules built for riscv which include assembly
> the kernel loader errors with "unexpected relocation type 'R_RISCV_ALIGN'"
> due to R_RISCV_ALIGN relocations being generated by the assembler.
> 
> In commit 7a8e7da42250138 ("RISC-V: Fixes to module loading")
> the fix for gcc adds -mno-relax to the command line when building
> C files. However this was never applied to assembly flags, and gcc
> does no pass -mno-relax to gas when presented with a .S file.
> 
> The fix (other than making gcc always pass -mno-relax to gas) is
> to add -Wa,-mno-relax to gcc to make sure the as is invoked with
> the right options.
> 
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>

Just wanted to find out if anyone has had time to review this.
If this is ok, should we also send to -stable ?

> ---
>   arch/riscv/Makefile | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
> index 1f5c03082976..fca40511a8c6 100644
> --- a/arch/riscv/Makefile
> +++ b/arch/riscv/Makefile
> @@ -60,6 +60,7 @@ ifeq ($(CONFIG_PERF_EVENTS),y)
>   endif
>   
>   KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
> +KBUILD_AFLAGS_MODULE += $(call as-option,-Wa$(comma)-mno-relax)
>   
>   # GCC versions that support the "-mstrict-align" option default to allowing
>   # unaligned accesses.  While unaligned accesses are explicitly allowed in the
>
Bin Meng July 16, 2021, 10:44 a.m. UTC | #2
On Tue, Jul 13, 2021 at 2:28 AM Ben Dooks <ben.dooks@codethink.co.uk> wrote:
>
> When trying to load modules built for riscv which include assembly

nits: RISC-V

> the kernel loader errors with "unexpected relocation type 'R_RISCV_ALIGN'"
> due to R_RISCV_ALIGN relocations being generated by the assembler.
>
> In commit 7a8e7da42250138 ("RISC-V: Fixes to module loading")
> the fix for gcc adds -mno-relax to the command line when building
> C files. However this was never applied to assembly flags, and gcc
> does no pass -mno-relax to gas when presented with a .S file.

does not pass

FYI

The GCC bug was fixed recently via:
https://github.com/gcc-mirror/gcc/commit/3b0a7d624e64eeb81e4d5e8c62c46d86ef521857

>
> The fix (other than making gcc always pass -mno-relax to gas) is
> to add -Wa,-mno-relax to gcc to make sure the as is invoked with
> the right options.
>
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> ---
>  arch/riscv/Makefile | 1 +
>  1 file changed, 1 insertion(+)
>

Otherwise,
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Ben Dooks July 16, 2021, 3:33 p.m. UTC | #3
On 16/07/2021 11:44, Bin Meng wrote:
> On Tue, Jul 13, 2021 at 2:28 AM Ben Dooks <ben.dooks@codethink.co.uk> wrote:
>>
>> When trying to load modules built for riscv which include assembly
> 
> nits: RISC-V
> 
>> the kernel loader errors with "unexpected relocation type 'R_RISCV_ALIGN'"
>> due to R_RISCV_ALIGN relocations being generated by the assembler.
>>
>> In commit 7a8e7da42250138 ("RISC-V: Fixes to module loading")
>> the fix for gcc adds -mno-relax to the command line when building
>> C files. However this was never applied to assembly flags, and gcc
>> does no pass -mno-relax to gas when presented with a .S file.
> 
> does not pass

I'll see if I can make this simpler. Should this get done for a v2?

> FYI
> 
> The GCC bug was fixed recently via:
> https://github.com/gcc-mirror/gcc/commit/3b0a7d624e64eeb81e4d5e8c62c46d86ef521857

thanks, I think it still useful to fix this in the kernel.

>>
>> The fix (other than making gcc always pass -mno-relax to gas) is
>> to add -Wa,-mno-relax to gcc to make sure the as is invoked with
>> the right options.
>>
>> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
>> ---
>>   arch/riscv/Makefile | 1 +
>>   1 file changed, 1 insertion(+)
>>
> 
> Otherwise,
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
>
Bin Meng July 16, 2021, 10:37 p.m. UTC | #4
On Fri, Jul 16, 2021 at 11:33 PM Ben Dooks <ben.dooks@codethink.co.uk> wrote:
>
> On 16/07/2021 11:44, Bin Meng wrote:
> > On Tue, Jul 13, 2021 at 2:28 AM Ben Dooks <ben.dooks@codethink.co.uk> wrote:
> >>
> >> When trying to load modules built for riscv which include assembly
> >
> > nits: RISC-V
> >
> >> the kernel loader errors with "unexpected relocation type 'R_RISCV_ALIGN'"
> >> due to R_RISCV_ALIGN relocations being generated by the assembler.
> >>
> >> In commit 7a8e7da42250138 ("RISC-V: Fixes to module loading")
> >> the fix for gcc adds -mno-relax to the command line when building
> >> C files. However this was never applied to assembly flags, and gcc
> >> does no pass -mno-relax to gas when presented with a .S file.
> >
> > does not pass
>
> I'll see if I can make this simpler. Should this get done for a v2?
>

Yes, please send v2.

> > FYI
> >
> > The GCC bug was fixed recently via:
> > https://github.com/gcc-mirror/gcc/commit/3b0a7d624e64eeb81e4d5e8c62c46d86ef521857
>
> thanks, I think it still useful to fix this in the kernel.
>
> >>
> >> The fix (other than making gcc always pass -mno-relax to gas) is
> >> to add -Wa,-mno-relax to gcc to make sure the as is invoked with
> >> the right options.
> >>
> >> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> >> ---
> >>   arch/riscv/Makefile | 1 +
> >>   1 file changed, 1 insertion(+)
> >>
> >
> > Otherwise,
> > Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

Regards,
Bin
diff mbox series

Patch

diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
index 1f5c03082976..fca40511a8c6 100644
--- a/arch/riscv/Makefile
+++ b/arch/riscv/Makefile
@@ -60,6 +60,7 @@  ifeq ($(CONFIG_PERF_EVENTS),y)
 endif
 
 KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
+KBUILD_AFLAGS_MODULE += $(call as-option,-Wa$(comma)-mno-relax)
 
 # GCC versions that support the "-mstrict-align" option default to allowing
 # unaligned accesses.  While unaligned accesses are explicitly allowed in the