* 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.
This commit is contained in:
parent
b37bcaa80e
commit
9921923c9d
4 changed files with 94 additions and 6 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
24
binutils/testsuite/binutils-all/readelf.s-64
Normal file
24
binutils/testsuite/binutils-all/readelf.s-64
Normal file
|
@ -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\)
|
13
binutils/testsuite/binutils-all/readelf.ss-64
Normal file
13
binutils/testsuite/binutils-all/readelf.ss-64
Normal file
|
@ -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
|
Loading…
Reference in a new issue