// RUN: %clangxx %s -o %t && %run %t %p

#include <assert.h>
#include <errno.h>
#include <stdint.h>
#include <sys/mman.h>
#include <sys/prctl.h>

#ifndef PR_SCHED_CORE
#  define PR_SCHED_CORE 62
#endif

#ifndef PR_SCHED_CORE_CREATE
#  define PR_SCHED_CORE_CREATE 1
#endif

#ifndef PR_SCHED_CORE_GET
#  define PR_SCHED_CORE_GET 0
#endif

#ifndef PR_SET_VMA
#  define PR_SET_VMA 0x53564d41
#  define PR_SET_VMA_ANON_NAME 0
#endif

int main() {

  int res;
  res = prctl(PR_SCHED_CORE, PR_SCHED_CORE_CREATE, 0, 0, 0);
  if (res < 0) {
    assert(errno == EINVAL || errno == ENODEV);
    return 0;
  }

  uint64_t cookie = 0;
  res = prctl(PR_SCHED_CORE, PR_SCHED_CORE_GET, 0, 0, &cookie);
  if (res < 0) {
    assert(errno == EINVAL);
  } else {
    assert(cookie != 0);
  }

  char invname[81], vlname[] = "prctl";
  for (auto i = 0; i < sizeof(invname); i++) {
    invname[i] = 0x1e;
  }
  invname[80] = 0;
  auto p =
      mmap(nullptr, 128, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
  assert(p != MAP_FAILED);
  // regardless of kernel support, the name is invalid
  res = prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, (uintptr_t)p, 128,
              (uintptr_t)invname);
  assert(res == -1);
  assert(errno == EINVAL);
  res = prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, (uintptr_t)p, 128,
              (uintptr_t)vlname);
  if (res < 0) {
    assert(errno == EINVAL);
  }
  munmap(p, 128);

  return 0;
}
