| # |
| # This is sort of a prototype test case, which parses the listing output |
| # from the assembler. Later, more prototypes should be added for cases |
| # where objdump gets run over the .o file, and anything else like that... |
| # |
| # When you write a test case that uses the listing output, just copy this |
| # file (trimming down the overly-verbose comments a little), and |
| # adjust it to do what you need. |
| # |
| # Remember that any ".exp" file found in the tree will be processed by |
| # dejagnu. |
| |
| # |
| # FIRST SAMPLE TEST CASE |
| # |
| |
| proc do_foo {} { |
| # This string is used below when printing out a success or failure message. |
| # If more than one test is run by a given .exp file, it'd be nice to include |
| # the name of the input file. |
| set testname "foo.s: multi-register tweaking and frobnication" |
| |
| # I use this as a flag to record whether the test case passed. If this |
| # flag is still clear when EOF is reached, this test fails. If there are |
| # two or more patterns, and I need to see all of them, I'll create N variables |
| # and check if the sum is N. |
| set x 0 |
| |
| # Call gas_start with two arguments: The input file name (which it'll search |
| # for in $srcdir/$subdir, that is, the source directory where the .exp file |
| # is), and a (possibly empty) string of options to pass to the assembler. |
| gas_start "foo.s" "-al" |
| |
| # Now I just iterate over all the output lines, looking for what I want |
| # to see. Since each pattern explicitly will not span line breaks, there's |
| # also a pattern for lines that don't match anything else. (Is it safe to |
| # use ".*" for patterns not crossing line breaks? I don't think "$" does the |
| # right thing for that, in any case. I should check into whether the extra |
| # pattern is even needed. |
| |
| # Apparently CRLF is received when using ptys for subprocesses; hence the |
| # \r\n for matching line number 3. |
| |
| # Note that if you use "{ ... }" for the expect clause, you can't have |
| # comments inside it. |
| |
| # This test case is kinda bogus in that seeing either a word of all zeros |
| # at address zero or a C-style comment on line three that says "Looking for |
| # C comments" (with very specific punctuation and whitespace) will cause |
| # it to pass this test. Usually |
| while 1 { |
| expect { |
| -re "^ +\[0-9\]+ 0000 00000000\[^\n\]*\n" { set x 1 } |
| -re "^ +3\[ \t\]+/. Looking for C comments. ./\r\n" { set x 1 } |
| -re "\[^\n\]*\n" { } |
| timeout { perror "timeout\n"; break } |
| eof { break } |
| } |
| } |
| # This was intended to do any cleanup necessary. It kinda looks like it isn't |
| # needed, but just in case, please keep it in for now. |
| gas_finish |
| |
| # Did we find what we were looking for? If not, flunk it. |
| if $x then { pass $testname } else { fail $testname } |
| } |
| |
| # Now actually run the test. It can be conditionalized if the test is |
| # not appropriate for all targets. The proc "istarget" checks a generalized |
| # form of the target name, so that (e.g.) "m68332-unknown-aout" would match |
| # here. So far, I think only the CPU name is actually ever altered. |
| if [istarget m68k-*] then { |
| do_foo |
| } |
| |
| |
| |
| |
| # |
| # SECOND SAMPLE TEST CASE |
| # |
| |
| # This is a tiny bit like the C compiler torture tests, in that it'll run |
| # the assembler with the power set of the list of options supplied. |
| # |
| # The first argument is the test file name; the second is arguments that |
| # are always to be provided; the third is a space-separated list of options |
| # which are optional (ending in ">" if output should be ignored, like "-a>"); |
| # the fourth is the name of the test. So far, only binary options are handled |
| # this way; N-way options (like CPU type for m68k) aren't handled yet. |
| # |
| # The variable $stdoptlist usually has a reasonable set of optional options |
| # for this target. |
| |
| # No, PIC isn't supported yet. This is only an example. |
| gas_test "quux.s" "-K" $stdoptlist "use of quuxes in PIC mode" |