public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Earnshaw <Richard.Earnshaw@foss.arm.com>
To: Andrea Corallo <andrea.corallo@arm.com>
Cc: Kyrylo Tkachov <Kyrylo.Tkachov@arm.com>,
	Richard Earnshaw <Richard.Earnshaw@arm.com>, nd <nd@arm.com>,
	Andrea Corallo via Gcc-patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH 12/15 V4] arm: implement bti injection
Date: Wed, 14 Dec 2022 17:03:19 +0000	[thread overview]
Message-ID: <aa102c59-1691-875b-e919-d30163418285@foss.arm.com> (raw)
In-Reply-To: <7db3982c-cd42-023f-0dd1-0eb7b7dbfb20@foss.arm.com>



On 14/12/2022 17:00, Richard Earnshaw via Gcc-patches wrote:
> 
> 
> On 14/12/2022 16:40, Andrea Corallo via Gcc-patches wrote:
>> Hi Richard,
>>
>> thanks for reviewing.
>>
>> Richard Earnshaw <Richard.Earnshaw@foss.arm.com> writes:
>>
>>> On 28/10/2022 17:40, Andrea Corallo via Gcc-patches wrote:
>>>> Hi all,
>>>> please find attached the third iteration of this patch addresing
>>>> review
>>>> comments.
>>>> Thanks
>>>>     Andrea
>>>>
>>>
>>> @@ -23374,12 +23374,6 @@ output_probe_stack_range (rtx reg1, rtx reg2)
>>>     return "";
>>>   }
>>>
>>> -static bool
>>> -aarch_bti_enabled ()
>>> -{
>>> -  return false;
>>> -}
>>> -
>>>   /* Generate the prologue instructions for entry into an ARM or Thumb-2
>>>      function.  */
>>>   void
>>> @@ -32992,6 +32986,61 @@ arm_current_function_pac_enabled_p (void)
>>>                 && !crtl->is_leaf));
>>>   }
>>>
>>> +/* Return TRUE if Branch Target Identification Mechanism is 
>>> enabled.  */
>>> +bool
>>> +aarch_bti_enabled (void)
>>> +{
>>> +  return aarch_enable_bti == 1;
>>> +}
>>>
>>> See comment in earlier patch about the location of this function
>>> moving.   Can aarch_enable_bti take values other than 0 and 1?
>>
>> Yes default is 2.
> 
> It shouldn't be by this point, because, hopefully you've gone through 
> the equivalent of this hunk (from aarch64) somewhere in 
> arm_override_options:
> 
> 
>     if (aarch_enable_bti == 2)
>       {
>   #ifdef TARGET_ENABLE_BTI
>         aarch_enable_bti = 1;
>   #else
>         aarch_enable_bti = 0;
>   #endif
>       }
> 
> And after this point the '2' should never be seen again.  We use this 
> trick to permit the user to force a default that differs from the 
> configuration.
> 
> However, I don't see a hunk to do this in patch 3, so perhaps that needs 
> updating to fix this.

I've just remembered that the above is to support a configure-time 
option of the compiler to enable branch protection.  But perhaps we 
don't want to have that in AArch32, in which case it would be better not 
to have the default be 2 anyway, just default to off (0).

R.

> 
> 
> 
>> [...]
>>
>>> +  return GET_CODE (pat) == UNSPEC_VOLATILE && XINT (pat, 1) ==
>>> UNSPEC_BTI_NOP;
>>>
>>> I'm not sure where this crept in, but UNSPEC and UNSPEC_VOLATILE have
>>> separate enums in the backend, so UNSPEC_BIT_NOP should really be
>>> VUNSPEC_BTI_NOP and defined in the enum "unspecv".
>>
>> Done
>>
>>> +aarch_pac_insn_p (rtx x)
>>> +{
>>> +  if (!x || !INSN_P (x))
>>> +    return false;
>>> +
>>> +  rtx pat = PATTERN (x);
>>> +
>>> +  if (GET_CODE (pat) == SET)
>>> +    {
>>> +      rtx tmp = XEXP (pat, 1);
>>> +      if (tmp
>>> +      && GET_CODE (tmp) == UNSPEC
>>> +      && (XINT (tmp, 1) == UNSPEC_PAC_NOP
>>> +          || XINT (tmp, 1) == UNSPEC_PACBTI_NOP))
>>> +    return true;
>>> +    }
>>> +
>>>
>>> This will also need updating (see review on earlier patch) because
>>> PACBTI needs to be unspec_volatile, while PAC doesn't.
>>
>> Done
>>
>>> +/* The following two functions are for code compatibility with aarch64
>>> +   code, this even if in arm we have only one bti instruction.  */
>>> +
>>>
>>> I'd just write
>>>   /* Target specific mapping for aarch_gen_bti_c and
>>>   aarch_gen_bti_j. For Arm, both of these map to a simple BTI
>>> instruction.  */
>>
>> Done
>>
>>>
>>> @@ -162,6 +162,7 @@ (define_c_enum "unspec" [
>>>     UNSPEC_PAC_NOP    ; Represents PAC signing LR
>>>     UNSPEC_PACBTI_NOP    ; Represents PAC signing LR + valid landing pad
>>>     UNSPEC_AUT_NOP    ; Represents PAC verifying LR
>>> +  UNSPEC_BTI_NOP    ; Represent BTI
>>>   ])
>>>
>>> BTI is an unspec volatile, so this should be in the "vunspec" enum and
>>> renamed accordingly (see above).
>>
>> Done.
>>
>> Please find attached the updated version of this patch.
>>
>> BR
>>
>>    Andrea
>>
> 
> Apart from that, this is OK.
> 
> R.

  reply	other threads:[~2022-12-14 17:03 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-12 14:26 [PATCH 0/15] arm: Enables return address verification and branch target identification on Cortex-M Andrea Corallo
2022-08-12 15:14 ` [PATCH 1/15] arm: Make mbranch-protection opts parsing common to AArch32/64 Andrea Corallo
2022-12-22 17:04   ` [PATCH 1/15 V2] " Andrea Corallo
2023-01-11 10:48     ` Richard Earnshaw
2022-08-12 15:15 ` [PATCH 2/15] arm: Add Armv8.1-M Mainline target feature +pacbti Andrea Corallo
2022-08-12 15:21 ` [PATCH 3/15] arm: Add option -mbranch-protection Andrea Corallo
2022-08-12 15:22 ` [PATCH 4/15] arm: Add testsuite library support for PACBTI target Andrea Corallo
2022-08-12 15:26 ` [PATCH 5/15] arm: Implement target feature macros for PACBTI Andrea Corallo
2022-08-12 15:29 ` [PATCH 6/15] arm: Add pointer authentication for stack-unwinding runtime Andrea Corallo
2022-08-12 15:30 ` [PATCH 7/15] arm: Emit build attributes for PACBTI target feature Andrea Corallo
2022-09-05 16:53   ` Andrea Corallo
2022-10-20 14:47   ` Kyrylo Tkachov
2022-10-20 15:15     ` Richard Earnshaw
2022-10-21 12:19   ` Richard Earnshaw
2022-08-12 15:33 ` [PATCH 8/15] arm: Introduce multilibs " Andrea Corallo
2022-08-12 15:34 ` [PATCH 9/15] arm: Set again stack pointer as CFA reg when popping if necessary Andrea Corallo
2022-09-05 16:52   ` Andrea Corallo
2022-09-27  9:03   ` Kyrylo Tkachov
2022-09-27 10:05     ` Andrea Corallo
2022-09-27 15:24       ` Kyrylo Tkachov
2022-10-21 12:30         ` Richard Earnshaw
2022-10-26  8:49           ` Andrea Corallo
2022-11-08 14:57             ` Richard Earnshaw
2023-01-09 14:58             ` Andrea Corallo
2023-01-09 15:57               ` Richard Earnshaw
2023-01-09 16:48               ` Richard Earnshaw
2023-01-09 17:22                 ` Richard Earnshaw
2023-01-11  9:55                   ` Andrea Corallo
2022-08-12 15:36 ` [PATCH 10/15] arm: Implement cortex-M return signing address codegen Andrea Corallo
2022-09-05 16:55   ` Andrea Corallo
2022-09-14 14:20   ` [PATCH 10/15 V2] " Andrea Corallo
2022-10-21 12:58     ` Richard Earnshaw
2022-10-26 15:48       ` Andrea Corallo
2022-10-28 16:34         ` [PATCH 10/15 V3] " Andrea Corallo
2022-11-07  8:57           ` [PATCH 10/15 V4] " Andrea Corallo
2022-12-05 16:38             ` Richard Earnshaw
2022-12-09 14:16               ` [PATCH 10/15 V5] " Andrea Corallo
2022-12-12 10:53                 ` Richard Earnshaw
2022-12-14 16:35                   ` [PATCH 10/15 V6] " Andrea Corallo
2022-12-14 16:45                     ` Richard Earnshaw
2023-01-11  9:58                       ` [PATCH 10/15 V7] " Andrea Corallo
2023-01-11 10:39                         ` Richard Earnshaw
2022-08-12 15:40 ` [PATCH 11/15] aarch64: Make bti pass generic so it can be used by the arm backend Andrea Corallo
2022-09-05 16:56   ` Andrea Corallo
2022-09-27  9:10   ` Kyrylo Tkachov
2022-08-12 15:41 ` [PATCH 12/15] arm: implement bti injection Andrea Corallo
2022-09-05 16:56   ` Andrea Corallo
2022-09-27  9:18   ` Kyrylo Tkachov
2022-09-29 15:45     ` [PATCH 12/15 V2] " Andrea Corallo
2022-10-20 14:56       ` Kyrylo Tkachov
2022-10-28 16:40         ` [PATCH 12/15 V3] " Andrea Corallo
2022-12-05 17:02           ` Richard Earnshaw
2022-12-14 16:40             ` [PATCH 12/15 V4] " Andrea Corallo
2022-12-14 17:00               ` Richard Earnshaw
2022-12-14 17:03                 ` Richard Earnshaw [this message]
2022-12-22 17:13                   ` [PATCH 12/15 V5] " Andrea Corallo
2023-01-11 15:08                     ` Richard Earnshaw
2022-08-12 16:44 ` [PATCH 0/15] arm: Enables return address verification and branch target identification on Cortex-M Andrea Corallo
2022-08-12 17:10 ` [PATCH 13/15] arm: Add pacbti related multilib support for armv8.1-m.main Srinath Parvathaneni
2022-10-21 13:00   ` Richard Earnshaw
2022-09-21  8:07 ` [PING][PATCH 0/15] arm: Enables return address verification and branch target identification on Cortex-M Andrea Corallo
2022-10-21 13:01   ` Richard Earnshaw
2022-10-21 13:32     ` Andrea Corallo
2022-12-05 14:10   ` Andrea Corallo
2022-12-05 14:19     ` Kyrylo Tkachov
2023-01-23 10:50   ` [PATCH " Andrea Corallo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aa102c59-1691-875b-e919-d30163418285@foss.arm.com \
    --to=richard.earnshaw@foss.arm.com \
    --cc=Kyrylo.Tkachov@arm.com \
    --cc=Richard.Earnshaw@arm.com \
    --cc=andrea.corallo@arm.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=nd@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).