PREPROCESSOR cpp (.c -> .i)
$ riscv64-unknown-elf-cpp larson.c $ riscv64-unknown-elf-gcc -E larson.c -o larson.i
C COMPILER cc1 (gcc -S) to generate assembly language (.c -> .s)
$ riscv64-unknown-elf-gcc -S larson.c -o larson.s
ASSEMBLER
$ riscv64-unknown-elf-as larson.s -o larson.o $ riscv64-unknown-elf-gcc -c larson.s -o larson.o
SAVE TEMPS run cpp, cc1, and as in one shot, saving all the intermediates (.i, .s)
$ riscv64-unknown-elf-gcc –save-temps -c larson.c -o larson.o
LINKER
$ riscv64-unknown-elf-ld -nostdlib -T memmap.ld *.o -o larson.elf
Run with trace-symbol
SYMBOL TABLE, BINUTILS
$ riscv64-unknown-elf-nm larson.o $ riscv64-unknown-elf-nm -n gpio.o $ riscv64-unknown-elf-nm -n larson.elf $ riscv64-unknown-elf-size larson.elf $ riscv64-unknown-elf-size *.o
START SEQUENCE
view start.s cstart.c memmap.ld
BUILD ERRORS
cpp: wrong include path, bad directive cc: semantic/synax, missing include ld: undefined/multiple define