Commit | Line | Data |
---|---|---|
252b5132 RH |
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" |