1*e8f998c0SMuhammad Omair Javaid // This program makes a multi tier nested function call to test AArch64 2*e8f998c0SMuhammad Omair Javaid // Pointer Authentication feature. 3*e8f998c0SMuhammad Omair Javaid 4*e8f998c0SMuhammad Omair Javaid // To enable PAC return address signing compile with following clang arguments: 5*e8f998c0SMuhammad Omair Javaid // -march=armv8.3-a -mbranch-protection=pac-ret+leaf 6*e8f998c0SMuhammad Omair Javaid 7*e8f998c0SMuhammad Omair Javaid #include <stdlib.h> 8*e8f998c0SMuhammad Omair Javaid func_c(void)9*e8f998c0SMuhammad Omair Javaidstatic void __attribute__((noinline)) func_c(void) { 10*e8f998c0SMuhammad Omair Javaid exit(0); // Frame func_c 11*e8f998c0SMuhammad Omair Javaid } 12*e8f998c0SMuhammad Omair Javaid func_b(void)13*e8f998c0SMuhammad Omair Javaidstatic void __attribute__((noinline)) func_b(void) { 14*e8f998c0SMuhammad Omair Javaid func_c(); // Frame func_b 15*e8f998c0SMuhammad Omair Javaid } 16*e8f998c0SMuhammad Omair Javaid func_a(void)17*e8f998c0SMuhammad Omair Javaidstatic void __attribute__((noinline)) func_a(void) { 18*e8f998c0SMuhammad Omair Javaid func_b(); // Frame func_a 19*e8f998c0SMuhammad Omair Javaid } 20*e8f998c0SMuhammad Omair Javaid main(int argc,char * argv[])21*e8f998c0SMuhammad Omair Javaidint main(int argc, char *argv[]) { 22*e8f998c0SMuhammad Omair Javaid func_a(); // Frame main 23*e8f998c0SMuhammad Omair Javaid return 0; 24*e8f998c0SMuhammad Omair Javaid } 25