Check if GNU_RELRO segment is is generated
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 9 Jan 2014 18:18:19 +0000 (10:18 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 9 Jan 2014 18:19:19 +0000 (10:19 -0800)
Fail if GNU_RELRO segment isn't generated, but should.

* ld-elf/binutils.exp (binutils_test): Check if GNU_RELRO segment
is generated.

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

index df2e1b8..da8ce89 100644 (file)
@@ -1,3 +1,8 @@
+2014-01-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * ld-elf/binutils.exp (binutils_test): Check if GNU_RELRO segment
+       is generated.
+
 2014-01-09  Vidya Praveen  <vidyapraveen@arm.com>
 
        * lib/ld-lib.exp (check_lto_shared_available): New check.
index 0101512..b170791 100644 (file)
@@ -1,5 +1,5 @@
 # Expect script for binutils tests
-#   Copyright 2006, 2007, 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
+# Copyright 2006-2013 Free Software Foundation, Inc.
 #
 # This file is part of the GNU Binutils.
 #
@@ -79,6 +79,30 @@ proc binutils_test { prog_name ld_options test {test_name ""}} {
        return
     }
 
+    if [string match "*-z relro*" $ld_options] {
+       # 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]
+                || [string match "*.got*" $got]
+                || [string match "*.eh_frame*" $got]
+                || [string match "*.gcc_except_table*" $got]
+                || [string match "*.exception_ranges*" $got]
+                || [string match "*.ctors*" $got]
+                || [string match "*.dtors*" $got]
+                || [string match "*.tdata*" $got]
+                || [string match "*.preinit_array*" $got]
+                || [string match "*.init_array*" $got]
+                || [string match "*.fini_array*" $got] } then {
+               # Fail if GNU_RELRO segment isn't generated, but should.
+               fail "$test_name"
+               return
+           }
+       }
+    }
+
     send_log "$prog tmpdir/$test\n"
     set got [remote_exec host "$prog tmpdir/$test"]
     if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {