1 // Copyright (C) 2017 The Android Open Source Project
2 // SPDX-License-Identifier: BSD-2-Clause
3
4 #if defined(__BIONIC__)
5
6 #include <sys/sem.h>
7
8 #include "header_checks.h"
9
sys_sem_h()10 static void sys_sem_h() {
11 MACRO(SEM_UNDO);
12
13 MACRO(GETNCNT);
14 MACRO(GETPID);
15 MACRO(GETVAL);
16 MACRO(GETALL);
17 MACRO(GETZCNT);
18 MACRO(SETVAL);
19 MACRO(SETALL);
20
21 TYPE(struct semid_ds);
22 STRUCT_MEMBER(struct semid_ds, struct ipc_perm, sem_perm);
23 #if defined(__linux__) // POSIX says short, Linux says long.
24 STRUCT_MEMBER(struct semid_ds, unsigned long, sem_nsems);
25 #else
26 STRUCT_MEMBER(struct semid_ds, unsigned short, sem_nsems);
27 #endif
28 #if defined(__LP64__)
29 STRUCT_MEMBER(struct semid_ds, time_t, sem_otime);
30 STRUCT_MEMBER(struct semid_ds, time_t, sem_ctime);
31 #else
32 // Starting at kernel v4.19, 32 bit changed these to unsigned values.
33 STRUCT_MEMBER(struct semid_ds, unsigned long, sem_otime);
34 STRUCT_MEMBER(struct semid_ds, unsigned long, sem_ctime);
35 #endif
36
37 TYPE(pid_t);
38 TYPE(size_t);
39 TYPE(time_t);
40
41 TYPE(struct sembuf);
42 STRUCT_MEMBER(struct sembuf, unsigned short, sem_num);
43 STRUCT_MEMBER(struct sembuf, short, sem_op);
44 STRUCT_MEMBER(struct sembuf, short, sem_flg);
45
46 FUNCTION(semctl, int (*f)(int, int, int, ...));
47 FUNCTION(semget, int (*f)(key_t, int, int));
48 FUNCTION(semop, int (*f)(int, struct sembuf*, size_t));
49 }
50
51 #endif
52