https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119372

            Bug ID: 119372
           Summary: Aarch64: Compiling with -march=armv8-a+pauth
                    -mbranch-protection=standard produces autiasp and
                    retaa in the function epilogue
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: Alfie.Richards at arm dot com
  Target Milestone: ---

When compiling a simple test with "-march=armv8-a+pauth
-mbranch-protection=standard", even though pauth is available only from v8.2-a,
extra "autiasp" instruction is wrongfully generated by gcc-14 but the issues is
fixed in gcc-15.

```
$ cat test.c
extern void callee(void);

void caller(void)
{
        callee();
        callee();
}
$ aarch64-none-linux-gnu-gcc -march=armv8-a+pauth -mbranch-protection=standard
-c test.c
$ aarch64-none-linux-gnu-objdump -d test.o 

test.o:     file format elf64-littleaarch64


Disassembly of section .text:

0000000000000000 <caller>:
   0:   d503233f        paciasp
   4:   a9bf7bfd        stp     x29, x30, [sp, #-16]!
   8:   910003fd        mov     x29, sp
   c:   94000000        bl      0 <callee>
  10:   94000000        bl      0 <callee>
  14:   d503201f        nop
  18:   a8c17bfd        ldp     x29, x30, [sp], #16
  1c:   d50323bf        autiasp
  20:   d65f0bff        retaa
```

Affects GCC 11 (when support for pauth was added) through 14 (fixed in 15)

Reply via email to