/
/
/
Volumes
/
Work
/
CLion
/
Projects
/
llvm
-
project
-
llvmorg
-
9.0
.
1
/
llvm
/
lib
/
Transforms
/
EncodeFunctionName
/
EncodeFunctionName.cpp
using namespace llvm;
namespace llvm {
struct EncodeFunctionName : public FunctionPass {
static char
ID
;
/
/
Pass identification, replacement
for
typeid
EncodeFunctionName() : FunctionPass(
ID
) {};
bool
runOnFunction(Function &F) override {
errs() <<
"EncodeFunctionName: "
<< F.getName() <<
" -> "
;
if
(F.getName().compare(
"main"
) !
=
0
){
llvm::MD5 Hasher;
llvm::MD5::MD5Result
Hash
;
Hasher.update(F.getName());
Hasher.update(
"NewFunctionName"
);
Hasher.final(
Hash
);
SmallString<
32
> HexString;
llvm::MD5::stringifyResult(
Hash
, HexString);
F.setName(HexString);
}
errs().write_escaped(F.getName()) <<
'\n'
;
return
false;
}
};
}
char EncodeFunctionName::
ID
=
0
;
static RegisterPass X(
"encode"
,
"Hello EncodeFunctionName Pass"
);
static llvm::RegisterStandardPasses Y(
llvm::PassManagerBuilder::EP_EarlyAsPossible,
[](const llvm::PassManagerBuilder &Builder,
llvm::legacy::PassManagerBase &PM) { PM.add(new EncodeFunctionName()); });