[PATCH, Pointer Bounds Checker, Builtins instrumentation 2/5] Instrument builtin calls

Jeff Law law@redhat.com
Fri Nov 14 07:02:00 GMT 2014


On 11/06/14 05:10, Ilya Enkovich wrote:
> Hi,
>
> This patch enables instrumentation of chosen builtin calls.
>
> Thanks,
> Ilya
> --
> 2014-11-06  Ilya Enkovich  <ilya.enkovich@intel.com>
>
> 	* ipa-chkp.c (chkp_versioning): Clone builtin functions.
> 	(chkp_instrument_normal_builtin): New.
> 	(chkp_add_bounds_to_call_stmt): Support builtin functions.
> 	(chkp_replace_function_pointer): Likewise.
>
>
>
> diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c
> index df7d425..9e2efdb 100644
> --- a/gcc/tree-chkp.c
> +++ b/gcc/tree-chkp.c
> @@ -1586,6 +1586,50 @@ chkp_find_bound_slots (const_tree type, bitmap res)
>     chkp_find_bound_slots_1 (type, res, 0);
>   }
>
> +/* Return 1 if call to FNDECL should be instrumented
> +   and 0 otherwise.  */
> +
> +static bool
> +chkp_instrument_normal_builtin (tree fndecl)
> +{
> +  switch (DECL_FUNCTION_CODE (fndecl))
> +    {
> +    case BUILT_IN_STRLEN:
> +    case BUILT_IN_STRCPY:
> +    case BUILT_IN_STRNCPY:
> +    case BUILT_IN_STPCPY:
> +    case BUILT_IN_STPNCPY:
> +    case BUILT_IN_STRCAT:
> +    case BUILT_IN_STRNCAT:
> +    case BUILT_IN_MEMCPY:
> +    case BUILT_IN_MEMPCPY:
> +    case BUILT_IN_MEMSET:
> +    case BUILT_IN_MEMMOVE:
> +    case BUILT_IN_BZERO:
> +    case BUILT_IN_STRCMP:
> +    case BUILT_IN_STRNCMP:
> +    case BUILT_IN_BCMP:
> +    case BUILT_IN_MEMCMP:
> +    case BUILT_IN_MEMCPY_CHK:
> +    case BUILT_IN_MEMPCPY_CHK:
> +    case BUILT_IN_MEMMOVE_CHK:
> +    case BUILT_IN_MEMSET_CHK:
> +    case BUILT_IN_STRCPY_CHK:
> +    case BUILT_IN_STRNCPY_CHK:
> +    case BUILT_IN_STPCPY_CHK:
> +    case BUILT_IN_STPNCPY_CHK:
> +    case BUILT_IN_STRCAT_CHK:
> +    case BUILT_IN_STRNCAT_CHK:
> +    case BUILT_IN_MALLOC:
> +    case BUILT_IN_CALLOC:
> +    case BUILT_IN_REALLOC:
> +      return 1;
> +
> +    default:
> +      return 0;
> +    }
> +}
OK, this gates creation of the additional builtin and ensures we don't 
try to create an instrumention clone for anything outside the list above.


> @@ -1686,11 +1730,18 @@ chkp_add_bounds_to_call_stmt (gimple_stmt_iterator *gsi)
>     if (!flag_chkp_instrument_calls)
>       return;
>
> -  /* Avoid instrumented builtin functions for now.  Due to IPA
> -     it also means we have to avoid instrumentation of indirect
> -     calls.  */
> -  if (fndecl && DECL_BUILT_IN_CLASS (fndecl) != NOT_BUILT_IN)
> -    return;
> +  /* We instrument only some subset of builtins.  We also instrument
> +     builtin calls to be inlined.  */
> +  if (fndecl
> +      && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
> +      && !chkp_instrument_normal_builtin (fndecl))
> +    {
> +      struct cgraph_node *clone = chkp_maybe_create_clone (fndecl);
> +      if (!clone
> +	  || !gimple_has_body_p (clone->decl)
> +	  || !lookup_attribute ("always_inline", DECL_ATTRIBUTES (fndecl)))
> +	return;
> +    }
Is that outer conditional right?  If we have a fndecl and it's a normal 
builtin, but it's _not_ one of hte builtins we're instrumenting, then 
call chkp_maybe_create_clone?


Will reserve OK/Not OK decision until after you respond to that issue.

jeff



More information about the Gcc-patches mailing list