From 7ed2b4e229a3996bc9a5594b8b3658eeff1deddb Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 30 Sep 2003 00:39:57 +0000 Subject: [PATCH] 2003-09-29 H.J. Lu * lib/ld-lib.exp (proc is_elf64): New. * ld-scripts/phdrs.exp: Use is_elf_format and is_elf64. --- ld/testsuite/ChangeLog | 6 ++++++ ld/testsuite/ld-scripts/phdrs.exp | 22 +++------------------- ld/testsuite/lib/ld-lib.exp | 26 ++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 6d5603511f1..900402cb457 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2003-09-29 H.J. Lu + + * lib/ld-lib.exp (proc is_elf64): New. + + * ld-scripts/phdrs.exp: Use is_elf_format and is_elf64. + 2003-09-23 Alan Modra * ld-discard/exit.s: Correct .text.exit attributes. diff --git a/ld/testsuite/ld-scripts/phdrs.exp b/ld/testsuite/ld-scripts/phdrs.exp index 7901d79d39d..3bd7b819324 100644 --- a/ld/testsuite/ld-scripts/phdrs.exp +++ b/ld/testsuite/ld-scripts/phdrs.exp @@ -18,20 +18,7 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # PHDRS is only meaningful for ELF. -if { ![istarget *-*-sysv4*] \ - && ![istarget *-*-unixware*] \ - && ![istarget *-*-elf*] \ - && ![istarget *-*-eabi*] \ - && ![istarget hppa*64*-*-hpux*] \ - && ![istarget *-*-linux*] \ - && ![istarget *-*-irix5*] \ - && ![istarget *-*-irix6*] \ - && ![istarget *-*-solaris2*] } { - return -} - -if { [istarget *-*-linux*aout*] \ - || [istarget *-*-linux*oldld*] } { +if ![is_elf_format] { return } @@ -48,11 +35,8 @@ set phdrs_regexp \ ".*Program Header:.*PHDR *off *0x00*34 *vaddr *0x00*800034 *paddr *0x00*800034.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* flags r--.*LOAD *off *0x00* *vaddr *0x00*800000 *paddr *0x00*800000.*filesz *0x00*\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* *flags r-x.*LOAD *off *0x0\[0-9a-f\]* *vaddr *0x00*80*\[0-9a-f\]* *paddr *0x00*80*\[0-9a-f\]*.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* *flags *rw-.*" # On a 64 bit ELF format, we need different numbers. -if { [istarget alpha*-*-*] || [istarget "ia64*-*-*"] - || [istarget "hppa*64*-*-*"] || [istarget "x86_64*-*-*"] - || [istarget "s390x*-*-*"] || [istarget "sparc64*-*-*"] - || [istarget "powerpc64*-*-*"] || [istarget "*-*-*elf64*"] } then { - set phdrs_regexp \ +if [is_elf64 tmpdir/phdrs.o] { + set phdrs_regexp \ ".*Program Header:.*PHDR *off *0x00*40 *vaddr *0x00*800040 *paddr *0x00*800040.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* flags r--.*LOAD *off *0x00* *vaddr *0x00*800000 *paddr *0x00*800000.*filesz *0x00*\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* *flags r-x.*LOAD *off *0x0\[0-9a-f\]* *vaddr *0x00*80*\[0-9a-f\]* *paddr *0x00*80*\[0-9a-f\]*.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* *flags *rw-.*" } diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index 4452e2e9e13..92d0a87e4e6 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -389,6 +389,32 @@ proc is_elf_format {} { return 1 } +# +# is_elf64 +# true if the object format is known to be 64bit ELF +proc is_elf64 { binary_file } { + global READELF + global READELFFLAGS + + set readelf_size "" + catch "exec $READELF $READELFFLAGS -h $binary_file > readelf.out" got + + if ![string match "" $got] then { + return 0 + } + + if { ![regexp "\n\[ \]*Class:\[ \]*ELF(\[0-9\]+)\n" \ + [file_contents readelf.out] nil readelf_size] } { + return 0 + } + + if { $readelf_size == "64" } { + return 1 + } + + return 0 +} + # # simple_diff # compares two files line-by-line -- 2.30.2