38cf5b15c6
Since these are defined in C as macros, they must be reimplemented in libc as Rust functions. They're hard to get exactly right, and they vary from platform to platform. The test builds custom C code that uses the real macros, and compares its output to the Rust versions' output for various inputs. Skip the CMSG_NXTHDR test on sparc64 linux because it hits a Bus Error. Issue #1239 Skip the entire cmsg test program on s390x because it dumps core seemingly before the kernel finishes booting. Issue #1240
35 lines
680 B
Bash
Executable File
35 lines
680 B
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
arch=$1
|
|
prog=$2
|
|
|
|
# Skip cmsg test on linux-s390x
|
|
# https://github.com/rust-lang/libc/issues/1240
|
|
if [ "$arch" = "s390x" ]; then
|
|
progbasename=`basename $prog`
|
|
if [ "${progbasename%%-*}" = "cmsg" ]; then
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
cd /qemu/init
|
|
echo "#!/bin/sh\n/prog --color=never" > run_prog.sh
|
|
chmod +x run_prog.sh
|
|
cp -f $2 prog
|
|
find . | cpio --create --format='newc' --quiet | gzip > ../initrd.gz
|
|
cd ..
|
|
|
|
timeout 30s qemu-system-$arch \
|
|
-m 1024 \
|
|
-nographic \
|
|
-kernel kernel \
|
|
-initrd initrd.gz \
|
|
-append init=/run_prog.sh > output || true
|
|
|
|
# remove kernel messages
|
|
tr -d '\r' < output | egrep -v '^\['
|
|
|
|
egrep "(PASSED)|(test result: ok)" output > /dev/null
|