1*c06ef173SDavid CARLIER // RUN: %clangxx %s -o %t && %run %t %p
2*c06ef173SDavid CARLIER 
3*c06ef173SDavid CARLIER #include <assert.h>
4*c06ef173SDavid CARLIER #include <errno.h>
5*c06ef173SDavid CARLIER #include <unistd.h>
6*c06ef173SDavid CARLIER #include <sys/procctl.h>
7*c06ef173SDavid CARLIER 
main()8*c06ef173SDavid CARLIER int main() {
9*c06ef173SDavid CARLIER   struct procctl_reaper_status status = {0};
10*c06ef173SDavid CARLIER   int res, aslr;
11*c06ef173SDavid CARLIER   res = procctl(P_PID, getpid(), PROC_REAP_STATUS, &status);
12*c06ef173SDavid CARLIER   if (res < 0) {
13*c06ef173SDavid CARLIER     assert(errno == EPERM);
14*c06ef173SDavid CARLIER     return 0;
15*c06ef173SDavid CARLIER   }
16*c06ef173SDavid CARLIER 
17*c06ef173SDavid CARLIER   assert(status.rs_flags >= REAPER_STATUS_OWNED);
18*c06ef173SDavid CARLIER 
19*c06ef173SDavid CARLIER   res = procctl(P_PID, getpid(), PROC_ASLR_STATUS, &aslr);
20*c06ef173SDavid CARLIER   if (res < 0) {
21*c06ef173SDavid CARLIER     assert(errno == EPERM);
22*c06ef173SDavid CARLIER     return 0;
23*c06ef173SDavid CARLIER   }
24*c06ef173SDavid CARLIER 
25*c06ef173SDavid CARLIER   assert(aslr >= PROC_ASLR_FORCE_ENABLE);
26*c06ef173SDavid CARLIER 
27*c06ef173SDavid CARLIER   return 0;
28*c06ef173SDavid CARLIER }
29