Rework syscall structure lookups.
Avoid always using an O(n^2) loop over known syscall structures with
strcmp() on each system call. Instead, use a per-ABI cache indexed by
the system call number. The first 1024 system calls (which should cover
all of the normal system calls in currently-supported ABIs) use a flat array
indexed by the system call number to find system call structure. For other
system calls, a linked list of structures storing an integer to structure
mapping is stored in the ABI. The linked list isn't very smart, but it
should only be used by buggy applications invoking unknown system calls.
The table + linked-list could perhaps be replaced by a hash table, but
I don't quite feel like writing a new hash table from scratch. One
option would be to make truss a C++ program and use unordered_map<>.
We could then turn the procabi thing into a class which might look a bit
nicer (and use constructors to initialize the hash table instead of
the inline STAILQ_HEAD_INITIALIZER).