aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Johnston <markjdb@gmail.com>2020-03-26 15:16:16 -0400
committerDmitry Vyukov <dvyukov@google.com>2020-03-27 05:51:58 +0100
commitc37c8bf05b3a5e72f9e220d4db34cd65276f4c0a (patch)
tree6a0840a504db95eafe537ad524a1280184ea5ad0
parented2c77ae5935789c2f5ecc6000e300ab78deef68 (diff)
sys/freebsd: add POSIX shared memory system calls
-rw-r--r--executor/defs.h4
-rw-r--r--executor/syscalls.h8
-rw-r--r--sys/freebsd/gen/386.go29
-rw-r--r--sys/freebsd/gen/amd64.go29
-rw-r--r--sys/freebsd/ipc.txt13
-rw-r--r--sys/freebsd/ipc_386.const12
-rw-r--r--sys/freebsd/ipc_amd64.const12
7 files changed, 101 insertions, 6 deletions
diff --git a/executor/defs.h b/executor/defs.h
index 4069e573c..657364c2e 100644
--- a/executor/defs.h
+++ b/executor/defs.h
@@ -20,7 +20,7 @@
#if GOARCH_386
#define GOARCH "386"
-#define SYZ_REVISION "9aa913dd00fd9a77ce8244e6e146d09fdad95e8f"
+#define SYZ_REVISION "325e7f88c9a9be6d5408e8f4b16b46a7dfa46701"
#define SYZ_EXECUTOR_USES_FORK_SERVER 1
#define SYZ_EXECUTOR_USES_SHMEM 1
#define SYZ_PAGE_SIZE 4096
@@ -30,7 +30,7 @@
#if GOARCH_amd64
#define GOARCH "amd64"
-#define SYZ_REVISION "d6baa2c780ceca787d2bfc2b770607581ff9e055"
+#define SYZ_REVISION "240c65c5b7b17b0d4a6d7365323733dd48fc9118"
#define SYZ_EXECUTOR_USES_FORK_SERVER 1
#define SYZ_EXECUTOR_USES_SHMEM 1
#define SYZ_PAGE_SIZE 4096
diff --git a/executor/syscalls.h b/executor/syscalls.h
index e58566d53..130d42ac6 100644
--- a/executor/syscalls.h
+++ b/executor/syscalls.h
@@ -297,6 +297,7 @@ const call_t syscalls[] = {
{"freebsd11_mknod", 14},
{"freebsd11_mknodat", 498},
{"freebsd11_stat", 188},
+ {"freebsd12_shm_open", 482},
{"fstat", 551},
{"fsync", 95},
{"ftruncate", 480},
@@ -687,6 +688,9 @@ const call_t syscalls[] = {
{"setsockopt$sock_linger", 105},
{"setsockopt$sock_timeval", 105},
{"setuid", 23},
+ {"shm_open2", 571},
+ {"shm_rename", 572},
+ {"shm_unlink", 483},
{"shmat", 228},
{"shmctl$IPC_INFO", 512},
{"shmctl$IPC_RMID", 512},
@@ -811,6 +815,7 @@ const call_t syscalls[] = {
{"freebsd11_mknod", 14},
{"freebsd11_mknodat", 498},
{"freebsd11_stat", 188},
+ {"freebsd12_shm_open", 482},
{"fstat", 551},
{"fsync", 95},
{"ftruncate", 480},
@@ -1201,6 +1206,9 @@ const call_t syscalls[] = {
{"setsockopt$sock_linger", 105},
{"setsockopt$sock_timeval", 105},
{"setuid", 23},
+ {"shm_open2", 571},
+ {"shm_rename", 572},
+ {"shm_unlink", 483},
{"shmat", 228},
{"shmctl$IPC_INFO", 512},
{"shmctl$IPC_RMID", 512},
diff --git a/sys/freebsd/gen/386.go b/sys/freebsd/gen/386.go
index ea4fbb88e..8e15d3c9c 100644
--- a/sys/freebsd/gen/386.go
+++ b/sys/freebsd/gen/386.go
@@ -2126,6 +2126,11 @@ var syscalls_386 = []*Syscall{
&PtrType{TypeCommon{TypeName: "ptr", FldName: "file", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
&PtrType{TypeCommon{TypeName: "ptr", FldName: "statbuf", TypeSize: 4}, &StructType{Key: StructKey{"freebsd11_stat", 1}}},
}},
+ {NR: 482, Name: "freebsd12_shm_open", CallName: "freebsd12_shm_open", Args: []Type{
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+ &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open_flags", FldName: "flags", TypeSize: 4}}, Vals: []uint64{0, 2, 512, 1024, 2048}},
+ &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 4}}, []uint64{1, 2, 4, 8, 16, 32, 64, 128, 256}, true},
+ }},
{NR: 551, Name: "fstat", CallName: "fstat", Args: []Type{
&ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}},
&PtrType{TypeCommon{TypeName: "ptr", FldName: "statbuf", TypeSize: 4}, &StructType{Key: StructKey{"stat", 1}}},
@@ -4523,6 +4528,21 @@ var syscalls_386 = []*Syscall{
{NR: 23, Name: "setuid", CallName: "setuid", Args: []Type{
&ResourceType{TypeCommon: TypeCommon{TypeName: "uid", FldName: "uid", TypeSize: 4}},
}},
+ {NR: 571, Name: "shm_open2", CallName: "shm_open2", Args: []Type{
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+ &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open_flags", FldName: "flags", TypeSize: 4}}, Vals: []uint64{0, 2, 512, 1024, 2048}},
+ &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 4}}, []uint64{1, 2, 4, 8, 16, 32, 64, 128, 256}, true},
+ &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open2_flags", FldName: "shmflags", TypeSize: 4}}, []uint64{1}, true},
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "name", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "string", IsVarlen: true}, Kind: 2}},
+ }},
+ {NR: 572, Name: "shm_rename", CallName: "shm_rename", Args: []Type{
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "from", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "to", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+ &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_rename_flags", FldName: "flags", TypeSize: 4}}, []uint64{1, 2}, true},
+ }},
+ {NR: 483, Name: "shm_unlink", CallName: "shm_unlink", Args: []Type{
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+ }},
{NR: 228, Name: "shmat", CallName: "shmat", Args: []Type{
&ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_shm", FldName: "shmid", TypeSize: 4}},
&VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "addr", TypeSize: 4}},
@@ -5531,9 +5551,12 @@ var consts_386 = []ConstValue{
{"SF_SNAPSHOT", 2097152},
{"SF_SYNC", 4},
{"SF_USER_READAHEAD", 8},
+ {"SHM_ALLOW_SEALING", 1},
{"SHM_INFO", 14},
{"SHM_LOCK", 11},
{"SHM_RDONLY", 4096},
+ {"SHM_RENAME_EXCHANGE", 2},
+ {"SHM_RENAME_NOREPLACE", 1},
{"SHM_RND", 8192},
{"SHM_STAT", 13},
{"SHM_UNLOCK", 12},
@@ -5630,6 +5653,7 @@ var consts_386 = []ConstValue{
{"SYS_freebsd11_mknod", 14},
{"SYS_freebsd11_mknodat", 498},
{"SYS_freebsd11_stat", 188},
+ {"SYS_freebsd12_shm_open", 482},
{"SYS_fstat", 551},
{"SYS_fsync", 95},
{"SYS_ftruncate", 480},
@@ -5712,6 +5736,9 @@ var consts_386 = []ConstValue{
{"SYS_setrlimit", 195},
{"SYS_setsockopt", 105},
{"SYS_setuid", 23},
+ {"SYS_shm_open2", 571},
+ {"SYS_shm_rename", 572},
+ {"SYS_shm_unlink", 483},
{"SYS_shmat", 228},
{"SYS_shmctl", 512},
{"SYS_shmdt", 230},
@@ -5810,4 +5837,4 @@ var consts_386 = []ConstValue{
{"WUNTRACED", 2},
}
-const revision_386 = "9aa913dd00fd9a77ce8244e6e146d09fdad95e8f"
+const revision_386 = "325e7f88c9a9be6d5408e8f4b16b46a7dfa46701"
diff --git a/sys/freebsd/gen/amd64.go b/sys/freebsd/gen/amd64.go
index 48dc844be..cee4a22fd 100644
--- a/sys/freebsd/gen/amd64.go
+++ b/sys/freebsd/gen/amd64.go
@@ -2153,6 +2153,11 @@ var syscalls_amd64 = []*Syscall{
&PtrType{TypeCommon{TypeName: "ptr", FldName: "file", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
&PtrType{TypeCommon{TypeName: "ptr", FldName: "statbuf", TypeSize: 8}, &StructType{Key: StructKey{"freebsd11_stat", 1}}},
}},
+ {NR: 482, Name: "freebsd12_shm_open", CallName: "freebsd12_shm_open", Args: []Type{
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+ &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{0, 2, 512, 1024, 2048}},
+ &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 8}}, []uint64{1, 2, 4, 8, 16, 32, 64, 128, 256}, true},
+ }},
{NR: 551, Name: "fstat", CallName: "fstat", Args: []Type{
&ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}},
&PtrType{TypeCommon{TypeName: "ptr", FldName: "statbuf", TypeSize: 8}, &StructType{Key: StructKey{"stat", 1}}},
@@ -4550,6 +4555,21 @@ var syscalls_amd64 = []*Syscall{
{NR: 23, Name: "setuid", CallName: "setuid", Args: []Type{
&ResourceType{TypeCommon: TypeCommon{TypeName: "uid", FldName: "uid", TypeSize: 4}},
}},
+ {NR: 571, Name: "shm_open2", CallName: "shm_open2", Args: []Type{
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+ &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{0, 2, 512, 1024, 2048}},
+ &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 8}}, []uint64{1, 2, 4, 8, 16, 32, 64, 128, 256}, true},
+ &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open2_flags", FldName: "shmflags", TypeSize: 8}}, []uint64{1}, true},
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "name", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "string", IsVarlen: true}, Kind: 2}},
+ }},
+ {NR: 572, Name: "shm_rename", CallName: "shm_rename", Args: []Type{
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "from", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "to", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+ &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_rename_flags", FldName: "flags", TypeSize: 8}}, []uint64{1, 2}, true},
+ }},
+ {NR: 483, Name: "shm_unlink", CallName: "shm_unlink", Args: []Type{
+ &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+ }},
{NR: 228, Name: "shmat", CallName: "shmat", Args: []Type{
&ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_shm", FldName: "shmid", TypeSize: 4}},
&VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "addr", TypeSize: 8}},
@@ -5558,9 +5578,12 @@ var consts_amd64 = []ConstValue{
{"SF_SNAPSHOT", 2097152},
{"SF_SYNC", 4},
{"SF_USER_READAHEAD", 8},
+ {"SHM_ALLOW_SEALING", 1},
{"SHM_INFO", 14},
{"SHM_LOCK", 11},
{"SHM_RDONLY", 4096},
+ {"SHM_RENAME_EXCHANGE", 2},
+ {"SHM_RENAME_NOREPLACE", 1},
{"SHM_RND", 8192},
{"SHM_STAT", 13},
{"SHM_UNLOCK", 12},
@@ -5657,6 +5680,7 @@ var consts_amd64 = []ConstValue{
{"SYS_freebsd11_mknod", 14},
{"SYS_freebsd11_mknodat", 498},
{"SYS_freebsd11_stat", 188},
+ {"SYS_freebsd12_shm_open", 482},
{"SYS_fstat", 551},
{"SYS_fsync", 95},
{"SYS_ftruncate", 480},
@@ -5739,6 +5763,9 @@ var consts_amd64 = []ConstValue{
{"SYS_setrlimit", 195},
{"SYS_setsockopt", 105},
{"SYS_setuid", 23},
+ {"SYS_shm_open2", 571},
+ {"SYS_shm_rename", 572},
+ {"SYS_shm_unlink", 483},
{"SYS_shmat", 228},
{"SYS_shmctl", 512},
{"SYS_shmdt", 230},
@@ -5837,4 +5864,4 @@ var consts_amd64 = []ConstValue{
{"WUNTRACED", 2},
}
-const revision_amd64 = "d6baa2c780ceca787d2bfc2b770607581ff9e055"
+const revision_amd64 = "240c65c5b7b17b0d4a6d7365323733dd48fc9118"
diff --git a/sys/freebsd/ipc.txt b/sys/freebsd/ipc.txt
index 5c43925df..fc94c3033 100644
--- a/sys/freebsd/ipc.txt
+++ b/sys/freebsd/ipc.txt
@@ -3,11 +3,12 @@
include <sys/types.h>
include <sys/fcntl.h>
-include <sys/stat.h>
include <sys/ipc.h>
-include <sys/shm.h>
+include <sys/mman.h>
include <sys/msg.h>
include <sys/sem.h>
+include <sys/shm.h>
+include <sys/stat.h>
resource ipc[int32]: 0, 0xffffffffffffffff
@@ -60,6 +61,11 @@ shmctl$SHM_LOCK(shmid ipc_shm, cmd const[SHM_LOCK])
shmctl$SHM_UNLOCK(shmid ipc_shm, cmd const[SHM_UNLOCK])
shmdt(addr shmaddr)
+freebsd12_shm_open(path ptr[in, filename], flags flags[shm_open_flags], mode flags[open_mode])
+shm_open2(path ptr[in, filename], flags flags[shm_open_flags], mode flags[open_mode], shmflags flags[shm_open2_flags], name ptr[in, string])
+shm_rename(from ptr[in, filename], to ptr[in, filename], flags flags[shm_rename_flags])
+shm_unlink(path ptr[in, filename])
+
msgget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH
msgbuf_type = 0, 1, 2, 3
msgsnd_flags = IPC_NOWAIT
@@ -69,6 +75,9 @@ semop_flags = IPC_NOWAIT, SEM_UNDO
sem_sem_id = 0, 1, 2, 3, 4
shmget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH
shmat_flags = SHM_RND, SHM_RDONLY
+shm_open_flags = O_RDONLY, O_RDWR, O_CREAT, O_EXCL, O_TRUNC
+shm_open2_flags = SHM_ALLOW_SEALING
+shm_rename_flags = SHM_RENAME_EXCHANGE, SHM_RENAME_NOREPLACE
ipc_perm {
key int32
diff --git a/sys/freebsd/ipc_386.const b/sys/freebsd/ipc_386.const
index 4d1480b2e..698aad428 100644
--- a/sys/freebsd/ipc_386.const
+++ b/sys/freebsd/ipc_386.const
@@ -13,24 +13,36 @@ IPC_RMID = 0
IPC_SET = 1
IPC_STAT = 2
MSG_NOERROR = 4096
+O_CREAT = 512
+O_EXCL = 2048
+O_RDONLY = 0
+O_RDWR = 2
+O_TRUNC = 1024
SEM_INFO = 11
SEM_STAT = 10
SEM_UNDO = 4096
SETALL = 9
SETVAL = 8
+SHM_ALLOW_SEALING = 1
SHM_INFO = 14
SHM_LOCK = 11
SHM_RDONLY = 4096
+SHM_RENAME_EXCHANGE = 2
+SHM_RENAME_NOREPLACE = 1
SHM_RND = 8192
SHM_STAT = 13
SHM_UNLOCK = 12
SYS___semctl = 510
+SYS_freebsd12_shm_open = 482
SYS_msgctl = 511
SYS_msgget = 225
SYS_msgrcv = 227
SYS_msgsnd = 226
SYS_semget = 221
SYS_semop = 222
+SYS_shm_open2 = 571
+SYS_shm_rename = 572
+SYS_shm_unlink = 483
SYS_shmat = 228
SYS_shmctl = 512
SYS_shmdt = 230
diff --git a/sys/freebsd/ipc_amd64.const b/sys/freebsd/ipc_amd64.const
index 4d1480b2e..698aad428 100644
--- a/sys/freebsd/ipc_amd64.const
+++ b/sys/freebsd/ipc_amd64.const
@@ -13,24 +13,36 @@ IPC_RMID = 0
IPC_SET = 1
IPC_STAT = 2
MSG_NOERROR = 4096
+O_CREAT = 512
+O_EXCL = 2048
+O_RDONLY = 0
+O_RDWR = 2
+O_TRUNC = 1024
SEM_INFO = 11
SEM_STAT = 10
SEM_UNDO = 4096
SETALL = 9
SETVAL = 8
+SHM_ALLOW_SEALING = 1
SHM_INFO = 14
SHM_LOCK = 11
SHM_RDONLY = 4096
+SHM_RENAME_EXCHANGE = 2
+SHM_RENAME_NOREPLACE = 1
SHM_RND = 8192
SHM_STAT = 13
SHM_UNLOCK = 12
SYS___semctl = 510
+SYS_freebsd12_shm_open = 482
SYS_msgctl = 511
SYS_msgget = 225
SYS_msgrcv = 227
SYS_msgsnd = 226
SYS_semget = 221
SYS_semop = 222
+SYS_shm_open2 = 571
+SYS_shm_rename = 572
+SYS_shm_unlink = 483
SYS_shmat = 228
SYS_shmctl = 512
SYS_shmdt = 230