os-workshop

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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:
MMakefile | 2+-
Mhw/common.ram.ld | 2++
Mhw/src/start.S | 2+-
Mmake/app.mk | 4++--
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)