From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27089 invoked by alias); 27 Jun 2008 17:41:07 -0000 Received: (qmail 27077 invoked by uid 22791); 27 Jun 2008 17:41:06 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 27 Jun 2008 17:40:49 +0000 Received: (qmail 11938 invoked from network); 27 Jun 2008 17:40:46 -0000 Received: from unknown (HELO digraph.polyomino.org.uk) (joseph@127.0.0.2) by mail.codesourcery.com with ESMTPA; 27 Jun 2008 17:40:46 -0000 Received: from jsm28 (helo=localhost) by digraph.polyomino.org.uk with local-esmtp (Exim 4.68) (envelope-from ) id 1KCHwD-00009x-DW for gdb-patches@sourceware.org; Fri, 27 Jun 2008 17:40:45 +0000 Date: Fri, 27 Jun 2008 17:57:00 -0000 From: "Joseph S. Myers" To: gdb-patches@sourceware.org Subject: Fix cross-endian DFP for GDB Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII 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-06/txt/msg00508.txt.bz2 This patch fixes problems GDB has with decimal floating point when host and target endianness differ. decimal_convert failed to convert endianness. This patch fixes the following failures in a cross from i686-pc-linux-gnu to powerpc-linux-gnu. OK to commit? FAIL: gdb.base/dfp-exprs.exp: p (_Decimal128) 3.7df FAIL: gdb.base/dfp-test.exp: p d32=9.999999E96df FAIL: gdb.base/dfp-test.exp: p d64=9.999999999999999E384dd FAIL: gdb.base/dfp-test.exp: p d128=1.234567890123456789012345678901234dl FAIL: gdb.base/dfp-test.exp: p d128=9.999999999999999999999999999999999E6144dl FAIL: gdb.base/dfp-test.exp: 1.2345678901234567890123456789012345 is rounded to 1.234567890123456789012345678901234 FAIL: gdb.base/dfp-test.exp: print ds.dec128 = ds.dec32 FAIL: gdb.base/printcmds.exp: printf "%DDf\n",1.234567890123456789012345678901234dl FAIL: gdb.base/printcmds.exp: printf "%DDf\n",-1.234567890123456789012345678901234dl FAIL: gdb.base/printcmds.exp: printf "%DDf\n",1234567890123456789012345678901234.dl FAIL: gdb.base/printcmds.exp: printf "%DDf\n",-1234567890123456789012345678901234.dl 2008-06-27 Joseph Myers * dfp.c (decimal_convert): Call match_endianness before and after conversion. Index: dfp.c =================================================================== RCS file: /cvs/src/src/gdb/dfp.c,v retrieving revision 1.6 diff -u -p -r1.6 dfp.c --- dfp.c 16 Jan 2008 16:16:44 -0000 1.6 +++ dfp.c 27 Jun 2008 17:27:20 -0000 @@ -395,7 +395,12 @@ decimal_convert (const gdb_byte *from, i int len_to) { decNumber number; + gdb_byte dec[16]; - decimal_to_number (from, len_from, &number); - decimal_from_number (&number, to, len_to); + match_endianness (from, len_from, dec); + + decimal_to_number (dec, len_from, &number); + decimal_from_number (&number, dec, len_to); + + match_endianness (dec, len_to, to); } -- Joseph S. Myers joseph@codesourcery.com