Skip to content

Commit

Permalink
PR lto/69254
Browse files Browse the repository at this point in the history
	* sanitizer.def: Add BEGIN_SANITIZER_BUILTINS and
	END_SANITIZER_BUILTINS markers using DEF_BUILTIN_STUB.
	* asan.c (DEF_BUILTIN_STUB): Temporarily define.
	* tree-streamer-in.c: Include asan.h.
	(streamer_get_builtin_tree): For builtins in sanitizer
	range call initialize_sanitizer_builtins and retry.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232891 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
jakub committed Jan 27, 2016
1 parent d7993d8 commit ee49ca6
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 6 deletions.
10 changes: 10 additions & 0 deletions gcc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
2016-01-27 Jakub Jelinek <jakub@redhat.com>

PR lto/69254
* sanitizer.def: Add BEGIN_SANITIZER_BUILTINS and
END_SANITIZER_BUILTINS markers using DEF_BUILTIN_STUB.
* asan.c (DEF_BUILTIN_STUB): Temporarily define.
* tree-streamer-in.c: Include asan.h.
(streamer_get_builtin_tree): For builtins in sanitizer
range call initialize_sanitizer_builtins and retry.

2016-01-27 Ian Lance Taylor <iant@google.com>

* common.opt (fkeep-gc-roots-live): New undocumented option.
Expand Down
3 changes: 3 additions & 0 deletions gcc/asan.c
Original file line number Diff line number Diff line change
Expand Up @@ -2370,6 +2370,8 @@ initialize_sanitizer_builtins (void)
/* ECF_COLD missing */ ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST
#undef ATTR_PURE_NOTHROW_LEAF_LIST
#define ATTR_PURE_NOTHROW_LEAF_LIST ECF_PURE | ATTR_NOTHROW_LEAF_LIST
#undef DEF_BUILTIN_STUB
#define DEF_BUILTIN_STUB(ENUM, NAME)
#undef DEF_SANITIZER_BUILTIN
#define DEF_SANITIZER_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
decl = add_builtin_function ("__builtin_" NAME, TYPE, ENUM, \
Expand All @@ -2389,6 +2391,7 @@ initialize_sanitizer_builtins (void)
ATTR_PURE_NOTHROW_LEAF_LIST)

#undef DEF_SANITIZER_BUILTIN
#undef DEF_BUILTIN_STUB
}

/* Called via htab_traverse. Count number of emitted
Expand Down
7 changes: 7 additions & 0 deletions gcc/sanitizer.def
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,16 @@ along with GCC; see the file COPYING3. If not see

/* Before including this file, you should define a macro:

DEF_BUILTIN_STUB(ENUM, NAME)
DEF_SANITIZER_BUILTIN (ENUM, NAME, TYPE, ATTRS)

See builtins.def for details.
The builtins are created by the C-family of FEs in c-family/c-common.c,
for other FEs by asan.c. */

/* This has to come before all the sanitizer builtins. */
DEF_BUILTIN_STUB(BEGIN_SANITIZER_BUILTINS, (const char *)0)

/* Address Sanitizer */
DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_INIT, "__asan_init",
BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
Expand Down Expand Up @@ -515,3 +519,6 @@ DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DYNAMIC_TYPE_CACHE_MISS_ABORT,
DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_PC,
"__sanitizer_cov_trace_pc",
BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)

/* This has to come after all the sanitizer builtins. */
DEF_BUILTIN_STUB(END_SANITIZER_BUILTINS, (const char *)0)
21 changes: 15 additions & 6 deletions gcc/tree-streamer-in.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "builtins.h"
#include "ipa-chkp.h"
#include "gomp-constants.h"
#include "asan.h"


/* Read a STRING_CST from the string table in DATA_IN using input
Expand Down Expand Up @@ -1136,13 +1137,21 @@ streamer_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in)
fatal_error (input_location,
"machine independent builtin code out of range");
result = builtin_decl_explicit (fcode);
if (!result
&& fcode > BEGIN_CHKP_BUILTINS
&& fcode < END_CHKP_BUILTINS)
if (!result)
{
fcode = (enum built_in_function) (fcode - BEGIN_CHKP_BUILTINS - 1);
result = builtin_decl_explicit (fcode);
result = chkp_maybe_clone_builtin_fndecl (result);
if (fcode > BEGIN_CHKP_BUILTINS && fcode < END_CHKP_BUILTINS)
{
fcode = (enum built_in_function)
(fcode - BEGIN_CHKP_BUILTINS - 1);
result = builtin_decl_explicit (fcode);
result = chkp_maybe_clone_builtin_fndecl (result);
}
else if (fcode > BEGIN_SANITIZER_BUILTINS
&& fcode < END_SANITIZER_BUILTINS)
{
initialize_sanitizer_builtins ();
result = builtin_decl_explicit (fcode);
}
}
gcc_assert (result);
}
Expand Down

0 comments on commit ee49ca6

Please sign in to comment.