Wednesday, November 01, 2023

devel/valgrind: removal syscall(2)

I have moved my email address from asou@soum.co.jp to
takeasou.masato@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

返信転送

No comments:

Post a Comment