#!/bin/sh
# Q3000 ARM64 musl dynamic runtime check. Read-only except /tmp probe files.
set +e
TMP=/tmp/ikcli-musl-check.$$
mkdir -p "$TMP"
cleanup() { rm -rf "$TMP"; }
trap cleanup EXIT

printf '%s\n' '=== Q3000_MUSL_CHECK_BEGIN ==='
printf 'HOST='; hostname 2>/dev/null
printf 'UNAME='; uname -a 2>/dev/null
printf 'ARCH='; uname -m 2>/dev/null
printf '%s\n' '--- RELEASE ---'
cat /etc/release 2>/dev/null || true
printf '%s\n' '--- LOADER_AND_LIBC ---'
ls -l /lib/ld-musl-aarch64.so.1 /lib/libc.so /lib/libgcc_s.so.1 /lib/libatomic.so.1 2>&1
printf '%s\n' '--- LIBC_STRINGS ---'
if /bin/busybox strings /lib/libc.so >/dev/null 2>&1; then
  /bin/busybox strings /lib/libc.so 2>/dev/null | grep -E 'musl|Version|1\.[0-9]' | head -20
else
  echo 'busybox-strings-unavailable'
fi
printf '%s\n' '--- BUSYBOX ---'
/bin/busybox 2>&1 | head -3
printf '%s\n' '--- LOADER_EXECUTION ---'
/lib/ld-musl-aarch64.so.1 2>&1 | head -5
printf '%s\n' '--- EXISTING_DYNAMIC_BINARIES ---'
for f in /bin/busybox /bin/ash /bin/sh /usr/bin/*; do
  [ -f "$f" ] || continue
  /bin/busybox strings "$f" 2>/dev/null | grep -q 'ld-musl-aarch64.so.1' && echo "$f"
done 2>/dev/null | head -30
printf '%s\n' '--- REQUIRED_SYMBOLS ---'
for sym in pthread_create pthread_join __libc_start_main getaddrinfo clock_gettime; do
  if /bin/busybox strings /lib/libc.so 2>/dev/null | grep -q "$sym"; then
    echo "$sym=present"
  else
    echo "$sym=not-found-or-strings-unavailable"
  fi
done
printf '%s\n' '=== Q3000_MUSL_CHECK_END ==='
