[arch-commits] Commit in binutils/trunk (PKGBUILD binutils-2.21-strip-segfault.patch)

Allan McRae allan at archlinux.org
Wed May 11 10:41:25 UTC 2011


    Date: Wednesday, May 11, 2011 @ 06:41:25
  Author: allan
Revision: 123424

upgpkg: binutils 2.21-8
fix segfault when stripping non-native files

Added:
  binutils/trunk/binutils-2.21-strip-segfault.patch
Modified:
  binutils/trunk/PKGBUILD

------------------------------------+
 PKGBUILD                           |   12 +++-
 binutils-2.21-strip-segfault.patch |   96 +++++++++++++++++++++++++++++++++++
 2 files changed, 105 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2011-05-11 10:13:48 UTC (rev 123423)
+++ PKGBUILD	2011-05-11 10:41:25 UTC (rev 123424)
@@ -5,7 +5,7 @@
 
 pkgname=binutils
 pkgver=2.21
-pkgrel=7
+pkgrel=8
 _date=20110430
 pkgdesc="A set of programs to assemble and manipulate binary and object files"
 arch=('i686' 'x86_64')
@@ -16,8 +16,10 @@
 makedepends=('dejagnu')
 options=('!libtool' '!distcc' '!ccache')
 install=binutils.install
-source=(ftp://ftp.archlinux.org/other/${pkgname}/${pkgname}-${pkgver}_${_date}.tar.bz2)
-md5sums=('7b3e28fb35cb8bb371cc47291e1c6dec')
+source=(ftp://ftp.archlinux.org/other/${pkgname}/${pkgname}-${pkgver}_${_date}.tar.bz2
+        binutils-2.21-strip-segfault.patch)
+md5sums=('7b3e28fb35cb8bb371cc47291e1c6dec'
+         '98e8dfaf1c0ededa586823ebfb27825a')
 
 mksource() {
   mkdir ${pkgname}-${_date}
@@ -30,6 +32,10 @@
 }
 
 build() {
+  cd ${srcdir}/binutils
+  # http://sourceware.org/bugzilla/show_bug.cgi?id=12632 
+  patch -Np1 -i $srcdir/binutils-2.21-strip-segfault.patch
+
   cd ${srcdir}
   mkdir binutils-build && cd binutils-build
 

Added: binutils-2.21-strip-segfault.patch
===================================================================
--- binutils-2.21-strip-segfault.patch	                        (rev 0)
+++ binutils-2.21-strip-segfault.patch	2011-05-11 10:41:25 UTC (rev 123424)
@@ -0,0 +1,96 @@
+diff --git a/binutils/objcopy.c b/binutils/objcopy.c
+index 15c4f95..b64f3d0 100644
+--- a/binutils/objcopy.c
++++ b/binutils/objcopy.c
+@@ -1,6 +1,6 @@
+ /* objcopy.c -- copy object file from input to output, optionally massaging it.
+    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
++   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+    Free Software Foundation, Inc.
+ 
+    This file is part of GNU Binutils.
+@@ -2024,6 +2024,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
+       struct stat buf;
+       int stat_status = 0;
+       bfd_boolean del = TRUE;
++      bfd_boolean ok_object;
+ 
+       /* Create an output file for this member.  */
+       output_name = concat (dir, "/",
+@@ -2061,44 +2062,42 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
+       l->obfd = NULL;
+       list = l;
+ 
+-      if (bfd_check_format (this_element, bfd_object))
++      ok_object = bfd_check_format (this_element, bfd_object);
++      if (!ok_object)
++	bfd_nonfatal_message (NULL, this_element, NULL,
++			      _("Unable to recognise the format of file"));
++
++      /* PR binutils/3110: Cope with archives
++	 containing multiple target types.  */
++      if (force_output_target || !ok_object)
++	output_bfd = bfd_openw (output_name, output_target);
++      else
++	output_bfd = bfd_openw (output_name, bfd_get_target (this_element));
++
++      if (output_bfd == NULL)
+ 	{
+-	  /* PR binutils/3110: Cope with archives
+-	     containing multiple target types.  */
+-	  if (force_output_target)
+-	    output_bfd = bfd_openw (output_name, output_target);
+-	  else
+-	    output_bfd = bfd_openw (output_name, bfd_get_target (this_element));
++	  bfd_nonfatal_message (output_name, NULL, NULL, NULL);
++	  status = 1;
++	  return;
++	}
++
++      if (ok_object)
++	{
++	  del = !copy_object (this_element, output_bfd, input_arch);
+ 
+-	  if (output_bfd == NULL)
++	  if (del && bfd_get_arch (this_element) == bfd_arch_unknown)
++	    /* Try again as an unknown object file.  */
++	    ok_object = FALSE;
++	  else if (!bfd_close (output_bfd))
+ 	    {
+ 	      bfd_nonfatal_message (output_name, NULL, NULL, NULL);
++	      /* Error in new object file. Don't change archive.  */
+ 	      status = 1;
+-	      return;
+ 	    }
+-
+- 	  del = ! copy_object (this_element, output_bfd, input_arch);
+-
+-	  if (! del
+-	      || bfd_get_arch (this_element) != bfd_arch_unknown)
+-	    {
+-	      if (!bfd_close (output_bfd))
+-		{
+-		  bfd_nonfatal_message (output_name, NULL, NULL, NULL);
+-		  /* Error in new object file. Don't change archive.  */
+-		  status = 1;
+-		}
+-	    }
+-	  else
+-	    goto copy_unknown_element;
+ 	}
+-      else
+-	{
+-	  bfd_nonfatal_message (NULL, this_element, NULL,
+-				_("Unable to recognise the format of file"));
+ 
+-	  output_bfd = bfd_openw (output_name, output_target);
+-copy_unknown_element:
++      if (!ok_object)
++	{
+ 	  del = !copy_unknown_object (this_element, output_bfd);
+ 	  if (!bfd_close_all_done (output_bfd))
+ 	    {
+-- 
+1.6.5.GIT
+




More information about the arch-commits mailing list