xref: /aosp_15_r20/external/sandboxed-api/sandboxed_api/sandbox2/testcases/symbolize_lib.cc (revision ec63e07ab9515d95e79c211197c445ef84cefa6a)
1 #include "sandboxed_api/sandbox2/testcases/symbolize_lib.h"
2 
3 #include "absl/base/attributes.h"
4 
5 ABSL_ATTRIBUTE_NOINLINE
6 ABSL_ATTRIBUTE_NO_TAIL_CALL
7 void LibRecurseA(void (*cb)(int), int data, int n);
8 
9 ABSL_ATTRIBUTE_NOINLINE
10 ABSL_ATTRIBUTE_NO_TAIL_CALL
LibCallCallback(void (* cb)(int),int data)11 void LibCallCallback(void (*cb)(int), int data) { cb(data); }
12 
13 ABSL_ATTRIBUTE_NOINLINE
14 ABSL_ATTRIBUTE_NO_TAIL_CALL
LibRecurseB(void (* cb)(int),int data,int n)15 void LibRecurseB(void (*cb)(int), int data, int n) {
16   if (n > 1) {
17     return LibRecurseA(cb, data, n - 1);
18   }
19   return LibCallCallback(cb, data);
20 }
21 
LibRecurseA(void (* cb)(int),int data,int n)22 void LibRecurseA(void (*cb)(int), int data, int n) {
23   if (n > 1) {
24     return LibRecurseB(cb, data, n - 1);
25   }
26   return LibCallCallback(cb, data);
27 }
28 
LibRecurse(void (* cb)(int),int data,int n)29 void LibRecurse(void (*cb)(int), int data, int n) { LibRecurseA(cb, data, n); }
30