]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Minor sigreturn code cleaning for sigreturn / FreeBSD
authorPaul Floyd <pjfloyd@wanadoo.fr>
Thu, 9 Dec 2021 21:11:04 +0000 (22:11 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Thu, 9 Dec 2021 21:11:04 +0000 (22:11 +0100)
More comments + wrapper arg names matching man page
(even if the syscall should never get called directly
from client code).

coregrind/m_syswrap/syswrap-amd64-freebsd.c
coregrind/m_syswrap/syswrap-x86-freebsd.c
coregrind/m_trampoline.S

index 076f5b4c4d7f0d8b93541598baf2667047728172..c5685c47734f988d3f91da4f57b1f48ce286c234 100644 (file)
@@ -424,8 +424,8 @@ PRE(sys_sigreturn)
    PRE_REG_READ1(int, "sigreturn",
                  struct vki_ucontext *, ucp);
 
-   PRE_MEM_READ( "sigreturn(ucp)", ARG1, sizeof(struct vki_ucontext) );
-   PRE_MEM_WRITE( "sigreturn(ucp)", ARG1, sizeof(struct vki_ucontext) );
+   PRE_MEM_READ( "sigreturn(scp)", ARG1, sizeof(struct vki_ucontext) );
+   PRE_MEM_WRITE( "sigreturn(scp)", ARG1, sizeof(struct vki_ucontext) );
 }
 
 static void restore_mcontext(ThreadState *tst, struct vki_mcontext *sc)
index 0c8da316f9f6f01638fde0274aa5a16c487ba198..4fd1ce5011baccd10911f0fbcc3554751ed910e8 100644 (file)
@@ -1468,10 +1468,10 @@ PRE(sys_fake_sigreturn)
    struct vki_ucontext *uc;
    PRINT("sys_sigreturn ( %#" FMT_REGWORD "x )", ARG1);
    PRE_REG_READ1(long, "sigreturn",
-                 struct vki_ucontext *, ucp);
+                 struct vki_ucontext *, scp);
 
-   PRE_MEM_READ( "sigreturn(ucp)", ARG1, sizeof(struct vki_ucontext) );
-   PRE_MEM_WRITE( "sigreturn(ucp)", ARG1, sizeof(struct vki_ucontext) );
+   PRE_MEM_READ( "sigreturn(scp)", ARG1, sizeof(struct vki_ucontext) );
+   PRE_MEM_WRITE( "sigreturn(scp)", ARG1, sizeof(struct vki_ucontext) );
 
    vg_assert(VG_(is_valid_tid)(tid));
    vg_assert(tid >= 1 && tid < VG_N_THREADS);
index ad1db3cb9ff9e77a88aaf0c4ca004b4eb41d6ce1..da96972323824bdbc9d3a91799428127c557a274 100644 (file)
@@ -899,7 +899,29 @@ VG_(trampoline_stuff_start):
 VG_(amd64_freebsd_SUBST_FOR_sigreturn):
         /* This is a very specific sequence which GDB uses to
            recognize signal handler frames. */
+
         movq    $__NR_fake_sigreturn, %rax
+
+        /* running the preprocessor on
+         * src/amd64.amd64/lib/libc/sigreturn.S
+         * gives
+         * .text; .p2align 4,0x90; .globl __sys_sigreturn;
+         * .type __sys_sigreturn,@function; __sys_sigreturn:;
+         * .cfi_startproc; .weak sigreturn; .equ sigreturn,__sys_sigreturn;
+         *  .weak _sigreturn; .equ _sigreturn,__sys_sigreturn;
+         *  mov $417,%eax;
+         * movq %rcx, %r10;
+         * syscall; jb .cerror; ret; .size __sys_sigreturn, . - __sys_sigreturn;
+         *  .cfi_endproc
+         */
+
+        /*
+         * sigframe in sigframe-amd64-freebsd.c
+         * differs from sigframe in /usr/include/x86/sigframe.h
+         * by having the address to this trampoline first
+         * so I assume that the +8 is to get back to the
+         * FreeBSD sigframe
+         */
         movq   %rsp, %rdi
         addq   $8,%rdi
         syscall