Various bug fixes
authorXiaozhu Meng <xmeng@cs.wisc.edu>
Mon, 5 Nov 2018 20:38:54 +0000 (14:38 -0600)
committerXiaozhu Meng <xmeng@cs.wisc.edu>
Mon, 5 Nov 2018 20:38:54 +0000 (14:38 -0600)
commit29535f22c1a17581107140da3910ccf148b36372
tree27b4ae8937cda52b5b2776aea4429790f0ceee16
parent69cd26ecac988c8f578a47ee1b285093db653de8
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:
dataflowAPI/h/slicing.h
dataflowAPI/rose/semantics/DispatcherARM64.C
dataflowAPI/src/slicing.C
dyninstAPI/src/Parsing.C
instructionAPI/src/InstructionDecoder-aarch64.C
parseAPI/src/BoundFactCalculator.C
parseAPI/src/CodeSource.C
parseAPI/src/Function.C
parseAPI/src/IA_IAPI.h
parseAPI/src/IA_aarch64.C
parseAPI/src/IA_power.C
parseAPI/src/IA_x86.C
parseAPI/src/IndirectAnalyzer.C
parseAPI/src/IndirectAnalyzer.h
parseAPI/src/JumpTableFormatPred.C
parseAPI/src/JumpTableFormatPred.h
parseAPI/src/JumpTableIndexPred.C
parseAPI/src/JumpTableIndexPred.h
parseAPI/src/Parser.C
parseAPI/src/SymtabCodeSource.C
parseAPI/src/debug_parse.C