patches/binutils/2.22/300-012_check_ldrunpath_length.patch
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Tue Oct 16 20:57:44 2012 +0200 (2012-10-16)
changeset 3079 37831a33e07e
permissions -rw-r--r--
kernel/linux: fix using custom location

Currently, extract and patch are skipped as thus:
- using a custom directory of pre-installed headers
- a correctly named directory already exists

Otherwise, extract and patch are done.

The current second condition is wrong, because it allows the following
sequence to happen:
- a non-custom kernel is used
- a previous build only partially extracted the non-custom sources
- that p[revious build broke during extraction (eg. incomplete tarball...)
- a subsequent build will find a properly named directory, and will
thus skip extract and patch, which is wrong

Fix that by following the conditions in this table:

Type | Extract | Patch
----------------------+---------+-------
Pre-installed headers | N | N
custom directory | N | N
custom tarball | Y | N
mainstream tarball | Y | Y

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: David Holsgrove <david.holsgrove@xilinx.com>
     1 diff -durN binutils-2.22.orig/ld/emultempl/elf32.em binutils-2.22/ld/emultempl/elf32.em
     2 --- binutils-2.22.orig/ld/emultempl/elf32.em	2011-11-21 10:29:39.000000000 +0100
     3 +++ binutils-2.22/ld/emultempl/elf32.em	2011-12-14 19:52:12.880783238 +0100
     4 @@ -1273,6 +1273,8 @@
     5  	      && command_line.rpath == NULL)
     6  	    {
     7  	      lib_path = (const char *) getenv ("LD_RUN_PATH");
     8 +	      if ((lib_path) && (strlen (lib_path) == 0))
     9 +	      	lib_path = NULL;
    10  	      if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
    11  						      force))
    12  		break;
    13 @@ -1500,6 +1502,8 @@
    14    rpath = command_line.rpath;
    15    if (rpath == NULL)
    16      rpath = (const char *) getenv ("LD_RUN_PATH");
    17 +  if ((rpath) && (strlen (rpath) == 0))
    18 +  	rpath = NULL;
    19  
    20    for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
    21      if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)