xref: /llvm-project/lldb/test/API/functionalities/unwind/aarch64_unwind_pac/main.c (revision e8f998c0c5edda3d6bad9b70e60975296df3d9fb)
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 Javaid static 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 Javaid static 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 Javaid static 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 Javaid int main(int argc, char *argv[]) {
22*e8f998c0SMuhammad Omair Javaid   func_a(); // Frame main
23*e8f998c0SMuhammad Omair Javaid   return 0;
24*e8f998c0SMuhammad Omair Javaid }
25