[PATCH, i386, Pointer Bounds Checker 32/x] Pointer Bounds Checker hooks for i386 target

Jeff Law law@redhat.com
Mon Sep 22 18:54:00 GMT 2014


On 09/19/14 10:21, Uros Bizjak wrote:

>> +static tree
>> +ix86_make_bounds_constant (HOST_WIDE_INT lb, HOST_WIDE_INT ub)
>> +{
>> +  tree low = lb ? build_minus_one_cst (pointer_sized_int_node)
>> +    : build_zero_cst (pointer_sized_int_node);
>> +  tree high = ub ? build_zero_cst (pointer_sized_int_node)
>> +    : build_minus_one_cst (pointer_sized_int_node);
>> +
>> +  /* This function is supposed to be used to create zero and
>> +     none bounds only.  */
>> +  gcc_assert (lb == 0 || lb == -1);
>> +  gcc_assert (ub == 0 || ub == -1);
>> +
>> +  return build_complex (NULL, low, high);
Needs a comment, even more so than normal given the restrictive nature 
of the input values.  One could bikeshed on using true/false vs 0/-1 
since it appears that lb/ub are really boolean values.


>> +}
>> +
>> +static int
>> +ix86_initialize_bounds (tree var, tree lb, tree ub, tree *stmts)
>> +{
>> +  tree size_ptr = build_pointer_type (size_type_node);
>> +  tree lhs, modify, var_p;
>> +
>> +  ub = build1 (BIT_NOT_EXPR, size_type_node, ub);
>> +  var_p = build1 (CONVERT_EXPR, size_ptr,
>> +                 build_fold_addr_expr (var));
>> +
>> +  lhs = build1 (INDIRECT_REF, size_type_node, var_p);
>> +  modify = build2 (MODIFY_EXPR, TREE_TYPE (lhs), lhs, lb);
>> +  append_to_statement_list (modify, stmts);
>> +
>> +  lhs = build1 (INDIRECT_REF, size_type_node,
>> +               build2 (POINTER_PLUS_EXPR, size_ptr, var_p,
>> +                       TYPE_SIZE_UNIT (size_type_node)));
>> +  modify = build2 (MODIFY_EXPR, TREE_TYPE (lhs), lhs, ub);
>> +  append_to_statement_list (modify, stmts);
>> +
>> +  return 2;
>> +}
Are we supposed to be emitting gimple or generic here?  I don't think 
this is valid gimple as we have a CONVERT_EXPR embedded in the 
INDIRECT_REF's argument.

I think it's valid generic and does the obvious thing.  I just Ilya to 
make sure what we create does get gimplified.

jeff




More information about the Gcc-patches mailing list