mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 00:01:21 +08:00
ipa-chkp.h (chkp_wrap_function): New.
gcc/ * ipa-chkp.h (chkp_wrap_function): New. * ipa-chkp.c (chkp_wrap_function): Remove 'static'. (chkp_wrap_function_name): New. (chkp_build_instrumented_fndecl): Use chkp_wrap_function_name to get wrapper name. * lto-cgraph.c: Include ipa-chkp.h. (input_cgraph_1): Avoid alias chain for wrappers. gcc/testsuite/ * gcc.dg/lto/chkp-wrap-asm-name_0.c: New. From-SVN: r223216
This commit is contained in:
parent
2c1f37b57a
commit
2662516181
@ -1,3 +1,13 @@
|
||||
2015-05-15 Ilya Enkovich <ilya.enkovich@intel.com>
|
||||
|
||||
* ipa-chkp.h (chkp_wrap_function): New.
|
||||
* ipa-chkp.c (chkp_wrap_function): Remove 'static'.
|
||||
(chkp_wrap_function_name): New.
|
||||
(chkp_build_instrumented_fndecl): Use chkp_wrap_function_name
|
||||
to get wrapper name.
|
||||
* lto-cgraph.c: Include ipa-chkp.h.
|
||||
(input_cgraph_1): Avoid alias chain for wrappers.
|
||||
|
||||
2015-05-15 Ilya Enkovich <enkovich.gnu@gmail.com>
|
||||
|
||||
PR middle-end/66134
|
||||
|
@ -104,7 +104,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
|
||||
/* Return 1 calls to FNDECL should be replaced with
|
||||
a call to wrapper function. */
|
||||
static bool
|
||||
bool
|
||||
chkp_wrap_function (tree fndecl)
|
||||
{
|
||||
if (!flag_chkp_use_wrappers)
|
||||
@ -139,6 +139,51 @@ chkp_wrap_function (tree fndecl)
|
||||
return false;
|
||||
}
|
||||
|
||||
static const char *
|
||||
chkp_wrap_function_name (tree fndecl)
|
||||
{
|
||||
gcc_assert (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL);
|
||||
|
||||
switch (DECL_FUNCTION_CODE (fndecl))
|
||||
{
|
||||
case BUILT_IN_STRLEN:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "strlen";
|
||||
case BUILT_IN_STRCPY:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "strcpy";
|
||||
case BUILT_IN_STRNCPY:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "strncpy";
|
||||
case BUILT_IN_STPCPY:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "stpcpy";
|
||||
case BUILT_IN_STPNCPY:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "stpncpy";
|
||||
case BUILT_IN_STRCAT:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "strcat";
|
||||
case BUILT_IN_STRNCAT:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "strncat";
|
||||
case BUILT_IN_MEMCPY:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "memcpy";
|
||||
case BUILT_IN_MEMPCPY:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "mempcpy";
|
||||
case BUILT_IN_MEMSET:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "memset";
|
||||
case BUILT_IN_MEMMOVE:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "memmove";
|
||||
case BUILT_IN_BZERO:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "bzero";
|
||||
case BUILT_IN_MALLOC:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "malloc";
|
||||
case BUILT_IN_CALLOC:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "calloc";
|
||||
case BUILT_IN_REALLOC:
|
||||
return CHKP_WRAPPER_SYMBOL_PREFIX "realloc";
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
/* Build a clone of FNDECL with a modified name. */
|
||||
|
||||
static tree
|
||||
@ -164,9 +209,8 @@ chkp_build_instrumented_fndecl (tree fndecl)
|
||||
instrumented version. */
|
||||
if (chkp_wrap_function(fndecl))
|
||||
{
|
||||
s = CHKP_WRAPPER_SYMBOL_PREFIX;
|
||||
s += IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl));
|
||||
new_name = get_identifier (s.c_str ());
|
||||
new_name = get_identifier (chkp_wrap_function_name (fndecl));
|
||||
DECL_VISIBILITY (new_decl) = VISIBILITY_DEFAULT;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -24,5 +24,6 @@ extern tree chkp_copy_function_type_adding_bounds (tree orig_type);
|
||||
extern tree chkp_maybe_clone_builtin_fndecl (tree fndecl);
|
||||
extern cgraph_node *chkp_maybe_create_clone (tree fndecl);
|
||||
extern bool chkp_instrumentable_p (tree fndecl);
|
||||
extern bool chkp_wrap_function (tree fndecl);
|
||||
|
||||
#endif /* GCC_IPA_CHKP_H */
|
||||
|
@ -80,6 +80,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
#include "pass_manager.h"
|
||||
#include "ipa-utils.h"
|
||||
#include "omp-low.h"
|
||||
#include "ipa-chkp.h"
|
||||
|
||||
/* True when asm nodes has been output. */
|
||||
bool asm_nodes_output = false;
|
||||
@ -1616,10 +1617,13 @@ input_cgraph_1 (struct lto_file_decl_data *file_data,
|
||||
cnode->instrumented_version->instrumented_version = cnode;
|
||||
}
|
||||
|
||||
/* Restore decl names reference. */
|
||||
IDENTIFIER_TRANSPARENT_ALIAS (DECL_ASSEMBLER_NAME (cnode->decl)) = 1;
|
||||
TREE_CHAIN (DECL_ASSEMBLER_NAME (cnode->decl))
|
||||
= DECL_ASSEMBLER_NAME (cnode->orig_decl);
|
||||
/* Restore decl names reference except for wrapper functions. */
|
||||
if (!chkp_wrap_function (cnode->orig_decl))
|
||||
{
|
||||
tree name = DECL_ASSEMBLER_NAME (cnode->decl);
|
||||
IDENTIFIER_TRANSPARENT_ALIAS (name) = 1;
|
||||
TREE_CHAIN (name) = DECL_ASSEMBLER_NAME (cnode->orig_decl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
2015-05-15 Ilya Enkovich <ilya.enkovich@intel.com>
|
||||
|
||||
* gcc.dg/lto/chkp-wrap-asm-name_0.c: New.
|
||||
|
||||
2015-05-15 Ilya Enkovich <enkovich.gnu@gmail.com>
|
||||
|
||||
PR middle-end/66134
|
||||
|
20
gcc/testsuite/gcc.dg/lto/chkp-wrap-asm-name_0.c
Normal file
20
gcc/testsuite/gcc.dg/lto/chkp-wrap-asm-name_0.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* { dg-lto-do link } */
|
||||
/* { dg-require-effective-target mpx } */
|
||||
/* { dg-lto-options { { -O2 -flto -fcheck-pointer-bounds -mmpx } } } */
|
||||
|
||||
typedef long unsigned int size_t;
|
||||
|
||||
extern size_t strlen (const char *);
|
||||
extern __typeof (strlen) strlen __asm__ ("" "__hidden_strlen") __attribute__ ((visibility ("hidden")));
|
||||
|
||||
size_t
|
||||
test1 (const char *p) { return strlen (p); }
|
||||
|
||||
size_t
|
||||
test2 (const char *p) { return __builtin_strlen (p); }
|
||||
|
||||
int
|
||||
main (int argc, const char **argv)
|
||||
{
|
||||
return test1 (argv[0]) - test2 (argv[0]);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user