Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
llvm-watermarker
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nagayama15
llvm-watermarker
Commits
15c8a036
Commit
15c8a036
authored
Dec 12, 2018
by
nagayama15
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2項命令の両辺入れ替えを実装
parent
9ed08cc3
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
34 additions
and
4 deletions
+34
-4
cxx.mk
cxx.mk
+1
-0
InstructionWatermarkPass.cpp
src/nykk/pass/InstructionWatermarkPass.cpp
+33
-4
No files found.
cxx.mk
View file @
15c8a036
...
...
@@ -8,6 +8,7 @@ CXXFLAGS := \
-Wextra \
-pedantic \
-Werror \
-Wno-unused-parameter \
$(addprefix -I, $(shell llvm-config --includedir)) \
-fPIC \
-fno-rtti
...
...
src/nykk/pass/InstructionWatermarkPass.cpp
View file @
15c8a036
#include <llvm/IR/Function.h>
#include <llvm/IR/InstrTypes.h>
#include <llvm/IR/Module.h>
#include <llvm/Pass.h>
#include <llvm/Support/raw_ostream.h>
...
...
@@ -9,7 +10,7 @@
namespace
{
/**
* @brief Watermarking pass by instruction
swapping
methods.
* @brief Watermarking pass by instruction
transform
methods.
*/
class
InstructionWatermarkPass
:
public
llvm
::
BasicBlockPass
...
...
@@ -77,8 +78,36 @@ namespace
*/
bool
runOnBasicBlock
(
llvm
::
BasicBlock
&
block
)
override
{
llvm
::
errs
()
<<
block
.
getParent
()
->
getName
()
<<
","
<<
block
.
size
()
<<
","
<<
0
<<
"
\n
"
;
return
false
;
std
::
size_t
num_embedded_bits
=
0
;
bool
is_changed
=
false
;
llvm
::
errs
()
<<
"V-------------------------------V"
<<
"
\n
"
;
for
(
auto
&
inst
:
block
)
{
llvm
::
errs
()
<<
inst
.
getOpcode
();
if
(
auto
bin_op
=
llvm
::
dyn_cast
<
llvm
::
BinaryOperator
>
(
&
inst
))
{
bool
is_swapped
=
!
bin_op
->
swapOperands
();
is_changed
=
is_swapped
||
is_changed
;
llvm
::
errs
()
<<
", "
<<
"binop"
;
}
else
if
(
auto
cmp_inst
=
llvm
::
dyn_cast
<
llvm
::
CmpInst
>
(
&
inst
))
{
cmp_inst
->
swapOperands
();
bool
is_swapped
=
!
cmp_inst
->
isCommutative
();
is_changed
=
is_swapped
||
is_changed
;
llvm
::
errs
()
<<
", "
<<
"cmpinst"
;
}
llvm
::
errs
()
<<
"
\n
"
;
}
llvm
::
errs
()
<<
block
.
getParent
()
->
getName
()
<<
","
<<
block
.
size
()
<<
","
<<
num_embedded_bits
<<
"
\n
"
;
return
is_changed
;
}
private
:
...
...
@@ -90,6 +119,6 @@ namespace
const
llvm
::
RegisterPass
<
InstructionWatermarkPass
>
pass_registry
=
{
"inst-wm"
,
"Watermarking pass by instruction
swapping
methods"
,
"Watermarking pass by instruction
transform
methods"
,
};
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment