int
pthread_barrierattr_setpshared (pthread_barrierattr_t *attr, int pshared)
{
  int err = futex_supports_pshared (pshared);
  if (err != 0)
    return err;

  ((struct pthread_barrierattr *) attr)->pshared = pshared;

  return 0;
}
int
pthread_condattr_setpshared (pthread_condattr_t *attr, int pshared)
{
  int err = futex_supports_pshared (pshared);
  if (err != 0)
    return err;

  int *valuep = &((struct pthread_condattr *) attr)->value;

  *valuep = (*valuep & ~1) | (pshared != PTHREAD_PROCESS_PRIVATE);

  return 0;
}
int
pthread_rwlockattr_setpshared (pthread_rwlockattr_t *attr, int pshared)
{
  struct pthread_rwlockattr *iattr;

  int err = futex_supports_pshared (pshared);
  if (err != 0)
    return err;

  iattr = (struct pthread_rwlockattr *) attr;

  iattr->pshared = pshared;

  return 0;
}
int
pthread_mutexattr_setpshared (pthread_mutexattr_t *attr, int pshared)
{
  struct pthread_mutexattr *iattr;

  int err = futex_supports_pshared (pshared);
  if (err != 0)
    return err;

  iattr = (struct pthread_mutexattr *) attr;

  if (pshared == PTHREAD_PROCESS_PRIVATE)
    iattr->mutexkind &= ~PTHREAD_MUTEXATTR_FLAG_PSHARED;
  else
    iattr->mutexkind |= PTHREAD_MUTEXATTR_FLAG_PSHARED;

  return 0;
}