On Thu, Jul 28, 2011 at 1:03 PM, Uros Bizjak <ubiz...@gmail.com> wrote:
> On Thu, Jul 28, 2011 at 9:03 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
>
>>>> This patch adds x32 support to UNSPEC_SP_XXX patterns.  OK for trunk?
>>>
>>> http://gcc.gnu.org/contribute.html#patches
>>>
>>
>> Sorry. I should have mentioned testcase in:
>>
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47766
>>
>> Actually, they are in gcc testsuite.  I noticed them when
>> I run gcc testsuite on x32.
>
> This looks like a middle-end problem to me.
>
> According to the documentation:
>
> --quote--
> `stack_protect_set'
>     This pattern, if defined, moves a `Pmode' value from the memory in
>     operand 1 to the memory in operand 0 without leaving the value in
>     a register afterward.  This is to avoid leaking the value some
>     place that an attacker might use to rewrite the stack guard slot
>     after having clobbered it.
>
>     If this pattern is not defined, then a plain move pattern is
>     generated.
>
> `stack_protect_test'
>     This pattern, if defined, compares a `Pmode' value from the memory
>     in operand 1 with the memory in operand 0 without leaving the
>     value in a register afterward and branches to operand 2 if the
>     values weren't equal.
>
>     If this pattern is not defined, then a plain compare pattern and
>     conditional branch pattern is used.
> --quote--
>
> According to the documentation, x86 patterns are correct. However,
> middle-end fails to extend ptr_mode value to Pmode, and in function.c,
> stack_protect_prologue/stack_protect_epilogue, we already have
> ptr_mode (SImode) operand:
>
> (mem/v/f/c/i:SI (plus:DI (reg/f:DI 54 virtual-stack-vars)
>        (const_int -4 [0xfffffffffffffffc])) [2 D.2704+0 S4 A32])
>
> (mem/v/f/c/i:SI (symbol_ref:DI ("__stack_chk_guard") [flags 0x40]
> <var_decl 0x7ffc35aa0be0 __stack_chk_guard>) [2 __stack_chk_guard+0 S4
> A32])
>
> An opinion of a RTL maintainer (CC'd) is needed here. Target
> definition is OK in its current form.

When -fstack-protector  was added, there are

tree
default_stack_protect_guard (void)
{
  tree t = stack_chk_guard_decl;

  if (t == NULL)
    {
      rtx x;

      t = build_decl (UNKNOWN_LOCATION,
                      VAR_DECL, get_identifier ("__stack_chk_guard"),
                      ptr_type_node);
                      ^^^^^^^^^^^^^^^^^

I think ptr_mode is intended and Pmode is just a typo.  Jakub, Richard,
what are your thoughts on this?

Thanks.


-- 
H.J.

Reply via email to