aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-11-09 13:04:04 +1030
committerAlan Modra <amodra@gmail.com>2020-11-09 14:09:01 +1030
commit904790e24f4a332d0eedf302e417d0f16625f12f (patch)
treeeb23159a218f730e931a3ab3bdf281f1449f9c2b /bfd
parentc9af384513858f3e30bdb71c12662dd1e5f9f673 (diff)
downloadbinutils-904790e24f4a332d0eedf302e417d0f16625f12f.zip
binutils-904790e24f4a332d0eedf302e417d0f16625f12f.tar.gz
binutils-904790e24f4a332d0eedf302e417d0f16625f12f.tar.bz2
xcoff dependency list for static libraries
This patch fixes fails adding library dependencies for xcoff, and improves the error message should stat fail for an archive member. "tmpdir/artest.a: File not found" is plainly wrong. Fixes these fails: powerpc-aix5.1 +FAIL: ar adding library dependencies powerpc-aix5.2 +FAIL: ar adding library dependencies rs6000-aix4.3.3 +FAIL: ar adding library dependencies rs6000-aix5.1 +FAIL: ar adding library dependencies rs6000-aix5.2 +FAIL: ar adding library dependencies * archive.c (bfd_ar_hdr_from_filesystem): Use bfd_set_input_error when stat of archive member fails. * coff-rs6000.c (xcoff_write_archive_contents_old), (xcoff_write_archive_contents_big): Likewise, and handle in-memory bfd.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/archive.c2
-rw-r--r--bfd/coff-rs6000.c35
3 files changed, 37 insertions, 8 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 5ba1650..0d1d63d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,11 @@
+2020-11-09 Alan Modra <amodra@gmail.com>
+
+ * archive.c (bfd_ar_hdr_from_filesystem): Use bfd_set_input_error
+ when stat of archive member fails.
+ * coff-rs6000.c (xcoff_write_archive_contents_old),
+ (xcoff_write_archive_contents_big): Likewise, and handle in-memory
+ bfd.
+
2020-11-03 Alan Modra <amodra@gmail.com>
* elf.c (bfd_section_from_shdr): Free sections_being_created.
diff --git a/bfd/archive.c b/bfd/archive.c
index 9d63849..1836b9b 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -1875,7 +1875,7 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, const char *filename, bfd *member)
}
else if (stat (filename, &status) != 0)
{
- bfd_set_error (bfd_error_system_call);
+ bfd_set_input_error (member, bfd_error_system_call);
return NULL;
}
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index 48c583b..5e5b182 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -2096,11 +2096,23 @@ xcoff_write_archive_contents_old (bfd *abfd)
struct xcoff_ar_hdr *ahdrp;
struct stat s;
- if (stat (bfd_get_filename (sub), &s) != 0)
+ if ((sub->flags & BFD_IN_MEMORY) != 0)
{
- bfd_set_error (bfd_error_system_call);
+ /* Assume we just "made" the member, and fake it. */
+ struct bfd_in_memory *bim
+ = (struct bfd_in_memory *) sub->iostream;
+ time (&s.st_mtime);
+ s.st_uid = getuid ();
+ s.st_gid = getgid ();
+ s.st_mode = 0644;
+ s.st_size = bim->size;
+ }
+ else if (stat (bfd_get_filename (sub), &s) != 0)
+ {
+ bfd_set_input_error (sub, bfd_error_system_call);
return FALSE;
}
+
if ((abfd->flags & BFD_DETERMINISTIC_OUTPUT) != 0)
{
s.st_mtime = 0;
@@ -2320,14 +2332,23 @@ xcoff_write_archive_contents_big (bfd *abfd)
struct xcoff_ar_hdr_big *ahdrp;
struct stat s;
- /* XXX This should actually be a call to stat64 (at least on
- 32-bit machines).
- XXX This call will fail if the original object is not found. */
- if (stat (bfd_get_filename (current_bfd), &s) != 0)
+ if ((current_bfd->flags & BFD_IN_MEMORY) != 0)
{
- bfd_set_error (bfd_error_system_call);
+ /* Assume we just "made" the member, and fake it. */
+ struct bfd_in_memory *bim
+ = (struct bfd_in_memory *) current_bfd->iostream;
+ time (&s.st_mtime);
+ s.st_uid = getuid ();
+ s.st_gid = getgid ();
+ s.st_mode = 0644;
+ s.st_size = bim->size;
+ }
+ else if (stat (bfd_get_filename (current_bfd), &s) != 0)
+ {
+ bfd_set_input_error (current_bfd, bfd_error_system_call);
return FALSE;
}
+
if ((abfd->flags & BFD_DETERMINISTIC_OUTPUT) != 0)
{
s.st_mtime = 0;