Fix bugs in identifying catching blocks in ParseAPI.
authorXiaozhu Meng <xmeng@cs.wisc.edu>
Mon, 17 Aug 2015 04:37:04 +0000 (23:37 -0500)
committerXiaozhu Meng <xmeng@cs.wisc.edu>
Mon, 17 Aug 2015 04:37:04 +0000 (23:37 -0500)
commit5034fb73cdf1bd8e9bd12194d9f4f0958ee1aaab
tree816e5041c55e36fe43dfa7cd3ca4c65c429c45fb
parent4bfdf522aa780e234ae1cd93ac8f2a2567f72f03
Fix bugs in identifying catching blocks in ParseAPI.

1. We intend to look for catch blocks after every potential procedure ending instructions.
   Currently we only check for catch blocks after direct jumps and non-returning calls,
   we also need to check catch blocks after indirect jumps and rets.
2. There could be nop between an procedure ending instruction and the catch blocks.
   And there is a possibility that an exception table entry points a nop.
   So, we need to check for every nop and the first non-nop instruction after an procedure
   ending instruction for catch blocks.
3. Symtab::findCatchBlock, given a address range, uses a binary search to look for the catch block
   that contains the address range, but our catch blocks were not sorted according to
   the start adddresses of the catch blocks.
parseAPI/src/IA_IAPI.C
parseAPI/src/IndirectAnalyzer.C
parseAPI/src/Parser.C
symtabAPI/src/Symtab.C