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