run.sh (4762B)
1 #!/bin/sh 2 # Regression checks for primary-input diagnostics and transactional output in 3 # ld/strip/size (KIT-P2-003). 4 5 set -u 6 7 script_dir=$(CDPATH= cd -- "$(dirname "$0")" && pwd) 8 repo_root=$(CDPATH= cd -- "$script_dir/../.." && pwd) 9 KIT=${KIT:-$repo_root/build/kit} 10 KIT_KIT_DIR=$repo_root/test/lib 11 . "$repo_root/test/lib/kit_sh_kit.sh" 12 13 kit_require_kit driver-diagnostics 14 kit_report_init 15 work=$(mktemp -d "${TMPDIR:-/tmp}/kit-diagnostics-test.XXXXXX") 16 trap 'rm -rf "$work"' EXIT 17 18 expect_one() { 19 label=$1 20 got=$2 21 if [ "$got" -eq 1 ]; then 22 ok "$label" 23 else 24 printf 'got exit %s, want 1\n' "$got" >"$work/$label.diag" 25 not_ok "$label" "$work/$label.diag" 26 fi 27 } 28 29 cat >"$work/valid.c" <<'EOF' 30 int diagnostic_fixture(void) { return 1; } 31 EOF 32 "$KIT" cc -ffreestanding -c "$work/valid.c" -o "$work/valid.o" \ 33 >"$work/compile.stdout" 2>"$work/compile.stderr" 34 printf 'not an object\n' >"$work/invalid.o" 35 mkdir "$work/unreadable-input" 36 37 # A total size failure has no stdout. A mixed request retains the valid row but 38 # still returns operational failure for the missing input. 39 "$KIT" size "$work/missing.o" >"$work/size-missing.stdout" \ 40 2>"$work/size-missing.stderr" 41 expect_one size-missing-status "$?" 42 if [ ! -s "$work/size-missing.stdout" ]; then 43 ok size-missing-stdout-empty 44 else 45 not_ok size-missing-stdout-empty "$work/size-missing.stdout" 46 fi 47 contains size-missing-path "$work/size-missing.stderr" "$work/missing.o" 48 49 "$KIT" size "$work/valid.o" "$work/missing.o" \ 50 >"$work/size-mixed.stdout" 2>"$work/size-mixed.stderr" 51 expect_one size-mixed-status "$?" 52 contains size-mixed-valid-row "$work/size-mixed.stdout" "$work/valid.o" 53 contains size-mixed-bad-path "$work/size-mixed.stderr" "$work/missing.o" 54 55 for kind in unreadable malformed; do 56 case "$kind" in 57 unreadable) input="$work/unreadable-input" ;; 58 malformed) input="$work/invalid.o" ;; 59 esac 60 "$KIT" size "$input" >"$work/size-$kind.stdout" \ 61 2>"$work/size-$kind.stderr" 62 expect_one "size-$kind-status" "$?" 63 if [ ! -s "$work/size-$kind.stdout" ]; then 64 ok "size-$kind-stdout-empty" 65 else 66 not_ok "size-$kind-stdout-empty" "$work/size-$kind.stdout" 67 fi 68 contains "size-$kind-path" "$work/size-$kind.stderr" "$input" 69 done 70 71 # Invalid strip input names the primary input and never publishes its output. 72 "$KIT" strip -o "$work/stripped.o" "$work/invalid.o" \ 73 >"$work/strip.stdout" 2>"$work/strip.stderr" 74 expect_one strip-invalid-status "$?" 75 contains strip-invalid-path "$work/strip.stderr" "$work/invalid.o" 76 if [ ! -e "$work/stripped.o" ]; then 77 ok strip-invalid-output-absent 78 else 79 not_ok strip-invalid-output-absent 80 fi 81 82 for kind in missing unreadable; do 83 case "$kind" in 84 missing) input="$work/missing.o" ;; 85 unreadable) input="$work/unreadable-input" ;; 86 esac 87 output="$work/stripped-$kind.o" 88 "$KIT" strip -o "$output" "$input" >"$work/strip-$kind.stdout" \ 89 2>"$work/strip-$kind.stderr" 90 expect_one "strip-$kind-status" "$?" 91 contains "strip-$kind-path" "$work/strip-$kind.stderr" "$input" 92 if [ ! -e "$output" ]; then 93 ok "strip-$kind-output-absent" 94 else 95 not_ok "strip-$kind-output-absent" "$output" 96 fi 97 done 98 99 # A recognized-but-truncated member is diagnosed as archive(member). 100 head -c 8 "$work/valid.o" >"$work/bad.o" 101 "$KIT" ar rcs "$work/bad.a" "$work/bad.o" \ 102 >"$work/ar.stdout" 2>"$work/ar.stderr" 103 "$KIT" strip -o "$work/bad-stripped.a" "$work/bad.a" \ 104 >"$work/strip-archive.stdout" 2>"$work/strip-archive.stderr" 105 expect_one strip-archive-status "$?" 106 contains strip-archive-member "$work/strip-archive.stderr" \ 107 "$work/bad.a(bad.o)" 108 if [ ! -e "$work/bad-stripped.a" ]; then 109 ok strip-archive-output-absent 110 else 111 not_ok strip-archive-output-absent 112 fi 113 114 # ld resolves/validates before publication. An existing destination remains 115 # byte-identical on invalid input rather than becoming empty or partial. 116 cp "$work/invalid.o" "$work/ld-before.o" 117 cp "$work/ld-before.o" "$work/ld-out.o" 118 "$KIT" ld -r -o "$work/ld-out.o" "$work/invalid.o" \ 119 >"$work/ld.stdout" 2>"$work/ld.stderr" 120 expect_one ld-invalid-status "$?" 121 contains ld-invalid-path "$work/ld.stderr" "$work/invalid.o" 122 same_file ld-invalid-output-unchanged "$work/ld-before.o" "$work/ld-out.o" 123 124 for kind in missing unreadable; do 125 case "$kind" in 126 missing) input="$work/missing.o" ;; 127 unreadable) input="$work/unreadable-input" ;; 128 esac 129 output="$work/ld-$kind-out.o" 130 before="$work/ld-$kind-before.o" 131 cp "$work/invalid.o" "$before" 132 cp "$before" "$output" 133 "$KIT" ld -r -o "$output" "$input" >"$work/ld-$kind.stdout" \ 134 2>"$work/ld-$kind.stderr" 135 expect_one "ld-$kind-status" "$?" 136 contains "ld-$kind-path" "$work/ld-$kind.stderr" "$input" 137 same_file "ld-$kind-output-unchanged" "$before" "$output" 138 done 139 140 kit_summary driver-diagnostics 141 kit_exit