From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22111 invoked by alias); 21 Dec 2009 20:10:41 -0000 Received: (qmail 22102 invoked by uid 22791); 21 Dec 2009 20:10:40 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,HK_OBFDOM,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.44.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 21 Dec 2009 20:10:36 +0000 Received: from wpaz17.hot.corp.google.com (wpaz17.hot.corp.google.com [172.24.198.81]) by smtp-out.google.com with ESMTP id nBLKAYpf027282 for ; Mon, 21 Dec 2009 12:10:34 -0800 Received: from ruffy.mtv.corp.google.com (ruffy.mtv.corp.google.com [172.18.118.116]) by wpaz17.hot.corp.google.com with ESMTP id nBLKAXbL002362 for ; Mon, 21 Dec 2009 12:10:33 -0800 Received: by ruffy.mtv.corp.google.com (Postfix, from userid 67641) id 2B76C84412; Mon, 21 Dec 2009 12:10:33 -0800 (PST) To: gdb-patches@sourceware.org Subject: [patch] fix tkill_failed gcc warning in gdbserver Message-Id: <20091221201033.2B76C84412@ruffy.mtv.corp.google.com> Date: Mon, 21 Dec 2009 20:10:00 -0000 From: dje@google.com (Doug Evans) X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-12/txt/msg00314.txt.bz2 Hi. android doesn't have SYS_tkill but it does have __NR_tkill. I will check this in tomorrow, pending objections. This includes some minor tweaking to linux-nat.c:kill_lwp. The code changes are technically better, and I like the consistency. 2009-12-21 Doug Evans gdb/ * linux-nat.c (kill_lwp): Minor cleanup, move definition of tkill_failed into ifdef HAVE_TKILL_SYSCALL. Move setting of errno there too. Delete unnecessary resetting of errno after syscall. Minor comment changes to match gdbserver/linux-low.c:kill_lwp. gdbserver/ * configure.ac: Look for both __NR_tkill and SYS_tkill. Define TKILL_SYSCALL_NAME to the one we find, if any. * config.in: Regenerate. * configure: Regenerate. * linux-low.c (kill_lwp): Move definition of tkill_failed to ifdef TKILL_SYSCALL_NAME to avoid gcc warning. Move setting of errno there too. Delete unnecessary resetting of errno after syscall. Minor comment changes to match gdb/linux-nat.c:kill_lwp. Index: linux-nat.c =================================================================== RCS file: /cvs/src/src/gdb/linux-nat.c,v retrieving revision 1.156 diff -u -p -r1.156 linux-nat.c --- linux-nat.c 20 Nov 2009 19:48:45 -0000 1.156 +++ linux-nat.c 21 Dec 2009 19:43:51 -0000 @@ -2034,27 +2034,29 @@ linux_nat_resume (struct target_ops *ops target_async (inferior_event_handler, 0); } -/* Issue kill to specified lwp. */ - -static int tkill_failed; +/* Send a signal to an LWP. */ static int kill_lwp (int lwpid, int signo) { - errno = 0; - -/* Use tkill, if possible, in case we are using nptl threads. If tkill - fails, then we are not using nptl threads and we should be using kill. */ + /* Use tkill, if possible, in case we are using nptl threads. If tkill + fails, then we are not using nptl threads and we should be using kill. */ #ifdef HAVE_TKILL_SYSCALL - if (!tkill_failed) - { - int ret = syscall (__NR_tkill, lwpid, signo); - if (errno != ENOSYS) - return ret; - errno = 0; - tkill_failed = 1; - } + { + static int tkill_failed; + + if (!tkill_failed) + { + int ret; + + errno = 0; + ret = syscall (__NR_tkill, lwpid, signo); + if (errno != ENOSYS) + return ret; + tkill_failed = 1; + } + } #endif return kill (lwpid, signo); Index: gdbserver/configure.ac =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/configure.ac,v retrieving revision 1.30 diff -u -p -r1.30 configure.ac --- gdbserver/configure.ac 17 Nov 2009 17:58:15 -0000 1.30 +++ gdbserver/configure.ac 21 Dec 2009 19:43:51 -0000 @@ -1,5 +1,5 @@ dnl Autoconf configure script for GDB server. -dnl Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +dnl Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 dnl Free Software Foundation, Inc. dnl dnl This file is part of GDB. @@ -196,6 +205,34 @@ AS_HELP_STRING([--with-libthread-db=PATH srv_libs="$srv_libthread_db_path" ]) +dnl See if sys/syscall.h has __NR_tkill or SYS_tkill. +AC_CACHE_CHECK([whether has __NR_tkill], + gdb_cv_sys_syscall_h_has_NR_tkill, + AC_TRY_COMPILE( + [#include ], + [int i = __NR_tkill;], + gdb_cv_sys_syscall_h_has_NR_tkill=yes, + gdb_cv_sys_syscall_h_has_NR_tkill=no + ) +) +if test "x$gdb_cv_sys_syscall_h_has_NR_tkill" != "xyes"; then + AC_CACHE_CHECK([whether has __SYS_tkill], + gdb_cv_sys_syscall_h_has_SYS_tkill, + AC_TRY_COMPILE( + [#include ], + [int i = SYS_tkill;], + gdb_cv_sys_syscall_h_has_SYS_tkill=yes, + gdb_cv_sys_syscall_h_has_SYS_tkill=no + ) + ) +fi +dnl See if we can issue tkill syscall. +if test "x$gdb_cv_sys_syscall_h_has_NR_tkill" = "xyes"; then + AC_DEFINE(TKILL_SYSCALL_NAME, __NR_tkill, [Name of the tkill syscall.]) +elif test "x$gdb_cv_sys_syscall_h_has_SYS_tkill" = "xyes"; then + AC_DEFINE(TKILL_SYSCALL_NAME, SYS_tkill, [Name of the tkill syscall.]) +fi + if test "$srv_xmlfiles" != ""; then srv_xmlbuiltin="xml-builtin.o" AC_DEFINE(USE_XML, 1, [Define if an XML target description is available.]) Index: gdbserver/linux-low.c =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/linux-low.c,v retrieving revision 1.117 diff -u -p -r1.117 linux-low.c --- gdbserver/linux-low.c 21 Dec 2009 17:54:03 -0000 1.117 +++ gdbserver/linux-low.c 21 Dec 2009 19:43:51 -0000 @@ -1572,25 +1572,29 @@ linux_wait (ptid_t ptid, return event_ptid; } -/* Send a signal to an LWP. For LinuxThreads, kill is enough; however, if - thread groups are in use, we need to use tkill. */ +/* Send a signal to an LWP. */ static int kill_lwp (unsigned long lwpid, int signo) { - static int tkill_failed; + /* Use tkill, if possible, in case we are using nptl threads. If tkill + fails, then we are not using nptl threads and we should be using kill. */ - errno = 0; - -#ifdef SYS_tkill - if (!tkill_failed) - { - int ret = syscall (SYS_tkill, lwpid, signo); - if (errno != ENOSYS) - return ret; - errno = 0; - tkill_failed = 1; - } +#ifdef TKILL_SYSCALL_NAME + { + static int tkill_failed; + + if (!tkill_failed) + { + int ret; + + errno = 0; + ret = syscall (TKILL_SYSCALL_NAME, lwpid, signo); + if (errno != ENOSYS) + return ret; + tkill_failed = 1; + } + } #endif return kill (lwpid, signo);