* targets.c (BFD_JUMP_TABLE_ARCHIVE): Add _update_armap_timestamp.

(bfd_target): Add field _bfd_update_armap_timestamp.
	* bfd.c (bfd_update_armap_timestamp): Define.
	* bfd-in2.h: Rebuilt.
	* libbfd-in.h (_bfd_noarchive_update_armap_timestamp): Define.
	(_bfd_archive_bsd_update_armap_timestamp): Declare.
	(_bfd_archive_coff_update_armap_timestamp): Define.
	* libbfd.h: Rebuilt.
	* archive.c (_bfd_write_archive_contents): Call
	bfd_update_armap_timestamp instead of checking for a BSD archive
	and calling bsd_update_armap_timestamp.
	(_bfd_archive_bsd_update_armap_timestamp): Rename from
	_bsd_update_armap_timestamp.  Don't assume that armap_datepos is
	already set.
	* aout-target.h (MY_update_armap_timestamp): Define if not already
	defined.
	* coff-rs6000.c (rs6000coff_update_armap_timestamp): Define.
	* ieee.c (ieee_update_armap_timestamp): Define.
	* libecoff.h (_bfd_ecoff_update_armap_timestamp): Define.
	* oasys.c (oasys_update_armap_timestamp): Define.
	* som.c (som_update_armap_timestamp): Define.
This commit is contained in:
Ian Lance Taylor 1994-08-22 21:20:12 +00:00
parent 02354a0f8d
commit 81eb52b34d
2 changed files with 28 additions and 18 deletions

View File

@ -1,5 +1,27 @@
Mon Aug 22 12:26:42 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) Mon Aug 22 12:26:42 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
* targets.c (BFD_JUMP_TABLE_ARCHIVE): Add _update_armap_timestamp.
(bfd_target): Add field _bfd_update_armap_timestamp.
* bfd.c (bfd_update_armap_timestamp): Define.
* bfd-in2.h: Rebuilt.
* libbfd-in.h (_bfd_noarchive_update_armap_timestamp): Define.
(_bfd_archive_bsd_update_armap_timestamp): Declare.
(_bfd_archive_coff_update_armap_timestamp): Define.
* libbfd.h: Rebuilt.
* archive.c (_bfd_write_archive_contents): Call
bfd_update_armap_timestamp instead of checking for a BSD archive
and calling bsd_update_armap_timestamp.
(_bfd_archive_bsd_update_armap_timestamp): Rename from
_bsd_update_armap_timestamp. Don't assume that armap_datepos is
already set.
* aout-target.h (MY_update_armap_timestamp): Define if not already
defined.
* coff-rs6000.c (rs6000coff_update_armap_timestamp): Define.
* ieee.c (ieee_update_armap_timestamp): Define.
* libecoff.h (_bfd_ecoff_update_armap_timestamp): Define.
* oasys.c (oasys_update_armap_timestamp): Define.
* som.c (som_update_armap_timestamp): Define.
* hash.c: Copy string hash functions from aoutx.h. * hash.c: Copy string hash functions from aoutx.h.
* aoutx.h: String hash functions moved to hash.c. Retain * aoutx.h: String hash functions moved to hash.c. Retain
simplified versions of add_to_stringtab and emit_stringtab. simplified versions of add_to_stringtab and emit_stringtab.

View File

@ -183,7 +183,6 @@ static struct areltdata *bfd_ar_hdr_from_filesystem PARAMS ((bfd *abfd,
const char *)); const char *));
static boolean compute_and_write_armap PARAMS ((bfd *arch, static boolean compute_and_write_armap PARAMS ((bfd *arch,
unsigned int elength)); unsigned int elength));
static boolean bsd_update_armap_timestamp PARAMS ((bfd *arch));
boolean boolean
_bfd_generic_mkarchive (abfd) _bfd_generic_mkarchive (abfd)
@ -1589,20 +1588,7 @@ _bfd_write_archive_contents (arch)
tries = 1; tries = 1;
do do
{ {
/* FIXME! This kludge is to avoid adding a member to the xvec, if (bfd_update_armap_timestamp (arch) == true) /* FIXME!!! Vector it */
while generating a small patch for Adobe. FIXME! The
update_armap_timestamp function call should be in the xvec,
thus:
if (bfd_update_armap_timestamp (arch) == true) break;
^
Instead, we check whether in a BSD archive, and call
directly. */
if (arch->xvec->write_armap != bsd_write_armap)
break;
if (bsd_update_armap_timestamp (arch) == true) /* FIXME!!! Vector it */
break; break;
if (tries > 0) if (tries > 0)
fprintf (stderr, fprintf (stderr,
@ -1693,7 +1679,7 @@ compute_and_write_armap (arch, elength)
flags & BSF_WEAK || flags & BSF_WEAK ||
flags & BSF_INDIRECT || flags & BSF_INDIRECT ||
bfd_is_com_section (sec)) bfd_is_com_section (sec))
&& (sec != &bfd_und_section)) && ! bfd_is_und_section (sec))
{ {
size_t namelen; size_t namelen;
struct orl *new_map; struct orl *new_map;
@ -1862,8 +1848,8 @@ bsd_write_armap (arch, elength, map, orl_count, stridx)
Return true if the timestamp was OK, or an unusual problem happened. Return true if the timestamp was OK, or an unusual problem happened.
Return false if we updated the timestamp. */ Return false if we updated the timestamp. */
static boolean boolean
bsd_update_armap_timestamp (arch) _bfd_archive_bsd_update_armap_timestamp (arch)
bfd *arch; bfd *arch;
{ {
struct stat archstat; struct stat archstat;
@ -1892,6 +1878,8 @@ bsd_update_armap_timestamp (arch)
(hdr.ar_date)[i] = ' '; (hdr.ar_date)[i] = ' ';
/* Write it into the file. */ /* Write it into the file. */
bfd_ardata (arch)->armap_datepos = (SARMAG
+ offsetof (struct ar_hdr, ar_date[0]));
if (bfd_seek (arch, bfd_ardata (arch)->armap_datepos, SEEK_SET) != 0 if (bfd_seek (arch, bfd_ardata (arch)->armap_datepos, SEEK_SET) != 0
|| (bfd_write (hdr.ar_date, sizeof (hdr.ar_date), 1, arch) || (bfd_write (hdr.ar_date, sizeof (hdr.ar_date), 1, arch)
!= sizeof (hdr.ar_date))) != sizeof (hdr.ar_date)))