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