Sync in the latest CloudABI system call definitions.

Some time ago I made a change to merge together the memory scope
definitions used by mmap (MAP_{PRIVATE,SHARED}) and lock objects
(PTHREAD_PROCESS_{PRIVATE,SHARED}). Though that sounded pretty smart
back then, it's backfiring. In the case of mmap it's used with other
flags in a bitmask, but for locking it's an enumeration. As our plan is
to automatically generate bindings for other languages, that looks a bit
sloppy.

Change all of the locking functions to use separate flags instead.

Obtained from:	https://github.com/NuxiNL/cloudabi
This commit is contained in:
Ed Schouten 2016-03-31 18:50:06 +00:00
parent 80f3b01958
commit 38526a2cf1
6 changed files with 42 additions and 32 deletions

View File

@ -212,16 +212,16 @@ static int futex_user_cmpxchg(uint32_t *, uint32_t, uint32_t *, uint32_t);
static int
futex_address_create(struct futex_address *fa, struct thread *td,
const void *object, cloudabi_mflags_t scope)
const void *object, cloudabi_scope_t scope)
{
KASSERT(td == curthread,
("Can only create umtx keys for the current thread"));
switch (scope) {
case CLOUDABI_MAP_PRIVATE:
case CLOUDABI_SCOPE_PRIVATE:
return (umtx_key_get(object, TYPE_FUTEX, THREAD_SHARE,
&fa->fa_key));
case CLOUDABI_MAP_SHARED:
case CLOUDABI_SCOPE_SHARED:
return (umtx_key_get(object, TYPE_FUTEX, AUTO_SHARE,
&fa->fa_key));
default:
@ -259,7 +259,7 @@ futex_condvar_assert(const struct futex_condvar *fc)
static int
futex_condvar_lookup(struct thread *td, const cloudabi_condvar_t *address,
cloudabi_mflags_t scope, struct futex_condvar **fcret)
cloudabi_scope_t scope, struct futex_condvar **fcret)
{
struct futex_address fa_condvar;
struct futex_condvar *fc;
@ -286,8 +286,8 @@ futex_condvar_lookup(struct thread *td, const cloudabi_condvar_t *address,
static int
futex_condvar_lookup_or_create(struct thread *td,
const cloudabi_condvar_t *condvar, cloudabi_mflags_t condvar_scope,
const cloudabi_lock_t *lock, cloudabi_mflags_t lock_scope,
const cloudabi_condvar_t *condvar, cloudabi_scope_t condvar_scope,
const cloudabi_lock_t *lock, cloudabi_scope_t lock_scope,
struct futex_condvar **fcret)
{
struct futex_address fa_condvar, fa_lock;
@ -385,7 +385,7 @@ futex_lock_assert(const struct futex_lock *fl)
static int
futex_lock_lookup(struct thread *td, const cloudabi_lock_t *address,
cloudabi_mflags_t scope, struct futex_lock **flret)
cloudabi_scope_t scope, struct futex_lock **flret)
{
struct futex_address fa;
int error;
@ -974,8 +974,8 @@ futex_user_cmpxchg(uint32_t *obj, uint32_t cmp, uint32_t *old, uint32_t new)
int
cloudabi_futex_condvar_wait(struct thread *td, cloudabi_condvar_t *condvar,
cloudabi_mflags_t condvar_scope, cloudabi_lock_t *lock,
cloudabi_mflags_t lock_scope, cloudabi_clockid_t clock_id,
cloudabi_scope_t condvar_scope, cloudabi_lock_t *lock,
cloudabi_scope_t lock_scope, cloudabi_clockid_t clock_id,
cloudabi_timestamp_t timeout, cloudabi_timestamp_t precision)
{
struct futex_condvar *fc;
@ -1047,7 +1047,7 @@ cloudabi_futex_condvar_wait(struct thread *td, cloudabi_condvar_t *condvar,
int
cloudabi_futex_lock_rdlock(struct thread *td, cloudabi_lock_t *lock,
cloudabi_mflags_t scope, cloudabi_clockid_t clock_id,
cloudabi_scope_t scope, cloudabi_clockid_t clock_id,
cloudabi_timestamp_t timeout, cloudabi_timestamp_t precision)
{
struct futex_lock *fl;
@ -1066,7 +1066,7 @@ cloudabi_futex_lock_rdlock(struct thread *td, cloudabi_lock_t *lock,
int
cloudabi_futex_lock_wrlock(struct thread *td, cloudabi_lock_t *lock,
cloudabi_mflags_t scope, cloudabi_clockid_t clock_id,
cloudabi_scope_t scope, cloudabi_clockid_t clock_id,
cloudabi_timestamp_t timeout, cloudabi_timestamp_t precision)
{
struct futex_lock *fl;

View File

@ -67,13 +67,13 @@ int cloudabi_convert_timespec(const struct timespec *, cloudabi_timestamp_t *);
* sleep on a lock or condition variable.
*/
int cloudabi_futex_condvar_wait(struct thread *, cloudabi_condvar_t *,
cloudabi_mflags_t, cloudabi_lock_t *, cloudabi_mflags_t, cloudabi_clockid_t,
cloudabi_scope_t, cloudabi_lock_t *, cloudabi_scope_t, cloudabi_clockid_t,
cloudabi_timestamp_t, cloudabi_timestamp_t);
int cloudabi_futex_lock_rdlock(struct thread *, cloudabi_lock_t *,
cloudabi_mflags_t, cloudabi_clockid_t, cloudabi_timestamp_t,
cloudabi_scope_t, cloudabi_clockid_t, cloudabi_timestamp_t,
cloudabi_timestamp_t);
int cloudabi_futex_lock_wrlock(struct thread *, cloudabi_lock_t *,
cloudabi_mflags_t, cloudabi_clockid_t, cloudabi_timestamp_t,
cloudabi_scope_t, cloudabi_clockid_t, cloudabi_timestamp_t,
cloudabi_timestamp_t);
#endif

View File

@ -30,7 +30,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 2: {
struct cloudabi_sys_condvar_signal_args *p = params;
uarg[0] = (intptr_t) p->condvar; /* cloudabi_condvar_t * */
iarg[1] = p->scope; /* cloudabi_mflags_t */
iarg[1] = p->scope; /* cloudabi_scope_t */
iarg[2] = p->nwaiters; /* cloudabi_nthreads_t */
*n_args = 3;
break;
@ -297,7 +297,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 31: {
struct cloudabi_sys_lock_unlock_args *p = params;
uarg[0] = (intptr_t) p->lock; /* cloudabi_lock_t * */
iarg[1] = p->scope; /* cloudabi_mflags_t */
iarg[1] = p->scope; /* cloudabi_scope_t */
*n_args = 2;
break;
}
@ -493,7 +493,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 54: {
struct cloudabi_sys_thread_exit_args *p = params;
uarg[0] = (intptr_t) p->lock; /* cloudabi_lock_t * */
iarg[1] = p->scope; /* cloudabi_mflags_t */
iarg[1] = p->scope; /* cloudabi_scope_t */
*n_args = 2;
break;
}
@ -561,7 +561,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "cloudabi_condvar_t *";
break;
case 1:
p = "cloudabi_mflags_t";
p = "cloudabi_scope_t";
break;
case 2:
p = "cloudabi_nthreads_t";
@ -1043,7 +1043,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "cloudabi_lock_t *";
break;
case 1:
p = "cloudabi_mflags_t";
p = "cloudabi_scope_t";
break;
default:
break;
@ -1377,7 +1377,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "cloudabi_lock_t *";
break;
case 1:
p = "cloudabi_mflags_t";
p = "cloudabi_scope_t";
break;
default:
break;

View File

@ -1,4 +1,4 @@
// Copyright (c) 2016 Nuxi, https://nuxi.nl/
// Copyright (c) 2016 Nuxi (https://nuxi.nl/) and contributors.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
@ -20,8 +20,9 @@
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
//
// This file is automatically generated. Do not edit.
//
// Source: https://github.com/NuxiNL/cloudabi
#ifndef CLOUDABI64_TYPES_H
@ -101,6 +102,8 @@ _Static_assert(offsetof(cloudabi64_iovec_t, iov_len) == 8, "Incorrect layout");
_Static_assert(sizeof(cloudabi64_iovec_t) == 16, "Incorrect layout");
_Static_assert(_Alignof(cloudabi64_iovec_t) == 8, "Incorrect layout");
typedef void cloudabi64_processentry_t(uint64_t auxv);
typedef struct {
_Alignas(8) uint64_t ri_data;
_Alignas(8) uint64_t ri_datalen;
@ -153,8 +156,8 @@ typedef struct {
struct {
_Alignas(8) uint64_t condvar;
_Alignas(8) uint64_t lock;
_Alignas(1) cloudabi_mflags_t condvar_scope;
_Alignas(1) cloudabi_mflags_t lock_scope;
_Alignas(1) cloudabi_scope_t condvar_scope;
_Alignas(1) cloudabi_scope_t lock_scope;
} condvar;
struct {
_Alignas(4) cloudabi_fd_t fd;
@ -162,7 +165,7 @@ typedef struct {
} fd_readwrite;
struct {
_Alignas(8) uint64_t lock;
_Alignas(1) cloudabi_mflags_t lock_scope;
_Alignas(1) cloudabi_scope_t lock_scope;
} lock;
struct {
_Alignas(4) cloudabi_fd_t fd;

View File

@ -1,4 +1,4 @@
// Copyright (c) 2016 Nuxi, https://nuxi.nl/
// Copyright (c) 2016 Nuxi (https://nuxi.nl/) and contributors.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
@ -20,8 +20,9 @@
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
//
// This file is automatically generated. Do not edit.
//
// Source: https://github.com/NuxiNL/cloudabi
#ifndef CLOUDABI_TYPES_COMMON_H
@ -47,6 +48,7 @@ typedef uint8_t cloudabi_advice_t;
typedef uint32_t cloudabi_auxtype_t;
#define CLOUDABI_AT_ARGDATA 256
#define CLOUDABI_AT_ARGDATALEN 257
#define CLOUDABI_AT_BASE 7
#define CLOUDABI_AT_CANARY 258
#define CLOUDABI_AT_CANARYLEN 259
#define CLOUDABI_AT_NCPUS 260
@ -298,6 +300,10 @@ typedef uint8_t cloudabi_sa_family_t;
#define CLOUDABI_AF_INET6 2
#define CLOUDABI_AF_UNIX 3
typedef uint8_t cloudabi_scope_t;
#define CLOUDABI_SCOPE_PRIVATE 4
#define CLOUDABI_SCOPE_SHARED 8
typedef uint8_t cloudabi_sdflags_t;
#define CLOUDABI_SHUT_RD 0x01
#define CLOUDABI_SHUT_WR 0x02

View File

@ -1,6 +1,6 @@
$FreeBSD$
; Copyright (c) 2016 Nuxi, https://nuxi.nl/
; Copyright (c) 2016 Nuxi (https://nuxi.nl/) and contributors.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions
@ -22,8 +22,9 @@
; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
; SUCH DAMAGE.
;
; This file is automatically generated. Do not edit.
;
; Source: https://github.com/NuxiNL/cloudabi
#include <sys/sysent.h>
@ -44,7 +45,7 @@
2 AUE_NULL STD { void cloudabi_sys_condvar_signal( \
cloudabi_condvar_t *condvar, \
cloudabi_mflags_t scope, \
cloudabi_scope_t scope, \
cloudabi_nthreads_t nwaiters); }
3 AUE_NULL STD { void cloudabi_sys_fd_close( \
@ -196,7 +197,7 @@
31 AUE_NULL STD { void cloudabi_sys_lock_unlock( \
cloudabi_lock_t *lock, \
cloudabi_mflags_t scope); }
cloudabi_scope_t scope); }
32 AUE_NULL STD { void cloudabi_sys_mem_advise( \
void *addr, \
@ -301,7 +302,7 @@
54 AUE_NULL STD { void cloudabi_sys_thread_exit( \
cloudabi_lock_t *lock, \
cloudabi_mflags_t scope); }
cloudabi_scope_t scope); }
55 AUE_NULL STD { void cloudabi_sys_thread_tcb_set( \
void *tcb); }