Skip to contentSkip to conversation

Makefile: Manually forward RELAX_FLAG to the GNU assembler when linking with LLD

PATCH New Bin Meng 2 participants 2 messages Jul 12, 2021 – Jul 27, 2021 Kbuild

lore
Share & tools
lore

Bin Meng

author
#0 lore raw

PATCH v2 1/1 Makefile: Manually forward RELAX_FLAG to the GNU assembler when linking with LLD

When generating code with -mno-relax, GCC puts .option norelax in the generated assembly, and so doesn?t bother passing on -mno-relax to the assembler. This has the unfortunate effect that, when using GCC to assemble hand-written assembly, -mno-relax does nothing, and we have to pass -Wa,-mno-relax to manually forward it to the assembler.

This is an old GCC bug that was fixed [1] recently. For the time being, let's pass "-Wa,-mno-relax" to ASFLAGS for the GCC + LLD combination to work, e.g.:

  $ make CC=riscv64-unknown-elf-gcc LLVM=1 PLATFORM=generic

[1] https://github.com/gcc-mirror/gcc/commit/3b0a7d624e64eeb81e4d5e8c62c46d86ef521857

---

Changes in v2:
- Use Jessica's suggestion

 Makefile | 5 +++++
 1 file changed, 5 insertions(+)
Makefile +5 -0
index 129b8ed..16d9dca 100644
@@ -272,6 +272,11 @@ ASFLAGS		+=	-mno-save-restore -mstrict-align
 ASFLAGS		+=	-mabi=$(PLATFORM_RISCV_ABI) -march=$(PLATFORM_RISCV_ISA)
 ASFLAGS		+=	-mcmodel=$(PLATFORM_RISCV_CODE_MODEL)
 ASFLAGS		+=	$(RELAX_FLAG)
+ifneq ($(CC_IS_CLANG),y)
+ifneq ($(RELAX_FLAG),)
+ASFLAGS		+=	-Wa,$(RELAX_FLAG)
+endif
+endif
 ASFLAGS		+=	$(GENFLAGS)
 ASFLAGS		+=	$(platform-asflags-y)
 ASFLAGS		+=	$(firmware-asflags-y)
Signature · 1 line
2.25.1
Applied
#1 lore raw

PATCH v2 1/1 Makefile: Manually forward RELAX_FLAG to the GNU assembler when linking with LLD

Quoted 12 lines · Bin Meng

When generating code with -mno-relax, GCC puts .option norelax in the generated assembly, and so doesn?t bother passing on -mno-relax to the assembler. This has the unfortunate effect that, when using GCC to assemble hand-written assembly, -mno-relax does nothing, and we have to pass -Wa,-mno-relax to manually forward it to the assembler.

This is an old GCC bug that was fixed [1] recently. For the time being, let's pass "-Wa,-mno-relax" to ASFLAGS for the GCC + LLD combination to work, e.g.:

Quoted 5 lines
  $ make CC=riscv64-unknown-elf-gcc LLVM=1 PLATFORM=generic

[1] https://github.com/gcc-mirror/gcc/commit/3b0a7d624e64eeb81e4d5e8c62c46d86ef521857

Looks good to me.

Applied this patch to the riscv/opensbi repo.

Regards,
Anup

Quoted 33 lines

---

Changes in v2:
- Use Jessica's suggestion

 Makefile | 5 +++++
 1 file changed, 5 insertions(+)
Makefile +5 -1
index 129b8ed..16d9dca 100644
@@ -272,6 +272,11 @@ ASFLAGS            +=      -mno-save-restore -mstrict-align
 ASFLAGS                +=      -mabi=$(PLATFORM_RISCV_ABI) -march=$(PLATFORM_RISCV_ISA)
 ASFLAGS                +=      -mcmodel=$(PLATFORM_RISCV_CODE_MODEL)
 ASFLAGS                +=      $(RELAX_FLAG)
+ifneq ($(CC_IS_CLANG),y)
+ifneq ($(RELAX_FLAG),)
+ASFLAGS                +=      -Wa,$(RELAX_FLAG)
+endif
+endif
 ASFLAGS                +=      $(GENFLAGS)
 ASFLAGS                +=      $(platform-asflags-y)
 ASFLAGS                +=      $(firmware-asflags-y)
--

2.25.1

--
opensbi mailing list
opensbi at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi