commit f5a30bda1c5b2fea531e640cf28082d6450b7fb0
parent 49205eea2c24cca81c2bbbbb7686edeb7a6592d7
Author: Brian Swetland <swetland@frotz.net>
Date: Sat, 14 May 2022 16:24:17 -0700
build: fix some linker/init issues
- fix infinite loop in zero bss in start.S
- include .sdata* and .sbss* sections properly
- make elf targets depend on hw/common.ram.ld
- adjust cpu target to RV32IMA
Diffstat:
4 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
@@ -32,7 +32,7 @@ XOBJDUMP := $(XTOOLCHAIN)objdump
XOBJCOPY := $(XTOOLCHAIN)objcopy
XAR := $(XTOOLCHAIN)ar
-ARCHFLAGS := -march=rv32im -mabi=ilp32 -mcmodel=medany
+ARCHFLAGS := -march=rv32ima -mabi=ilp32 -mcmodel=medany
ARCHFLAGS += -static -nostdlib -nostartfiles -ffreestanding
ARCHFLAGS += -ffunction-sections -fdata-sections
ARCHFLAGS += -fno-builtin -fno-strict-aliasing
diff --git a/hw/common.ram.ld b/hw/common.ram.ld
@@ -28,12 +28,14 @@ SECTIONS {
*(.data .data.* .gnu.linkonce.d.*)
*(.got*)
*(.dynamic)
+ *(.sdata .sdata.*)
. = ALIGN(4);
__data_end = .;
} > RAM
.bss : {
__bss_start = .;
+ *(.sbss .sbss.*)
*(.bss .bss.*)
*(.gnu.linkonce.b.*)
. = ALIGN(4);
diff --git a/hw/src/start.S b/hw/src/start.S
@@ -13,7 +13,7 @@ _start:
zero_loop:
beq t0, t1, zero_done
sw zero, 0(t0)
- add a0, a0, 4
+ add t0, t0, 4
j zero_loop
zero_done:
diff --git a/make/app.mk b/make/app.mk
@@ -12,12 +12,12 @@ ALL += $(MOD_ELF) $(MOD_LST) $(MOD_BIN)
include make/rules.mk
-$(MOD_ELF): $(MOD_DIR)/build.opts $(patsubst %,$(BUILD)/lib%.a,$(MOD_LIB))
+$(MOD_ELF): $(MOD_DIR)/build.opts $(patsubst %,$(BUILD)/lib%.a,$(MOD_LIB))
$(MOD_ELF): _OBJ := $(MOD_OBJ)
$(MOD_ELF): _LDFLAGS := $(MOD_LDFLAGS) -T $(MOD_LDSCRIPT)
$(MOD_ELF): _LIB := -L$(BUILD) $(patsubst %,-l%,$(MOD_LIB)) -lgcc
-$(MOD_ELF): $(MOD_OBJ) $(MOD_LDSCRIPT)
+$(MOD_ELF): $(MOD_OBJ) $(MOD_LDSCRIPT) hw/common.ram.ld
@$(info linking $@)
$(V)$(XGCC) $(_LDFLAGS) -o $@ $(_OBJ) $(_LIB)