DECL_TEMPLATE(freebsd, sys_futimes) // 206
// generic getpgod 207
// generic poll 209
+#if !defined(VGP_arm64_freebsd)
DECL_TEMPLATE(freebsd, sys_freebsd7___semctl) // 220
+#endif
DECL_TEMPLATE(freebsd, sys_semget) // 221
DECL_TEMPLATE(freebsd, sys_semop) // 222
+#if !defined(VGP_arm64_freebsd)
DECL_TEMPLATE(freebsd, sys_freebsd7_msgctl) // 224
+#endif
DECL_TEMPLATE(freebsd, sys_msgget) // 225
DECL_TEMPLATE(freebsd, sys_msgsnd) // 226
DECL_TEMPLATE(freebsd, sys_msgrcv) // 227
DECL_TEMPLATE(freebsd, sys_shmat) // 228
+#if !defined(VGP_arm64_freebsd)
DECL_TEMPLATE(freebsd, sys_freebsd7_shmctl) // 229
+#endif
DECL_TEMPLATE(freebsd, sys_shmdt) // 230
DECL_TEMPLATE(freebsd, sys_shmget) // 231
DECL_TEMPLATE(freebsd, sys_clock_gettime) // 232
}
}
-// the man page is inconsistent for the last argument
-// See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=247386
-// will stick to 'arg' for simplicity
-
// SYS_procctl 544
-// int procctl(idtype_t idtype, id_t id, int cmd, void *arg);
+// int procctl(idtype_t idtype, id_t id, int cmd, void *data);
PRE(sys_procctl)
{
PRINT("sys_procctl ( %" FMT_REGWORD "d, %" FMT_REGWORD "d, %" FMT_REGWORD
"d, %#" FMT_REGWORD "x )",
SARG1, SARG2, SARG3, ARG4);
PRE_REG_READ4(int, "procctl", vki_idtype_t, idtype, vki_id_t, id, int, cmd,
- void*, arg);
+ void*, data);
switch (ARG3) {
case VKI_PROC_ASLR_CTL:
case VKI_PROC_SPROTECT:
case VKI_PROC_STACKGAP_CTL:
case VKI_PROC_NO_NEW_PRIVS_CTL:
case VKI_PROC_WXMAP_CTL:
- PRE_MEM_READ("procctl(arg)", ARG4, sizeof(int));
+ PRE_MEM_READ("procctl(data)", ARG4, sizeof(int));
break;
case VKI_PROC_REAP_STATUS:
- PRE_MEM_READ("procctl(arg)", ARG4,
+ PRE_MEM_READ("procctl(data)", ARG4,
sizeof(struct vki_procctl_reaper_status));
break;
case VKI_PROC_REAP_GETPIDS:
- PRE_MEM_READ("procctl(arg)", ARG4,
+ PRE_MEM_READ("procctl(data)", ARG4,
sizeof(struct vki_procctl_reaper_pids));
break;
case VKI_PROC_REAP_KILL:
*
* There is also a pad field
*/
- PRE_MEM_READ("procctl(arg)", ARG4,
+ PRE_MEM_READ("procctl(data)", ARG4,
sizeof(int) + sizeof(u_int) + sizeof(vki_pid_t));
- PRE_MEM_WRITE("procctl(arg)",
+ PRE_MEM_WRITE("procctl(data)",
ARG4 + offsetof(struct vki_procctl_reaper_kill, rk_killed),
sizeof(u_int) + sizeof(vki_pid_t));
break;
case VKI_PROC_TRACE_STATUS:
case VKI_PROC_NO_NEW_PRIVS_STATUS:
case VKI_PROC_WXMAP_STATUS:
- PRE_MEM_WRITE("procctl(arg)", ARG4, sizeof(int));
+ PRE_MEM_WRITE("procctl(data)", ARG4, sizeof(int));
case VKI_PROC_REAP_ACQUIRE:
case VKI_PROC_REAP_RELEASE:
default:
// SYS_freebsd7___semctl 220
// int semctl(int semid, int semnum, int cmd, ...);
+#if !defined(VGP_arm64_freebsd)
PRE(sys_freebsd7___semctl)
{
union vki_semun* semun;
ML_(generic_POST_sys_semctl)(tid, RES, ARG1,ARG2,ARG3,ARG4);
}
}
+#endif
// SYS_semget 221
// int semget(key_t key, int nsems, int flag);
// SYS_freebsd7_msgctl 224
// int msgctl(int msqid, int cmd, struct msqid_ds_old *buf);
+#if !defined(VGP_arm64_freebsd)
PRE(sys_freebsd7_msgctl)
{
PRINT("sys_freebsd7_msgctl ( %" FMT_REGWORD "d, %" FMT_REGWORD "d, %#" FMT_REGWORD "x )", SARG1,SARG2,ARG3 );
break;
}
}
+#endif
// SYS_msgget 225
// int msgget(key_t key, int msgflg);
// SYS_freebsd7_shmctl 229
// int shmctl(int shmid, int cmd, struct shmid_ds *buf);
+#if !defined(VGP_arm64_freebsd)
PRE(sys_freebsd7_shmctl)
{
PRINT("sys_freebsd7_shmctl ( %" FMT_REGWORD "d, %" FMT_REGWORD "d, %#" FMT_REGWORD "x )",SARG1,SARG2,ARG3);
POST_MEM_WRITE( ARG3, sizeof(struct vki_shmid_ds_old) );
}
}
+#endif
// SYS_shmdt 230
// int shmdt(const void *addr);
}
// SYS_procctl 544
-// amd64 / x86
+// amd64 / x86 / arm64
// SYS_ppoll 545
// int ppoll(struct pollfd fds[], nfds_t nfds,
// netbsd newreboot 208
GENXY(__NR_poll, sys_poll), // 209
+#if !defined(VGP_arm64_freebsd)
BSDXY(__NR_freebsd7___semctl, sys_freebsd7___semctl), // 220
+#endif
BSDX_(__NR_semget, sys_semget), // 221
BSDX_(__NR_semop, sys_semop), // 222
// obs semconfig 223
+#if !defined(VGP_arm64_freebsd)
BSDXY(__NR_freebsd7_msgctl, sys_freebsd7_msgctl), // 224
+#endif
BSDX_(__NR_msgget, sys_msgget), // 225
BSDX_(__NR_msgsnd, sys_msgsnd), // 226
BSDXY(__NR_msgrcv, sys_msgrcv), // 227
BSDXY(__NR_shmat, sys_shmat), // 228
+#if !defined(VGP_arm64_freebsd)
BSDXY(__NR_freebsd7_shmctl, sys_freebsd7_shmctl), // 229
+#endif
BSDXY(__NR_shmdt, sys_shmdt), // 230
BSDX_(__NR_shmget, sys_shmget), // 231
}
}
-// the man page is inconsistent for the last argument
-// See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=247386
-// will stick to 'arg' for simplicity
-
// SYS_procctl 544
-// int procctl(idtype_t idtype, id_t id, int cmd, void *arg);
+// int procctl(idtype_t idtype, id_t id, int cmd, void *data);
PRE(sys_procctl)
{
PRINT("sys_procctl ( %" FMT_REGWORD "d, %llu, %" FMT_REGWORD"d, %#" FMT_REGWORD "x )",
PRE_REG_READ5(int, "procctl", vki_idtype_t, idtype,
vki_uint32_t, MERGE64_FIRST(id),
vki_uint32_t, MERGE64_SECOND(id),
- int, cmd, void *, arg);
+ int, cmd, void *, data);
switch (ARG4) {
case VKI_PROC_ASLR_CTL:
case VKI_PROC_SPROTECT:
case VKI_PROC_STACKGAP_CTL:
case VKI_PROC_NO_NEW_PRIVS_CTL:
case VKI_PROC_WXMAP_CTL:
- PRE_MEM_READ("procctl(arg)", ARG5, sizeof(int));
+ PRE_MEM_READ("procctl(data)", ARG5, sizeof(int));
break;
case VKI_PROC_REAP_STATUS:
- PRE_MEM_READ("procctl(arg)", ARG5, sizeof(struct vki_procctl_reaper_status));
+ PRE_MEM_READ("procctl(data)", ARG5, sizeof(struct vki_procctl_reaper_status));
break;
case VKI_PROC_REAP_GETPIDS:
- PRE_MEM_READ("procctl(arg)", ARG5, sizeof(struct vki_procctl_reaper_pids));
+ PRE_MEM_READ("procctl(data)", ARG5, sizeof(struct vki_procctl_reaper_pids));
break;
case VKI_PROC_REAP_KILL:
/* The first three fields are reads
*
* There is also a pad field
*/
- PRE_MEM_READ("procctl(arg)", ARG5, sizeof(int) + sizeof(u_int) + sizeof(vki_pid_t));
- PRE_MEM_WRITE("procctl(arg)", ARG5+offsetof(struct vki_procctl_reaper_kill, rk_killed), sizeof(u_int) + sizeof(vki_pid_t));
+ PRE_MEM_READ("procctl(data)", ARG5, sizeof(int) + sizeof(u_int) + sizeof(vki_pid_t));
+ PRE_MEM_WRITE("procctl(data)", ARG5+offsetof(struct vki_procctl_reaper_kill, rk_killed), sizeof(u_int) + sizeof(vki_pid_t));
break;
case VKI_PROC_ASLR_STATUS:
case VKI_PROC_PDEATHSIG_STATUS:
case VKI_PROC_STACKGAP_STATUS:
case VKI_PROC_TRAPCAP_STATUS:
case VKI_PROC_TRACE_STATUS:
- PRE_MEM_WRITE("procctl(arg)", ARG5, sizeof(int));
+ PRE_MEM_WRITE("procctl(data)", ARG5, sizeof(int));
case VKI_PROC_REAP_ACQUIRE:
case VKI_PROC_REAP_RELEASE:
default:
#define __NR_futimes 206
#define __NR_getpgid 207
#define __NR_poll 209
+#if !defined(VGP_arm64_freebsd)
#define __NR_freebsd7___semctl 220
+#endif
#define __NR_semget 221
#define __NR_semop 222
/* obs semconfig 223 */
+#if !defined(VGP_arm64_freebsd)
#define __NR_freebsd7_msgctl 224
+#endif
#define __NR_msgget 225
#define __NR_msgsnd 226
#define __NR_msgrcv 227
#define __NR_shmat 228
+#if !defined(VGP_arm64_freebsd)
#define __NR_freebsd7_shmctl 229
+#endif
#define __NR_shmdt 230
#define __NR_shmget 231
#define __NR_clock_gettime 232
SY(SYS_poll, &fds, 1, 1); SUCC;
}
-#if defined(SYS_freebsd7___semctl)
+// On aarch64 this is defined in the header but
+// the kernel returns ENOSYS
+// The aarch64 port postdates FreeBSD 7
+#if defined(SYS_freebsd7___semctl) && !defined(VGP_arm64_freebsd)
/* SYS_freebsd7___semctl 220 */
GO(SYS_freebsd7___semctl, "(IPC_STAT) 4s 1m");
SY(SYS_freebsd7___semctl, x0, x0, x0+IPC_STAT, x0+1); FAIL;
/* unimpl semconfig 223 */
-#if defined(SYS_freebsd7_msgctl)
+#if defined(SYS_freebsd7_msgctl) && !defined(VGP_arm64_freebsd)
/* SYS_freebsd7_msgctl 224 */
GO(SYS_freebsd7_msgctl, "(set) 3s 1m");
SY(SYS_freebsd7_msgctl, x0, x0+1, x0); FAIL;
GO(SYS_shmat, "3s 0m");
SY(SYS_shmat, x0, x0, x0); FAIL;
-#if defined(SYS_freebsd7_shmctl)
+#if defined(SYS_freebsd7_shmctl) && !defined(VGP_arm64_freebsd)
/* SYS_freebsd7_shmctl 229 */
GO(SYS_freebsd7_shmctl, "3s 0m");
SY(SYS_freebsd7_shmctl, x0, x0, x0); FAIL;