mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-27 00:21:03 +00:00
DataFlowSanitizer: Replace non-instrumented aliases of instrumented functions, and vice versa, with wrappers.
Differential Revision: http://llvm-reviews.chandlerc.com/D1442 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189054 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -470,7 +470,8 @@ bool DataFlowSanitizer::runOnModule(Module &M) {
|
||||
FnsToInstrument.push_back(&*i);
|
||||
}
|
||||
|
||||
// Give function aliases prefixes when necessary.
|
||||
// Give function aliases prefixes when necessary, and build wrappers where the
|
||||
// instrumentedness is inconsistent.
|
||||
for (Module::alias_iterator i = M.alias_begin(), e = M.alias_end(); i != e;) {
|
||||
GlobalAlias *GA = &*i;
|
||||
++i;
|
||||
@@ -481,6 +482,16 @@ bool DataFlowSanitizer::runOnModule(Module &M) {
|
||||
bool GAInst = isInstrumented(GA), FInst = isInstrumented(F);
|
||||
if (GAInst && FInst) {
|
||||
addGlobalNamePrefix(GA);
|
||||
} else if (GAInst != FInst) {
|
||||
// Non-instrumented alias of an instrumented function, or vice versa.
|
||||
// Replace the alias with a native-ABI wrapper of the aliasee. The pass
|
||||
// below will take care of instrumenting it.
|
||||
Function *NewF =
|
||||
buildWrapperFunction(F, "", GA->getLinkage(), F->getFunctionType());
|
||||
GA->replaceAllUsesWith(NewF);
|
||||
NewF->takeName(GA);
|
||||
GA->eraseFromParent();
|
||||
FnsToInstrument.push_back(NewF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user