Gprof in Freedom Studio

Hi, I am trying to use gprof in Freedom Studio for timing measurement. But when I switch on the generate gprof information (-gp) in Properties->C/C++ build->Settings->Debugging I get the error about “undefined reference to `_mcount’” in my main program and bsp/env/freedom-e300-arty/init.c. My main program just print “Welcome note” on screen. I tried to google it but couldn’t find any solution that work. Any suggestion? BTW I am using Freedom e300 image on Arty generated from Freedom Repository.

The -pg flag must be passed to both the compiler and the linker.

If you’re working on the command line and use the gcc driver with -pg then this is done automatically for you. I don’t use Freedom Studio so I don’t know what it does.

(This comment is machine-independent. I haven’t tried profiling RISC-V)

Hi, Thank you for the reply. When I switch on the generate gprof information (-gp) in Properties->C/C++ build->Settings->Debugging Eclipse does this automatically. I could see -pg flag in “Invoking: GNU RISC-V Cross C Linker”. I am copying the console output here. Could you please have a look at it and let me know is it what you are talking about or I need to add some thing else. Thanks
make all
Building file: …/bsp/env/freedom-e300-arty/init.c
Invoking: GNU RISC-V Cross C Compiler
riscv64-unknown-elf-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medany -O2 -g -pg -I…/bsp/drivers -I…/bsp/env -I…/bsp/env/freedom-e300-arty -I…/bsp/include -I…/…/…/…/bsp/drivers -I…/…/…/…/bsp/env -I…/…/…/…/bsp/env/freedom-e300-arty -I…/…/…/…/bsp/include -std=gnu11 -include sys/cdefs.h -fno-builtin-printf -c -MMD -MP -MF"bsp/env/freedom-e300-arty/init.d" -MT"bsp/env/freedom-e300-arty/init.o" -c -o “bsp/env/freedom-e300-arty/init.o” "…/bsp/env/freedom-e300-arty/init.c"
Finished building: …/bsp/env/freedom-e300-arty/init.c

Building file: …/bsp/env/entry.S
Invoking: GNU RISC-V Cross Assembler
riscv64-unknown-elf-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medany -O2 -g -pg -x assembler-with-cpp -I…/bsp/include -I…/bsp/env -I…/bsp/env/freedom-e300-arty -I…/bsp/drivers -I…/…/…/…/bsp/env -I…/…/…/…/bsp/include -I…/…/…/…/bsp/env/freedom-e300-arty -I…/…/…/…/bsp/drivers -c -MMD -MP -MF"bsp/env/entry.d" -MT"bsp/env/entry.o" -c -o “bsp/env/entry.o” "…/bsp/env/entry.S"
Finished building: …/bsp/env/entry.S

Building file: …/bsp/env/start.S
Invoking: GNU RISC-V Cross Assembler
riscv64-unknown-elf-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medany -O2 -g -pg -x assembler-with-cpp -I…/bsp/include -I…/bsp/env -I…/bsp/env/freedom-e300-arty -I…/bsp/drivers -I…/…/…/…/bsp/env -I…/…/…/…/bsp/include -I…/…/…/…/bsp/env/freedom-e300-arty -I…/…/…/…/bsp/drivers -c -MMD -MP -MF"bsp/env/start.d" -MT"bsp/env/start.o" -c -o “bsp/env/start.o” "…/bsp/env/start.S"
Finished building: …/bsp/env/start.S

Building file: …/bsp/drivers/plic/plic_driver.c
Invoking: GNU RISC-V Cross C Compiler
riscv64-unknown-elf-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medany -O2 -g -pg -I…/bsp/drivers -I…/bsp/env -I…/bsp/env/freedom-e300-arty -I…/bsp/include -I…/…/…/…/bsp/drivers -I…/…/…/…/bsp/env -I…/…/…/…/bsp/env/freedom-e300-arty -I…/…/…/…/bsp/include -std=gnu11 -include sys/cdefs.h -fno-builtin-printf -c -MMD -MP -MF"bsp/drivers/plic/plic_driver.d" -MT"bsp/drivers/plic/plic_driver.o" -c -o “bsp/drivers/plic/plic_driver.o” "…/bsp/drivers/plic/plic_driver.c"
Finished building: …/bsp/drivers/plic/plic_driver.c

Building file: …/bsp/drivers/fe300prci/fe300prci_driver.c
Invoking: GNU RISC-V Cross C Compiler
riscv64-unknown-elf-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medany -O2 -g -pg -I…/bsp/drivers -I…/bsp/env -I…/bsp/env/freedom-e300-arty -I…/bsp/include -I…/…/…/…/bsp/drivers -I…/…/…/…/bsp/env -I…/…/…/…/bsp/env/freedom-e300-arty -I…/…/…/…/bsp/include -std=gnu11 -include sys/cdefs.h -fno-builtin-printf -c -MMD -MP -MF"bsp/drivers/fe300prci/fe300prci_driver.d" -MT"bsp/drivers/fe300prci/fe300prci_driver.o" -c -o “bsp/drivers/fe300prci/fe300prci_driver.o” "…/bsp/drivers/fe300prci/fe300prci_driver.c"
Finished building: …/bsp/drivers/fe300prci/fe300prci_driver.c

Building file: …/demo_gpio.c
Invoking: GNU RISC-V Cross C Compiler
riscv64-unknown-elf-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medany -O2 -g -pg -I…/bsp/drivers -I…/bsp/env -I…/bsp/env/freedom-e300-arty -I…/bsp/include -I…/…/…/…/bsp/drivers -I…/…/…/…/bsp/env -I…/…/…/…/bsp/env/freedom-e300-arty -I…/…/…/…/bsp/include -std=gnu11 -include sys/cdefs.h -fno-builtin-printf -c -MMD -MP -MF"demo_gpio.d" -MT"demo_gpio.o" -c -o “demo_gpio.o” "…/demo_gpio.c"
Finished building: …/demo_gpio.c

Building target: demo_gpio
Invoking: GNU RISC-V Cross C Linker
riscv64-unknown-elf-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medany -O2 -g -pg -T “/home/anbuntu/ECDSA/demo_gpio/bsp/env/freedom-e300-arty/flash.lds” -nostartfiles -L/home/anbuntu/ECDSA/wrap-E31FPGA/Debug -L…/ -Wl,-Map,“demo_gpio.map” -Wl,–start-group -Wl,–end-group -Wl,–wrap=malloc -Wl,–wrap=free -Wl,–wrap=open -Wl,–wrap=lseek -Wl,–wrap=read -Wl,–wrap=write -Wl,–wrap=fstat -Wl,–wrap=stat -Wl,–wrap=close -Wl,–wrap=link -Wl,–wrap=unlink -Wl,–wrap=execve -Wl,–wrap=fork -Wl,–wrap=getpid -Wl,–wrap=kill -Wl,–wrap=wait -Wl,–wrap=isatty -Wl,–wrap=times -Wl,–wrap=sbrk -Wl,–wrap=_exit -o “demo_gpio” ./bsp/env/freedom-e300-arty/init.o ./bsp/env/entry.o ./bsp/env/start.o ./bsp/drivers/plic/plic_driver.o ./bsp/drivers/fe300prci/fe300prci_driver.o ./demo_gpio.o -lc -lwrap-E31FPGA
./demo_gpio.o: In function main': /home/anbuntu/ECDSA/demo_gpio/Debug/../demo_gpio.c:16: undefined reference to_mcount’
./bsp/env/freedom-e300-arty/init.o: In function get_timer_freq': makefile:45: recipe for target 'demo_gpio' failed /home/anbuntu/ECDSA/demo_gpio/Debug/../bsp/env/freedom-e300-arty/init.c:18: undefined reference to_mcount’
/home/anbuntu/ECDSA/demo_gpio/Debug/…/bsp/env/freedom-e300-arty/init.c:18: undefined reference to _mcount' /home/anbuntu/ECDSA/demo_gpio/Debug/../bsp/env/freedom-e300-arty/init.c:18: undefined reference to_mcount’
/home/anbuntu/ECDSA/demo_gpio/Debug/…/bsp/env/freedom-e300-arty/init.c:18: undefined reference to _mcount' ./bsp/env/freedom-e300-arty/init.o:/home/anbuntu/ECDSA/demo_gpio/Debug/../bsp/env/freedom-e300-arty/init.c:18: more undefined references to_mcount’ follow
collect2: error: ld returned 1 exit status
make: *** [demo_gpio] Error 1

Might be worth reading this:

While it deals with Cortex-M much of the gprof related info is applicable to any embedded target.

Hope this helps.