From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24316 invoked by alias); 4 Aug 2012 11:54:38 -0000 Received: (qmail 24292 invoked by uid 22791); 4 Aug 2012 11:54:37 -0000 X-SWARE-Spam-Status: No, hits=-4.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org Received: from mail-wg0-f43.google.com (HELO mail-wg0-f43.google.com) (74.125.82.43) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 04 Aug 2012 11:54:23 +0000 Received: by wgbdr1 with SMTP id dr1so1104028wgb.12 for ; Sat, 04 Aug 2012 04:54:22 -0700 (PDT) Received: by 10.180.78.5 with SMTP id x5mr3846881wiw.13.1344081262240; Sat, 04 Aug 2012 04:54:22 -0700 (PDT) Received: from localhost ([2.26.188.227]) by mx.google.com with ESMTPS id l5sm4434901wix.5.2012.08.04.04.54.20 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 04 Aug 2012 04:54:21 -0700 (PDT) From: Richard Sandiford To: "Maciej W. Rozycki" Mail-Followup-To: "Maciej W. Rozycki" ,Alan Modra , , rdsandiford@googlemail.com Cc: Alan Modra , Subject: Re: [PATCH] MIPS: Enable NewABI tests for SDE targets References: <87ipd1nnpb.fsf@talisman.home> Date: Sat, 04 Aug 2012 12:07:00 -0000 In-Reply-To: (Maciej W. Rozycki's message of "Fri, 3 Aug 2012 21:55:29 +0100") Message-ID: <87hasina84.fsf@talisman.home> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2012-08/txt/msg00086.txt.bz2 "Maciej W. Rozycki" writes: > On Thu, 2 Aug 2012, Richard Sandiford wrote: >> > Index: binutils-fsf-trunk-quilt/ld/testsuite/lib/ld-lib.exp >> > =================================================================== >> > --- binutils-fsf-trunk-quilt.orig/ld/testsuite/lib/ld-lib.exp 2012-07-24 15:29:41.000000000 +0100 >> > +++ binutils-fsf-trunk-quilt/ld/testsuite/lib/ld-lib.exp 2012-07-26 03:08:32.951798913 +0100 >> > @@ -431,7 +431,7 @@ proc ld_simple_link_defsyms {} { >> > return $flags >> > } >> > >> > -# run_dump_test FILE >> > +# run_dump_test FILE (optional:) EXTRA_OPTIONS >> > # Copied from gas testsuite, tweaked and further extended. >> > # >> > # Assemble a .s file, then run some utility on it and check the output. >> > @@ -456,6 +456,12 @@ proc ld_simple_link_defsyms {} { >> > # list ends with the first line that doesn't match the above syntax >> > # (hmm, not great for error detection). >> > # >> > +# The optional EXTRA_OPTIONS argument to `run_dump_test' is a list of >> > +# two-element lists. The first element of each is an option name, and >> > +# the second additional arguments to be added on to the end of the >> > +# option list as given in FILE.d. (If omitted, no additional options >> > +# are added.) >> > +# >> > # The interesting options are: >> > # >> > # name: TEST-NAME >> > @@ -503,6 +509,11 @@ proc ld_simple_link_defsyms {} { >> > # More than one "source" directive can be given, which is useful >> > # when testing linking. >> > # >> > +# dump: DUMP >> > +# Match against DUMP.d. If omitted, this defaults to FILE.d. This >> > +# is useful if several .d files differ by options only. Options are >> > +# always read from FILE.d. >> > +# >> > # xfail: TARGET >> > # The test is expected to fail on TARGET. This may occur more than >> > # once. >> > @@ -534,7 +545,7 @@ proc ld_simple_link_defsyms {} { >> > # regexps in FILE.d. `regexp_diff' is defined in binutils-common.exp; >> > # see further comments there. >> > # >> > -proc run_dump_test { name } { >> > +proc run_dump_test { name {extra_options {}} } { >> > global subdir srcdir >> > global OBJDUMP NM AS OBJCOPY READELF LD >> > global OBJDUMPFLAGS NMFLAGS ASFLAGS OBJCOPYFLAGS READELFFLAGS LDFLAGS >> >> I think extra_options ought to be a one-level list, i.e. >> {key1 value key2 value2 ...}. That makes the calls simpler >> (because there's one fewer [list ...]) and: >> >> > + foreach i $extra_options { >> > + set opt_name [lindex $i 0] >> > + set opt_val [lindex $i 1] >> > + if ![info exists opts($opt_name)] { >> > + perror "unknown option $opt_name given in extra_opts" >> > + unresolved $subdir/$name >> > + return >> > + } >> > + # Add extra option to end of existing option, adding space >> > + # if necessary. >> > + if { ![regexp "warning|error" $opt_name] >> > + && [string length $opts($opt_name)] } { >> > + append opts($opt_name) " " >> > + } >> > + append opts($opt_name) $opt_val >> > + } >> >> reduces to: >> >> foreach { opt_name opt_val } $extra_options { >> if ![info exists opts($opt_name)] { >> perror "unknown option $opt_name given in extra_opts" >> unresolved $subdir/$name >> return >> } >> # Add extra option to end of existing option, adding space >> # if necessary. >> if { ![regexp "warning|error" $opt_name] >> && [string length $opts($opt_name)] } { >> append opts($opt_name) " " >> } >> append opts($opt_name) $opt_val >> } >> >> OK with that change, thanks. OK for the follow-up too. > > A list of lists seems more in the spirit of TCL to me, while a vector is > more C-like Not sure about that. "foreach { a b .. } ..." is provided exactly to make flat lists easy to handle. [string map ...] takes a flat list rather than a list of lists. Flat lists are also what is used by [array set ...] and [array get ...], so that one easy way of handling unordered key-value list arguments is: array set foo $argument if { [info exists $foo(key)] } ... If you're lucky enough to be able to rely on Tcl 8.5, then dict operates in just the same way. Flat lists can even be used as dicts directly, without any conversion. I don't know of any native Tcl operation that uses lists of lists instead. > However please note that implementing your suggestion will make the > two run_dump_test implementations confusingly different -- do you > still want me to proceed? That's a clincher though. Please go with your original patch. Richard