Anecdote: had an 8086 system-call jump table that fielded up to 64K calls, but using a jump table of 4K. Address mode was segment:offset where segment was 17 bits and offset 16, but shifted by 4. The table consisted of the same trap instruction throughout, which took 4 bytes. If I remember it all right.
Anyway the system call trap examined the caller stack, found the return address (to the trap table), picked out the combination of segment and offset used to construct a system-call index. Following so far?
We went paged. Changed syscall segment to indirect, 16 segment descriptors all mapped to the start of the jump table. Started failing on one particular system call out of thousands - it would page fault! Why?
The auto-increment and prefetch of the trap opcode in the jump table would fault, for only one syscall, the one that mapped to the last entry in the trap table where the offset came out to 0FFC. Wrapped to 1000, which with that particular segment meant next-page! Which was unmapped (system trap table was in low memory, alone).
My solution: change the syscall index for that operation to something else, and document in the syscall comments to never use it.