#!/usr/bin/env sh set -eu nm=$(printenv RISCV_NM || true) readelf=$(printenv RISCV_READELF || true) test -n "$nm" || nm=riscv64-unknown-elf-nm test -n "$readelf" || readelf=riscv64-unknown-elf-readelf elf=build/task01_static_allocation/prog.elf if "$nm" --defined-only "$elf" | awk '{print $3}' | grep -Eq '^_Z|^__cxa_|^_Unwind_'; then echo "unexpected C++ or unwind symbol in FC11" >&2 exit 1 fi if "$readelf" -S "$elf" | grep -Eq '\.init_array|\.eh_frame|\.gcc_except_table'; then echo "unexpected C++ initialization or unwind section in FC11" >&2 exit 1 fi for symbol in fc11_timer_callback fc11_dynamic_task_entry fc11_static_task_entry \ fc11_verifier_entry fc11_checkpoint_committed xTaskCreate xTaskCreateStatic \ xQueueGenericCreate xQueueGenericCreateStatic xTimerCreate xTimerCreateStatic \ vApplicationGetIdleTaskMemory vApplicationGetTimerTaskMemory; do "$nm" --defined-only "$elf" | grep -Eq "[[:space:]]$symbol$" || { echo "required symbol is missing: $symbol" >&2 exit 1 } done echo "PASS ABI: FC11 links dynamic and static task, queue and timer APIs"