Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
AFLplusplus
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Ulf Kargén
AFLplusplus
Commits
38e6de1e
Commit
38e6de1e
authored
4 years ago
by
hexcoder-
Browse files
Options
Downloads
Patches
Plain Diff
portability: make new gcc-plugin compilable under Ubuntu 16.04 (gcc 5.4.0)
parent
862b6d03
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
GNUmakefile.gcc_plugin
+1
-1
1 addition, 1 deletion
GNUmakefile.gcc_plugin
instrumentation/afl-gcc-pass.so.cc
+23
-13
23 additions, 13 deletions
instrumentation/afl-gcc-pass.so.cc
with
24 additions
and
14 deletions
GNUmakefile.gcc_plugin
+
1
−
1
View file @
38e6de1e
...
@@ -36,7 +36,7 @@ CFLAGS_SAFE := -Wall -Iinclude -Wno-pointer-sign \
...
@@ -36,7 +36,7 @@ CFLAGS_SAFE := -Wall -Iinclude -Wno-pointer-sign \
override CFLAGS += $(CFLAGS_SAFE)
override CFLAGS += $(CFLAGS_SAFE)
CXXFLAGS ?= -O3 -g -funroll-loops -D_FORTIFY_SOURCE=2
CXXFLAGS ?= -O3 -g -funroll-loops -D_FORTIFY_SOURCE=2
CXXEFLAGS := $(CXXFLAGS) -Wall
CXXEFLAGS := $(CXXFLAGS) -Wall
-std=c++11
CC ?= gcc
CC ?= gcc
CXX ?= g++
CXX ?= g++
...
...
This diff is collapsed.
Click to expand it.
instrumentation/afl-gcc-pass.so.cc
+
23
−
13
View file @
38e6de1e
...
@@ -152,9 +152,19 @@
...
@@ -152,9 +152,19 @@
#include
<context.h>
#include
<context.h>
#include
<tree.h>
#include
<tree.h>
#include
<gimplify.h>
#include
<gimplify.h>
#include
<basic-block.h>
#include
<tree-ssa-alias.h>
#include
<gimple-expr.h>
#include
<gimple.h>
#include
<gimple.h>
#include
<gimple-iterator.h>
#include
<gimple-iterator.h>
#include
<ssa.h>
#include
<stringpool.h>
#include
<gimple-ssa.h>
#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 60200
/* >= version 6.2.0 */
#include
<tree-vrp.h>
#endif
#include
<tree-ssanames.h>
#include
<tree-phinodes.h>
#include
<ssa-iterators.h>
#include
<intl.h>
#include
<intl.h>
...
@@ -257,16 +267,16 @@ struct afl_pass : gimple_opt_pass {
...
@@ -257,16 +267,16 @@ struct afl_pass : gimple_opt_pass {
/* Load __afl_prev_loc to a temporary ploc. */
/* Load __afl_prev_loc to a temporary ploc. */
if
(
blocks
==
0
)
if
(
blocks
==
0
)
ploc
=
create_tmp_var
(
TREE_TYPE
(
afl_prev_loc
),
".afl_prev_loc"
);
ploc
=
create_tmp_var
(
TREE_TYPE
(
afl_prev_loc
),
".afl_prev_loc"
);
gimple
*
load_loc
=
gimple_build_assign
(
ploc
,
afl_prev_loc
);
auto
load_loc
=
gimple_build_assign
(
ploc
,
afl_prev_loc
);
gimple_seq_add_stmt
(
&
seq
,
load_loc
);
gimple_seq_add_stmt
(
&
seq
,
load_loc
);
/* Compute the index into the map referenced by area_ptr
/* Compute the index into the map referenced by area_ptr
that we're to update: indx = (sizetype) ploc ^ bid. */
that we're to update: indx = (sizetype) ploc ^ bid. */
if
(
blocks
==
0
)
indx
=
create_tmp_var
(
TREE_TYPE
(
bidt
),
".afl_index"
);
if
(
blocks
==
0
)
indx
=
create_tmp_var
(
TREE_TYPE
(
bidt
),
".afl_index"
);
gimple
*
conv_ploc
=
auto
conv_ploc
=
gimple_build_assign
(
indx
,
fold_convert
(
TREE_TYPE
(
indx
),
ploc
));
gimple_build_assign
(
indx
,
fold_convert
(
TREE_TYPE
(
indx
),
ploc
));
gimple_seq_add_stmt
(
&
seq
,
conv_ploc
);
gimple_seq_add_stmt
(
&
seq
,
conv_ploc
);
gimple
*
xor_loc
=
gimple_build_assign
(
indx
,
BIT_XOR_EXPR
,
indx
,
bidt
);
auto
xor_loc
=
gimple_build_assign
(
indx
,
BIT_XOR_EXPR
,
indx
,
bidt
);
gimple_seq_add_stmt
(
&
seq
,
xor_loc
);
gimple_seq_add_stmt
(
&
seq
,
xor_loc
);
/* Compute the address of that map element. */
/* Compute the address of that map element. */
...
@@ -282,7 +292,7 @@ struct afl_pass : gimple_opt_pass {
...
@@ -282,7 +292,7 @@ struct afl_pass : gimple_opt_pass {
instrument any blocks, see below. */
instrument any blocks, see below. */
/* .entry = &map_ptr[.index]; */
/* .entry = &map_ptr[.index]; */
gimple
*
idx_map
=
auto
idx_map
=
gimple_build_assign
(
ntry
,
POINTER_PLUS_EXPR
,
map_ptr
,
indx
);
gimple_build_assign
(
ntry
,
POINTER_PLUS_EXPR
,
map_ptr
,
indx
);
gimple_seq_add_stmt
(
&
seq
,
idx_map
);
gimple_seq_add_stmt
(
&
seq
,
idx_map
);
...
@@ -293,7 +303,7 @@ struct afl_pass : gimple_opt_pass {
...
@@ -293,7 +303,7 @@ struct afl_pass : gimple_opt_pass {
cntr
=
create_tmp_var
(
TREE_TYPE
(
memref
),
".afl_edge_count"
);
cntr
=
create_tmp_var
(
TREE_TYPE
(
memref
),
".afl_edge_count"
);
/* Load the count from the entry. */
/* Load the count from the entry. */
gimple
*
load_cntr
=
gimple_build_assign
(
cntr
,
memref
);
auto
load_cntr
=
gimple_build_assign
(
cntr
,
memref
);
gimple_seq_add_stmt
(
&
seq
,
load_cntr
);
gimple_seq_add_stmt
(
&
seq
,
load_cntr
);
/* Prepare to add constant 1 to it. */
/* Prepare to add constant 1 to it. */
...
@@ -325,12 +335,12 @@ struct afl_pass : gimple_opt_pass {
...
@@ -325,12 +335,12 @@ struct afl_pass : gimple_opt_pass {
/* Extract the real part into count. */
/* Extract the real part into count. */
tree
cntrb
=
build1
(
REALPART_EXPR
,
TREE_TYPE
(
cntr
),
xaddc
);
tree
cntrb
=
build1
(
REALPART_EXPR
,
TREE_TYPE
(
cntr
),
xaddc
);
gimple
*
xtrct_cntr
=
gimple_build_assign
(
cntr
,
cntrb
);
auto
xtrct_cntr
=
gimple_build_assign
(
cntr
,
cntrb
);
gimple_seq_add_stmt
(
&
seq
,
xtrct_cntr
);
gimple_seq_add_stmt
(
&
seq
,
xtrct_cntr
);
/* Extract the imaginary part into xincr. */
/* Extract the imaginary part into xincr. */
tree
incrb
=
build1
(
IMAGPART_EXPR
,
TREE_TYPE
(
xincr
),
xaddc
);
tree
incrb
=
build1
(
IMAGPART_EXPR
,
TREE_TYPE
(
xincr
),
xaddc
);
gimple
*
xtrct_xincr
=
gimple_build_assign
(
xincr
,
incrb
);
auto
xtrct_xincr
=
gimple_build_assign
(
xincr
,
incrb
);
gimple_seq_add_stmt
(
&
seq
,
xtrct_xincr
);
gimple_seq_add_stmt
(
&
seq
,
xtrct_xincr
);
/* Arrange for the add below to use the overflow flag stored
/* Arrange for the add below to use the overflow flag stored
...
@@ -340,18 +350,18 @@ struct afl_pass : gimple_opt_pass {
...
@@ -340,18 +350,18 @@ struct afl_pass : gimple_opt_pass {
}
}
/* Add the increment (1 or the overflow bit) to count. */
/* Add the increment (1 or the overflow bit) to count. */
gimple
*
incr_cntr
=
gimple_build_assign
(
cntr
,
PLUS_EXPR
,
cntr
,
incrv
);
auto
incr_cntr
=
gimple_build_assign
(
cntr
,
PLUS_EXPR
,
cntr
,
incrv
);
gimple_seq_add_stmt
(
&
seq
,
incr_cntr
);
gimple_seq_add_stmt
(
&
seq
,
incr_cntr
);
/* Store count in the map entry. */
/* Store count in the map entry. */
gimple
*
store_cntr
=
gimple_build_assign
(
unshare_expr
(
memref
),
cntr
);
auto
store_cntr
=
gimple_build_assign
(
unshare_expr
(
memref
),
cntr
);
gimple_seq_add_stmt
(
&
seq
,
store_cntr
);
gimple_seq_add_stmt
(
&
seq
,
store_cntr
);
/* Store bid >> 1 in __afl_prev_loc. */
/* Store bid >> 1 in __afl_prev_loc. */
gimple
*
shift_loc
=
auto
shift_loc
=
gimple_build_assign
(
ploc
,
build_int_cst
(
TREE_TYPE
(
ploc
),
bid
>>
1
));
gimple_build_assign
(
ploc
,
build_int_cst
(
TREE_TYPE
(
ploc
),
bid
>>
1
));
gimple_seq_add_stmt
(
&
seq
,
shift_loc
);
gimple_seq_add_stmt
(
&
seq
,
shift_loc
);
gimple
*
store_loc
=
gimple_build_assign
(
afl_prev_loc
,
ploc
);
auto
store_loc
=
gimple_build_assign
(
afl_prev_loc
,
ploc
);
gimple_seq_add_stmt
(
&
seq
,
store_loc
);
gimple_seq_add_stmt
(
&
seq
,
store_loc
);
}
}
...
@@ -376,7 +386,7 @@ struct afl_pass : gimple_opt_pass {
...
@@ -376,7 +386,7 @@ struct afl_pass : gimple_opt_pass {
/* Load afl_area_ptr into map_ptr. We want to do this only
/* Load afl_area_ptr into map_ptr. We want to do this only
once per function. */
once per function. */
gimple
*
load_ptr
=
gimple_build_assign
(
map_ptr
,
map
);
auto
load_ptr
=
gimple_build_assign
(
map_ptr
,
map
);
gimple_seq_add_stmt
(
&
seq
,
load_ptr
);
gimple_seq_add_stmt
(
&
seq
,
load_ptr
);
/* Insert it in the edge to the entry block. We don't want to
/* Insert it in the edge to the entry block. We don't want to
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment