Remove some boilerplate arg-passing to utils.sh in test scripts.
Pass $GLOBAL_OPTIONS to rr dump in tests.

This prevents warnings such as the "performance governor" warning from appearing
in the test log.
Clean up test scripts.

Put util.sh inclusion as the first line of every test script.

Avoid setting unnecessary shell variables like $testname and $test to hold the
test name.
Simplify tiocgwinsz.
Make more tests reduce to a common test script that just does "compare_test EXIT-SUCCESS".
Rename BASIC_TESTS and CUSTOM_TESTS to TESTS_WITH_PROGRAM and TESTS_WITHOUT_PROGRAM.
Introduce BASIC_TESTS category for tests that use a 'compare_test EXIT-SUCCESS' script.

We're going to have to add a lot more tests as we expand our syscall coverage.
Almost all of these tests will just do "compare_test EXIT-SUCCESS" in their
run script. So it seems like a good idea to have a category of tests in
CMakeLists for which that is the default run script, so these tests don't need
a run script of their own.
Move more tests to BASIC_TESTS.
Handle invalid syscalls without dying and remove sysctl support since modern kernels don't support it.

If we see a syscall we don't support return -ENOSYS, we should just
carry on since it's extremely likely the kernel doesn't support it and did
nothing but return the error.
move #undefs for syscall_defs.h macros to syscall_defs.h

Having these lists repeated wherever we use syscall_defs.h doesn't seem
like good practice.  It reduces clutter, especially with upcoming
changes to handle undefined syscalls in syscalls.h.  It's also easy to
miss undefining a macro (which, admittedly, is normally harmless).
add syscall numberings for x86-64

x86 and x86-64 have different syscall numbering orders.  Additionally,
x86-64 doesn't have syscalls that x86 does (usually because having
${SYSCALL} and ${SYSCALL}64 is redundant for x86-64).

Therefore, this patch does three things:

1. Introduces a SYSCALL_UNDEFINED_${ARCH} mechanism for handling
   non-existent syscalls on a given platform.
2. Adds a SYSCALLNO_X86_64 macro for similar purposes as the current
   SYSCALLNO_X86 macro.
3. Sprinkles SYSCALLNO_X86_64 macros about syscall_defs.h and related
   places.

Ideally, we'd check that syscall numbers defined after
SYSCALL_UNDEFINED_${ARCH} didn't have a corresponding SYS_foo
definition, but C++ makes that difficult.  I also haven't yet figured
out how this extends to the CHECK_SYSCALL_NUMBERS bits in
replay_syscall.cc.
move SyscallsX86 into x86_arch

...and rename it Syscalls instead.  Syscalls are part of the ABI, so
it's good sense to do this.
Make Syscalls enum non-'enum class'.

This simplifies usage of the enum values; you can use 'Arch::readv' instead
of 'Arch::Syscalls::readv'. You also don't need to explicitly cast values to int.
0 is a valid syscall number for x86-64 so map unknown syscalls to a large unused syscall number instead.
Template rec_prepare_syscall on the architecture.
Reject negative syscall numbers in rec_prepare_syscall.
add a typedef for wordsize::unsigned_long
add definitions for sizeof-only types
use new definitions in record_syscall.cc
Flesh out kernel_abi structures to match actual definitions.