bespoke-silicon-group / bsg_manycore

Tile based architecture designed for computing efficiency, scalability and generality
Other
221 stars 58 forks source link

sbrkr.c:(.text+0x1c): undefined reference to `_sbrk' #633

Closed natewise closed 2 years ago

natewise commented 2 years ago

Here is a Makefile I've written trying to compile the bsg_manycore API with several other scripts:

PROJECTS_DIR = /mnt/c/Projects
BSG_MANYCORE_DIR ?= ${PROJECTS_DIR}/bsg_manycore
BSG_LIB_DIR = ${BSG_MANYCORE_DIR}/software/bsg_manycore_lib
C_PORT_DIR = ${PROJECTS_DIR}/c-port-dev/DDL

bsg_tiles_X=4
bsg_tiles_Y=2
bsg_global_X=4
bsg_global_Y=2
BSG_MACHINE_HOST_X_CORD = 4
BSG_MACHINE_HOST_Y_CORD = 0

# CC=gcc

BSG_FLAGS=-D bsg_tiles_X=${bsg_tiles_X} -D bsg_tiles_Y=${bsg_tiles_Y}
BSG_FLAGS+=-D bsg_global_X=${bsg_global_X} -D bsg_global_Y=${bsg_global_Y}
BSG_FLAGS+=-D IO_X_INDEX=${BSG_MACHINE_HOST_X_CORD} -D IO_Y_INDEX=${BSG_MACHINE_HOST_Y_CORD}
INCS+=-I ${BSG_LIB_DIR} -I ${C_PORT_DIR}/headers
BINARIES=fft_parallel.o twiddleValues.o fft.o

all: main.run

OBJECT_FILES=main.o ${BINARIES}

include $(BSG_MANYCORE_DIR)/software/spmd/Makefile.include

main.riscv: $(LINK_SCRIPT) $(OBJECT_FILES) $(SPMD_COMMON_OBJECTS) $(BSG_MANYCORE_LIB) crt.o
    $(RISCV_LINK) $(OBJECT_FILES) $(SPMD_COMMON_OBJECTS) -L. "-l:$(BSG_MANYCORE_LIB)" -o $@ $(RISCV_LINK_OPTS)

fft_parallel.o: fft_parallel.c fft_parallel.h
    $(RISCV_GCC) ${BSG_FLAGS} ${INCS} -c fft_parallel.c

twiddleValues.o: ${C_PORT_DIR}/src/twiddleValues.c ${C_PORT_DIR}/headers/twiddleValues.h
    $(RISCV_GCC) ${INCS} -c ${C_PORT_DIR}/src/twiddleValues.c

fft.o: ${C_PORT_DIR}/src/fft.c ${C_PORT_DIR}/headers/fft.h
    $(RISCV_GCC) ${INCS} -c ${C_PORT_DIR}/src/fft.c

main.o: Makefile

include $(BSG_MANYCORE_DIR)/software/mk/Makefile.tail_rules

fresh: clean
    rm -rf fft_parallel
    clear

I did my best to structure this after several of the spmd examples like spmd/hello/ or spmd/coremark/, but this code still generates this output:

Toplevel Directory: /mnt/c/Projects/bsg_manycore
Dimensions: bsg_tiles_org_[X,Y] = 0 0; bsg_global_[X,Y] = 4,2; bsg_tiles[X,Y] = 4,2; bsg_group_size = 8
CAD Environment: using /mnt/c/Projects/bsg_manycore/../bsg_cadenv/cadenv.mk to configure cad tools
Machine executable: /mnt/c/Projects/bsg_manycore/machines/pod_1x1_4X2Y/simsc
/mnt/c/Projects/bsg_manycore/software/py/bsg_manycore_link_gen.py --default_data_loc=dmem --dram_size=536870912 --sp=0x00001000 --imem_size=0x01000000  --out=/mnt/c/Projects/c-port-dev/DDL/src/parallel/bsg_link.ld
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/bin/riscv32-unknown-elf-dramfs-gcc -march=rv32imaf -static -std=gnu99 -ffast-math -fno-common -mtune=bsg_vanilla_2020  -I/mnt/c/Projects/bsg_manycore/software/spmd/common/ -I/mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -Dbsg_tiles_X=4 -Dbsg_tiles_Y=2 -Dbsg_global_X=4 -Dbsg_global_Y=2 -Dbsg_group_size=8 -Dbsg_pods_X=1 -Dbsg_pods_Y=1 -Dnum_pods_X=1 -Dnum_pods_Y=1 -DREMOTE_EPA_PREFIX=-1 -DREMOTE_EPA_MASK_SHIFTS=-1 -DX_CORD_SHIFTS=0 -DY_CORD_SHIFTS=0 -DVCACHE_BLOCK_SIZE_WORDS=8 -DVCACHE_CAPACITY_WORDS=16384 -DBARRIER_RUCHE_FACTOR_X=3 -DIO_X_INDEX=4 -DIO_Y_INDEX=0 -fweb -frename-registers -frerun-cse-after-loop -O2 -DPREALLOCATE=0 -DHOST_DEBUG=0 -c -I /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -I /mnt/c/Projects/c-port-dev/DDL/headers main.c -o main.o |& tee main.comp.log
riscv_register_priority: TARGET_RVC == 0
+ ...
riscv_register_priority: TARGET_RVC == 0
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/bin/riscv32-unknown-elf-dramfs-gcc -D bsg_tiles_X=4 -D bsg_tiles_Y=2 -D bsg_global_X=4 -D bsg_global_Y=2 -D IO_X_INDEX=4 -D IO_Y_INDEX=0 -I /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -I /mnt/c/Projects/c-port-dev/DDL/headers -c fft_parallel.c
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/bin/riscv32-unknown-elf-dramfs-gcc -I /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -I /mnt/c/Projects/c-port-dev/DDL/headers -c /mnt/c/Projects/c-port-dev/DDL/src/twiddleValues.c
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/bin/riscv32-unknown-elf-dramfs-gcc -I /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -I /mnt/c/Projects/c-port-dev/DDL/headers -c /mnt/c/Projects/c-port-dev/DDL/src/fft.c
riscv_register_priority: TARGET_RVC == 0
+ ...
riscv_register_priority: TARGET_RVC == 0
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/bin/riscv32-unknown-elf-dramfs-gcc -march=rv32imaf -static -std=gnu99 -ffast-math -fno-common -mtune=bsg_vanilla_2020  -I/mnt/c/Projects/bsg_manycore/software/spmd/common/ -I/mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -Dbsg_tiles_X=4 -Dbsg_tiles_Y=2 -Dbsg_global_X=4 -Dbsg_global_Y=2 -Dbsg_group_size=8 -Dbsg_pods_X=1 -Dbsg_pods_Y=1 -Dnum_pods_X=1 -Dnum_pods_Y=1 -DREMOTE_EPA_PREFIX=-1 -DREMOTE_EPA_MASK_SHIFTS=-1 -DX_CORD_SHIFTS=0 -DY_CORD_SHIFTS=0 -DVCACHE_BLOCK_SIZE_WORDS=8 -DVCACHE_CAPACITY_WORDS=16384 -DBARRIER_RUCHE_FACTOR_X=3 -DIO_X_INDEX=4 -DIO_Y_INDEX=0 -fweb -frename-registers -frerun-cse-after-loop -O2 -DPREALLOCATE=0 -DHOST_DEBUG=0 -c -I /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -I /mnt/c/Projects/c-port-dev/DDL/headers /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib/bsg_tile_config_vars.c -o bsg_tile_config_vars.o |& tee bsg_tile_config_vars.comp.log
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/bin/riscv32-unknown-elf-dramfs-gcc -march=rv32imaf -static -std=gnu99 -ffast-math -fno-common -mtune=bsg_vanilla_2020  -I/mnt/c/Projects/bsg_manycore/software/spmd/common/ -I/mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -Dbsg_tiles_X=4 -Dbsg_tiles_Y=2 -Dbsg_global_X=4 -Dbsg_global_Y=2 -Dbsg_group_size=8 -Dbsg_pods_X=1 -Dbsg_pods_Y=1 -Dnum_pods_X=1 -Dnum_pods_Y=1 -DREMOTE_EPA_PREFIX=-1 -DREMOTE_EPA_MASK_SHIFTS=-1 -DX_CORD_SHIFTS=0 -DY_CORD_SHIFTS=0 -DVCACHE_BLOCK_SIZE_WORDS=8 -DVCACHE_CAPACITY_WORDS=16384 -DBARRIER_RUCHE_FACTOR_X=3 -DIO_X_INDEX=4 -DIO_Y_INDEX=0 -fweb -frename-registers -frerun-cse-after-loop -O2 -DPREALLOCATE=0 -DHOST_DEBUG=0 -c -I /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -I /mnt/c/Projects/c-port-dev/DDL/headers /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib/bsg_set_tile_x_y.c -o bsg_set_tile_x_y.o |& tee bsg_set_tile_x_y.comp.log
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/bin/riscv32-unknown-elf-dramfs-gcc -march=rv32imaf -static -std=gnu99 -ffast-math -fno-common -mtune=bsg_vanilla_2020  -I/mnt/c/Projects/bsg_manycore/software/spmd/common/ -I/mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -Dbsg_tiles_X=4 -Dbsg_tiles_Y=2 -Dbsg_global_X=4 -Dbsg_global_Y=2 -Dbsg_group_size=8 -Dbsg_pods_X=1 -Dbsg_pods_Y=1 -Dnum_pods_X=1 -Dnum_pods_Y=1 -DREMOTE_EPA_PREFIX=-1 -DREMOTE_EPA_MASK_SHIFTS=-1 -DX_CORD_SHIFTS=0 -DY_CORD_SHIFTS=0 -DVCACHE_BLOCK_SIZE_WORDS=8 -DVCACHE_CAPACITY_WORDS=16384 -DBARRIER_RUCHE_FACTOR_X=3 -DIO_X_INDEX=4 -DIO_Y_INDEX=0 -fweb -frename-registers -frerun-cse-after-loop -O2 -DPREALLOCATE=0 -DHOST_DEBUG=0 -c -I /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -I /mnt/c/Projects/c-port-dev/DDL/headers /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib/bsg_printf.c -o bsg_printf.o |& tee bsg_printf.comp.log
riscv_register_priority: TARGET_RVC == 0
+ ...
riscv_register_priority: TARGET_RVC == 0
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/bin/riscv32-unknown-elf-dramfs-ar rcs bsg_manycore_lib.a bsg_tile_config_vars.o bsg_set_tile_x_y.o bsg_printf.o
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/bin/riscv32-unknown-elf-dramfs-gcc -march=rv32imaf -static -std=gnu99 -ffast-math -fno-common -mtune=bsg_vanilla_2020  -I/mnt/c/Projects/bsg_manycore/software/spmd/common/ -I/mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -Dbsg_tiles_X=4 -Dbsg_tiles_Y=2 -Dbsg_global_X=4 -Dbsg_global_Y=2 -Dbsg_group_size=8 -Dbsg_pods_X=1 -Dbsg_pods_Y=1 -Dnum_pods_X=1 -Dnum_pods_Y=1 -DREMOTE_EPA_PREFIX=-1 -DREMOTE_EPA_MASK_SHIFTS=-1 -DX_CORD_SHIFTS=0 -DY_CORD_SHIFTS=0 -DVCACHE_BLOCK_SIZE_WORDS=8 -DVCACHE_CAPACITY_WORDS=16384 -DBARRIER_RUCHE_FACTOR_X=3 -DIO_X_INDEX=4 -DIO_Y_INDEX=0 -fweb -frename-registers -frerun-cse-after-loop -O2 -DPREALLOCATE=0 -DHOST_DEBUG=0 -D__ASSEMBLY__=1 \
        -c -I /mnt/c/Projects/bsg_manycore/software/bsg_manycore_lib -I /mnt/c/Projects/c-port-dev/DDL/headers /mnt/c/Projects/bsg_manycore/software/spmd/common/crt.S -o crt.o
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/bin/riscv32-unknown-elf-dramfs-gcc -t -T /mnt/c/Projects/c-port-dev/DDL/src/parallel/bsg_link.ld -Wl,--defsym,bsg_group_size=8 -Wl,--defsym,_bsg_elf_dram_size=536870912 -Wl,--defsym,_bsg_elf_vcache_size=65536 -Wl,--defsym,_bsg_elf_stack_ptr=0x00001000 -Wl,--no-check-sections  main.o fft_parallel.o twiddleValues.o fft.o  -L. "-l:bsg_manycore_lib.a" -o main.riscv  -nostdlib -march=rv32imaf -nostartfiles -ffast-math -lc -lm -lgcc -l:crt.o -L /mnt/c/Projects/bsg_manycore/software/spmd/common 
main.o
fft_parallel.o
twiddleValues.o
fft.o
./bsg_manycore_lib.a
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/lib/libc.a
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/lib/libm.a
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/libgcc.a
./crt.o
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/bin/ld: /mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/lib/libc.a(lib_a-sbrkr.o): in function `_sbrk_r':
sbrkr.c:(.text+0x1c): undefined reference to `_sbrk'
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/bin/ld: /mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/lib/libc.a(lib_a-writer.o): in function `_write_r':
writer.c:(.text+0x28): undefined reference to `_write'
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/bin/ld: /mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/lib/libc.a(lib_a-closer.o): in function `_close_r':
closer.c:(.text+0x1c): undefined reference to `_close'
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/bin/ld: /mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/lib/libc.a(lib_a-fstatr.o): in function `_fstat_r':
fstatr.c:(.text+0x24): undefined reference to `_fstat'
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/bin/ld: /mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/lib/libc.a(lib_a-isattyr.o): in function `_isatty_r':
isattyr.c:(.text+0x1c): undefined reference to `_isatty'
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/bin/ld: /mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/lib/libc.a(lib_a-lseekr.o): in function `_lseek_r':
lseekr.c:(.text+0x28): undefined reference to `_lseek'
/mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/bin/ld: /mnt/c/Projects/bsg_manycore/software/riscv-tools/riscv-install/lib/gcc/riscv32-unknown-elf-dramfs/9.2.0/../../../../riscv32-unknown-elf-dramfs/lib/libc.a(lib_a-readr.o): in function `_read_r':
readr.c:(.text+0x28): undefined reference to `_read'
collect2: error: ld returned 1 exit status
make: *** [Makefile:28: main.riscv] Error 1

The ... between the "riscv_register_priority: TARGET_RVC == 0" was added by me afterwards since the line repeats and I wanted to keep the output small. If I could get any suggestions for what's awry here I'd appreciate it!

drichmond commented 2 years ago

Hi natewise

Thanks for filing this!

Are there newlib calls in the FFT code?

natewise commented 2 years ago

Hi Dustin! Sorry for my late reply, but yes, memcpy is called in one of the FFT functions

drichmond commented 2 years ago

That's odd. memcpy should be fine.

Can you reproduce this in a source file that you're willing to share? I tried copying your makefile into this branch here, and I don't have any issues?

https://github.com/bespoke-silicon-group/bsg_manycore/blob/sbrk_symbol_reproduce/software/spmd/fib/Makefile

natewise commented 2 years ago

I also found a printf in another file I had included. Replacing this with bsg_printf seemed to do the trick, since I'm now able to compile and run my program, at least for a 1x1 manycore. Thanks for the insight, I think this issue is resolved!

drichmond commented 2 years ago

excellent! Great news!

If you're just looking to print out an integer, hex, or float value see these functions here:

https://github.com/bespoke-silicon-group/bsg_manycore/blob/18bfebfe327fe16cd5adc5a07c50adbcd2a92b8c/software/bsg_manycore_lib/bsg_manycore.h#L99

They have much, much less overhead.

drichmond commented 2 years ago

OK to close?