Files
binutils-gdb/ld/testsuite/ld-scripts/phdrs.exp
Alan Modra 6392030005 Don't fudge p_vaddr when PHDR in segment
RX does horrible fudges to PT_LOAD p_vaddr, that affect the testsuite
and mean the target won't support dynamic objects.  The latter
probably doesn't matter too much since RX is an embedded target, but
it's easy to stop some of the fudges in order to reduce special cases
for RX in the testsuite.  The changes make sense in isolation too.

bfd/
	* elf32-rx.c (elf32_rx_modify_program_headers): Don't adjust
	segments that include the ELF file header or program headers.
ld/
	* testsuite/ld-elf/flags1.d: Run for RX.
	* testsuite/ld-scripts/phdrs.exp: Likewise.
	* testsuite/ld-scripts/pr14962.d: Likewise.
	* testsuite/ld-scripts/pr14962-2.d: Likewise.
2016-12-13 09:37:37 +10:30

68 lines
2.5 KiB
Plaintext

# Test PHDRS in a linker script.
# By Ian Lance Taylor, Cygnus Support.
# Copyright (C) 1999-2016 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# 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
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
# PHDRS is only meaningful for ELF.
if ![is_elf_format] {
return
}
# This is a very simplistic test.
set testname "PHDRS"
set ldopt ""
if { [istarget spu*-*-*] } {
set ldopt "--local-store 0:0"
}
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*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 [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-.*"
}
set ldopt "$ldopt -T $srcdir/$subdir/phdrs.t tmpdir/phdrs.o"
if ![ld_simple_link $ld tmpdir/phdrs $ldopt] {
fail $testname
} else {
if {![is_remote host] && [which $objdump] == 0} {
unresolved $testname
return
}
set exec_output [run_host_cmd "$objdump" "--private-headers tmpdir/phdrs"]
set exec_output [prune_warnings $exec_output]
verbose -log $exec_output
if [regexp $phdrs_regexp $exec_output] {
pass $testname
} else {
fail $testname
}
}