Module Name: src Committed By: christos Date: Sat Mar 19 21:27:38 UTC 2016
Modified Files: src/lib/libc/arch/x86_64/sys: ptrace.S Log Message: Save and restore all the registers we need instead of playing tricks and "knowing" which registers the compiler clobbers. gcc-5.3 clobbers both rcx and rdx... To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/lib/libc/arch/x86_64/sys/ptrace.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/arch/x86_64/sys/ptrace.S diff -u src/lib/libc/arch/x86_64/sys/ptrace.S:1.6 src/lib/libc/arch/x86_64/sys/ptrace.S:1.7 --- src/lib/libc/arch/x86_64/sys/ptrace.S:1.6 Mon Nov 24 10:33:18 2014 +++ src/lib/libc/arch/x86_64/sys/ptrace.S Sat Mar 19 17:27:38 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ptrace.S,v 1.6 2014/11/24 15:33:18 christos Exp $ */ +/* $NetBSD: ptrace.S,v 1.7 2016/03/19 21:27:38 christos Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -36,7 +36,7 @@ #include <machine/asm.h> #if defined(SYSLIBC_SCCS) && !defined(lint) - RCSID("$NetBSD: ptrace.S,v 1.6 2014/11/24 15:33:18 christos Exp $") + RCSID("$NetBSD: ptrace.S,v 1.7 2016/03/19 21:27:38 christos Exp $") #endif /* SYSLIBC_SCCS and not lint */ #include "SYS.h" @@ -46,19 +46,21 @@ ENTRY(ptrace) /* * The following code calls __errno() to set it to 0 before - * calling ptrace(2). The libc version of __errno() does not use - * any registers, but the libpthread version clobbers %rcx - * before we get a chance to store it in %r10. So we save it - * in %r10 and restore it. + * calling ptrace(2). Preserve and restore all the parameters */ - movq %rcx, %r10 + pushq %rdi + pushq %rsi + pushq %rdx + pushq %rcx #ifdef __PIC__ call PIC_PLT(_C_LABEL(__errno)) #else call _C_LABEL(__errno) #endif /* __PIC__ */ - movl $0,(%rax) - movq %r10, %rcx + popq %rcx + popq %rdx + popq %rsi + popq %rdi SYSTRAP(ptrace) jc err ret