On Fri, Nov 17, 2023 at 03:04:02PM +0900, ASOU Masato wrote:
> ping
> 
> I confermed the operation using snapshot created onfNovember 16th.
> --
> ASOU Masato
> 
> ---------- Forwarded message ---------
> From: 朝生正人 <takeasou.mas...@gmail.com>
> Date: 2023年11月2日(木) 10:45
> Subject: devel/valgrind: removal syscall(2)
> To: <ports@openbsd.org>
> 
> 
> I have moved my email address from a...@soum.co.jp to
> takeasou.mas...@gmail.com.

Gmail doesn't accept my mails, hence me using your OpenBSD address.

> 
> This is a diff to remove syscall(2) in Valgrind.
> 
> ok?
> --
> ASOU Masato
> 

OK kn

> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/valgrind/Makefile,v
> diff -u -p -r1.33 Makefile
> --- Makefile    18 Oct 2023 03:27:55 -0000      1.33
> +++ Makefile    2 Nov 2023 01:16:02 -0000
> @@ -5,7 +5,7 @@ CATEGORIES =            devel
> 
>  V =                    3.21.0
>  DISTNAME =             valgrind-${V}
> -REVISION =             1
> +REVISION =             2
>  EXTRACT_SUFX =         .tar.bz2
> 
>  SITES =                        https://sourceware.org/pub/valgrind/
> Index: patches/patch-coregrind_m_syswrap_syswrap_main_c
> ===================================================================
> RCS file:
> /cvs/ports/devel/valgrind/patches/patch-coregrind_m_syswrap_syswrap_main_c,v
> diff -u -p -r1.1 patch-coregrind_m_syswrap_syswrap_main_c
> --- patches/patch-coregrind_m_syswrap_syswrap_main_c    18 Jul 2023
> 06:17:15 -0000      1.1
> +++ patches/patch-coregrind_m_syswrap_syswrap_main_c    2 Nov 2023 01:16:03
> -0000
> @@ -18,17 +18,12 @@
>      Int real_syscallno;
>   #  endif
>   #  if defined(VGO_linux)
> -@@ -369,6 +369,17 @@
> +@@ -369,6 +369,12 @@
>               real_syscallno, &tst->arch.vex,
>               syscall_mask, &saved, sizeof(vki_sigset_t)
>            );
>  +#  elif defined(VGO_openbsd)
> -+   if (tst->arch.vex.guest_SC_CLASS == VG_OPENBSD_SYSCALL0)
> -+      real_syscallno = __NR_syscall;
> -+   else if (tst->arch.vex.guest_SC_CLASS == VG_OPENBSD_SYSCALL198)
> -+      real_syscallno = __NR___syscall;
> -+   else
> -+      real_syscallno = syscallno;
> ++   real_syscallno = syscallno;
>  +   err = ML_(do_syscall_for_client_WRK)(
>  +            real_syscallno, &tst->arch.vex,
>  +            syscall_mask, &saved, sizeof(vki_sigset_t)
> @@ -36,7 +31,7 @@
>   #  elif defined(VGO_darwin)
>      switch (VG_DARWIN_SYSNO_CLASS(syscallno)) {
>         case VG_DARWIN_SYSCALL_CLASS_UNIX:
> -@@ -623,6 +634,153 @@
> +@@ -623,6 +629,112 @@
>         canonical->arg8  = stack[2];
>      }
> 
> @@ -117,23 +112,8 @@
>  +   VexGuestX86State* gst = (VexGuestX86State*)gst_vanilla;
>  +   UWord *stack = (UWord *)gst->guest_ESP;
>  +
> -+   // OpenBSD supports different calling conventions
> -+   switch (gst->guest_EAX) {
> -+   case __NR_syscall:
> -+      canonical->class = VG_OPENBSD_SYSCALL0;
> -+      canonical->sysno = stack[1];
> -+      stack += 1;
> -+      break;
> -+   case __NR___syscall:
> -+      canonical->class = VG_OPENBSD_SYSCALL198;
> -+      canonical->sysno = stack[1];
> -+      stack += 2;
> -+      break;
> -+   default:
> -+      canonical->class = 0;
> -+      canonical->sysno = gst->guest_EAX;
> -+      break;
> -+   }
> ++   canonical->class = 0;
> ++   canonical->sysno = gst->guest_EAX;
>  +   // stack[0] is a (fake) return address
>  +   canonical->arg1  = stack[1];
>  +   canonical->arg2  = stack[2];
> @@ -148,49 +128,23 @@
>  +   VexGuestAMD64State* gst = (VexGuestAMD64State*)gst_vanilla;
>  +   UWord *stack = (UWord *)gst->guest_RSP;
>  +
> -+   // OpenBSD supports different calling conventions
> -+   switch (gst->guest_RAX) {
> -+   case __NR_syscall:
> -+      canonical->klass = VG_OPENBSD_SYSCALL0;
> -+      canonical->sysno = gst->guest_RDI;
> -+      break;
> -+   case __NR___syscall:
> -+      canonical->klass = VG_OPENBSD_SYSCALL198;
> -+      canonical->sysno = gst->guest_RDI;
> -+      break;
> -+   default:
> -+      canonical->klass = 0;
> -+      canonical->sysno = gst->guest_RAX;
> -+      break;
> -+   }
> -+   // stack[0] is a (fake) return address
> -+   if (canonical->klass != VG_OPENBSD_SYSCALL0 && canonical->klass !=
> VG_OPENBSD_SYSCALL198) {
> -+      // stack[0] is return address
> -+      canonical->arg1  = gst->guest_RDI;
> -+      canonical->arg2  = gst->guest_RSI;
> -+      canonical->arg3  = gst->guest_RDX;
> -+      canonical->arg4  = gst->guest_R10;
> -+      canonical->arg5  = gst->guest_R8;
> -+      canonical->arg6  = gst->guest_R9;
> -+      canonical->arg7  = stack[1];
> -+      canonical->arg8  = stack[2];
> -+   } else {
> -+      // stack[0] is return address
> -+      canonical->arg1  = gst->guest_RSI;
> -+      canonical->arg2  = gst->guest_RDX;
> -+      canonical->arg3  = gst->guest_R10;
> -+      canonical->arg4  = gst->guest_R8;
> -+      canonical->arg5  = gst->guest_R9;
> -+      canonical->arg6  = stack[1];
> -+      canonical->arg7  = stack[2];
> -+      canonical->arg8  = stack[3];
> -+   }
> ++   canonical->klass = 0;
> ++   canonical->sysno = gst->guest_RAX;
> ++   // stack[0] is return address
> ++   canonical->arg1  = gst->guest_RDI;
> ++   canonical->arg2  = gst->guest_RSI;
> ++   canonical->arg3  = gst->guest_RDX;
> ++   canonical->arg4  = gst->guest_R10;
> ++   canonical->arg5  = gst->guest_R8;
> ++   canonical->arg6  = gst->guest_R9;
> ++   canonical->arg7  = stack[1];
> ++   canonical->arg8  = stack[2];
>  +
>  +
>   #elif defined(VGP_arm_linux)
>      VexGuestARMState* gst = (VexGuestARMState*)gst_vanilla;
>      canonical->sysno = gst->guest_R7;
> -@@ -1015,6 +1173,79 @@
> +@@ -1015,6 +1127,36 @@
>          stack[2]       = canonical->arg8;
>      }
> 
> @@ -199,21 +153,7 @@
>  +   UWord *stack = (UWord *)gst->guest_ESP;
>  +
>  +   // stack[0] is a (fake) return address
> -+   switch (canonical->klass) {
> -+   case VG_OPENBSD_SYSCALL0:
> -+      gst->guest_EAX = __NR_syscall;
> -+      stack[1] = canonical->sysno;
> -+      stack++;
> -+      break;
> -+   case VG_OPENBSD_SYSCALL198:
> -+      gst->guest_EAX = __NR___syscall;
> -+      stack[1] = canonical->sysno;
> -+      stack += 2;
> -+      break;
> -+   default:
> -+      gst->guest_EAX = canonical->sysno;
> -+      break;
> -+   }
> ++   gst->guest_EAX = canonical->sysno;
>  +   stack[1] = canonical->arg1;
>  +   stack[2] = canonical->arg2;
>  +   stack[3] = canonical->arg3;
> @@ -228,49 +168,20 @@
>  +   UWord *stack = (UWord *)gst->guest_RSP;
>  +
>  +   // stack[0] is a (fake) return address
> -+   switch (canonical->klass) {
> -+   case VG_OPENBSD_SYSCALL0:
> -+      gst->guest_RAX = __NR_syscall;
> -+      gst->guest_RDI = canonical->sysno;
> -+      gst->guest_RSI = canonical->arg1;
> -+      gst->guest_RDX = canonical->arg2;
> -+      gst->guest_R10 = canonical->arg3;
> -+      gst->guest_R8  = canonical->arg4;
> -+      gst->guest_R9  = canonical->arg5;
> -+      stack[1]       = canonical->arg6;
> -+      stack[2]       = canonical->arg7;
> -+      stack[3]       = canonical->arg8;
> -+      break;
> -+   case VG_OPENBSD_SYSCALL198:
> -+      gst->guest_RAX = __NR___syscall;
> -+      gst->guest_RDI = canonical->sysno;
> -+      gst->guest_RSI = canonical->arg1;
> -+      gst->guest_RDX = canonical->arg2;
> -+      gst->guest_R10 = canonical->arg3;
> -+      gst->guest_R8  = canonical->arg4;
> -+      gst->guest_R9  = canonical->arg5;
> -+      stack[1]       = canonical->arg6;
> -+      stack[2]       = canonical->arg7;
> -+      stack[3]       = canonical->arg8;
> -+      break;
> -+   default:
> -+      gst->guest_RAX = canonical->sysno;
> -+      gst->guest_RDI = canonical->arg1;
> -+      gst->guest_RSI = canonical->arg2;
> -+      gst->guest_RDX = canonical->arg3;
> -+      gst->guest_R10 = canonical->arg4;
> -+      gst->guest_R8  = canonical->arg5;
> -+      gst->guest_R9  = canonical->arg6;
> -+      stack[1]       = canonical->arg7;
> -+      stack[2]       = canonical->arg8;
> -+      break;
> -+   }
> -+
> ++   gst->guest_RAX = canonical->sysno;
> ++   gst->guest_RDI = canonical->arg1;
> ++   gst->guest_RSI = canonical->arg2;
> ++   gst->guest_RDX = canonical->arg3;
> ++   gst->guest_R10 = canonical->arg4;
> ++   gst->guest_R8  = canonical->arg5;
> ++   gst->guest_R9  = canonical->arg6;
> ++   stack[1]       = canonical->arg7;
> ++   stack[2]       = canonical->arg8;
>  +
>   #elif defined(VGP_arm_linux)
>      VexGuestARMState* gst = (VexGuestARMState*)gst_vanilla;
>      gst->guest_R7 = canonical->sysno;
> -@@ -1209,6 +1440,15 @@
> +@@ -1209,6 +1351,15 @@
>                           (flags & 1) != 0 ? True : False);
>      canonical->what = SsComplete;
> 
> @@ -286,7 +197,7 @@
>   #  elif defined(VGP_arm_linux)
>      VexGuestARMState* gst = (VexGuestARMState*)gst_vanilla;
>      canonical->sres = VG_(mk_SysRes_arm_linux)( gst->guest_R0 );
> -@@ -1248,6 +1488,14 @@
> +@@ -1248,6 +1399,14 @@
>                           (flags & 1) != 0 ? True : False);
>      canonical->what = SsComplete;
> 
> @@ -301,7 +212,7 @@
>   #  elif defined(VGP_x86_darwin)
>      /* duplicates logic in m_signals.VG_UCONTEXT_SYSCALL_SYSRES */
>      VexGuestX86State* gst = (VexGuestX86State*)gst_vanilla;
> -@@ -1451,7 +1699,7 @@
> +@@ -1451,7 +1610,7 @@
>      VG_TRACK( post_reg_write, Vg_CoreSysCall, tid,
>                OFFSET_arm64_X0, sizeof(UWord) );
> 
> @@ -310,7 +221,7 @@
>      VexGuestX86State* gst = (VexGuestX86State*)gst_vanilla;
>      vg_assert(canonical->what == SsComplete);
>      if (sr_isError(canonical->sres)) {
> -@@ -1470,13 +1718,18 @@
> +@@ -1470,13 +1629,18 @@
>      VG_TRACK( post_reg_write, Vg_CoreSysCall, tid,
>         offsetof(VexGuestX86State, guest_CC_DEP1), sizeof(UInt) );
> 
> @@ -330,7 +241,7 @@
>         gst->guest_RAX = sr_Res(canonical->sres);
>         gst->guest_RDX = sr_ResHI(canonical->sres);
>         LibVEX_GuestAMD64_put_rflag_c(0, gst);
> -@@ -1719,7 +1972,7 @@
> +@@ -1719,7 +1883,7 @@
>      layout->o_arg7   = OFFSET_ppc64_GPR9;
>      layout->uu_arg8  = -1; /* impossible value */
> 
> @@ -339,7 +250,7 @@
>      layout->o_sysno  = OFFSET_x86_EAX;
>      // syscall parameters are on stack in C convention
>      layout->s_arg1   = sizeof(UWord) * 1;
> -@@ -1731,7 +1984,7 @@
> +@@ -1731,7 +1895,7 @@
>      layout->s_arg7   = sizeof(UWord) * 7;
>      layout->s_arg8   = sizeof(UWord) * 8;
> 
> @@ -348,7 +259,7 @@
>      layout->o_sysno  = OFFSET_amd64_RAX;
>      layout->o_arg1   = OFFSET_amd64_RDI;
>      layout->o_arg2   = OFFSET_amd64_RSI;
> -@@ -1923,6 +2176,9 @@
> +@@ -1923,6 +2087,9 @@
>   #  elif defined(VGO_freebsd)
>      sys = ML_(get_freebsd_syscall_entry)( syscallno );
> 
> @@ -358,7 +269,7 @@
>   #  elif defined(VGO_darwin)
>      Int idx = VG_DARWIN_SYSNO_INDEX(syscallno);
> 
> -@@ -2564,7 +2820,7 @@
> +@@ -2564,7 +2731,7 @@
>   /* These are addresses within ML_(do_syscall_for_client_WRK).  See
>      syscall-$PLAT.S for details.
>   */
> @@ -367,7 +278,7 @@
>     extern const Addr ML_(blksys_setup);
>     extern const Addr ML_(blksys_restart);
>     extern const Addr ML_(blksys_complete);
> -@@ -2745,7 +3001,7 @@
> +@@ -2745,7 +2912,7 @@
>         vg_assert(p[0] == 0x01 && p[1] == 0x00 && p[2] == 0x00 && p[3] ==
> 0xD4);
>      }
> 
> @@ -376,7 +287,7 @@
>      /* XXX: we support different syscall methods. */
>      arch->vex.guest_EIP -= 2;             // sizeof(int $0x80)
> 
> -@@ -2765,7 +3021,7 @@
> +@@ -2765,7 +2932,7 @@
>         vg_assert(p[0] == 0xcd && p[1] == 0x80);
>      }
> 
> @@ -385,7 +296,7 @@
>      /* XXX: we support different syscall methods. */
>      arch->vex.guest_RIP -= 2;             // sizeof(syscall)
> 
> -@@ -3035,7 +3291,7 @@
> +@@ -3035,7 +3202,7 @@
>      th_regs = &tst->arch;
>      sci     = & syscallInfo[tid];
> 
> @@ -394,7 +305,7 @@
>      outside_range
>         = ip < ML_(blksys_setup) || ip >= ML_(blksys_finished);
>      in_setup_to_restart
> -@@ -3057,10 +3313,20 @@
> +@@ -3057,10 +3224,20 @@
>         = (ip >= ML_(blksys_complete) && ip < ML_(blksys_committed)) ||
>         ((ip+8) == ML_(blksys_complete));
>   #else
> Index: patches/patch-include_vki_vki_scnums_openbsd_h
> ===================================================================
> RCS file:
> /cvs/ports/devel/valgrind/patches/patch-include_vki_vki_scnums_openbsd_h,v
> diff -u -p -r1.3 patch-include_vki_vki_scnums_openbsd_h
> --- patches/patch-include_vki_vki_scnums_openbsd_h      18 Jul 2023
> 06:17:15 -0000      1.3
> +++ patches/patch-include_vki_vki_scnums_openbsd_h      2 Nov 2023 01:16:03
> -0000
> @@ -1,6 +1,6 @@
>  --- include/vki/vki-scnums-openbsd.h.orig
>  +++ include/vki/vki-scnums-openbsd.h
> -@@ -0,0 +1,269 @@
> +@@ -0,0 +1,265 @@
>  +
>  +/*
>  +   This file is part of Valgrind, a dynamic binary instrumentation
> @@ -31,12 +31,9 @@
>  +#define __VKI_UNISTD_OPENBSD_H
>  +
>  +#define VG_OPENBSD_SYSCALL_STD        0
> -+#define VG_OPENBSD_SYSCALL0   1
> -+#define VG_OPENBSD_SYSCALL198 2
>  +
>  +// From sys/syscall.h
>  +
> -+#define       __NR_syscall            0
>  +#define       __NR_exit               1
>  +#define       __NR_fork               2
>  +#define       __NR_read               3
> @@ -200,7 +197,6 @@
>  +#define       __NR_getrlimit          194
>  +#define       __NR_setrlimit          195
>  +#define       __NR_pad_mmap           197
> -+#define       __NR___syscall          198
>  +#define       __NR_pad_lseek          199
>  +#define       __NR_pad_truncate       200
>  +#define       __NR_pad_ftruncate      201
> 
> 返信転送

Reply via email to