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.
|