* archive.c (bsd_write_armap): Don't call stat in deterministic

mode, and don't use st_mtime if stat returns error.
This commit is contained in:
Alan Modra 2011-03-04 01:43:24 +00:00
parent 08c135952e
commit 0e29e6e859
2 changed files with 18 additions and 16 deletions

View File

@ -1,3 +1,8 @@
2011-03-04 Alan Modra <amodra@gmail.com>
* archive.c (bsd_write_armap): Don't call stat in deterministic
mode, and don't use st_mtime if stat returns error.
2011-03-03 Michael Snyder <msnyder@vmware.com>
* elf64-x86-64.c (elf_x86_64_relocate_section): Remove dead code.

View File

@ -2301,31 +2301,28 @@ bsd_write_armap (bfd *arch,
bfd_byte temp[4];
unsigned int count;
struct ar_hdr hdr;
struct stat statbuf;
long uid, gid;
firstreal = mapsize + elength + sizeof (struct ar_hdr) + SARMAG;
stat (arch->filename, &statbuf);
/* If deterministic, we use 0 as the timestamp in the map.
Some linkers may require that the archive filesystem modification
time is less than (or near to) the archive map timestamp. Those
linkers should not be used with deterministic mode. (GNU ld and
Gold do not have this restriction.) */
bfd_ardata (arch)->armap_timestamp = 0;
uid = 0;
gid = 0;
if ((arch->flags & BFD_DETERMINISTIC_OUTPUT) == 0)
{
/* Remember the timestamp, to keep it holy. But fudge it a little. */
bfd_ardata (arch)->armap_timestamp = (statbuf.st_mtime
+ ARMAP_TIME_OFFSET);
struct stat statbuf;
if (stat (arch->filename, &statbuf) == 0)
bfd_ardata (arch)->armap_timestamp = (statbuf.st_mtime
+ ARMAP_TIME_OFFSET);
uid = getuid();
gid = getgid();
}
else
{
/* If deterministic, we use 0 as the timestamp in the map.
Some linkers may require that the archive filesystem modification
time is less than (or near to) the archive map timestamp. Those
linkers should not be used with deterministic mode. (GNU ld and
Gold do not have this restriction.) */
bfd_ardata (arch)->armap_timestamp = 0;
uid = 0;
gid = 0;
}
memset (&hdr, ' ', sizeof (struct ar_hdr));
memcpy (hdr.ar_name, RANLIBMAG, strlen (RANLIBMAG));