From patchwork Thu Oct 22 13:39:18 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marcin_Ko=C5=9Bcielnicki?= X-Patchwork-Id: 9324 Received: (qmail 51501 invoked by alias); 22 Oct 2015 13:45:19 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 51421 invoked by uid 89); 22 Oct 2015 13:45:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, SPF_PASS autolearn=ham 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; Thu, 22 Oct 2015 13:45:16 +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 2BA7A40135; Thu, 22 Oct 2015 15:39:55 +0200 (CEST) Received: by hogfather.0x04.net (Postfix, from userid 1000) id 1C71E5800AC; Thu, 22 Oct 2015 15:39:41 +0200 (CEST) From: =?UTF-8?q?Marcin=20Ko=C5=9Bcielnicki?= To: palves@redhat.com, qiyaoltc@gmail.com Cc: gdb-patches@sourceware.org, =?UTF-8?q?Marcin=20Ko=C5=9Bcielnicki?= Subject: [PATCH v2 05/13] gdb/linux-record: Fix readdir and getdents handling Date: Thu, 22 Oct 2015 15:39:18 +0200 Message-Id: <1445521166-14492-5-git-send-email-koriakin@0x04.net> In-Reply-To: <1445521166-14492-1-git-send-email-koriakin@0x04.net> References: <5628E5D6.5020706@0x04.net> <1445521166-14492-1-git-send-email-koriakin@0x04.net> MIME-Version: 1.0 getdents buffer size is given in bytes, not dirent entries (which have variable size anyway). We don't need size_dirent and size_dirent64 for this reason. readdir, on the other hand, needs size of old_linux_dirent, which is a somewhat different structure. Accordingly, rename size_dirent to size_old_dirent. gdb/ChangeLog: * aarch64-linux-tdep.c (aarch64_linux_init_abi): Remove size_dirent{,64}, add size_old_dirent. * amd64-linux-tdep.c (amd64_linux_init_abi): Remove size_dirent{,64}, add size_old_dirent. (amd64_x32_linux_init_abi): Remove size_dirent{,64}, add size_old_dirent. * arm-linux-tdep.c (arm_linux_init_abi): Remove size_dirent{,64}, add size_old_dirent. * i386-linux-tdep.c (i386_linux_init_abi): Remove size_dirent{,64}, add size_old_dirent. * linux-record.c (record_linux_system_call): Fix handling of readdir and getdents{,64}. * linux-record.h (struct linux_record_tdep): Remove size_dirent{,64}, add size_old_dirent. * ppc-linux-tdep.c (ppc_init_linux_record_tdep): Remove size_dirent{,64}, add size_old_dirent. --- gdb/ChangeLog | 19 +++++++++++++++++++ gdb/aarch64-linux-tdep.c | 3 +-- gdb/amd64-linux-tdep.c | 8 ++++---- gdb/arm-linux-tdep.c | 3 +-- gdb/i386-linux-tdep.c | 3 +-- gdb/linux-record.c | 19 +++---------------- gdb/linux-record.h | 3 +-- gdb/ppc-linux-tdep.c | 6 ++---- 8 files changed, 32 insertions(+), 32 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e3e446c..9e128a5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,24 @@ 2015-10-22 Marcin Kościelnicki + * aarch64-linux-tdep.c (aarch64_linux_init_abi): Remove + size_dirent{,64}, add size_old_dirent. + * amd64-linux-tdep.c (amd64_linux_init_abi): Remove size_dirent{,64}, + add size_old_dirent. + (amd64_x32_linux_init_abi): Remove size_dirent{,64}, add + size_old_dirent. + * arm-linux-tdep.c (arm_linux_init_abi): Remove size_dirent{,64}, + add size_old_dirent. + * i386-linux-tdep.c (i386_linux_init_abi): Remove size_dirent{,64}, + add size_old_dirent. + * linux-record.c (record_linux_system_call): Fix handling of readdir + and getdents{,64}. + * linux-record.h (struct linux_record_tdep): Remove size_dirent{,64}, + add size_old_dirent. + * ppc-linux-tdep.c (ppc_init_linux_record_tdep): Remove + size_dirent{,64}, add size_old_dirent. + +2015-10-22 Marcin Kościelnicki + * aarch64-linux-tdep.c (aarch64_linux_init_abi): Fix size_sigaction, size_sigset_t, size_old_sigaction, size_old_sigset_t. * amd64-linux-tdep.c (amd64_linux_init_abi): Fix size_sigaction, diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index 57cb973..0a3fbb3 100644 --- a/gdb/aarch64-linux-tdep.c +++ b/gdb/aarch64-linux-tdep.c @@ -1009,8 +1009,7 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) aarch64_linux_record_tdep.size_old_gid_t = 2; aarch64_linux_record_tdep.size_old_uid_t = 2; aarch64_linux_record_tdep.size_fd_set = 128; - aarch64_linux_record_tdep.size_dirent = 280; - aarch64_linux_record_tdep.size_dirent64 = 280; + aarch64_linux_record_tdep.size_old_dirent = 280; aarch64_linux_record_tdep.size_statfs = 120; aarch64_linux_record_tdep.size_statfs64 = 120; aarch64_linux_record_tdep.size_sockaddr = 16; diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c index 3bca3c8..0b068c3 100644 --- a/gdb/amd64-linux-tdep.c +++ b/gdb/amd64-linux-tdep.c @@ -1905,8 +1905,8 @@ amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) but sys_getresuid. */ amd64_linux_record_tdep.size_old_uid_t = 2; amd64_linux_record_tdep.size_fd_set = 128; - amd64_linux_record_tdep.size_dirent = 280; - amd64_linux_record_tdep.size_dirent64 = 280; + /* ADM64 doesn't need this size because it doesn't have sys_readdir. */ + amd64_linux_record_tdep.size_old_dirent = 280; amd64_linux_record_tdep.size_statfs = 120; amd64_linux_record_tdep.size_statfs64 = 120; amd64_linux_record_tdep.size_sockaddr = 16; @@ -2121,8 +2121,8 @@ amd64_x32_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) but sys_getresuid. */ amd64_x32_linux_record_tdep.size_old_uid_t = 2; amd64_x32_linux_record_tdep.size_fd_set = 128; - amd64_x32_linux_record_tdep.size_dirent = 280; - amd64_x32_linux_record_tdep.size_dirent64 = 280; + /* ADM64 doesn't need this size because it doesn't have sys_readdir. */ + amd64_x32_linux_record_tdep.size_old_dirent = 268; amd64_x32_linux_record_tdep.size_statfs = 120; amd64_x32_linux_record_tdep.size_statfs64 = 120; amd64_x32_linux_record_tdep.size_sockaddr = 16; diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c index 88d818d..a820e74 100644 --- a/gdb/arm-linux-tdep.c +++ b/gdb/arm-linux-tdep.c @@ -1496,8 +1496,7 @@ arm_linux_init_abi (struct gdbarch_info info, arm_linux_record_tdep.size_old_gid_t = 2; arm_linux_record_tdep.size_old_uid_t = 2; arm_linux_record_tdep.size_fd_set = 128; - arm_linux_record_tdep.size_dirent = 268; - arm_linux_record_tdep.size_dirent64 = 276; + arm_linux_record_tdep.size_old_dirent = 268; arm_linux_record_tdep.size_statfs = 64; arm_linux_record_tdep.size_statfs64 = 84; arm_linux_record_tdep.size_sockaddr = 16; diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c index 0bf2cdc..8847ad3 100644 --- a/gdb/i386-linux-tdep.c +++ b/gdb/i386-linux-tdep.c @@ -815,8 +815,7 @@ i386_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) i386_linux_record_tdep.size_old_gid_t = 2; i386_linux_record_tdep.size_old_uid_t = 2; i386_linux_record_tdep.size_fd_set = 128; - i386_linux_record_tdep.size_dirent = 268; - i386_linux_record_tdep.size_dirent64 = 276; + i386_linux_record_tdep.size_old_dirent = 268; i386_linux_record_tdep.size_statfs = 64; i386_linux_record_tdep.size_statfs64 = 84; i386_linux_record_tdep.size_sockaddr = 16; diff --git a/gdb/linux-record.c b/gdb/linux-record.c index d1e02f4..e950e8d 100644 --- a/gdb/linux-record.c +++ b/gdb/linux-record.c @@ -689,7 +689,7 @@ record_linux_system_call (enum gdb_syscall syscall, case gdb_old_readdir: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_dirent)) + tdep->size_old_dirent)) return -1; break; @@ -1344,14 +1344,14 @@ Do you want to stop the program?"), break; case gdb_sys_getdents: + case gdb_sys_getdents64: { ULONGEST count; regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); regcache_raw_read_unsigned (regcache, tdep->arg3, &count); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_dirent * count)) + if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, count)) return -1; } break; @@ -1745,19 +1745,6 @@ Do you want to stop the program?"), case gdb_sys_madvise: break; - case gdb_sys_getdents64: - { - ULONGEST count; - - regcache_raw_read_unsigned (regcache, tdep->arg2, - &tmpulongest); - regcache_raw_read_unsigned (regcache, tdep->arg3, &count); - if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, - tdep->size_dirent64 * count)) - return -1; - } - break; - case gdb_sys_fcntl64: regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); if (tmpulongest == tdep->fcntl_F_GETLK64) diff --git a/gdb/linux-record.h b/gdb/linux-record.h index 839bd31..9af0bdb 100644 --- a/gdb/linux-record.h +++ b/gdb/linux-record.h @@ -39,8 +39,7 @@ struct linux_record_tdep int size_old_gid_t; int size_old_uid_t; int size_fd_set; - int size_dirent; - int size_dirent64; + int size_old_dirent; int size_statfs; int size_statfs64; int size_sockaddr; diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index 896f410..cf71cf3 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -1432,8 +1432,7 @@ ppc_init_linux_record_tdep (struct linux_record_tdep *record_tdep, record_tdep->size_old_gid_t = 4; record_tdep->size_old_uid_t = 4; record_tdep->size_fd_set = 128; - record_tdep->size_dirent = 280; - record_tdep->size_dirent64 = 280; + record_tdep->size_old_dirent = 280; record_tdep->size_statfs = 120; record_tdep->size_statfs64 = 120; record_tdep->size_sockaddr = 16; @@ -1499,8 +1498,7 @@ ppc_init_linux_record_tdep (struct linux_record_tdep *record_tdep, record_tdep->size_old_gid_t = 4; record_tdep->size_old_uid_t = 4; record_tdep->size_fd_set = 128; - record_tdep->size_dirent = 268; - record_tdep->size_dirent64 = 280; + record_tdep->size_old_dirent = 268; record_tdep->size_statfs = 64; record_tdep->size_statfs64 = 88; record_tdep->size_sockaddr = 16;