#!/bin/bash # test_time32_abi.sh — 反汇编断言:mipsel 二进制必须走 o32 time32 取时(4263), # 不得残留 time64 入口(4403)。这是宿主 fallback 单测无法覆盖的「真机取时路径」证据。 # # 用法(任意目录): # bash patch_v2/sdk/test_time32_abi.sh patch_v2/meow_watchdog/meow_watchdog # bash patch_v2/sdk/test_time32_abi.sh patch_v2/meow_watchdog/meow_watchdog patch_v2/meow_launcherd/meow_launcherd # 可用 OBJDUMP= 指定 objdump(默认 llvm-objdump)。 # # 期望:每个二进制 4263 出现 ≥1 次(time32 取时路径存在),4403 出现 0 次 # (CLOCK_ABI.md §2.3:zig musl 把 time64 分支整段编掉,残留 4403 说明链接到了未修复的取时)。 set -u OD="${OBJDUMP:-llvm-objdump}" command -v "$OD" >/dev/null 2>&1 || { echo "缺少 objdump: $OD(可用 OBJDUMP=... 覆盖)" >&2; exit 2; } [ "$#" -gt 0 ] || { echo "用法: $0 [...]" >&2; exit 2; } fail=0 for bin in "$@"; do [ -f "$bin" ] || { echo "FAIL 文件不存在: $bin"; fail=1; continue; } dis="$("$OD" -d --triple=mipsel "$bin" 2>/dev/null)" || { echo "FAIL objdump 失败: $bin"; fail=1; continue; } n_time32=$(printf '%s\n' "$dis" | grep -c '0x10a7' || true) n_time64=$(printf '%s\n' "$dis" | grep -c '0x1133' || true) printf '%-60s SYS_clock_gettime(4263)=%s clock_gettime64(4403)=%s\n' \ "$bin" "$n_time32" "$n_time64" if [ "$n_time32" -lt 1 ]; then echo "FAIL $bin: 未找到 4263(o32 time32)取时路径"; fail=1 fi if [ "$n_time64" -ne 0 ]; then echo "FAIL $bin: 发现 4403(time64)路径(应有 0 处)"; fail=1 fi done [ "$fail" -eq 0 ] && echo "ALL PASS" || echo "SOME TESTS FAILED" exit "$fail"