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. This is a diff to remove syscall(2) in Valgrind. ok? -- ASOU Masato 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 返信転送