/* { dg-do "compile" } */ /* { dg-options "-O1" } */ /* { dg-final { check-function-bodies "**" "" } } */ /* Note: this test only checks the instructions in the function bodies, not the placement of the patch label or nops before the futncion. */ /* **f10_none: ** nop ** ret */ void __attribute__ ((target("branch-protection=none"), patchable_function_entry (1, 0))) f10_none () { } /* **f10_pac: ** hint 34 // bti c ** nop ** hint 25 // paciasp ** hint 29 // autiasp ** ret */ void __attribute__ ((target("branch-protection=bti+pac-ret+leaf"), patchable_function_entry (1, 0))) f10_pac () { } /* **f10_bti: ** hint 34 // bti c ** nop ** ret */ void __attribute__ ((target("branch-protection=bti"), patchable_function_entry (1, 0))) f10_bti () { } /* **f11_none: ** ret */ void __attribute__ ((target("branch-protection=none"), patchable_function_entry (1, 1))) f11_none () { } /* **f11_pac: ** hint 25 // paciasp ** hint 29 // autiasp ** ret */ void __attribute__ ((target("branch-protection=bti+pac-ret+leaf"), patchable_function_entry (1, 1))) f11_pac () { } /* **f11_bti: ** hint 34 // bti c ** ret */ void __attribute__ ((target("branch-protection=bti"), patchable_function_entry (1, 1))) f11_bti () { } /* **f21_none: ** nop ** ret */ void __attribute__ ((target("branch-protection=none"), patchable_function_entry (2, 1))) f21_none () { } /* **f21_pac: ** hint 34 // bti c ** nop ** hint 25 // paciasp ** hint 29 // autiasp ** ret */ void __attribute__ ((target("branch-protection=bti+pac-ret+leaf"), patchable_function_entry (2, 1))) f21_pac () { } /* **f21_bti: ** hint 34 // bti c ** nop ** ret */ void __attribute__ ((target("branch-protection=bti"), patchable_function_entry (2, 1))) f21_bti () { }