Adjust relro test to work around GNU ld limitations.
authorRoland McGrath <roland@hack.frob.com>
Fri, 15 Jul 2011 02:09:27 +0000 (19:09 -0700)
committerRoland McGrath <roland@hack.frob.com>
Fri, 15 Jul 2011 02:09:27 +0000 (19:09 -0700)
ChangeLog
configure
configure.in

index 9738f7b..55390de 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-07-14  Roland McGrath  <roland@hack.frob.com>
+
+       * configure.in (-z relro check): Adjust test code to add a large
+       writable data section after it.
+       * configure: Regenerated.
+
 2011-07-11  Roland McGrath  <roland@hack.frob.com>
 
        * configure.in (-z relro check): Fix test code to make the variable
index d44659b..2568345 100755 (executable)
--- a/configure
+++ b/configure
@@ -6404,7 +6404,14 @@ else
 
 int _start (void) { return 42; }
 extern void _exit (int);
+/* Since these pointers are const, they should go in rodata.
+   Since they refer to functions that have to be resolved by
+   dynamic linking, they should instead go in RELRO data.  */
 const void *const relro[] = { &_start, &_exit, 0 };
+/* GNU ld fails to produce RELRO data when it's very small and there is no
+   normal writable data following it, or if only uninitialized (.bss) data
+   follows it, or only very small writable data.  */
+int data[0x10000] = { 1, };
 
 _ACEOF
     cat > conftest.awk <<\EOF
index d40bc64..55e5649 100644 (file)
@@ -1607,7 +1607,14 @@ EOF
     AC_LANG_CONFTEST([AC_LANG_SOURCE([[
 int _start (void) { return 42; }
 extern void _exit (int);
+/* Since these pointers are const, they should go in rodata.
+   Since they refer to functions that have to be resolved by
+   dynamic linking, they should instead go in RELRO data.  */
 const void *const relro[] = { &_start, &_exit, 0 };
+/* GNU ld fails to produce RELRO data when it's very small and there is no
+   normal writable data following it, or if only uninitialized (.bss) data
+   follows it, or only very small writable data.  */
+int data[0x10000] = { 1, };
 ]])])
     cat > conftest.awk <<\EOF
 BEGIN {