[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