This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, MPX, 2/X] Pointers Checker [10/25] Calls copy and verification
- From: Ilya Enkovich <enkovich dot gnu at gmail dot com>
- To: Richard Biener <richard dot guenther at gmail dot com>
- Cc: Jeff Law <law at redhat dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 8 Nov 2013 14:03:42 +0400
- Subject: Re: [PATCH, MPX, 2/X] Pointers Checker [10/25] Calls copy and verification
- Authentication-results: sourceware.org; auth=none
- References: <20131031092436 dot GF54327 at msticlxl57 dot ims dot intel dot com> <CAFiYyc0uNbo8xPRQYy6mt+tAe0qH8VZs0=FcGSH2cPr+EmYw0w at mail dot gmail dot com> <CAMbmDYZv=OKdqq0nzpmRw4nCWGJd=d1cYLgZVVBBNoFTCwc_0Q at mail dot gmail dot com> <20131107115019 dot GJ54327 at msticlxl57 dot ims dot intel dot com> <527BE22A dot 8060404 at redhat dot com> <CAFiYyc3Jra0d4XAm=CWLW8ysU7VkLUr6-ZYVAfSM_ObqVFKosg at mail dot gmail dot com>
2013/11/8 Richard Biener <richard.guenther@gmail.com>:
> On Thu, Nov 7, 2013 at 7:55 PM, Jeff Law <law@redhat.com> wrote:
>> On 11/07/13 04:50, Ilya Enkovich wrote:
>>>
>>> Hi,
>>>
>>> Here is an updated patch version.
>>
>> I think this needs to hold until we have a consensus on what the parameter
>> passing looks like for bounded pointers.
>
> I still think the best thing to do on GIMPLE is
>
> arg_2 = __builtin_ia32_bnd_arg (arg_1(D));
> foo (arg_2);
>
> that is, make the parameter an implicit pair of {value, bound} where
> the bound is determined by the value going through a bound association
> builtin. No extra explicit argument to the calls so arguments match
> the fndecl and fntype. All the complexity is defered to the expander
> which can trivially lookup bound arguments via the SSA def (I suppose
> it does that anyway now for getting at the explicit bound argument now).
>
> As far as I can see (well, think), all currently passed bound arguments
> are the return value of such builtin already.
All bounds are result of different builtin calls. Small example:
int *global_p;
void foo (int *p)
{
int buf[10];
bar (p, buf, global_p);
}
It is translated into:
__bound_tmp.1_7 = __builtin_ia32_bndmk (&buf, 40);
__bound_tmp.1_6 = __builtin_ia32_arg_bnd (p_3(D)(ab));
global_p.0_2 = global_p;
__bound_tmp.1_8 = __builtin_ia32_bndldx (&global_p, global_p.0_2);
bar (p_3(D)(ab), __bound_tmp.1_6, &buf, __bound_tmp.1_7,
global_p.0_2, __bound_tmp.1_8);
Bounds binding via calls as you suggest may be done as following:
__bound_tmp.1_7 = __builtin_ia32_bndmk (&buf, 40);
__bound_tmp.1_6 = __builtin_ia32_arg_bnd (p_3(D)(ab));
global_p.0_2 = global_p;
__bound_tmp.1_8 = __builtin_ia32_bndldx (&global_p, global_p.0_2);
_9 = __builtin_bind_bounds (p_3(D)(ab), __bound_tmp.1_6);
_10 = __builtin_bind_bounds (&buf, __bound_tmp.1_7);
_11 = __builtin_bind_bounds (global_p.0_2, __bound_tmp.1_8);
bar (_9, _10, _11);
Is it close to what you propose?
Ilya
>
> Richard.
>
>
>
>> Jeff
- References:
- Re: [PATCH, MPX, 2/X] Pointers Checker [10/25] Calls copy and verification
- Re: [PATCH, MPX, 2/X] Pointers Checker [10/25] Calls copy and verification
- Re: [PATCH, MPX, 2/X] Pointers Checker [10/25] Calls copy and verification
- Re: [PATCH, MPX, 2/X] Pointers Checker [10/25] Calls copy and verification
- Re: [PATCH, MPX, 2/X] Pointers Checker [10/25] Calls copy and verification