From f5f20315116c43110c058ec9d787e20f901309f2 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 4 Mar 2019 13:11:08 +0000 Subject: [PATCH] Stop objcopy from attempting to copy thin archives. PR 24281 * objcopy.c (copy_archive): Do not copy thin archives. --- binutils/ChangeLog | 5 +++++ binutils/objcopy.c | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 6bb4384573..aa33e52ae0 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2019-03-04 Nick Clifton + + PR 24281 + * objcopy.c (copy_archive): Do not copy thin archives. + 2019-02-27 Matthew Malcomson * testsuite/lib/binutils-common.exp: Allow multiple "as" lines. diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 0e17b863d5..330b93c1ad 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -3276,6 +3276,27 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, char *dir; const char *filename; + /* PR 24281: It is not clear what should happen when copying a thin archive. + One part is straight forward - if the output archive is in a different + directory from the input archive then any relative paths in the library + should be adjusted to the new location. But if any transformation + options are active (eg strip, rename, add, etc) then the implication is + that these should be applied to the files pointed to by the archive. + But since objcopy is not destructive, this means that new files must be + created, and there is no guidance for the names of the new files. (Plus + this conflicts with one of the goals of thin libraries - only taking up + a minimal amount of space in the file system). + + So for now we fail if an attempt is made to copy such libraries. */ + if (ibfd->is_thin_archive) + { + status = 1; + bfd_set_error (bfd_error_invalid_operation); + bfd_nonfatal_message (NULL, ibfd, NULL, + _("sorry: copying thin archives is not currently supported")); + return; + } + /* Make a temp directory to hold the contents. */ dir = make_tempdir (bfd_get_filename (obfd)); if (dir == NULL) -- 2.34.1