kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

debug-dwarf.sh (4474B)


      1 #!/bin/sh
      2 # Tier 1 system sentinel for debug producer/consumer paths and a tiny dbg smoke.
      3 
      4 set -u
      5 
      6 script_dir=$(cd "$(dirname "$0")" && pwd)
      7 repo_root=$(cd "$script_dir/../../.." && pwd)
      8 manifest="$repo_root/test/tier1/manifests/system/debug-dwarf.txt"
      9 log_dir="${KIT_TIER1_LOG_DIR:-$repo_root/build/test/tier1/logs/system/debug-dwarf}"
     10 
     11 mkdir -p "$log_dir"
     12 . "$script_dir/../timing.sh"
     13 
     14 run_step() {
     15     name=$1
     16     shift
     17     log="$log_dir/$name.log"
     18     start_ms=$(t1_now_ms)
     19     printf 'tier1/debug-dwarf: %s\n' "$name"
     20     "$@" > "$log" 2>&1
     21     rc=$?
     22     if [ "$rc" -eq 0 ]; then
     23         if t1_slow_timing_enabled; then
     24             printf '  ok: %s (%sms)\n' "$log" "$(t1_elapsed_ms "$start_ms" "$(t1_now_ms)")"
     25         else
     26             printf '  ok: %s\n' "$log"
     27         fi
     28         return 0
     29     fi
     30     if t1_slow_timing_enabled; then
     31         printf '  FAIL: %s (exit %s, %sms)\n' "$log" "$rc" \
     32             "$(t1_elapsed_ms "$start_ms" "$(t1_now_ms)")" >&2
     33     else
     34         printf '  FAIL: %s (exit %s)\n' "$log" "$rc" >&2
     35     fi
     36     tail -n 80 "$log" >&2
     37     return "$rc"
     38 }
     39 
     40 run_objdump_dwarf() {
     41     name=objdump-dwarf
     42     log="$log_dir/$name.log"
     43     actual="$log_dir/$name.actual"
     44     expected="$repo_root/test/objdump/dwarf/cases/01-dwarf-all.expected"
     45     case_sh="$repo_root/test/objdump/dwarf/cases/01-dwarf-all.sh"
     46     start_ms=$(t1_now_ms)
     47 
     48     printf 'tier1/debug-dwarf: %s\n' "$name"
     49     (
     50         cd "$log_dir" || exit 1
     51         KIT="$repo_root/build/kit" sh "$case_sh" > "$actual"
     52     ) > "$log" 2>&1
     53     rc=$?
     54     if [ "$rc" -eq 0 ]; then
     55         diff -u "$expected" "$actual" >> "$log" 2>&1
     56         rc=$?
     57     fi
     58     if [ "$rc" -eq 0 ]; then
     59         if t1_slow_timing_enabled; then
     60             printf '  ok: %s (%sms)\n' "$log" "$(t1_elapsed_ms "$start_ms" "$(t1_now_ms)")"
     61         else
     62             printf '  ok: %s\n' "$log"
     63         fi
     64         return 0
     65     fi
     66     if t1_slow_timing_enabled; then
     67         printf '  FAIL: %s (exit %s, %sms)\n' "$log" "$rc" \
     68             "$(t1_elapsed_ms "$start_ms" "$(t1_now_ms)")" >&2
     69     else
     70         printf '  FAIL: %s (exit %s)\n' "$log" "$rc" >&2
     71     fi
     72     tail -n 80 "$log" >&2
     73     return "$rc"
     74 }
     75 
     76 if [ ! -f "$manifest" ]; then
     77     printf 'tier1/debug-dwarf: manifest missing: %s\n' "$manifest" >&2
     78     exit 2
     79 fi
     80 
     81 count=0
     82 order="$log_dir/.order.$$"
     83 : > "$order"
     84 jobs=$(t1_parallel_jobs) || exit $?
     85 
     86 run_manifest_step() {
     87     step=$1
     88     case "$step" in
     89         make:test-dwarf)
     90             run_step test-dwarf make -C "$repo_root" test-dwarf ;;
     91         make:test-debug)
     92             run_step test-debug make -C "$repo_root" test-debug ;;
     93         driver:objdump-dwarf/01-dwarf-all)
     94             run_objdump_dwarf ;;
     95         driver:dbg/repl-help)
     96             run_step dbg-repl-help env KIT="$repo_root/build/kit" DBG_CASE=repl-help \
     97                 sh "$repo_root/test/dbg/run.sh" ;;
     98         driver:addr2line-symbolize)
     99             run_step addr2line-symbolize make -C "$repo_root" test-rt-backtrace ;;
    100         driver:addr2line-symbolize-kitchen)
    101             run_step addr2line-symbolize env KIT_RT_RUNTIME_ARCHES=aa64 \
    102                 KIT_RT_OPT_LEVELS=1 make -C "$repo_root" test-rt-backtrace ;;
    103         *)
    104             printf 'tier1/debug-dwarf: unknown manifest step: %s\n' "$step" >&2
    105             return 2 ;;
    106     esac
    107 }
    108 
    109 start_step() {
    110     step=$1
    111     id=$(t1_step_id "$step")
    112     out="$log_dir/.step-$id.out"
    113     status="$log_dir/.step-$id.status"
    114     printf '%s\t%s\t%s\n' "$id" "$out" "$status" >> "$order"
    115     t1_parallel_wait_for_slot "$jobs"
    116     (
    117         if run_manifest_step "$step" > "$out" 2>&1; then
    118             printf '0\n' > "$status"
    119         else
    120             printf '%s\n' "$?" > "$status"
    121         fi
    122     ) &
    123 }
    124 
    125 while IFS= read -r step || [ -n "$step" ]; do
    126     step=${step%%#*}
    127     step=$(printf '%s' "$step" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
    128     [ -n "$step" ] || continue
    129     count=$((count + 1))
    130     case "$step" in
    131         make:bin)
    132             run_step bin make -C "$repo_root" bin || exit $? ;;
    133         *)
    134             start_step "$step" ;;
    135     esac
    136 done < "$manifest"
    137 
    138 wait || true
    139 
    140 if [ "$count" -eq 0 ]; then
    141     printf 'tier1/debug-dwarf: manifest has no runnable steps: %s\n' "$manifest" >&2
    142     exit 2
    143 fi
    144 
    145 rc=0
    146 while IFS="$(printf '\t')" read -r id out status; do
    147     [ -n "$id" ] || continue
    148     cat "$out"
    149     step_rc=$(cat "$status" 2>/dev/null || printf '1\n')
    150     if [ "$step_rc" -ne 0 ] && [ "$rc" -eq 0 ]; then
    151         rc=$step_rc
    152     fi
    153 done < "$order"
    154 exit "$rc"