summaryrefslogtreecommitdiffstats
path: root/tests/syscall-errors
diff options
context:
space:
mode:
Diffstat (limited to 'tests/syscall-errors')
-rw-r--r--tests/syscall-errors46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/syscall-errors b/tests/syscall-errors
new file mode 100644
index 0000000..0d36428
--- /dev/null
+++ b/tests/syscall-errors
@@ -0,0 +1,46 @@
+# -*- sh -*-
+# See LICENSE file for copyright and license details.
+
+for os in $(getnamelist OS); do
+ osn=$(getnum OS $os)
+ for arch in $(getnamelist ARCH); do
+ archn=$(getnum ARCH $arch)
+ get-syscall-errors.tu $osn $archn $os $arch > $a
+ grep -v '^[0-9]\+ -' >/dev/null < $a
+ grep -v '^-' < $a > $b
+ grep '^\([0-9]\+\) \1 ' < $a | diff -u $a -
+ if issupported $os $arch; then
+ (! test "$(cat $a)" = x)
+ if test "$os" = LINUX; then
+ signed=1
+ grep '^[0-9]\+ [0-9]\+ [A-Z0-9_]\+$' >/dev/null < $a
+ test -z "$(grep -v '^[0-9]\+ [0-9]\+ [A-Z0-9_]\+$' < $a)"
+ required="ERESTARTSYS ERESTARTNOINTR ERESTARTNOHAND ERESTART_RESTARTBLOCK EPERM ENOENT EDOM ELOOP"
+ else
+ continue;
+ fi
+ for req in $required; do
+ grep '^-\?[0-9]\+ [0-9]\+ '"$req"\$ >/dev/null < $a
+ done
+ cut -d ' ' -f $(( 2 - signed )) < $a > $b && sort -n < $b | diff -u $b -
+ if test -f testcases/errors-$os-$arch; then
+ if ! diff -u testcases/errors-$os-$arch $a; then
+ printf '\x1b[33m%s\x1b[m\n' "Maybe new errors have been added for $os on $arch"
+ exit 1
+ fi
+ fi
+ else
+ # Can still be successful because it may be hardcorded to
+ # use the same table as another architecture that is supported,
+ # however it cannot be successful if the OS is not supported
+ issupported $os
+ fi
+ test -z "$(cut -d ' ' -f 1 < $a | sort | uniq -d)"
+ test -z "$(cut -d ' ' -f 2 < $a | sort | uniq -d)"
+ test -z "$(cut -d ' ' -f 3 < $a | sort | uniq -d)"
+ done
+done
+test -f testcases/errors-LINUX-AMD64
+test -f testcases/errors-LINUX-PARISC_32
+test -f testcases/errors-LINUX-PARISC_64
+(! diff -u testcases/errors-LINUX-AMD64 testcases/errors-LINUX-PARISC_32 >/dev/null)