Projects
Factory:RISC-V:Base
binutils
_service:tar_scm:bfd-Close-the-file-descriptor-...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:bfd-Close-the-file-descriptor-if-there-is-no-archive.patch of Package binutils
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) Signed-off-by: Kai Liu <kai.liu@suse.com> --- 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.34.1
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2