From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7128 invoked by alias); 30 Mar 2012 20:29:23 -0000 Received: (qmail 7118 invoked by uid 22791); 30 Mar 2012 20:29:21 -0000 X-SWARE-Spam-Status: No, hits=-3.6 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_EG X-Spam-Check-By: sourceware.org Received: from mail-gy0-f169.google.com (HELO mail-gy0-f169.google.com) (209.85.160.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 30 Mar 2012 20:28:58 +0000 Received: by ghrr18 with SMTP id r18so738308ghr.0 for ; Fri, 30 Mar 2012 13:28:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=message-id:subject:from:to:cc:date:in-reply-to:references :organization:x-mailer:mime-version:x-gm-message-state:content-type :content-transfer-encoding; bh=RI7L0ATz8+mkXz61u/uST5cFdUWHCw+sg/l5TSbGawM=; b=c4XOiAPckqswf3jRCM75rLk+DppuRAnIhW8/mCPxXuSe2p2ZoZT9qFs3TuKdRzFUkT ReDyBxaiiIbiHPwH600H5LuNABpFX2oprs5+UBWrbrGUWT7j8o+Repi0XlV1LdvPWgvd +D504SqzWb+43Es55d6s7I45UA4EsGm+HQkmTkX4yRMbX2Sgoto8o95jXlVkgSi1IrVc 5dJbWtNzMHqDVkCJZKaZOQ6torq1zsek/mgW9Ys0bWT/DTJICeV73j/HVWvwLXMU6pNW 2HZ1bA43OYAIu0f6N1zPQ/xUfjQAKCyPfsI1rWA93ki4Rn954C01R9EUS+JVCV0EEqGc x+KA== Received: by 10.236.77.170 with SMTP id d30mr3324105yhe.16.1333139337775; Fri, 30 Mar 2012 13:28:57 -0700 (PDT) Received: from [192.168.1.50] (201.22.15.181.dynamic.adsl.gvt.net.br. [201.22.15.181]) by mx.google.com with ESMTPS id w44sm27487896yhk.17.2012.03.30.13.28.55 (version=SSLv3 cipher=OTHER); Fri, 30 Mar 2012 13:28:56 -0700 (PDT) Message-ID: <1333139333.11673.4.camel@hactar> Subject: Re: [RFA] handle android bionic ptrace in gdbserver. From: Thiago Jung Bauermann To: Pedro Alves Cc: Mark Kettenis , gdb-patches@sourceware.org Date: Fri, 30 Mar 2012 20:29:00 -0000 In-Reply-To: <4F7490E9.40903@redhat.com> References: <1332802002.30339.16.camel@hactar> <201203271611.q2RGBs2N025666@glazunov.sibelius.xs4all.nl> <1332894408.16415.14.camel@hactar> <4F7490E9.40903@redhat.com> Mime-Version: 1.0 X-Gm-Message-State: ALoCoQlE36v5BLccjAZZcFH/7blfZCn93KZbj5YXMFNMbOXlHRaM5ffeiIFPL1LvMka+ybfJUqAb Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit 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: 2012-03/txt/msg01072.txt.bz2 On Thu, 2012-03-29 at 17:42 +0100, Pedro Alves wrote: > On 03/28/2012 01:26 AM, Thiago Jung Bauermann wrote: > > Good catch, that's what happened indeed. I don't know what would be the > > correct fix. I changed the types of the variables that are passed to > > ptrace from int to long. At least it hurts the eyes less than two casts > > > in a row. > > :-) > > Honestly, I'd prefer the double cast, in order to leave the ptrace arg > type intricacy closest the the ptrace call as possible, instead of that care > being spread and diluted about. It's also what other places in the code > base already do (both gdb and gdbserver). Makes sense. I'm still wondering why the current code works on 64 bit Linux platforms though. Updated patch follows. -- []'s Thiago Jung Bauermann Linaro Toolchain Working Group 2012-03-30 Thiago Jung Bauermann * linux-low.h (PTRACE_ARG3_TYPE): Move macro from linux-low.c. (PTRACE_ARG4_TYPE): Likewise. (PTRACE_XFER_TYPE): Likewise. * linux-arm-low.c (arm_prepare_to_resume): Cast third argument of ptrace to PTRACE_ARG3_TYPE. * linux-low.c (PTRACE_ARG3_TYPE): Move macro to linux-low.h. (PTRACE_ARG4_TYPE): Likewise. (PTRACE_XFER_TYPE): Likewise. (linux_detach_one_lwp): Cast fourth argument of ptrace to long then PTRACE_ARG4_TYPE. (regsets_fetch_inferior_registers): Cast third argument of ptrace to long then PTRACE_ARG3_TYPE. (regsets_store_inferior_registers): Likewise. diff --git a/gdb/gdbserver/linux-arm-low.c b/gdb/gdbserver/linux-arm-low.c index bf1792b..c4d2000 100644 --- a/gdb/gdbserver/linux-arm-low.c +++ b/gdb/gdbserver/linux-arm-low.c @@ -709,13 +709,15 @@ arm_prepare_to_resume (struct lwp_info *lwp) errno = 0; if (arm_hwbp_control_is_enabled (proc_info->bpts[i].control)) - if (ptrace (PTRACE_SETHBPREGS, pid, ((i << 1) + 1), - &proc_info->bpts[i].address) < 0) + if (ptrace (PTRACE_SETHBPREGS, pid, + (PTRACE_ARG3_TYPE) ((i << 1) + 1), + &proc_info->bpts[i].address) < 0) perror_with_name ("Unexpected error setting breakpoint address"); if (arm_hwbp_control_is_initialized (proc_info->bpts[i].control)) - if (ptrace (PTRACE_SETHBPREGS, pid, ((i << 1) + 2), - &proc_info->bpts[i].control) < 0) + if (ptrace (PTRACE_SETHBPREGS, pid, + (PTRACE_ARG3_TYPE) ((i << 1) + 2), + &proc_info->bpts[i].control) < 0) perror_with_name ("Unexpected error setting breakpoint"); lwp_info->bpts_changed[i] = 0; @@ -727,13 +729,15 @@ arm_prepare_to_resume (struct lwp_info *lwp) errno = 0; if (arm_hwbp_control_is_enabled (proc_info->wpts[i].control)) - if (ptrace (PTRACE_SETHBPREGS, pid, -((i << 1) + 1), - &proc_info->wpts[i].address) < 0) + if (ptrace (PTRACE_SETHBPREGS, pid, + (PTRACE_ARG3_TYPE) -((i << 1) + 1), + &proc_info->wpts[i].address) < 0) perror_with_name ("Unexpected error setting watchpoint address"); if (arm_hwbp_control_is_initialized (proc_info->wpts[i].control)) - if (ptrace (PTRACE_SETHBPREGS, pid, -((i << 1) + 2), - &proc_info->wpts[i].control) < 0) + if (ptrace (PTRACE_SETHBPREGS, pid, + (PTRACE_ARG3_TYPE) -((i << 1) + 2), + &proc_info->wpts[i].control) < 0) perror_with_name ("Unexpected error setting watchpoint"); lwp_info->wpts_changed[i] = 0; diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index 043451d..51f6801 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -241,10 +241,6 @@ struct pending_signals struct pending_signals *prev; }; -#define PTRACE_ARG3_TYPE void * -#define PTRACE_ARG4_TYPE void * -#define PTRACE_XFER_TYPE long - #ifdef HAVE_LINUX_REGSETS static char *disabled_regsets; static int num_regsets; @@ -1151,7 +1147,8 @@ linux_detach_one_lwp (struct inferior_list_entry *entry, void *args) /* Finally, let it resume. */ if (the_low_target.prepare_to_resume != NULL) the_low_target.prepare_to_resume (lwp); - if (ptrace (PTRACE_DETACH, lwpid_of (lwp), 0, sig) < 0) + if (ptrace (PTRACE_DETACH, lwpid_of (lwp), 0, + (PTRACE_ARG4_TYPE) (long) sig) < 0) error (_("Can't detach %s: %s"), target_pid_to_str (ptid_of (lwp)), strerror (errno)); @@ -3991,7 +3988,8 @@ regsets_fetch_inferior_registers (struct regcache *regcache) data = buf; #ifndef __sparc__ - res = ptrace (regset->get_request, pid, nt_type, data); + res = ptrace (regset->get_request, pid, + (PTRACE_ARG3_TYPE) (long) nt_type, data); #else res = ptrace (regset->get_request, pid, data, nt_type); #endif @@ -4064,7 +4062,8 @@ regsets_store_inferior_registers (struct regcache *regcache) data = buf; #ifndef __sparc__ - res = ptrace (regset->get_request, pid, nt_type, data); + res = ptrace (regset->get_request, pid, + (PTRACE_ARG3_TYPE) (long) nt_type, data); #else res = ptrace (regset->get_request, pid, data, nt_type); #endif @@ -4076,7 +4075,8 @@ regsets_store_inferior_registers (struct regcache *regcache) /* Only now do we write the register set. */ #ifndef __sparc__ - res = ptrace (regset->set_request, pid, nt_type, data); + res = ptrace (regset->set_request, pid, + (PTRACE_ARG3_TYPE) (long) nt_type, data); #else res = ptrace (regset->set_request, pid, data, nt_type); #endif diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h index 07eda12..de4d1fa 100644 --- a/gdb/gdbserver/linux-low.h +++ b/gdb/gdbserver/linux-low.h @@ -24,6 +24,10 @@ #include "gdb_proc_service.h" +#define PTRACE_ARG3_TYPE void * +#define PTRACE_ARG4_TYPE void * +#define PTRACE_XFER_TYPE long + #ifdef HAVE_LINUX_REGSETS typedef void (*regset_fill_func) (struct regcache *, void *); typedef void (*regset_store_func) (struct regcache *, const void *);