From d60b34c8e246cf86ea6a09c6a1660f61a112e329 Mon Sep 17 00:00:00 2001 From: e14002270 <65062813+e14002270@users.noreply.github.com> Date: Thu, 1 Jun 2023 02:48:13 +0800 Subject: [PATCH] risc-v: Fix build flags and linker scripts (#906) 1. miss debug info in assembly code RISC-V-spike-htif_GCC LDFLAGS add arch and abi info for linker for riscv64-unknown-elf multilib, if there is no arch and abi info, will link to default lib and have below error target emulation `elf32-littleriscv' does not match `elf64-littleriscv' use CFLAGS to replace ASFLAGS when compile assembly code because DEBUG flag is added in CFLAGS, if we use ASFLAGS to compile assembly code, there is no debug info in assembly code objfile 2. binutils 2.39 ld warn 'has a LOAD segment with RWX permissions' RISC-V-Qemu-virt_GCC RISC-V-spike-htif_GCC RISC-V_RV32_QEMU_VIRT_GCC 3. fix build fail RISC-V_RV32_QEMU_VIRT_GCC Signed-off-by: Eric Chan --- FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile | 2 +- FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/fake_rom.lds | 3 +-- FreeRTOS/Demo/RISC-V-spike-htif_GCC/Makefile | 4 ++-- FreeRTOS/Demo/RISC-V-spike-htif_GCC/fake_rom.lds | 3 +-- FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC/FreeRTOSConfig.h | 2 +- FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC/build/gcc/fake_rom.ld | 3 +-- 6 files changed, 7 insertions(+), 10 deletions(-) diff --git a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile index 0c53cbe0f5..bd24333a20 100644 --- a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile +++ b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile @@ -24,7 +24,7 @@ LDFLAGS = -nostartfiles -Tfake_rom.lds \ -march=rv32imac -mabi=ilp32 -mcmodel=medany \ -Xlinker --gc-sections \ -Xlinker --defsym=__stack_size=300 \ - -Xlinker -Map=RTOSDemo.map + -Xlinker -Map=$(BUILD_DIR)/RTOSDemo.map ifeq ($(DEBUG), 1) CFLAGS += -Og -ggdb3 diff --git a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/fake_rom.lds b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/fake_rom.lds index b63fad8f05..ca66b669d5 100644 --- a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/fake_rom.lds +++ b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/fake_rom.lds @@ -30,9 +30,8 @@ SECTIONS _etext = .; } >rom AT>rom - .rodata.align : + .rodata.align ALIGN(4): { - . = ALIGN(4); _rodata = .; } >rom AT>rom diff --git a/FreeRTOS/Demo/RISC-V-spike-htif_GCC/Makefile b/FreeRTOS/Demo/RISC-V-spike-htif_GCC/Makefile index c9e0bf390a..51cb2bd1b4 100644 --- a/FreeRTOS/Demo/RISC-V-spike-htif_GCC/Makefile +++ b/FreeRTOS/Demo/RISC-V-spike-htif_GCC/Makefile @@ -34,8 +34,8 @@ CFLAGS = -march=$(MARCH) -mabi=$(MABI) -mcmodel=medany \ -ffunction-sections \ -fdata-sections \ -fno-builtin-printf -ASFLAGS = -march=$(MARCH) -mabi=$(MABI) -mcmodel=medany LDFLAGS = -nostartfiles \ + -march=$(MARCH) -mabi=$(MABI) -mcmodel=medany \ -Xlinker --gc-sections \ -Xlinker --defsym=__stack_size=$(STACK_SIZE) @@ -76,7 +76,7 @@ $(BUILD_DIR)/%$(XLEN).o: %.c Makefile $(BUILD_DIR)/%$(XLEN).o: %.S Makefile @mkdir -p $(@D) - $(CC) $(CPPFLAGS) $(ASFLAGS) -MMD -MP -c $< -o $@ + $(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MP -c $< -o $@ # Run lds through the C preprocessor, to replace BASE_ADDRESS with the actual # value. It might be simpler to use sed instead. diff --git a/FreeRTOS/Demo/RISC-V-spike-htif_GCC/fake_rom.lds b/FreeRTOS/Demo/RISC-V-spike-htif_GCC/fake_rom.lds index abac8091a7..ea9e9d0ad3 100644 --- a/FreeRTOS/Demo/RISC-V-spike-htif_GCC/fake_rom.lds +++ b/FreeRTOS/Demo/RISC-V-spike-htif_GCC/fake_rom.lds @@ -31,9 +31,8 @@ SECTIONS _etext = .; } >rom AT>rom - .rodata.align : + .rodata.align ALIGN(4): { - . = ALIGN(4); _rodata = .; } >rom AT>rom diff --git a/FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC/FreeRTOSConfig.h b/FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC/FreeRTOSConfig.h index b98df47b99..f336cd5810 100644 --- a/FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC/FreeRTOSConfig.h +++ b/FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC/FreeRTOSConfig.h @@ -103,7 +103,7 @@ to exclude the API function. */ format the raw data provided by the uxTaskGetSystemState() function in to human readable ASCII form. See the notes in the implementation of vTaskList() within FreeRTOS/Source/tasks.c for limitations. */ -#define configUSE_STATS_FORMATTING_FUNCTIONS 1 +#define configUSE_STATS_FORMATTING_FUNCTIONS 0 /* The QEMU target is capable of running all the tests tasks at the same * time. */ diff --git a/FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC/build/gcc/fake_rom.ld b/FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC/build/gcc/fake_rom.ld index f8059ecca6..6f3cef8035 100644 --- a/FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC/build/gcc/fake_rom.ld +++ b/FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC/build/gcc/fake_rom.ld @@ -30,9 +30,8 @@ SECTIONS _etext = .; } >rom AT>rom - .rodata.align : + .rodata.align ALIGN(4): { - . = ALIGN(4); _rodata = .; } >rom AT>rom