Home | History | Annotate | Download | only in gas
      1 #
      2 # This is sort of a prototype test case, which parses the listing output
      3 # from the assembler.  Later, more prototypes should be added for cases
      4 # where objdump gets run over the .o file, and anything else like that...
      5 #
      6 # When you write a test case that uses the listing output, just copy this
      7 # file (trimming down the overly-verbose comments a little), and
      8 # adjust it to do what you need.
      9 #
     10 # Remember that any ".exp" file found in the tree will be processed by
     11 # dejagnu.
     12 
     13 #
     14 # FIRST SAMPLE TEST CASE
     15 #
     16 
     17 proc do_foo {} {
     18 # This string is used below when printing out a success or failure message.
     19 # If more than one test is run by a given .exp file, it'd be nice to include
     20 # the name of the input file.
     21     set testname "foo.s: multi-register tweaking and frobnication"
     22 
     23 # I use this as a flag to record whether the test case passed.  If this
     24 # flag is still clear when EOF is reached, this test fails.  If there are
     25 # two or more patterns, and I need to see all of them, I'll create N variables
     26 # and check if the sum is N.
     27     set x 0
     28 
     29 # Call gas_start with two arguments: The input file name (which it'll search
     30 # for in $srcdir/$subdir, that is, the source directory where the .exp file
     31 # is), and a (possibly empty) string of options to pass to the assembler.
     32     gas_start "foo.s" "-al"
     33 
     34 # Now I just iterate over all the output lines, looking for what I want
     35 # to see.  Since each pattern explicitly will not span line breaks, there's
     36 # also a pattern for lines that don't match anything else.   (Is it safe to
     37 # use ".*" for patterns not crossing line breaks? I don't think "$" does the
     38 # right thing for that, in any case.  I should check into whether the extra
     39 # pattern is even needed.
     40 
     41 # Apparently CRLF is received when using ptys for subprocesses; hence the
     42 # \r\n for matching line number 3.
     43 
     44 # Note that if you use "{ ... }" for the expect clause, you can't have
     45 # comments inside it.
     46 
     47 # This test case is kinda bogus in that seeing either a word of all zeros
     48 # at address zero or a C-style comment on line three that says "Looking for
     49 # C comments" (with very specific punctuation and whitespace) will cause
     50 # it to pass this test.  Usually 
     51     while 1 {
     52 	expect {
     53 	    -re "^ +\[0-9\]+ 0000 00000000\[^\n\]*\n"		{ set x 1 }
     54 	    -re "^ +3\[ \t\]+/. Looking for C comments. ./\r\n"	{ set x 1 }
     55 	    -re "\[^\n\]*\n"				{ }
     56 	    timeout				{ perror "timeout\n"; break }
     57 	    eof					{ break }
     58 	}
     59     }
     60 # This was intended to do any cleanup necessary.  It kinda looks like it isn't
     61 # needed, but just in case, please keep it in for now.
     62     gas_finish
     63 
     64 # Did we find what we were looking for?  If not, flunk it.
     65     if $x then { pass $testname } else { fail $testname }
     66 }
     67 
     68 # Now actually run the test.  It can be conditionalized if the test is
     69 # not appropriate for all targets.  The proc "istarget" checks a generalized
     70 # form of the target name, so that (e.g.) "m68332-unknown-aout" would match
     71 # here.  So far, I think only the CPU name is actually ever altered.
     72 if [istarget m68k-*] then {
     73     do_foo
     74 }
     75 
     76 
     77 
     78 
     79 #
     80 # SECOND SAMPLE TEST CASE
     81 #
     82 
     83 # This is a tiny bit like the C compiler torture tests, in that it'll run
     84 # the assembler with the power set of the list of options supplied.
     85 #
     86 # The first argument is the test file name; the second is arguments that
     87 # are always to be provided; the third is a space-separated list of options
     88 # which are optional (ending in ">" if output should be ignored, like "-a>");
     89 # the fourth is the name of the test.  So far, only binary options are handled
     90 # this way; N-way options (like CPU type for m68k) aren't handled yet.
     91 #
     92 # The variable $stdoptlist usually has a reasonable set of optional options
     93 # for this target.
     94 
     95 # No, PIC isn't supported yet.  This is only an example.
     96 gas_test "quux.s" "-K" $stdoptlist "use of quuxes in PIC mode"
     97