]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
FreeBSD syscalls and regtest, cleanup freebsd7 compatible syscalls on arm64
authorPaul Floyd <pjfloyd@wanadoo.fr>
Mon, 30 Sep 2024 18:52:58 +0000 (20:52 +0200)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Mon, 30 Sep 2024 18:52:58 +0000 (20:52 +0200)
None of the freebsd7 interfaces exist on arm64 as the OS
wasn't ported until well after FreeBSD 7.

coregrind/m_syswrap/priv_syswrap-freebsd.h
coregrind/m_syswrap/syswrap-arm64-freebsd.c
coregrind/m_syswrap/syswrap-freebsd.c
coregrind/m_syswrap/syswrap-x86-freebsd.c
include/vki/vki-scnums-freebsd.h
memcheck/tests/freebsd/scalar.c

index 040f308d8e78266614f1c0c6c33a528d3bebf1eb..e405a1172668227230b65474c3753d89289573be 100644 (file)
@@ -199,15 +199,21 @@ DECL_TEMPLATE(freebsd, sys_undelete) // 205
 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
index 7d3d3a330ef1809bdbc69cfb9960af01ecc99783..da536af3703efef6b3e425c40f3e70e33410bc34 100644 (file)
@@ -860,19 +860,15 @@ POST(sys_wait6)
    }
 }
 
-// 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:
@@ -882,14 +878,14 @@ PRE(sys_procctl)
    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:
@@ -904,9 +900,9 @@ PRE(sys_procctl)
        *
        * 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;
@@ -917,7 +913,7 @@ PRE(sys_procctl)
    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:
index 41372f4e158c598f387ad5efffe2cce598a41aa5..593fd6f9028526568bbc32d649c34af3cb1419fc 100644 (file)
@@ -2208,6 +2208,7 @@ PRE(sys_futimes)
 
 // 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;
@@ -2243,6 +2244,7 @@ POST(sys_freebsd7___semctl)
       ML_(generic_POST_sys_semctl)(tid, RES, ARG1,ARG2,ARG3,ARG4);
    }
 }
+#endif
 
 // SYS_semget  221
 // int semget(key_t key, int nsems, int flag);
@@ -2265,6 +2267,7 @@ PRE(sys_semop)
 
 // 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 );
@@ -2291,6 +2294,7 @@ POST(sys_freebsd7_msgctl)
       break;
    }
 }
+#endif
 
 // SYS_msgget  225
 // int msgget(key_t key, int msgflg);
@@ -2354,6 +2358,7 @@ POST(sys_shmat)
 
 // 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);
@@ -2377,6 +2382,7 @@ POST(sys_freebsd7_shmctl)
       POST_MEM_WRITE( ARG3, sizeof(struct vki_shmid_ds_old) );
    }
 }
+#endif
 
 // SYS_shmdt   230
 // int shmdt(const void *addr);
@@ -6264,7 +6270,7 @@ PRE(sys_aio_mlock)
 }
 
 // SYS_procctl 544
-// amd64 / x86
+// amd64 / x86 / arm64
 
 // SYS_ppoll   545
 // int ppoll(struct pollfd fds[], nfds_t nfds,
@@ -7451,18 +7457,24 @@ const SyscallTableEntry ML_(syscall_table)[] = {
    // 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
 
index 069af4c2d77191533e50bebbd76bddaed3454c6b..a75d298fc2386697c10d2ec2921c3e49bcf14ba9 100644 (file)
@@ -1307,12 +1307,8 @@ POST(sys_wait6)
    }
 }
 
-// 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 )",
@@ -1320,7 +1316,7 @@ PRE(sys_procctl)
    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:
@@ -1330,13 +1326,13 @@ PRE(sys_procctl)
    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
@@ -1350,15 +1346,15 @@ PRE(sys_procctl)
        *
        * 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:
index 399f14e5cccd85100721e7749a3b376d63617b3e..62093a6c25297e84d8d42c83c5b9098d974b7a31 100644 (file)
 #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
index bdacf23e0d19ef3a2babed21a273de7ab60ad8b8..c76db8ecdb7fecbbaa5041f889ac868439808467 100644 (file)
@@ -781,7 +781,10 @@ int main(void)
       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;
@@ -800,7 +803,7 @@ int main(void)
 
    /* 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;
@@ -825,7 +828,7 @@ int main(void)
    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;