#28 Fix regression breaking Node.js builds
Merged 2 years ago by nickc. Opened 2 years ago by sgallagh.
rpms/ sgallagh/binutils nodejs  into  rawhide

@@ -0,0 +1,232 @@ 

+ From 1c611b40e6bfc8029bff7696814330b5bc0ee5c0 Mon Sep 17 00:00:00 2001

+ From: "H.J. Lu" <hjl.tools@gmail.com>

+ Date: Mon, 26 Jul 2021 05:59:55 -0700

+ Subject: [PATCH] bfd: Close the file descriptor if there is no archive fd

+ 

+ Close the file descriptor if there is no archive plugin file descriptor

+ to avoid running out of file descriptors on thin archives with many

+ archive members.

+ 

+ bfd/

+ 

+ 	PR ld/28138

+ 	* plugin.c (bfd_plugin_close_file_descriptor): Close the file

+ 	descriptor there is no archive plugin file descriptor.

+ 

+ ld/

+ 

+ 	PR ld/28138

+ 	* testsuite/ld-plugin/lto.exp: Run tmpdir/pr28138 only for

+ 	native build.

+ 

+ 	PR ld/28138

+ 	* testsuite/ld-plugin/lto.exp: Run ld/28138 tests.

+ 	* testsuite/ld-plugin/pr28138.c: New file.

+ 	* testsuite/ld-plugin/pr28138-1.c: Likewise.

+ 	* testsuite/ld-plugin/pr28138-2.c: Likewise.

+ 	* testsuite/ld-plugin/pr28138-3.c: Likewise.

+ 	* testsuite/ld-plugin/pr28138-4.c: Likewise.

+ 	* testsuite/ld-plugin/pr28138-5.c: Likewise.

+ 	* testsuite/ld-plugin/pr28138-6.c: Likewise.

+ 	* testsuite/ld-plugin/pr28138-7.c: Likewise.

+ 

+ (cherry picked from commit 5a98fb7513b559e20dfebdbaa2a471afda3b4742)

+ (cherry picked from commit 7dc37e1e1209c80e0bab784df6b6bac335e836f2)

+ ---

+  bfd/plugin.c                       |  8 +++++++

+  ld/testsuite/ld-plugin/lto.exp     | 34 ++++++++++++++++++++++++++++++

+  ld/testsuite/ld-plugin/pr28138-1.c |  6 ++++++

+  ld/testsuite/ld-plugin/pr28138-2.c |  6 ++++++

+  ld/testsuite/ld-plugin/pr28138-3.c |  6 ++++++

+  ld/testsuite/ld-plugin/pr28138-4.c |  6 ++++++

+  ld/testsuite/ld-plugin/pr28138-5.c |  6 ++++++

+  ld/testsuite/ld-plugin/pr28138-6.c |  6 ++++++

+  ld/testsuite/ld-plugin/pr28138-7.c |  6 ++++++

+  ld/testsuite/ld-plugin/pr28138.c   | 20 ++++++++++++++++++

+  10 files changed, 104 insertions(+)

+  create mode 100644 ld/testsuite/ld-plugin/pr28138-1.c

+  create mode 100644 ld/testsuite/ld-plugin/pr28138-2.c

+  create mode 100644 ld/testsuite/ld-plugin/pr28138-3.c

+  create mode 100644 ld/testsuite/ld-plugin/pr28138-4.c

+  create mode 100644 ld/testsuite/ld-plugin/pr28138-5.c

+  create mode 100644 ld/testsuite/ld-plugin/pr28138-6.c

+  create mode 100644 ld/testsuite/ld-plugin/pr28138-7.c

+  create mode 100644 ld/testsuite/ld-plugin/pr28138.c

+ 

+ diff --git a/bfd/plugin.c b/bfd/plugin.c

+ index 6cfa2b66470..3bab8febe88 100644

+ --- a/bfd/plugin.c

+ +++ b/bfd/plugin.c

+ @@ -291,6 +291,14 @@ bfd_plugin_close_file_descriptor (bfd *abfd, int fd)

+  	     && !bfd_is_thin_archive (abfd->my_archive))

+  	abfd = abfd->my_archive;

+  

+ +      /* Close the file descriptor if there is no archive plugin file

+ +	 descriptor.  */

+ +      if (abfd->archive_plugin_fd == -1)

+ +	{

+ +	  close (fd);

+ +	  return;

+ +	}

+ +

+        abfd->archive_plugin_fd_open_count--;

+        /* Dup the archive plugin file descriptor for later use, which

+  	 will be closed by _bfd_archive_close_and_cleanup.  */

+ diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp

+ index def69e43ab3..999d911ce6a 100644

+ --- a/ld/testsuite/ld-plugin/lto.exp

+ +++ b/ld/testsuite/ld-plugin/lto.exp

+ @@ -687,6 +687,40 @@ if { [is_elf_format] && [check_lto_shared_available] } {

+      }

+  }

+  

+ +run_cc_link_tests [list \

+ +    [list \

+ +	"Build pr28138.a" \

+ +	"-T" "" \

+ +	{pr28138-1.c pr28138-2.c pr28138-3.c pr28138-4.c pr28138-5.c \

+ +	 pr28138-6.c pr28138-7.c} {} "pr28138.a" \

+ +    ] \

+ +    [list \

+ +	"Build pr28138.o" \

+ +	"" "" \

+ +	{pr28138.c} {} \

+ +    ] \

+ +]

+ +

+ +set exec_output [run_host_cmd "sh" \

+ +			      "-c \"ulimit -n 20; \

+ +			      $CC -Btmpdir/ld -o tmpdir/pr28138 \

+ +			      tmpdir/pr28138.o tmpdir/pr28138.a\""]

+ +set exec_output [prune_warnings $exec_output]

+ +if [string match "" $exec_output] then {

+ +    if { [isnative] } {

+ +	set exec_output [run_host_cmd "tmpdir/pr28138" ""]

+ +	if [string match "PASS" $exec_output] then {

+ +	    pass "PR ld/28138"

+ +	} else {

+ +	    fail "PR ld/28138"

+ +	}

+ +    } else {

+ +	pass "PR ld/28138"

+ +    }

+ +} else {

+ +    fail "PR ld/28138"

+ +}

+ +

+  set testname "Build liblto-11.a"

+  remote_file host delete "tmpdir/liblto-11.a"

+  set catch_output [run_host_cmd "$ar" "rc $plug_opt tmpdir/liblto-11.a tmpdir/lto-11a.o tmpdir/lto-11b.o tmpdir/lto-11c.o"]

+ diff --git a/ld/testsuite/ld-plugin/pr28138-1.c b/ld/testsuite/ld-plugin/pr28138-1.c

+ new file mode 100644

+ index 00000000000..51d119e1642

+ --- /dev/null

+ +++ b/ld/testsuite/ld-plugin/pr28138-1.c

+ @@ -0,0 +1,6 @@

+ +extern int a0(void);

+ +int

+ +a1(void)

+ +{

+ +  return 1 + a0();

+ +}

+ diff --git a/ld/testsuite/ld-plugin/pr28138-2.c b/ld/testsuite/ld-plugin/pr28138-2.c

+ new file mode 100644

+ index 00000000000..1120cd797e9

+ --- /dev/null

+ +++ b/ld/testsuite/ld-plugin/pr28138-2.c

+ @@ -0,0 +1,6 @@

+ +extern int a1(void);

+ +int

+ +a2(void)

+ +{

+ +  return 1 + a1();

+ +}

+ diff --git a/ld/testsuite/ld-plugin/pr28138-3.c b/ld/testsuite/ld-plugin/pr28138-3.c

+ new file mode 100644

+ index 00000000000..ec464947ee6

+ --- /dev/null

+ +++ b/ld/testsuite/ld-plugin/pr28138-3.c

+ @@ -0,0 +1,6 @@

+ +extern int a2(void);

+ +int

+ +a3(void)

+ +{

+ +  return 1 + a2();

+ +}

+ diff --git a/ld/testsuite/ld-plugin/pr28138-4.c b/ld/testsuite/ld-plugin/pr28138-4.c

+ new file mode 100644

+ index 00000000000..475701b2c5c

+ --- /dev/null

+ +++ b/ld/testsuite/ld-plugin/pr28138-4.c

+ @@ -0,0 +1,6 @@

+ +extern int a3(void);

+ +int

+ +a4(void)

+ +{

+ +  return 1 + a3();

+ +}

+ diff --git a/ld/testsuite/ld-plugin/pr28138-5.c b/ld/testsuite/ld-plugin/pr28138-5.c

+ new file mode 100644

+ index 00000000000..e24f86c363e

+ --- /dev/null

+ +++ b/ld/testsuite/ld-plugin/pr28138-5.c

+ @@ -0,0 +1,6 @@

+ +extern int a4(void);

+ +int

+ +a5(void)

+ +{

+ +  return 1 + a4();

+ +}

+ diff --git a/ld/testsuite/ld-plugin/pr28138-6.c b/ld/testsuite/ld-plugin/pr28138-6.c

+ new file mode 100644

+ index 00000000000..b5b938bdb21

+ --- /dev/null

+ +++ b/ld/testsuite/ld-plugin/pr28138-6.c

+ @@ -0,0 +1,6 @@

+ +extern int a5(void);

+ +int

+ +a6(void)

+ +{

+ +  return 1 + a5();

+ +}

+ diff --git a/ld/testsuite/ld-plugin/pr28138-7.c b/ld/testsuite/ld-plugin/pr28138-7.c

+ new file mode 100644

+ index 00000000000..4ef75bf0f0c

+ --- /dev/null

+ +++ b/ld/testsuite/ld-plugin/pr28138-7.c

+ @@ -0,0 +1,6 @@

+ +extern int a6(void);

+ +int

+ +a7(void)

+ +{

+ +  return 1 + a6();

+ +}

+ diff --git a/ld/testsuite/ld-plugin/pr28138.c b/ld/testsuite/ld-plugin/pr28138.c

+ new file mode 100644

+ index 00000000000..68252c9f382

+ --- /dev/null

+ +++ b/ld/testsuite/ld-plugin/pr28138.c

+ @@ -0,0 +1,20 @@

+ +#include <stdio.h>

+ +

+ +extern int a7(void);

+ +

+ +int

+ +a0(void)

+ +{

+ +  return 0;

+ +}

+ +

+ +int

+ +main()

+ +{

+ +  if (a7() == 7)

+ +    {

+ +      printf ("PASS\n");

+ +      return 0;

+ +    }

+ +  return 1;

+ +}

+ -- 

+ 2.27.0

+ 

file modified
+11 -1
@@ -39,7 +39,7 @@ 

  Summary: A GNU collection of binary utilities

  Name: binutils%{?name_cross}%{?_with_debug:-debug}

  Version: 2.37

- Release: 6%{?dist}

+ Release: 7%{?dist}

  License: GPLv3+

  URL: https://sourceware.org/binutils

  
@@ -281,6 +281,12 @@ 

  # Lifetime: Fixed in 2.38

  Patch19: binutils-missing-man-pages.patch

  

+ # Purpose: Close the file descriptor if there is no archive plugin file

+ # descriptor to avoid running out of file descriptors on thin archives with

+ # many archive members.

+ # Lifetime: Fixed in 2.38

+ Patch20: binutils-bfd-close-fds.patch

+ 

  #----------------------------------------------------------------------------

  

  Provides: bundled(libiberty)
@@ -889,6 +895,10 @@ 

  

  #----------------------------------------------------------------------------

  %changelog

+ * Wed Aug 11 2021 Stephen Gallagher <sgallagh@redhat.com> - 2.37-8

+ - Backport upstream patch to fix fd exhaustion

+ - Resolves: https://sourceware.org/bugzilla/show_bug.cgi?id=28138

+ 

  * Tue Aug 10 2021 Nick Clifton  <nickc@redhat.com> - 2.37-6

  - Ensure that the manual pages are generated.  (#1989836)

  

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

@nickc Can you please land this in binutils ASAP? It's preventing me from building Node.js with security fixes.

rebased onto 252f932

2 years ago

Pull-Request has been merged by nickc

2 years ago

@sgallagh Patch merged. Build underway.

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci