patches/glibc/2.9/100-ssp-compat.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 17 23:06:02 2010 +0100 (2010-01-17)
changeset 1740 c57458bb354d
parent 1201 c9967a6e3b25
permissions -rw-r--r--
configure: do not require hg when configuring in an hg clone

When configuring in an hg clone, we need hg to compute the version string.
It can happen that users do not have Mercurial (eg. if they got a snapshot
rather that they did a full clone). In this case, we can still run, of
course, so simply fill the version string with a sufficiently explicit
value, that does not require hg. The date is a good candidate.
yann@1201
     1
Original patch from: gentoo/src/patchsets/glibc/2.9/0010_all_glibc-2.7-ssp-compat.patch
yann@1201
     2
yann@1201
     3
-= BEGIN original header =-
yann@1201
     4
Add backwards compat support for gcc-3.x ssp ... older ssp versions
yann@1201
     5
used __guard and __stack_smash_handler symbols while gcc-4.1 and newer
yann@1201
     6
uses __stack_chk_guard and __stack_chk_fail.
yann@1201
     7
yann@1201
     8
-= END original header =-
yann@1201
     9
yann@1201
    10
diff -durN glibc-2_9.orig/Versions.def glibc-2_9/Versions.def
yann@1201
    11
--- glibc-2_9.orig/Versions.def	2008-08-01 19:13:40.000000000 +0200
yann@1201
    12
+++ glibc-2_9/Versions.def	2009-02-02 22:00:33.000000000 +0100
yann@1201
    13
@@ -113,6 +113,9 @@
yann@1201
    14
   GLIBC_2.0
yann@1201
    15
   GLIBC_2.1
yann@1201
    16
   GLIBC_2.3
yann@1201
    17
+%ifdef ENABLE_OLD_SSP_COMPAT
yann@1201
    18
+  GLIBC_2.3.2
yann@1201
    19
+%endif
yann@1201
    20
   GLIBC_2.4
yann@1201
    21
   GLIBC_PRIVATE
yann@1201
    22
 }
yann@1201
    23
diff -durN glibc-2_9.orig/config.h.in glibc-2_9/config.h.in
yann@1201
    24
--- glibc-2_9.orig/config.h.in	2007-03-26 22:40:08.000000000 +0200
yann@1201
    25
+++ glibc-2_9/config.h.in	2009-02-02 22:00:32.000000000 +0100
yann@1201
    26
@@ -42,6 +42,9 @@
yann@1201
    27
    assembler instructions per line.  Default is `;'  */
yann@1201
    28
 #undef ASM_LINE_SEP
yann@1201
    29
 
yann@1201
    30
+/* Define if we want to enable support for old ssp symbols */
yann@1201
    31
+#undef	ENABLE_OLD_SSP_COMPAT
yann@1201
    32
+
yann@1201
    33
 /* Define if not using ELF, but `.init' and `.fini' sections are available.  */
yann@1201
    34
 #undef	HAVE_INITFINI
yann@1201
    35
 
yann@1201
    36
diff -durN glibc-2_9.orig/configure glibc-2_9/configure
yann@1201
    37
--- glibc-2_9.orig/configure	2008-11-11 10:50:11.000000000 +0100
yann@1201
    38
+++ glibc-2_9/configure	2009-02-02 22:00:32.000000000 +0100
yann@1201
    39
@@ -1380,6 +1380,9 @@
yann@1201
    40
   --enable-kernel=VERSION compile for compatibility with kernel not older than
yann@1201
    41
                           VERSION
yann@1201
    42
   --enable-all-warnings   enable all useful warnings gcc can issue
yann@1201
    43
+  --disable-old-ssp-compat
yann@1201
    44
+                          enable support for older ssp symbols
yann@1201
    45
+                          [default=no]
yann@1201
    46
 
yann@1201
    47
 Optional Packages:
yann@1201
    48
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
yann@1201
    49
@@ -6470,6 +6473,20 @@
yann@1201
    50
 echo "${ECHO_T}$libc_cv_ssp" >&6; }
yann@1201
    51
 
yann@1201
    52
 
yann@1201
    53
+# Check whether --enable-old-ssp-compat or --disable-old-ssp-compat was given.
yann@1201
    54
+if test "${enable_old_ssp_compat+set}" = set; then
yann@1201
    55
+  enableval="$enable_old_ssp_compat"
yann@1201
    56
+  enable_old_ssp_compat=$enableval
yann@1201
    57
+else
yann@1201
    58
+  enable_old_ssp_compat=no
yann@1201
    59
+fi;
yann@1201
    60
+if test "x$enable_old_ssp_compat" = "xyes"; then
yann@1201
    61
+  cat >>confdefs.h <<\_ACEOF
yann@1201
    62
+#define ENABLE_OLD_SSP_COMPAT 1
yann@1201
    63
+_ACEOF
yann@1201
    64
+
yann@1201
    65
+fi
yann@1201
    66
+
yann@1201
    67
 { echo "$as_me:$LINENO: checking for -fgnu89-inline" >&5
yann@1201
    68
 echo $ECHO_N "checking for -fgnu89-inline... $ECHO_C" >&6; }
yann@1201
    69
 if test "${libc_cv_gnu89_inline+set}" = set; then
yann@1201
    70
diff -durN glibc-2_9.orig/configure.in glibc-2_9/configure.in
yann@1201
    71
--- glibc-2_9.orig/configure.in	2008-11-11 10:50:11.000000000 +0100
yann@1201
    72
+++ glibc-2_9/configure.in	2009-02-02 22:00:32.000000000 +0100
yann@1201
    73
@@ -1647,6 +1647,15 @@
yann@1201
    74
 rm -f conftest*])
yann@1201
    75
 AC_SUBST(libc_cv_ssp)
yann@1201
    76
 
yann@1201
    77
+AC_ARG_ENABLE([old-ssp-compat],
yann@1201
    78
+	      AC_HELP_STRING([--enable-old-ssp-compat],
yann@1201
    79
+	                     [enable support for older ssp symbols @<:@default=no@:>@]),
yann@1201
    80
+	      [enable_old_ssp_compat=$enableval],
yann@1201
    81
+	      [enable_old_ssp_compat=no])
yann@1201
    82
+if test "x$enable_old_ssp_compat" = "xyes"; then
yann@1201
    83
+  AC_DEFINE(ENABLE_OLD_SSP_COMPAT)
yann@1201
    84
+fi
yann@1201
    85
+
yann@1201
    86
 AC_CACHE_CHECK(for -fgnu89-inline, libc_cv_gnu89_inline, [dnl
yann@1201
    87
 cat > conftest.c <<EOF
yann@1201
    88
 int foo;
yann@1201
    89
diff -durN glibc-2_9.orig/csu/Versions glibc-2_9/csu/Versions
yann@1201
    90
--- glibc-2_9.orig/csu/Versions	2006-10-28 01:11:41.000000000 +0200
yann@1201
    91
+++ glibc-2_9/csu/Versions	2009-02-02 22:00:32.000000000 +0100
yann@1201
    92
@@ -17,6 +17,12 @@
yann@1201
    93
     # New special glibc functions.
yann@1201
    94
     gnu_get_libc_release; gnu_get_libc_version;
yann@1201
    95
   }
yann@1201
    96
+  GLIBC_2.3.2 {
yann@1201
    97
+%ifdef ENABLE_OLD_SSP_COMPAT
yann@1201
    98
+    # global objects and functions for the old propolice patch in gcc
yann@1201
    99
+    __guard;
yann@1201
   100
+%endif
yann@1201
   101
+  }
yann@1201
   102
   GLIBC_PRIVATE {
yann@1201
   103
 %if HAVE___THREAD
yann@1201
   104
     # This version is for the TLS symbol, GLIBC_2.0 is the old object symbol.
yann@1201
   105
diff -durN glibc-2_9.orig/csu/libc-start.c glibc-2_9/csu/libc-start.c
yann@1201
   106
--- glibc-2_9.orig/csu/libc-start.c	2007-08-21 00:27:50.000000000 +0200
yann@1201
   107
+++ glibc-2_9/csu/libc-start.c	2009-02-02 22:00:32.000000000 +0100
yann@1201
   108
@@ -37,6 +37,9 @@
yann@1201
   109
 uintptr_t __stack_chk_guard attribute_relro;
yann@1201
   110
 # endif
yann@1201
   111
 #endif
yann@1201
   112
+#ifdef ENABLE_OLD_SSP_COMPAT
yann@1201
   113
+uintptr_t __guard attribute_relro;
yann@1201
   114
+#endif
yann@1201
   115
 
yann@1201
   116
 #ifdef HAVE_PTR_NTHREADS
yann@1201
   117
 /* We need atomic operations.  */
yann@1201
   118
@@ -141,6 +144,9 @@
yann@1201
   119
 
yann@1201
   120
   /* Set up the stack checker's canary.  */
yann@1201
   121
   uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
yann@1201
   122
+#ifdef ENABLE_OLD_SSP_COMPAT
yann@1201
   123
+  __guard = stack_chk_guard;
yann@1201
   124
+#endif
yann@1201
   125
 # ifdef THREAD_SET_STACK_GUARD
yann@1201
   126
   THREAD_SET_STACK_GUARD (stack_chk_guard);
yann@1201
   127
 # else
yann@1201
   128
diff -durN glibc-2_9.orig/debug/Versions glibc-2_9/debug/Versions
yann@1201
   129
--- glibc-2_9.orig/debug/Versions	2008-03-05 07:53:41.000000000 +0100
yann@1201
   130
+++ glibc-2_9/debug/Versions	2009-02-02 22:00:32.000000000 +0100
yann@1201
   131
@@ -10,6 +10,12 @@
yann@1201
   132
     # These are to support some gcc features.
yann@1201
   133
     __cyg_profile_func_enter; __cyg_profile_func_exit;
yann@1201
   134
   }
yann@1201
   135
+%ifdef ENABLE_OLD_SSP_COMPAT
yann@1201
   136
+  GLIBC_2.3.2 {
yann@1201
   137
+    # backwards ssp compat support; alias to __stack_chk_fail
yann@1201
   138
+    __stack_smash_handler;
yann@1201
   139
+  }
yann@1201
   140
+%endif
yann@1201
   141
   GLIBC_2.3.4 {
yann@1201
   142
     __chk_fail;
yann@1201
   143
     __memcpy_chk; __memmove_chk; __mempcpy_chk; __memset_chk; __stpcpy_chk;
yann@1201
   144
diff -durN glibc-2_9.orig/debug/stack_chk_fail.c glibc-2_9/debug/stack_chk_fail.c
yann@1201
   145
--- glibc-2_9.orig/debug/stack_chk_fail.c	2007-05-25 01:47:08.000000000 +0200
yann@1201
   146
+++ glibc-2_9/debug/stack_chk_fail.c	2009-02-02 22:00:32.000000000 +0100
yann@1201
   147
@@ -28,3 +28,7 @@
yann@1201
   148
 {
yann@1201
   149
   __fortify_fail ("stack smashing detected");
yann@1201
   150
 }
yann@1201
   151
+
yann@1201
   152
+#ifdef ENABLE_OLD_SSP_COMPAT
yann@1201
   153
+strong_alias (__stack_chk_fail, __stack_smash_handler)
yann@1201
   154
+#endif
yann@1201
   155
diff -durN glibc-2_9.orig/elf/Versions glibc-2_9/elf/Versions
yann@1201
   156
--- glibc-2_9.orig/elf/Versions	2008-03-08 06:42:26.000000000 +0100
yann@1201
   157
+++ glibc-2_9/elf/Versions	2009-02-02 22:00:33.000000000 +0100
yann@1201
   158
@@ -43,6 +43,12 @@
yann@1201
   159
     # runtime interface to TLS
yann@1201
   160
     __tls_get_addr;
yann@1201
   161
   }
yann@1201
   162
+%ifdef ENABLE_OLD_SSP_COMPAT
yann@1201
   163
+  GLIBC_2.3.2 {
yann@1201
   164
+    # backwards ssp compat support
yann@1201
   165
+    __guard;
yann@1201
   166
+  }
yann@1201
   167
+%endif
yann@1201
   168
   GLIBC_2.4 {
yann@1201
   169
     # stack canary
yann@1201
   170
     __stack_chk_guard;
yann@1201
   171
diff -durN glibc-2_9.orig/elf/rtld.c glibc-2_9/elf/rtld.c
yann@1201
   172
--- glibc-2_9.orig/elf/rtld.c	2008-08-14 19:01:56.000000000 +0200
yann@1201
   173
+++ glibc-2_9/elf/rtld.c	2009-02-02 22:00:32.000000000 +0100
yann@1201
   174
@@ -89,6 +89,9 @@
yann@1201
   175
    in thread local area.  */
yann@1201
   176
 uintptr_t __stack_chk_guard attribute_relro;
yann@1201
   177
 #endif
yann@1201
   178
+#ifdef ENABLE_OLD_SSP_COMPAT
yann@1201
   179
+uintptr_t __guard attribute_relro;
yann@1201
   180
+#endif
yann@1201
   181
 
yann@1201
   182
 /* Only exported for architectures that don't store the pointer guard
yann@1201
   183
    value in thread local area.  */
yann@1201
   184
@@ -842,6 +845,9 @@
yann@1201
   185
 {
yann@1201
   186
   /* Set up the stack checker's canary.  */
yann@1201
   187
   uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
yann@1201
   188
+#ifdef ENABLE_OLD_SSP_COMPAT
yann@1201
   189
+  __guard = stack_chk_guard;
yann@1201
   190
+#endif
yann@1201
   191
 #ifdef THREAD_SET_STACK_GUARD
yann@1201
   192
   THREAD_SET_STACK_GUARD (stack_chk_guard);
yann@1201
   193
 #else