From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20915 invoked by alias); 10 Sep 2003 14:36:07 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 20717 invoked from network); 10 Sep 2003 14:36:01 -0000 Received: from unknown (HELO elmo.streamline) (212.103.239.121) by sources.redhat.com with SMTP; 10 Sep 2003 14:36:01 -0000 Received: from elmo.streamline (localhost.localdomain [127.0.0.1]) by elmo.streamline (8.12.8/8.12.8) with ESMTP id h8AEZeLV024301 for ; Wed, 10 Sep 2003 15:35:44 +0100 Received: (from david@localhost) by elmo.streamline (8.12.8/8.12.8/Submit) id h8AEZaab024295 for gdb-patches@sources.redhat.com; Wed, 10 Sep 2003 15:35:36 +0100 X-Authentication-Warning: elmo.streamline: david set sender to david@streamline-computing.com using -f Date: Wed, 10 Sep 2003 14:36:00 -0000 From: David Lecomber To: gdb-patches@sources.redhat.com Subject: Large array printing patch for Fortran Message-ID: <20030910143536.GA23943@streamline-computing.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.1i X-SW-Source: 2003-09/txt/msg00197.txt.bz2 Resubmitting this (at last) - posted originally in May. The element printing limit for Fortran arrays is applied only for the outer dimension of an array. Consequently, on entering a subroutine with an argument of a (say) 1000x1000 array, the frame will take months to print, which kind of ruins commands like 'bt', 'info args' etc.. 2003-09-10 David Lecomber * f-valprint.c: Apply array element printing limits to multi-dimensional arrays Index: f-valprint.c =================================================================== RCS file: /cvs/src/src/gdb/f-valprint.c,v retrieving revision 1.15 diff -u -p -r1.15 f-valprint.c --- f-valprint.c 9 Sep 2003 23:09:37 -0000 1.15 +++ f-valprint.c 10 Sep 2003 14:26:11 -0000 @@ -47,7 +47,8 @@ static void f77_print_array (struct type enum val_prettyprint); static void f77_print_array_1 (int, int, struct type *, char *, CORE_ADDR, struct ui_file *, int, int, int, - enum val_prettyprint); + enum val_prettyprint, + int *elts); static void f77_create_arrayprint_offset_tbl (struct type *, struct ui_file *); static void f77_get_dynamic_length_of_aggregate (struct type *); @@ -271,31 +272,36 @@ f77_create_arrayprint_offset_tbl (struct } } + + /* Actual function which prints out F77 arrays, Valaddr == address in the superior. Address == the address in the inferior. */ - static void f77_print_array_1 (int nss, int ndimensions, struct type *type, char *valaddr, CORE_ADDR address, struct ui_file *stream, int format, - int deref_ref, int recurse, enum val_prettyprint pretty) + int deref_ref, int recurse, enum val_prettyprint pretty, + int *elts) { int i; if (nss != ndimensions) { - for (i = 0; i < F77_DIM_SIZE (nss); i++) + for (i = 0; (i < F77_DIM_SIZE (nss) && (*elts) < print_max); i++) { fprintf_filtered (stream, "( "); f77_print_array_1 (nss + 1, ndimensions, TYPE_TARGET_TYPE (type), valaddr + i * F77_DIM_OFFSET (nss), address + i * F77_DIM_OFFSET (nss), - stream, format, deref_ref, recurse, pretty); + stream, format, deref_ref, recurse, pretty, elts); fprintf_filtered (stream, ") "); } + if (*elts >= print_max && i < F77_DIM_SIZE (nss)) { + fprintf_filtered (stream, "..."); + } } else { - for (i = 0; (i < F77_DIM_SIZE (nss) && i < print_max); i++) + for (i = 0; (i < F77_DIM_SIZE (nss) && (*elts) < print_max); i++, (*elts)++) { val_print (TYPE_TARGET_TYPE (type), valaddr + i * F77_DIM_OFFSET (ndimensions), @@ -306,7 +312,7 @@ f77_print_array_1 (int nss, int ndimensi if (i != (F77_DIM_SIZE (nss) - 1)) fprintf_filtered (stream, ", "); - if (i == print_max - 1) + if ((( *elts) == print_max - 1) && (i != (F77_DIM_SIZE (nss) - 1))) fprintf_filtered (stream, "..."); } } @@ -321,6 +327,7 @@ f77_print_array (struct type *type, char enum val_prettyprint pretty) { int ndimensions; + int elts = 0; ndimensions = calc_f77_array_dims (type); @@ -335,7 +342,7 @@ f77_print_array (struct type *type, char f77_create_arrayprint_offset_tbl (type, stream); f77_print_array_1 (1, ndimensions, type, valaddr, address, stream, format, - deref_ref, recurse, pretty); + deref_ref, recurse, pretty, &elts); }