This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: Fix readelf -wi test (Was: Re: readelf: apply all rela relocations in the debug_info section)


Hi Guys,

> I can reproduce them here on gcc 3.2.3pre.  Same symptom; things come
> out in a different order.

Poo.  Oh well, please try the following patch instead.  I think it
does the right thing, and I have tested it extensively with the
toolchains I have here, but I would like independent confirmation that
it works.

Cheers
        Nick

2003-04-25  Nick Clifton  <nickc at redhat dot com>

	* (prune_read_warnings): Rename to prune_readelf_wi_warnings.
        (readelf_wi_test): New proc: Test 'readelf -wi' by grepping
        through its output.
        Replace invocation of "readelf_test -wi" with "readelf_wi_test"

Index: binutils/testsuite/binutils-all/readelf.exp
===================================================================
RCS file: /cvs/src/src/binutils/testsuite/binutils-all/readelf.exp,v
retrieving revision 1.16
diff -c -3 -p -w -r1.16 readelf.exp
*** binutils/testsuite/binutils-all/readelf.exp	23 Apr 2003 17:36:08 -0000	1.16
--- binutils/testsuite/binutils-all/readelf.exp	25 Apr 2003 16:01:46 -0000
*************** proc readelf_find_size { binary_file } {
*** 164,175 ****
      pass $testname
  }
  
- # Simple proc to skip certain expected warning messages.
- proc prune_readelf_warnings { text } {
-     regsub -all "(^|\n)(.*Skipping unexpected symbol type.*)" $text "\\1" text
-     return $text
- }
- 
  # 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
--- 164,169 ----
*************** proc readelf_test { options binary_file 
*** 190,197 ****
  	setup_xfail $xfail
      }
  
-     set got [prune_readelf_warnings $got]
-     
      if ![string match "" $got] then {
  	fail "readelf $options (reason: unexpected output)"
  	send_log $got
--- 184,189 ----
*************** proc readelf_test { options binary_file 
*** 225,230 ****
--- 217,305 ----
      pass "readelf $options"
  }
  
+ # Simple proc to skip certain expected warning messages.
+ 
+ proc prune_readelf_wi_warnings { text } {
+     regsub -all "(^|\n)(.*Skipping unexpected symbol type.*)" $text "\\1" text
+     return $text
+ }
+ 
+ # Testing the "readelf -wi" option is difficult because there
+ # is no guaranteed order to the output, and because some ports
+ # will use indirect string references, whilst others will use
+ # direct references.  So instead of having an expected output
+ # file, like the other readelf tests, we grep for strings that
+ # really ought to be there.
+ 
+ proc readelf_wi_test {} {
+     global READELF
+     global READELFFLAGS
+     global srcdir
+     global subdir
+     
+     # Compile the second test file.
+     if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
+ 	verbose "Unable to compile test file."
+ 	untested "readelf -wi"
+ 	return
+     }
+ 
+     # Download it.
+     set tempfile [remote_download host tmpdir/testprog.o];
+ 
+     # Run "readelf -wi" on it.
+     send_log "exec $READELF $READELFFLAGS -wi $tempfile > readelf.out\n"
+     catch "exec $READELF $READELFFLAGS -wi $tempfile > readelf.out" got
+ 
+     # Upload the results.
+     set output [remote_upload host readelf.out];
+ 
+     file_on_host delete $tempfile;
+     
+     # Strip any superflous warnings.
+     set got [prune_readelf_wi_warnings $got]
+ 
+     if ![string match "" $got] then {
+ 	fail "readelf $options (reason: unexpected output)"
+ 	send_log $got
+ 	send_log "\n"
+ 	return
+     }
+ 
+     if ![file size $output] then {
+ 	# If the output file is empty, then this target does not
+ 	# generate dwarf2 output.  This is not a failure.
+ 	verbose "No output from 'readelf -wi'"
+ 	untested "readelf -wi"
+ 	return
+     }
+     
+     # Search for strings that should be in the output.
+     set sought {
+ 	".*DW_TAG_compile_unit.*"
+ 	".*DW_TAG_subprogram.*"
+ 	".*DW_TAG_base_type.*"
+ 	".*DW_AT_producer.*(GNU C|indirect string).*"
+ 	".*DW_AT_language.*ANSI C.*"
+ 	".*DW_AT_name.*(testprog.c|indirect string).*"
+ 	".*DW_AT_name.*fn.*"
+ 	".*DW_AT_name.*(main|indirect string).*"
+     }
+     
+     foreach looked_for $sought {	
+ 	set lines [grep $output $looked_for]
+ 	if ![llength $lines] then {
+ 	    fail "readelf -wi: missing: $looked_for"
+ 	    send_log readelf.out
+ 	    return
+ 	}
+     }
+ 
+     file_on_host delete $output;
+     
+     # All done.
+     pass "readelf -wi"
+ }
  
  
  # Only ELF based toolchains need readelf.
*************** readelf_test -S $tempfile readelf.s  {}
*** 281,300 ****
  readelf_test -s $tempfile readelf.ss {}
  readelf_test -r $tempfile readelf.r  {}
  
! 
! # Compile the second test file.
! if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
!     untested "readelf -w"
!     return
! }
! 
! if [is_remote host] {
!     set tempfile [remote_download host tmpdir/testprog.o];
! } else {
!     set tempfile tmpdir/testprog.o
! }
! 
! # The xfail targets here do not default to DWARF2 format debug information
! # The symptom is that the output of 'readelf -wi' is empty.
! 
! readelf_test -wi $tempfile readelf.wi {v850*-*-* cris-*-* mips*-*-elf* avr-*-* d30v-*-* h8300*-*-* i960-*-* m32r-*-* sparc-*-*}
--- 356,359 ----
  readelf_test -s $tempfile readelf.ss {}
  readelf_test -r $tempfile readelf.r  {}
  
! readelf_wi_test


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]