diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2000-06-14 01:21:35 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@axis.com> | 2000-06-14 01:21:35 +0000 |
commit | 9921923c9ddbc0161980262027eb6d9395976c73 (patch) | |
tree | d3398df6130fe7c017e26ab7be08f327b1257951 | |
parent | b37bcaa80e9561dc3efb3ba852b87bb9cfdc64ba (diff) | |
download | gdb-9921923c9ddbc0161980262027eb6d9395976c73.zip gdb-9921923c9ddbc0161980262027eb6d9395976c73.tar.gz gdb-9921923c9ddbc0161980262027eb6d9395976c73.tar.bz2 |
* binutils-all/readelf.exp (regexp_diff): Do not break when a
mismatching line is found.
(readelf_find_size): New.
(readelf_size): New global variable.
(readelf_test): Add newline to send_log of command.
If $srcdir/$subdir/$regexp_file-$readelf_size exists, use it
instead of $srcdir/$subdir/$regexp_file.
(*-*elf test): Fix typo in message.
* binutils-all/readelf.s-64: New.
* binutils-all/readelf.ss-64: New.
-rw-r--r-- | binutils/testsuite/ChangeLog | 13 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/readelf.exp | 50 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/readelf.s-64 | 24 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/readelf.ss-64 | 13 |
4 files changed, 94 insertions, 6 deletions
diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog index e68494e..d51de55 100644 --- a/binutils/testsuite/ChangeLog +++ b/binutils/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2000-06-14 Hans-Peter Nilsson <hp@bitrange.com> + + * binutils-all/readelf.exp (regexp_diff): Do not break when a + mismatching line is found. + (readelf_find_size): New. + (readelf_size): New global variable. + (readelf_test): Add newline to send_log of command. + If $srcdir/$subdir/$regexp_file-$readelf_size exists, use it + instead of $srcdir/$subdir/$regexp_file. + (*-*elf test): Fix typo in message. + * binutils-all/readelf.s-64: New. + * binutils-all/readelf.ss-64: New. + 2000-05-02 Alan Modra <alan@linuxcare.com.au> * binutils-all/objcopy.exp (simple copy): Clear xfail for hppa-linux. diff --git a/binutils/testsuite/binutils-all/readelf.exp b/binutils/testsuite/binutils-all/readelf.exp index 12fcdad..46a837c 100644 --- a/binutils/testsuite/binutils-all/readelf.exp +++ b/binutils/testsuite/binutils-all/readelf.exp @@ -1,4 +1,4 @@ -# Copyright (C) 1999 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -103,7 +103,6 @@ proc regexp_diff { file_1 file_2 } { send_log "regexp_diff match failure\n" send_log "regexp \"^$line_b$\"\nline \"$line_a\"\n" set differences 1 - break } } } @@ -120,19 +119,51 @@ proc regexp_diff { file_1 file_2 } { return $differences } +# Find out the size by reading the output of the EI_CLASS field. +# Similar to the test for readelf -h, but we're just looking for the +# EI_CLASS line here. +proc readelf_find_size { binary_file } { + global READELF + global READELFFLAGS + global readelf_size + + set readelf_size "" + set testname "finding out ELF size with readelf -h" + catch "exec $READELF $READELFFLAGS -h $binary_file > readelf.out" got + + if ![string match "" $got] then { + send_log $got + fail $testname + return + } + + if { ! [regexp "\n\[ \]*Class:\[ \]*ELF(\[0-9\]+)\n" \ + [file_contents readelf.out] nil readelf_size] } { + verbose -log "EI_CLASS field not found in output" + verbose -log "output is \n[file_contents readelf.out]" + fail $testname + return + } else { + verbose -log "ELF size is $readelf_size" + } + + pass $testname +} + # Run an individual readelf test. # Basically readelf is run on the binary_file with the given options. # Readelf's output is captured and then compared against the contents -# of the regexp_file. +# of the regexp_file-readelf_size if it exists, else regexp_file. proc readelf_test { options binary_file regexp_file xfails } { global READELF global READELFFLAGS + global readelf_size global srcdir global subdir - send_log "exec $READELF $READELFFLAGS $options $binary_file > readelf.out" + send_log "exec $READELF $READELFFLAGS $options $binary_file > readelf.out\n" catch "exec $READELF $READELFFLAGS $options $binary_file > readelf.out" got if { [llength $xfails] != 0 } then { @@ -145,6 +176,10 @@ proc readelf_test { options binary_file regexp_file xfails } { return } + if { [file exists $srcdir/$subdir/$regexp_file-$readelf_size] } then { + set regexp_file $regexp_file-$readelf_size + } + if { [regexp_diff readelf.out $srcdir/$subdir/$regexp_file] } then { fail "readelf $options" verbose "output is \n[file_contents readelf.out]" 2 @@ -161,7 +196,7 @@ proc readelf_test { options binary_file regexp_file xfails } { # in the target string, then the target is not an ELF based port. if ![istarget "*-*elf"] then { - verbose "$READELF is only intenteded for ELF targets" 2 + verbose "$READELF is only intended for ELF targets" 2 return } @@ -187,7 +222,10 @@ if ![is_remote host] { set tempfile [remote_download host tmpdir/bintest.o] } -# Run the tests +# First, determine the size, so specific output matchers can be used. +readelf_find_size $tempfile + +# Run the tests. readelf_test -h $tempfile readelf.h {} # The v850 fails the next two tests because it creates two special diff --git a/binutils/testsuite/binutils-all/readelf.s-64 b/binutils/testsuite/binutils-all/readelf.s-64 new file mode 100644 index 0000000..a748c16 --- /dev/null +++ b/binutils/testsuite/binutils-all/readelf.s-64 @@ -0,0 +1,24 @@ +There are .* section headers, starting at offset .*: + +Section Headers: + \[Nr\] Name Type Address Offset + Size EntSize Flags Link Info Align + \[ 0\] NULL 0000000000000000 00000000 + 0000000000000000 0000000000000000 0 0 0 + \[ 1\] .text PROGBITS 0000000000000000 00000040 + 00000000000000.. 0000000000000000 AX 0 0 .* + \[ 2\] .rel.+text +REL. +0+ 0+.* + 000000000000001. 000000000000001. . 1 8 + \[ 3\] .data PROGBITS 0000000000000000 000000[45][08] + 0000000000000004 0000000000000000 WA 0 0 .* + \[ 4\] .bss NOBITS 0000000000000000 000000[45][c4] + 0000000000000000 0000000000000000 WA 0 0 .* + \[ 5\] .shstrtab STRTAB 0000000000000000 000000[45][c4] + 00000000000000.. 0000000000000000 0 0 .* + \[ 6\] .symtab SYMTAB 0000000000000000 0+.* + 0+.* 0000000000000018 7 6 8 + \[ 7\] .strtab STRTAB 0000000000000000 0+.* + 0+.* 0000000000000000 0 0 1 +Key to Flags: W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\) + I \(info\), L \(link order\), O \(extra OS processing required\) + o \(os specific\), p \(processor specific\) x \(unknown\) diff --git a/binutils/testsuite/binutils-all/readelf.ss-64 b/binutils/testsuite/binutils-all/readelf.ss-64 new file mode 100644 index 0000000..b29276d --- /dev/null +++ b/binutils/testsuite/binutils-all/readelf.ss-64 @@ -0,0 +1,13 @@ + +Symbol table '.symtab' contains .* entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 SECTION LOCAL DEFAULT 1 + 2: 0000000000000000 0 SECTION LOCAL DEFAULT 3 + 3: 0000000000000000 0 SECTION LOCAL DEFAULT 4 + 4: 0000000000000000 0 NOTYPE LOCAL DEFAULT 1 static_text_symbol + 5: 0000000000000000 0 NOTYPE LOCAL DEFAULT 3 static_data_symbol +.* .: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 1 text_symbol + .: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND external_symbol + .: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 3 data_symbol + .: 0000000000000004 4 OBJECT GLOBAL DEFAULT COM common_symbol |