Make ARMv8-M attribute cmse_nonsecure_call work in Ada
commit061839c65de7d04589ced3a4e55ef391e7c66b71
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 21 Nov 2022 06:57:25 +0000 (21 07:57 +0100)
committerEric Botcazou <ebotcazou@adacore.com>
Mon, 21 Nov 2022 08:48:42 +0000 (21 09:48 +0100)
tree4bf6febe0cc0a8a5522975ef0b5dedca4776fc14
parent454a823dc980bf3631b13670765f1a3eb66e499a
Make ARMv8-M attribute cmse_nonsecure_call work in Ada

Unlike most other machine attributes, this one does not work in Ada because,
while it applies to pointer-to-function types, it is explicitly marked as
requiring declarations in the implementation.

Now, in Ada, machine attributes are specified like this:

  type Non_Secure is access procedure;
  pragma Machine_Attribute (Non_Secure, "cmse_nonsecure_call");

i.e. not attached to the declaration of Non_Secure.

The change extends the support to Ada by also accepting pointer-to-function
types in the handler.

gcc/
* config/arm/arm.cc (arm_attribute_table) <cmse_nonsecure_call>:
Change decl_required field to false.
(arm_handle_cmse_nonsecure_call): Deal with a TYPE node.

gcc/testsuite/
* gnat.dg/machine_attr2.ads, gnat.dg/machine_attr2.adb: New test.
gcc/config/arm/arm.cc
gcc/testsuite/gnat.dg/machine_attr2.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/machine_attr2.ads [new file with mode: 0644]