M Makefile => Makefile +3 -3
@@ 83,17 83,17 @@ OBJCOPY=riscv32-none-elf-objcopy
./programs/bin/%.o: ./programs/%.c ./programs/bin
$(CC) $(CFLAGS) $< -o $@
-./programs/bin/start-%.o: ./programs/bin/start.o ./programs/bin/%.o
+./programs/bin/%.elf: ./programs/bin/start.o ./programs/bin/%.o
$(LD) $(LDFLAGS) $^ -o $@
-./programs/bin/%.bin: ./programs/bin/start-%.o
+./programs/bin/%.bin: ./programs/bin/%.elf
$(OBJCOPY) $< -O binary $@
./programs/bin/%.dat: ./programs/bin/%.bin
od $< -t x4 -A n -v > $@
.PHONY: objdump
-objdump: ./programs/bin/start-$(PROGRAM).o
+objdump: ./programs/bin/$(PROGRAM).elf
$(OBJDUMP) -d -M no-aliases $<
.PHONY: clean
M programs/link.ld => programs/link.ld +10 -9
@@ 1,21 1,22 @@
+OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", "elf32-littleriscv")
+
MEMORY
{
ram : ORIGIN = 0x00000000, LENGTH = 1K - 1
}
+PROVIDE( __global_pointer$ = 0x0 );
+
SECTIONS
{
- .text = 0x0;
+ .text : {
+ *(.text._start);
+ *(.text);
+ *(.text.*);
+ } > ram
.bss : {
- __bss_start = .;
*(.bss)
*(COMMON)
- __bss_end = .;
- } > ram
- .stack : {
- __stack_start = .;
- *(.stack)
- __stack_end = .;
+ *(.bss.*)
} > ram
}
-
M programs/start.S => programs/start.S +23 -2
@@ 1,9 1,30 @@
-.global _start
+.globl main
+.globl _start
+.globl __start
+
+.option norelax
.text
+
+__start:
_start:
+ .option push
+ .option norelax
+ la gp, __global_pointer$
+ .option pop
+
addi sp, x0, 1020
+ addi a0, zero, 0
+ addi a1, zero, 0
call main
+quit:
+ addi a0, zero, 0
+ addi a7, zero, 93 /* SYS_exit */
+ ecall
loop:
ebreak
- j loop
+ beq zero, zero, loop
+
+.bss
+
+.end _start