Various bug fixes
1. Jump table analysis
1.1 do not slice backward along indirect edges, which will
make jump table analysis depends on results of previous jump table analysis,
and have cascading wrong analysis results.
1.2 On x86, perform tentative instruction decoding at potential jump targets.
If we find junk instructions at jump target, then we know the jump target is wrong
1.3 Remove jump target checks that relies on the parsing function context.
For jump tables shared by multiple functions, such checks can easily lead to
non-determinisitic results.
2. Tail calls: on x86, if there is a pop to a callee saved register, it means
the function is tearing down the stack frame. So, this jump should be a tail call
3. PLT stubs
3.1 Improve analysis of PLT in .plt.got and fix related instrumentation problems
3.2 Function should use the PLT name at the beginning of the parsing, not at the
end of parsing. Otherwise, for PLT that is known to be non-returning, its caller
may have the wrong retstatus
21 files changed: