# Test PHDRS in a linker script.
# By Ian Lance Taylor, Cygnus Support.

# PHDRS is only meaningful for ELF.
if { ![istarget *-*-sysv4*] \
     && ![istarget *-*-unixware*] \
     && ![istarget *-*-elf*] \
     && ![istarget *-*-eabi*] \
     && ![istarget *-*-linux*] \
     && ![istarget *-*-irix5*] \
     && ![istarget *-*-irix6*] \
     && ![istarget *-*-solaris2*] } {
    return
}

if { [istarget *-*-linuxaout*] \
     || [istarget *-*-linuxoldld*] } {
    return
}

# This is a very simplistic test.

set testname "PHDRS"

if ![ld_assemble $as $srcdir/$subdir/phdrs.s tmpdir/phdrs.o] {
    unresolved $testname
    return
}

set phdrs_regexp \
".*Program Header:.*PHDR *off *0x00*34 *vaddr *0x00*80034 *paddr *0x00*80034.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* flags r--.*LOAD *off *0x00* *vaddr *0x00*80000 *paddr *0x00*80000.*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*-*-*] } then {
  set phdrs_regexp \
".*Program Header:.*PHDR *off *0x00*40 *vaddr *0x00*80040 *paddr *0x00*80040.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* flags r--.*LOAD *off *0x00* *vaddr *0x00*80000 *paddr *0x00*80000.*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-.*"
}

if ![ld_simple_link $ld tmpdir/phdrs "-T $srcdir/$subdir/phdrs.t tmpdir/phdrs.o"] {
    fail $testname
} else {
    if {[which $objdump] == 0} {
	unresolved $testname
	return
    }

    verbose -log "$objdump --private tmpdir/phdrs"
    catch "exec $objdump --private tmpdir/phdrs" exec_output
    set exec_output [prune_warnings $exec_output]
    verbose -log $exec_output

    if [regexp $phdrs_regexp $exec_output] {
	pass $testname
    } else {
	fail $testname
    }
}
