]> granicus.if.org Git - strace/commitdiff
Fix select and _newselect syscall entries
authorDmitry V. Levin <ldv@altlinux.org>
Tue, 8 Dec 2015 17:38:12 +0000 (17:38 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 8 Dec 2015 21:19:40 +0000 (21:19 +0000)
Change syscall names to match kernel __NR_* constants.
This reverts commit ddcf54969d253582ab2cfdcab8ede9cdae3fb171.

* linux/arm/syscallent.h [82]: Rename "oldselect" to "select".
[142]: Rename "select" to "_newselect".
* linux/bfin/syscallent.h: Likewise.
* linux/i386/syscallent.h: Likewise.
* linux/m68k/syscallent.h: Likewise.
* linux/microblaze/syscallent.h: Likewise.
* linux/powerpc/syscallent.h [82]: Likewise.
* linux/powerpc64/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/hppa/syscallent.h [142]: Rename "select" to "_newselect".
* linux/mips/syscallent-n32.h [6022]: Rename "select" to "_newselect".
* linux/mips/syscallent-n64.h [5022]: Likewise.
* linux/mips/syscallent-o32.h [4142]: Likewise.
* linux/s390/syscallent.h [142]: Rename "select" to "_newselect".
* linux/sparc/syscallent.h [230]: Rename "select" to "_newselect".
* tests/oldselect.test: Rename oldselect to select.  Convert
from match_grep to match_diff.
* tests/oldselect.expected: Likewise.
* xselect.c: New file, based on select.c.
* tests/_newselect.c: New file.
* tests/select.c: Replace with a wrapper around xselect.c.
* tests/select.test: Parametrize.
* tests/_newselect.test: New test.
* tests/Makefile.am (check_PROGRAMS): Add _newselect.
(TESTS): Add _newselect.test.
(EXTRA_DIST): Add xselect.c.
* tests/.gitignore: Add _newselect.

24 files changed:
linux/arm/syscallent.h
linux/bfin/syscallent.h
linux/hppa/syscallent.h
linux/i386/syscallent.h
linux/m68k/syscallent.h
linux/microblaze/syscallent.h
linux/mips/syscallent-n32.h
linux/mips/syscallent-n64.h
linux/mips/syscallent-o32.h
linux/powerpc/syscallent.h
linux/powerpc64/syscallent.h
linux/s390/syscallent.h
linux/sh/syscallent.h
linux/sh64/syscallent.h
linux/sparc/syscallent.h
tests/.gitignore
tests/Makefile.am
tests/_newselect.c [new file with mode: 0644]
tests/_newselect.test [new file with mode: 0755]
tests/oldselect.expected
tests/oldselect.test
tests/select.c
tests/select.test
tests/xselect.c [new file with mode: 0644]

index 70a3a6a27ae3f5d1d516fa6c5df53d9c052fbb8f..5538dfed6f59305907b7549f234621cdf79c4312 100644 (file)
 [ 79] = { 2,   0,              SEN(settimeofday),              "settimeofday"          },
 [ 80] = { 2,   0,              SEN(getgroups16),               "getgroups"             },
 [ 81] = { 2,   0,              SEN(setgroups16),               "setgroups"             },
-[ 82] = { 1,   TD,             SEN(oldselect),                 "oldselect"             },
+[ 82] = { 1,   TD,             SEN(oldselect),                 "select"                },
 [ 83] = { 2,   TF,             SEN(symlink),                   "symlink"               },
 [ 84] = { 2,   TF,             SEN(oldlstat),                  "oldlstat"              },
 [ 85] = { 3,   TF,             SEN(readlink),                  "readlink"              },
 [139] = { 1,   NF,             SEN(setfsgid16),                "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 6ce6c5243107ff1e01c6807ef56215ba581aa593..31bfbd9e832c51a38fd35d3696ee5bf0d987a695 100644 (file)
 [ 79] = { 2,   0,              SEN(settimeofday),              "settimeofday"          },
 [ 80] = { 2,   0,              SEN(getgroups16),               "getgroups"             },
 [ 81] = { 2,   0,              SEN(setgroups16),               "setgroups"             },
-[ 82] = { 1,   TD,             SEN(oldselect),                 "oldselect"             },
+[ 82] = { 1,   TD,             SEN(oldselect),                 "select"                },
 [ 83] = { 2,   TF,             SEN(symlink),                   "symlink"               },
 [ 84] = { 2,   TF,             SEN(oldlstat),                  "oldlstat"              },
 [ 85] = { 3,   TF,             SEN(readlink),                  "readlink"              },
 [139] = { 1,   NF,             SEN(setfsgid16),                "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 02072019005b3aea9153fc989ac4bc5cdcfb750f..1a4fa7498de8545babd6f4c8655937cc22f2fabf 100644 (file)
 [139] = { 1,   NF,             SEN(setfsgid),                  "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 9886c4b885c73ca90f74a02d850103de4b508628..4a7f52f34a61766b654df62df8545d8a45191063 100644 (file)
 [ 79] = { 2,   0,              SEN(settimeofday),              "settimeofday"          },
 [ 80] = { 2,   0,              SEN(getgroups16),               "getgroups"             },
 [ 81] = { 2,   0,              SEN(setgroups16),               "setgroups"             },
-[ 82] = { 1,   TD,             SEN(oldselect),                 "oldselect"             },
+[ 82] = { 1,   TD,             SEN(oldselect),                 "select"                },
 [ 83] = { 2,   TF,             SEN(symlink),                   "symlink"               },
 [ 84] = { 2,   TF,             SEN(oldlstat),                  "oldlstat"              },
 [ 85] = { 3,   TF,             SEN(readlink),                  "readlink"              },
 [139] = { 1,   NF,             SEN(setfsgid16),                "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 89616d1697126890601c6fbbbbc9d15961ad6f04..ef675acd3663491b6cb029102a5f0bfaf5ac83a7 100644 (file)
 [ 79] = { 2,   0,              SEN(settimeofday),              "settimeofday"          },
 [ 80] = { 2,   0,              SEN(getgroups16),               "getgroups"             },
 [ 81] = { 2,   0,              SEN(setgroups16),               "setgroups"             },
-[ 82] = { 1,   TD,             SEN(oldselect),                 "oldselect"             },
+[ 82] = { 1,   TD,             SEN(oldselect),                 "select"                },
 [ 83] = { 2,   TF,             SEN(symlink),                   "symlink"               },
 [ 84] = { 2,   TF,             SEN(oldlstat),                  "oldlstat"              },
 [ 85] = { 3,   TF,             SEN(readlink),                  "readlink"              },
 [139] = { 1,   NF,             SEN(setfsgid16),                "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 627c9048186cdceaec4143e2a8bc132fc70ee490..c7cf2478a60a7c746e80e4905ab8fb156e0f5a39 100644 (file)
 [ 79] = { 2,   0,              SEN(settimeofday),              "settimeofday"          },
 [ 80] = { 2,   0,              SEN(getgroups16),               "getgroups"             },
 [ 81] = { 2,   0,              SEN(setgroups16),               "setgroups"             },
-[ 82] = { 1,   TD,             SEN(oldselect),                 "oldselect"             },
+[ 82] = { 1,   TD,             SEN(oldselect),                 "select"                },
 [ 83] = { 2,   TF,             SEN(symlink),                   "symlink"               },
 [ 84] = { 2,   TF,             SEN(oldlstat),                  "oldlstat"              },
 [ 85] = { 3,   TF,             SEN(readlink),                  "readlink"              },
 [139] = { 1,   NF,             SEN(setfsgid16),                "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 2f90604a1dd11800031e9ae2741a2d62c7754468..346fec8bb3c3c27a34c45364babaf402d55c121a 100644 (file)
@@ -22,7 +22,7 @@
 [6019] = { 3,  TD,             SEN(writev),                    "writev"                },
 [6020] = { 2,  TF,             SEN(access),                    "access"                },
 [6021] = { 1,  TD,             SEN(pipe),                      "pipe"                  },
-[6022] = { 5,  TD,             SEN(select),                    "select"                },
+[6022] = { 5,  TD,             SEN(select),                    "_newselect"            },
 [6023] = { 0,  0,              SEN(sched_yield),               "sched_yield"           },
 [6024] = { 5,  TM|SI,          SEN(mremap),                    "mremap"                },
 [6025] = { 3,  TM,             SEN(msync),                     "msync"                 },
index 2e387fb20b606ce63af4023315a1267f70c44c01..0fc5aa1101e490c907ccc5e5470e977ef6eb6293 100644 (file)
@@ -22,7 +22,7 @@
 [5019] = { 3,  TD,             SEN(writev),                    "writev"                },
 [5020] = { 2,  TF,             SEN(access),                    "access"                },
 [5021] = { 1,  TD,             SEN(pipe),                      "pipe"                  },
-[5022] = { 5,  TD,             SEN(select),                    "select"                },
+[5022] = { 5,  TD,             SEN(select),                    "_newselect"            },
 [5023] = { 0,  0,              SEN(sched_yield),               "sched_yield"           },
 [5024] = { 5,  TM|SI,          SEN(mremap),                    "mremap"                },
 [5025] = { 3,  TM,             SEN(msync),                     "msync"                 },
index 9671e49bf96ee37e3265aa9c63628c5df8bfb728..8347b9c8ea820f44ea527de426f278549ca7d02b 100644 (file)
 [4139] = { 1,  NF,             SEN(setfsgid),                  "setfsgid"              },
 [4140] = { 5,  TD,             SEN(llseek),                    "_llseek"               },
 [4141] = { 3,  TD,             SEN(getdents),                  "getdents"              },
-[4142] = { 5,  TD,             SEN(select),                    "select"                },
+[4142] = { 5,  TD,             SEN(select),                    "_newselect"            },
 [4143] = { 2,  TD,             SEN(flock),                     "flock"                 },
 [4144] = { 3,  TM,             SEN(msync),                     "msync"                 },
 [4145] = { 3,  TD,             SEN(readv),                     "readv"                 },
index f59a1a1b7d63f4d1a09c803da4fad437090d1458..c88ba8e214e6f4b7e058900a85078b4e8d0aaf18 100644 (file)
 [ 79] = { 2,   0,              SEN(settimeofday),              "settimeofday"          },
 [ 80] = { 2,   0,              SEN(getgroups),                 "getgroups"             },
 [ 81] = { 2,   0,              SEN(setgroups),                 "setgroups"             },
-[ 82] = { 1,   TD,             SEN(oldselect),                 "oldselect"             },
+[ 82] = { 1,   TD,             SEN(oldselect),                 "select"                },
 [ 83] = { 2,   TF,             SEN(symlink),                   "symlink"               },
 [ 84] = { 2,   TF,             SEN(oldlstat),                  "oldlstat"              },
 [ 85] = { 3,   TF,             SEN(readlink),                  "readlink"              },
 [139] = { 1,   NF,             SEN(setfsgid),                  "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 6db3d30b8c72639da78799402e06bacff50c89aa..9c0219c9d8f970f0f4904e627c01f13a0f819b78 100644 (file)
 [ 79] = { 2,   0,              SEN(settimeofday),              "settimeofday"          },
 [ 80] = { 2,   0,              SEN(getgroups),                 "getgroups"             },
 [ 81] = { 2,   0,              SEN(setgroups),                 "setgroups"             },
-[ 82] = { 1,   TD,             SEN(oldselect),                 "oldselect"             },
+[ 82] = { 1,   TD,             SEN(oldselect),                 "select"                },
 [ 83] = { 2,   TF,             SEN(symlink),                   "symlink"               },
 [ 84] = { 2,   TF,             SEN(oldlstat),                  "oldlstat"              },
 [ 85] = { 3,   TF,             SEN(readlink),                  "readlink"              },
 [139] = { 1,   NF,             SEN(setfsgid),                  "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 8ce3537a9728dca3566d7c5c9408ed51d122d1c5..ad2827a9726c46cd9b7709a2bd3611edf8c1f55b 100644 (file)
 [139] = { 1,   NF,             SEN(setfsgid16),                "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 26da8016cd4e8077c68a98fe183eb634b1bd746f..0a63d58b84ec946d9af4e13e9ba1b64f6c03f5f9 100644 (file)
 [ 79] = { 2,   0,              SEN(settimeofday),              "settimeofday"          },
 [ 80] = { 2,   0,              SEN(getgroups16),               "getgroups"             },
 [ 81] = { 2,   0,              SEN(setgroups16),               "setgroups"             },
-[ 82] = { 1,   TD,             SEN(oldselect),                 "oldselect"             },
+[ 82] = { 1,   TD,             SEN(oldselect),                 "select"                },
 [ 83] = { 2,   TF,             SEN(symlink),                   "symlink"               },
 [ 84] = { 2,   TF,             SEN(oldlstat),                  "oldlstat"              },
 [ 85] = { 3,   TF,             SEN(readlink),                  "readlink"              },
 [139] = { 1,   NF,             SEN(setfsgid16),                "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 53f9f1716cbcd901a31ba1a80c9d7ba74afef4e6..e2ec231d24e77dc2c1153fa211afc0ec9748143f 100644 (file)
 [139] = { 1,   NF,             SEN(setfsgid16),                "setfsgid"              },
 [140] = { 5,   TD,             SEN(llseek),                    "_llseek"               },
 [141] = { 3,   TD,             SEN(getdents),                  "getdents"              },
-[142] = { 5,   TD,             SEN(select),                    "select"                },
+[142] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [143] = { 2,   TD,             SEN(flock),                     "flock"                 },
 [144] = { 3,   TM,             SEN(msync),                     "msync"                 },
 [145] = { 3,   TD,             SEN(readv),                     "readv"                 },
index 40dadef2b3518378e1e6d3b8d2eaddcc7bd5583a..772ba2c1cafdc9e10fef8869447b4b2f067e9c2a 100644 (file)
 [227] = { 5,   0,              SEN(afs_syscall),               "afs_syscall"           },
 [228] = { 1,   NF,             SEN(setfsuid16),                "setfsuid"              },
 [229] = { 1,   NF,             SEN(setfsgid16),                "setfsgid"              },
-[230] = { 5,   TD,             SEN(select),                    "select"                },
+[230] = { 5,   TD,             SEN(select),                    "_newselect"            },
 [231] = { 1,   0,              SEN(time),                      "time"                  },
 [232] = { 6,   TD,             SEN(splice),                    "splice"                },
 [233] = { 1,   0,              SEN(stime),                     "stime"                 },
index 1a6cfbf000e8868c26ff23fe2d10b303e08b3526..714d82ba805e4a2f61bcfc832deb2fba994c88da 100644 (file)
@@ -5,6 +5,7 @@
 *.tmp-*
 *.tmp.*
 *.trs
+_newselect
 adjtimex
 aio
 bpf
index 10492f0dfe32057e11c31f616d64da05ac4ea70f..a13dc308c7aab0c565d88877eff7e0d6559bb5a2 100644 (file)
@@ -14,6 +14,7 @@ AM_CPPFLAGS = $(ARCH_MFLAGS) \
 AM_LDFLAGS = $(ARCH_MFLAGS)
 
 check_PROGRAMS = \
+       _newselect \
        adjtimex \
        aio \
        bpf \
@@ -136,6 +137,7 @@ TESTS = \
        strace-f.test \
        qual_syscall.test \
        \
+       _newselect.test \
        adjtimex.test \
        aio.test \
        bexecve.test \
@@ -288,6 +290,7 @@ EXTRA_DIST = init.sh run.sh match.awk \
             unix-yy-connect.awk \
             wait.expected \
             xattr.expected \
+            xselect.c \
             xstatx.c \
             $(TESTS)
 
diff --git a/tests/_newselect.c b/tests/_newselect.c
new file mode 100644 (file)
index 0000000..3722ccf
--- /dev/null
@@ -0,0 +1,12 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <sys/syscall.h>
+
+#undef TEST_SYSCALL_NAME
+#ifdef __NR__newselect
+# define TEST_SYSCALL_NAME _newselect
+#endif
+
+#include "xselect.c"
diff --git a/tests/_newselect.test b/tests/_newselect.test
new file mode 100755 (executable)
index 0000000..3371d4d
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Check _newselect syscall decoding.
+
+. "${srcdir=.}/select.test"
index 14049ab1201e6bf2d3e238bd5b92ae162635bc29..c0426f42b00aa1f50e19441e06befddf0392f89e 100644 (file)
@@ -1 +1,2 @@
-oldselect\(2, \[1\], \[0\], NULL, \{0, 42\}\) += 0 \(Timeout\)
+select(2, [1], [0], NULL, {0, 42}) = 0 (Timeout)
++++ exited with 0 +++
index edd3693ef61081bb3cc1895db3029599224807cd..35661ad43f001d8c9d45e19e30ed988b833e9021 100755 (executable)
@@ -1,11 +1,11 @@
 #!/bin/sh
 
-# Check oldselect syscall decoding.
+# Check old select syscall decoding.
 
 . "${srcdir=.}/init.sh"
 
 run_prog
-run_strace -e oldselect $args
-match_grep
+run_strace -a34 -eselect $args
+match_diff
 
 exit 0
index 0f8f6cb8ea5aa2f3110dfc5e134db04718860515..95bc6326bf06d5b4fb8ce9c3e2710e84df266c11 100644 (file)
-/*
- * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
 
-/*
- * Based on test by Dr. David Alan Gilbert <dave@treblig.org>
- */
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/select.h>
 #include <sys/syscall.h>
 
-#undef NR_select
-
-#if defined __NR__newselect
-# define NR_select __NR__newselect
-#elif defined __NR_select
-# define NR_select __NR_select
+#undef TEST_SYSCALL_NAME
+#if defined __NR_select && !defined __NR__newselect
+# define TEST_SYSCALL_NAME select
 #endif
 
-#ifdef NR_select
-
-static fd_set set[0x1000000 / sizeof(fd_set)];
-
-int main(void)
-{
-       int fds[2];
-       struct {
-               struct timeval tv;
-               int pad[2];
-       } tm_in = {
-               .tv = { .tv_sec = 0xc0de1, .tv_usec = 0xc0de2 },
-               .pad = { 0xdeadbeef, 0xbadc0ded }
-       }, tm = tm_in;
-
-       if (pipe(fds))
-               return 77;
-
-       /*
-        * Start with a nice simple select.
-        */
-       FD_ZERO(set);
-       FD_SET(fds[0], set);
-       FD_SET(fds[1], set);
-       if (syscall(NR_select, fds[1] + 1, set, set, set, NULL) != 1)
-               return 77;
-       printf("select(%d, [%d %d], [%d %d], [%d %d], NULL) = 1 ()\n",
-              fds[1] + 1, fds[0], fds[1],
-              fds[0], fds[1], fds[0], fds[1]);
-
-       /*
-        * Another simple one, with a timeout.
-        */
-       FD_SET(1, set);
-       FD_SET(2, set);
-       FD_SET(fds[0], set);
-       FD_SET(fds[1], set);
-       if (syscall(NR_select, fds[1] + 1, NULL, set, NULL, &tm.tv) != 3)
-               return 77;
-       printf("select(%d, NULL, [1 2 %d %d], NULL, {%Ld, %Ld})"
-              " = 3 (out [1 2 %d], left {%Ld, %Ld})\n",
-              fds[1] + 1, fds[0], fds[1],
-              (long long) tm_in.tv.tv_sec, (long long) tm_in.tv.tv_usec,
-              fds[1],
-              (long long) tm.tv.tv_sec, (long long) tm.tv.tv_usec);
-
-       /*
-        * Now the crash case that trinity found, negative nfds
-        * but with a pointer to a large chunk of valid memory.
-        */
-       FD_ZERO(set);
-       FD_SET(fds[1],set);
-       if (syscall(NR_select, -1, NULL, set, NULL, NULL) != -1)
-               return 77;
-       printf("select(-1, NULL, %p, NULL, NULL) "
-              "= -1 EINVAL (Invalid argument)\n", set);
-
-       /*
-        * Another variant, with nfds exceeding FD_SETSIZE limit.
-        */
-       FD_ZERO(set);
-       FD_SET(fds[0],set);
-       tm.tv.tv_sec = 0;
-       tm.tv.tv_usec = 123;
-       if (syscall(NR_select, FD_SETSIZE + 1, set, set + 1, NULL, &tm.tv))
-               return 77;
-       printf("select(%d, [%d], [], NULL, {0, 123}) = 0 (Timeout)\n",
-              FD_SETSIZE + 1, fds[0]);
-
-       puts("+++ exited with 0 +++");
-       return 0;
-}
-
-#else
-
-int
-main(void)
-{
-       return 77;
-}
-
-#endif
+#include "xselect.c"
index d9c76b2828c4faa5f2f4333af67a31408db20620..78c25c7228b8ef0eb8323f8e92846dfba5d35716 100755 (executable)
@@ -5,8 +5,9 @@
 . "${srcdir=.}/init.sh"
 
 run_prog > /dev/null
+syscall=${ME_%.test}
 OUT="$LOG.out"
-run_strace -a36 -eselect $args > "$OUT"
+run_strace -a36 -e$syscall $args > "$OUT"
 match_diff "$LOG" "$OUT"
 
 rm -f "$OUT"
diff --git a/tests/xselect.c b/tests/xselect.c
new file mode 100644 (file)
index 0000000..916204e
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Based on test by Dr. David Alan Gilbert <dave@treblig.org>
+ */
+
+#ifdef TEST_SYSCALL_NAME
+
+# include <stdio.h>
+# include <unistd.h>
+# include <sys/select.h>
+
+# define TEST_SYSCALL_NR nrify(TEST_SYSCALL_NAME)
+# define nrify(arg) nrify_(arg)
+# define nrify_(arg) __NR_ ## arg
+
+# define TEST_SYSCALL_STR stringify(TEST_SYSCALL_NAME)
+# define stringify(arg) stringify_(arg)
+# define stringify_(arg) #arg
+
+static fd_set set[0x1000000 / sizeof(fd_set)];
+
+int main(void)
+{
+       int fds[2];
+       struct {
+               struct timeval tv;
+               int pad[2];
+       } tm_in = {
+               .tv = { .tv_sec = 0xc0de1, .tv_usec = 0xc0de2 },
+               .pad = { 0xdeadbeef, 0xbadc0ded }
+       }, tm = tm_in;
+
+       if (pipe(fds))
+               return 77;
+
+       /*
+        * Start with a nice simple select.
+        */
+       FD_ZERO(set);
+       FD_SET(fds[0], set);
+       FD_SET(fds[1], set);
+       if (syscall(TEST_SYSCALL_NR, fds[1] + 1, set, set, set, NULL) != 1)
+               return 77;
+       printf("%s(%d, [%d %d], [%d %d], [%d %d], NULL) = 1 ()\n",
+              TEST_SYSCALL_STR, fds[1] + 1, fds[0], fds[1],
+              fds[0], fds[1], fds[0], fds[1]);
+
+       /*
+        * Another simple one, with a timeout.
+        */
+       FD_SET(1, set);
+       FD_SET(2, set);
+       FD_SET(fds[0], set);
+       FD_SET(fds[1], set);
+       if (syscall(TEST_SYSCALL_NR, fds[1] + 1, NULL, set, NULL, &tm.tv) != 3)
+               return 77;
+       printf("%s(%d, NULL, [1 2 %d %d], NULL, {%Ld, %Ld})"
+              " = 3 (out [1 2 %d], left {%Ld, %Ld})\n",
+              TEST_SYSCALL_STR, fds[1] + 1, fds[0], fds[1],
+              (long long) tm_in.tv.tv_sec, (long long) tm_in.tv.tv_usec,
+              fds[1],
+              (long long) tm.tv.tv_sec, (long long) tm.tv.tv_usec);
+
+       /*
+        * Now the crash case that trinity found, negative nfds
+        * but with a pointer to a large chunk of valid memory.
+        */
+       FD_ZERO(set);
+       FD_SET(fds[1],set);
+       if (syscall(TEST_SYSCALL_NR, -1, NULL, set, NULL, NULL) != -1)
+               return 77;
+       printf("%s(-1, NULL, %p, NULL, NULL) = -1 EINVAL (%m)\n",
+              TEST_SYSCALL_STR, set);
+
+       /*
+        * Another variant, with nfds exceeding FD_SETSIZE limit.
+        */
+       FD_ZERO(set);
+       FD_SET(fds[0],set);
+       tm.tv.tv_sec = 0;
+       tm.tv.tv_usec = 123;
+       if (syscall(TEST_SYSCALL_NR, FD_SETSIZE + 1, set, set + 1, NULL, &tm.tv))
+               return 77;
+       printf("%s(%d, [%d], [], NULL, {0, 123}) = 0 (Timeout)\n",
+              TEST_SYSCALL_STR, FD_SETSIZE + 1, fds[0]);
+
+       puts("+++ exited with 0 +++");
+       return 0;
+}
+
+#else
+
+int
+main(void)
+{
+       return 77;
+}
+
+#endif