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"