From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 58089 invoked by alias); 17 Oct 2015 21:41:39 -0000 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 Received: (qmail 57991 invoked by uid 89); 17 Oct 2015 21:41:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.5 required=5.0 tests=AWL,BAYES_00,SPF_PASS,T_RP_MATCHES_RCVD,UNSUBSCRIBE_BODY autolearn=no version=3.3.2 X-HELO: xyzzy.0x04.net Received: from xyzzy.0x04.net (HELO xyzzy.0x04.net) (109.74.193.254) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 17 Oct 2015 21:41:36 +0000 Received: from hogfather.0x04.net (89-65-84-110.dynamic.chello.pl [89.65.84.110]) by xyzzy.0x04.net (Postfix) with ESMTPS id CD5E83FF37 for ; Sat, 17 Oct 2015 23:41:43 +0200 (CEST) Received: by hogfather.0x04.net (Postfix, from userid 1000) id 1A99E580145; Sat, 17 Oct 2015 23:41:27 +0200 (CEST) From: =?UTF-8?q?Marcin=20Ko=C5=9Bcielnicki?= To: gdb-patches@sourceware.org Cc: =?UTF-8?q?Marcin=20Ko=C5=9Bcielnicki?= Subject: [PATCH 07/11] gdb/linux-record: Fix [sg]etgroups16 syscall Date: Sat, 17 Oct 2015 21:41:00 -0000 Message-Id: <1445118081-10908-8-git-send-email-koriakin@0x04.net> In-Reply-To: <1445118081-10908-1-git-send-email-koriakin@0x04.net> References: <1445118081-10908-1-git-send-email-koriakin@0x04.net> X-SW-Source: 2015-10/txt/msg00307.txt.bz2 Memory size for getgroups16 needs to be multiplied by entry count, and only needs recording if the pointer is non-NULL. setgroups16, on the other hand, doesn't write to user memory and doesn't need special handling at all. --- gdb/linux-record.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/gdb/linux-record.c b/gdb/linux-record.c index dbd8f14..25cbda1 100644 --- a/gdb/linux-record.c +++ b/gdb/linux-record.c @@ -628,16 +628,19 @@ record_linux_system_call (enum gdb_syscall syscall, case gdb_sys_getgroups16: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_gid_t)) - return -1; + if (tmpulongest) + { + ULONGEST gidsetsize; + + regcache_raw_read_unsigned (regcache, tdep->arg1, + &gidsetsize); + tmpint = tdep->size_old_gid_t * (int) gidsetsize; + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint)) + return -1; + } break; case gdb_sys_setgroups16: - regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_old_gid_t)) - return -1; break; case gdb_old_select: -- 2.6.1