From 81eb52b34d254d3b45c258e6e0c19c2d00c55c1f Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 22 Aug 1994 21:20:12 +0000 Subject: [PATCH] * 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. --- bfd/ChangeLog | 22 ++++++++++++++++++++++ bfd/archive.c | 24 ++++++------------------ 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 22362cf68d9..637ba74c66c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,27 @@ 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. * aoutx.h: String hash functions moved to hash.c. Retain simplified versions of add_to_stringtab and emit_stringtab. diff --git a/bfd/archive.c b/bfd/archive.c index 9573994dc6d..70a0d47d9e0 100644 --- a/bfd/archive.c +++ b/bfd/archive.c @@ -183,7 +183,6 @@ static struct areltdata *bfd_ar_hdr_from_filesystem PARAMS ((bfd *abfd, const char *)); static boolean compute_and_write_armap PARAMS ((bfd *arch, unsigned int elength)); -static boolean bsd_update_armap_timestamp PARAMS ((bfd *arch)); boolean _bfd_generic_mkarchive (abfd) @@ -1589,20 +1588,7 @@ _bfd_write_archive_contents (arch) tries = 1; do { - /* FIXME! This kludge is to avoid adding a member to the xvec, - 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 */ + if (bfd_update_armap_timestamp (arch) == true) /* FIXME!!! Vector it */ break; if (tries > 0) fprintf (stderr, @@ -1693,7 +1679,7 @@ compute_and_write_armap (arch, elength) flags & BSF_WEAK || flags & BSF_INDIRECT || bfd_is_com_section (sec)) - && (sec != &bfd_und_section)) + && ! bfd_is_und_section (sec)) { size_t namelen; 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 false if we updated the timestamp. */ -static boolean -bsd_update_armap_timestamp (arch) +boolean +_bfd_archive_bsd_update_armap_timestamp (arch) bfd *arch; { struct stat archstat; @@ -1892,6 +1878,8 @@ bsd_update_armap_timestamp (arch) (hdr.ar_date)[i] = ' '; /* 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 || (bfd_write (hdr.ar_date, sizeof (hdr.ar_date), 1, arch) != sizeof (hdr.ar_date)))