{
if ( auto *CI = dyn_cast<CallInst>(I) ) {
Function *fun = CI->getCalledFunction();
+ if (fun == NULL)
+ return false;
+
StringRef funName = fun->getName();
- if ( (CI->isTailCall() && funName.contains("atomic_")) ||
- funName.contains("atomic_compare_exchange_") ) {
- printArgs(CI);
+ // todo: come up with better rules for function name checking
+ if ( funName.contains("atomic_") ) {
+ // printArgs(CI);
+ return true;
+ } else if (funName.contains("atomic") ) {
+ // errs() << "intercepted atomic calls: " << *I << "\n";
return true;
}
}
User::op_iterator begin = CI->arg_begin();
User::op_iterator end = CI->arg_end();
- if (funName.find("atomic_") != -1) {
+ if ( funName.contains("atomic_") ) {
std::vector<Value *> parameters;
for (User::op_iterator it = begin; it != end; ++it) {