From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 629 invoked by alias); 3 Mar 2008 19:07:15 -0000 Received: (qmail 32604 invoked by uid 22791); 3 Mar 2008 19:07:14 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate1.de.ibm.com (HELO mtagate1.de.ibm.com) (195.212.29.150) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 03 Mar 2008 19:06:38 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate1.de.ibm.com (8.13.8/8.13.8) with ESMTP id m23J6ZsI103864 for ; Mon, 3 Mar 2008 19:06:36 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 m23J6Xs71482930 for ; Mon, 3 Mar 2008 20:06:34 +0100 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 m23J6XcG016941 for ; Mon, 3 Mar 2008 19:06:33 GMT Received: from bbkeks.de.ibm.com (dyn-9-152-248-39.boeblingen.de.ibm.com [9.152.248.39]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id m23J6VQF016922 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 3 Mar 2008 19:06:33 GMT Message-ID: <47CC4C37.3090502@de.ibm.com> Date: Mon, 03 Mar 2008 19:07:00 -0000 From: Markus Deuling User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: GDB Patches CC: Ulrich Weigand Subject: [patch] Fix fortran access to special register on SPU arch Content-Type: multipart/mixed; boundary="------------030806010501060704090003" 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-03/txt/msg00012.txt.bz2 This is a multi-part message in MIME format. --------------030806010501060704090003 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1502 Hi, SPU architecture has 128 special register: (gdb) ptype $r0 type = union __spu_builtin_type_vec128 { int128_t uint128; int64_t v2_int64[2]; int32_t v4_int32[4]; int16_t v8_int16[8]; int8_t v16_int8[16]; double v2_double[2]; float v4_float[4]; } (gdb) when debugging a fortran binary GDB cannot access single elements of the above elements regarded as arrays of int64, int32 ... (gdb) p $r0%v2_int64 $1 = (635655159808, 0) (gdb) p $r0%v2_int64(0) Attempt to take address of value not located in memory. (gdb) set $r0%v2_int64(0)=2 Attempt to take address of value not located in memory. (gdb) Access to fortran subranges is possible: (gdb) p $r0%v2_int64(0:0) $2 = (635655159808) (gdb) p $r0%v2_int64(0:1) $3 = (635655159808, 0) (gdb) p $r0%v2_int64 $4 = (635655159808, 0) (gdb) This patch invokes value_subscript for the special case that a multi_f77_subscript is in a register instead of memory. (gdb) p $r0%uint128 $2 = 0x00000094000000000000000000000000 (gdb) p $r0%v2_int64 $3 = (635655159808, 0) (gdb) p $r0%v2_int64(0) $4 = 635655159808 (gdb) set $r0%v2_int64(1)=5 (gdb) p $r0%v2_int64(1) $6 = 5 (gdb) the gdb.fortran testsuite showed no regression on SPU. If this patch is ok it would be great to have it in gdb 6.8. Ok ? ChangeLog: * eval.c (evaluate_subexp_standard): Call value_subscript for accessing fortran array elements in registers. Regards, Markus -- Markus Deuling GNU Toolchain for Linux on Cell BE deuling@de.ibm.com --------------030806010501060704090003 Content-Type: text/plain; name="diff-fortran" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diff-fortran" Content-length: 461 diff -urpN src/gdb/eval.c dev/gdb/eval.c --- src/gdb/eval.c 2008-02-11 05:48:36.000000000 +0100 +++ dev/gdb/eval.c 2008-03-03 19:23:37.000000000 +0100 @@ -1720,6 +1720,8 @@ evaluate_subexp_standard (struct type *e returns the correct type value */ deprecated_set_value_type (arg1, tmp_type); + if (VALUE_LVAL (arg1) == lval_register) + return value_subscript (arg1, arg2); return value_ind (value_add (value_coerce_array (arg1), arg2)); } --------------030806010501060704090003--