| 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" |