[DynInst_API:] [dyninst/dyninst] 0ca00f: 1. Change the DYNINST_DEBUG_PARSING from a flag to...


Date: Wed, 10 Oct 2018 11:55:09 -0700
From: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
Subject: [DynInst_API:] [dyninst/dyninst] 0ca00f: 1. Change the DYNINST_DEBUG_PARSING from a flag to...
  Branch: refs/heads/new-parallel-parsing
  Home:   https://github.com/dyninst/dyninst
  Commit: 0ca00fa45d33f65406cd51f444fd1024bcb088d6
      https://github.com/dyninst/dyninst/commit/0ca00fa45d33f65406cd51f444fd1024bcb088d6
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-10-09 (Tue, 09 Oct 2018)

  Changed paths:
    M parseAPI/src/CFGModifier.C
    M parseAPI/src/IA_IAPI.C
    M parseAPI/src/JumpTableFormatPred.C
    M parseAPI/src/ParseData.h
    M parseAPI/src/Parser.C
    M parseAPI/src/Parser.h
    M parseAPI/src/debug_parse.C

  Log Message:
  -----------
  1. Change the DYNINST_DEBUG_PARSING from a flag to a debug log name prefix.
   In parallel parsing, we need different threads to output to different files

2. Change the jump table analysis to eliminate non-determinisitic behaviors
2.1. Do not rely on the order of node in slice
2.2. Add a fix-point analysis to allow jump table analysis to redo analysis,
     discover new out-going edges due to new in-cominging edges, and continue
     parsing


  Commit: d8c9be54a7b0665a6c0af75ead66555c8819f856
      https://github.com/dyninst/dyninst/commit/d8c9be54a7b0665a6c0af75ead66555c8819f856
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-10-10 (Wed, 10 Oct 2018)

  Changed paths:
    M parseAPI/src/Parser.C
    M parseAPI/src/Parser.h

  Log Message:
  -----------
  A few fixes for non-returning function analysis

1. We determine cycle by only checking the number delayed frames.
   Change it to check whether the set of delayed frames stays the same.
   This change may not be necessary, but it is safer

2. Enforce the correct order for checking function status when
   dealing with tail calls and shared code. The common code is moved
   to a new function Parser::update_function_ret_status.

   The return status starts with UNSET, and increases to RETURN, and maybe NORETURN
   Once it is RETURN or NORETURN, it will not go back to UNSET.

   Therefore, it is crucial for the following if statements to be the right order:
   First check the smaller values, and then check the larger values.

   Consider that if we reverse the order. So the code looks like
   1) if (other_func->retstatus() == RETURN) {
    ....
   2) }  else if (other_func->retstatus() == UNSET) {
    ....
      }

   In such code structure, at line 1), the other_func can be in UNSET, so the check fails.
   Concurrently, the other_func can be immediately set to RETURN, making the check at
   line 2) failing. So, the frame.func is neither delayed, nor updates its return status
   to RETURN, which can lead to wrong NORETURN status.


  Commit: 95e89bc3487f7a4716f49211e88b0c890c9cdeb8
      https://github.com/dyninst/dyninst/commit/95e89bc3487f7a4716f49211e88b0c890c9cdeb8
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-10-10 (Wed, 10 Oct 2018)

  Changed paths:
    M parseAPI/src/Parser.C

  Log Message:
  -----------
  Fix typos in fix-point analysis for jump tables and remove sink edges when finding new edges


Compare: https://github.com/dyninst/dyninst/compare/e94542723fb7...95e89bc3487f
      **NOTE:** This service has been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/

      Functionality will be removed from GitHub.com on January 31st, 2019.
[← Prev in Thread] Current Thread [Next in Thread→]
  • [DynInst_API:] [dyninst/dyninst] 0ca00f: 1. Change the DYNINST_DEBUG_PARSING from a flag to..., Xiaozhu Meng <=