From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30101 invoked by alias); 28 May 2008 18:30:48 -0000 Received: (qmail 30093 invoked by uid 22791); 28 May 2008 18:30:47 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate8.de.ibm.com (HELO mtagate8.de.ibm.com) (195.212.29.157) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 28 May 2008 18:30:26 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate8.de.ibm.com (8.13.8/8.13.8) with ESMTP id m4SITq61278794 for ; Wed, 28 May 2008 18:29:52 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m4SITpoq2777322 for ; Wed, 28 May 2008 20:29:51 +0200 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m4SITpqq028180 for ; Wed, 28 May 2008 20:29:51 +0200 Received: from tuxmaker.boeblingen.de.ibm.com (tuxmaker.boeblingen.de.ibm.com [9.152.85.9]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with SMTP id m4SITpgT028177 for ; Wed, 28 May 2008 20:29:51 +0200 Message-Id: <200805281829.m4SITpgT028177@d12av02.megacenter.de.ibm.com> Received: by tuxmaker.boeblingen.de.ibm.com (sSMTP sendmail emulation); Wed, 28 May 2008 20:29:51 +0200 Subject: [rfa/gdbserver] Fix ppc64 bi-arch TLS bug To: gdb-patches@sourceware.org Date: Wed, 28 May 2008 23:07:00 -0000 From: "Ulrich Weigand" X-Mailer: ELM [version 2.5 PL2] MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii 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: 2008-05/txt/msg00737.txt.bz2 Hello, this fixes another bug in ppc64 bi-arch gdbserver support: the ppc_collect_ptrace_register did not zero out the register buffer (in the case of a 4-byte inferior register on a 64-bit host). This doesn't matter for the main user of this function (usr_store_inferior_registers in linux-low.c) which always zeros the buffer itself before passing it in. However, there is a second caller, ps_lgetregs in proc-service.c (via the ppc_fill_gregset function) which does *not* zero the buffer. This could cause TLS access to fail in some instances of 64->32 bit bi-arch debugging. Fixed by simply always clearing the register buffer. Tested on powerpc64-linux (-m64/-m32) and powerpc-linux using local gdbserver. OK for mainline? Bye, Ulrich ChangeLog: * linux-ppc-low.c (ppc_collect_ptrace_register): Clear buffer. diff -urNp gdb-orig/gdb/gdbserver/linux-ppc-low.c gdb-head/gdb/gdbserver/linux-ppc-low.c --- gdb-orig/gdb/gdbserver/linux-ppc-low.c 2008-05-11 23:03:06.000000000 +0200 +++ gdb-head/gdb/gdbserver/linux-ppc-low.c 2008-05-28 19:24:33.372182584 +0200 @@ -149,6 +149,9 @@ static void ppc_collect_ptrace_register (int regno, char *buf) { int size = register_size (regno); + + memset (buf, 0, sizeof (long)); + if (size < sizeof (long)) collect_register (regno, buf + sizeof (long) - size); else -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE Ulrich.Weigand@de.ibm.com