[PATCH, GCC, AARCH64, 5/6] Enable BTI : Add new pass for BTI.

Richard Earnshaw Richard.Earnshaw@foss.arm.com
Thu Aug 18 10:10:35 GMT 2022



On 18/08/2022 01:00, Andrew Pinski via Gcc-patches wrote:
> On Fri, Nov 2, 2018 at 11:39 AM Sudakshina Das <Sudi.Das@arm.com> wrote:
>>
>> Hi
>>
>> This patch is part of a series that enables ARMv8.5-A in GCC and
>> adds Branch Target Identification Mechanism.
>> (https://developer.arm.com/products/architecture/cpu-architecture/a-profile/exploration-tools)
>>
>> This patch adds a new pass called "bti" which is triggered by the
>> command line argument -mbranch-protection whenever "bti" is turned on.
>>
>> The pass iterates through the instructions and adds appropriated BTI
>> instructions based on the following:
>>      * Add a new "BTI C" at the beginning of a function, unless its already
>>        protected by a "PACIASP/PACIBSP". We exempt the functions that are
>>        only called directly.
> 
> Coming back to this because the check only_called_directly_p does not
> work if the linker will insert a veneer as the compiler does not know
> about that.
> This is recorded as https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106671 .

I think the linker has to make sure to insert a veneer that ends with a 
branch in that case.

R.

> 
> Thanks,
> Andrew Pinski
> 
> 
>>      * Add a new "BTI J" for every target of an indirect jump, jump table
>>        targets, non-local goto targets or labels that might be referenced
>>        by variables, constant pools, etc (NOTE_INSN_DELETED_LABEL)
>>
>> Since we have already changed the use of indirect tail calls to only x16
>> and x17, we do not have to use "BTI JC".
>> (check patch 3/6).
>>
>> Bootstrapped and regression tested with aarch64-none-linux-gnu. Added
>> new tests.
>> Is this ok for trunk?
>>
>> Thanks
>> Sudi
>>
>> *** gcc/ChangeLog ***
>>
>> 2018-xx-xx  Sudakshina Das  <sudi.das@arm.com>
>>              Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
>>
>>          * config.gcc (aarch64*-*-*): Add aarch64-bti-insert.o.
>>          * gcc/config/aarch64/aarch64.h: Update comment for
>>          TRAMPOLINE_SIZE.
>>          * config/aarch64/aarch64.c (aarch64_asm_trampoline_template):
>>          Update if bti is enabled.
>>          * config/aarch64/aarch64-bti-insert.c: New file.
>>          * config/aarch64/aarch64-passes.def (INSERT_PASS_BEFORE): Insert
>>          bti pass.
>>          * config/aarch64/aarch64-protos.h (make_pass_insert_bti):
>>          Declare the new bti pass.
>>          * config/aarch64/aarch64.md (bti_nop): Define.
>>          * config/aarch64/t-aarch64: Add rule for aarch64-bti-insert.o.
>>
>> *** gcc/testsuite/ChangeLog ***
>>
>> 2018-xx-xx  Sudakshina Das  <sudi.das@arm.com>
>>
>>          * gcc.target/aarch64/bti-1.c: New test.
>>          * gcc.target/aarch64/bti-2.c: New test.
>>          * lib/target-supports.exp
>>          (check_effective_target_aarch64_bti_hw): Add new check for
>>          BTI hw.
>>


More information about the Gcc-patches mailing list