- 构建脚本链 ../sdk/meow_time32.c + -DMEOW_TIME32_LIBC_OVERRIDES: sysui/svcd/bootmenu/amsd/netmgrd/crash/svc_perf/powermgr/meowpanel, 以及 musl-static 的 meow_audio CLI(monitor 取时/轮询) - meow_audiod 守护例外:glibc-2.22 time_t 32 位,无 musl time64 ABI 错位,不链 - 重编 10 个产物:反汇编 4263=3 / 4403=0,__clock_gettime 按 16 字节布局写回 - test_time32_abi.sh 收紧为 addiu 系统调用号匹配,避免 .text+0x1133x 偏移误报 - fw_content.conf 同步全部新 md5(清单逐行校验通过)
40 lines
2.1 KiB
Bash
Executable File
40 lines
2.1 KiB
Bash
Executable File
#!/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=<path> 指定 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 <mipsel-binary> [...]" >&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;
|
||
}
|
||
# 只匹配「把系统调用号装进 a0」的指令,不能裸 grep 0x1133:分支/跳转目标的
|
||
# 十六进制偏移(如 <.text+0x11338>)也含该子串,会把已修好的二进制误判为残留 4403。
|
||
n_time32=$(printf '%s\n' "$dis" | grep -cE 'addiu[[:space:]]+\$[0-9a-z]+,[[:space:]]*\$zero,[[:space:]]*0x10a7' || true)
|
||
n_time64=$(printf '%s\n' "$dis" | grep -cE 'addiu[[:space:]]+\$[0-9a-z]+,[[:space:]]*\$zero,[[:space:]]*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"
|