LD/testsuite: Conditionalize the placement of `.dynamic' in GNU_RELRO
authorMaciej W. Rozycki <macro@imgtec.com>
Tue, 18 Jul 2017 16:20:30 +0000 (17:20 +0100)
committerMaciej W. Rozycki <macro@imgtec.com>
Tue, 18 Jul 2017 16:20:30 +0000 (17:20 +0100)
Complement commit d345186d0535 ("Check if GNU_RELRO segment is is
generated") and exclude the presence of a `.dynamic' section from
implying the creation of a GNU_RELRO segment for targets which place the
section in the (read-only) text segment, and therefore cannot have the
section assigned to GNU_RELRO and neither it would make sense.

Currently the list of such targets consists of 64-bit HPPA and
non-VxWorks MIPS targets, as determined by looking for TEXT_DYNAMIC
being set across ld/emulparams/* and then verified by examining default
linker scripts produced in a `--enable-targets=all' build.

ld/
* testsuite/ld-elf/binutils.exp (binutils_test): Make the
expectation for `.dynamic' in GNU_RELRO segment target-specific.

ld/ChangeLog
ld/testsuite/ld-elf/binutils.exp

index 23babe3f66ed346ba4c42e4b5e02f0d8c9cf964f..7af1ddc060552e28a31397501a2b1be2bd60457b 100644 (file)
@@ -1,3 +1,8 @@
+2017-07-18  Maciej W. Rozycki  <macro@imgtec.com>
+
+       * testsuite/ld-elf/binutils.exp (binutils_test): Make the
+       expectation for `.dynamic' in GNU_RELRO segment target-specific.
+
 2017-07-18  Nick Clifton  <nickc@redhat.com>
 
        PR 21775
index 61e60313386337ad2cdc81df293dbb34720a8f7a..687749dc6712206955b7293863fb508e31cab03b 100644 (file)
@@ -81,12 +81,17 @@ proc binutils_test { prog_name ld_options test {test_name ""} {readelf_options "
     }
 
     if [string match "*-z relro*" $ld_options] {
+       # These targets set TEXT_DYNAMIC and therefore have `.dynamic'
+       # in the (read-only) text segment rather than data segment.
+       set relro_dynamic [expr !([istarget "hppa64*-*-*"] \
+                                 || ([istarget "mips*-*-*"] \
+                                     && ![istarget "*-*-vxworks*"]))]
        # Check if GNU_RELRO segment is generated.
        set got [remote_exec host "grep GNU_RELRO tmpdir/$test.exp"]
        if { ![string match "*GNU_RELRO*" $got] } then {
            set got [remote_exec host "cat tmpdir/$test.exp"]
            if { [string match "*.data.rel.ro*" $got]
-                || [string match "*.dynamic*" $got]
+                || ($relro_dynamic && [string match "*.dynamic*" $got])
                 || [string match "*.got*" $got]
                 || [string match "*.eh_frame*" $got]
                 || [string match "*.gcc_except_table*" $got]