ETB="/sys/bus/coresight/devices/f8801000.etb"
TPIU="/sys/bus/coresight/devices/f8803000.tpiu"
PTM_CPU_0="/sys/bus/coresight/devices/f889c000.ptm0"
PTM_CPU_1="/sys/bus/coresight/devices/f889d000.ptm1"
CPU_1="/sys/devices/system/cpu/cpu1/"

EXEC=/home/root/cwe-125-clang-static-without-annot.elf

# Disable CS components
echo -n 0 > $PTM_CPU_0/enable_source
echo -n 0 > $PTM_CPU_1/enable_source
echo -n 0 > $ETB/enable_sink
echo -n 0 > $TPIU/enable_sink
echo -n 1 > $PTM_CPU_0/reset

# Turn off cpu 1 to make sure the program will be launched on cpu 0 
echo -n 0 > $CPU_1/online

# Configure the bitstream
cat /home/root/trace_decoder.bit > /dev/xdevcfg

# Address configuration
echo -n 1 > $PTM_CPU_0/addr_idx
echo -n 0 > $PTM_CPU_0/addr_acctype
echo -n 0 > $PTM_CPU_0/addr_idx
echo -n 0 > $PTM_CPU_0/addr_acctype 

# Branch Broadcast
echo -n 20 > $PTM_CPU_0/mode

# Freq synchronisation 
echo -n 0xfff > $PTM_CPU_0/sync_freq

# Get the start/end addresses of the .text section 
TEXT_START_ADDRESS=$(readelf -a $EXEC | grep "] .text" | cut -d' ' -f26)
TEXT_SIZE=$(readelf -a $EXEC | grep "] .text" | cut -d' ' -f28)
TEXT_START_ADDRESS=$((16#$TEXT_START_ADDRESS + 16#0))
TEXT_START_ADDRESS=`printf "%x" $((10#$TEXT_START_ADDRESS))`
TEXT_END_ADDRESS=$((16#$TEXT_START_ADDRESS + 16#$TEXT_SIZE))
TEXT_END_ADDRESS=`printf "%x" $((10#$TEXT_END_ADDRESS))`


# Tiny .text interval 
TEXT_END_ADDRESS=136ac

# Whole .text section
# TEXT_END_ADDRESS=15140


# Address range 
echo -n $TEXT_START_ADDRESS $TEXT_END_ADDRESS > $PTM_CPU_0/addr_range
printf "Tracing from $TEXT_START_ADDRESS to $TEXT_END_ADDRESS \n "

# Configure Coresight components
echo -n 0 > $ETB/enable_sink
echo -n 1 > $TPIU/enable_sink
echo -n 1 > $PTM_CPU_0/enable_source


# Run binary
$EXEC 3

# Disable CS components
echo -n 0 > $ETB/enable_sink
echo -n 0 > $TPIU/enable_sink
echo -n 0 > $PTM_CPU_0/enable_source
echo -n 0 > $PTM_CPU_1/enable_source

sleep 4

# Recover trace from bram
/home/root/appli_bram_access.elf

# Recover trace from ETB
# dd if=/dev/f8801000.etb of=trace_use_case.bin
# hexdump -C trace_use_case.bin > trace_use_case.txt
# cat trace_use_case.txt


