2000-11-09 Kazu Hirata <kazu@hxi.com>

* archive.c: Fix formatting.
	* archures.c: Likewise.
This commit is contained in:
Kazu Hirata 2000-11-10 04:28:20 +00:00
parent 1669605fa3
commit 047066e166
3 changed files with 149 additions and 135 deletions

View file

@ -1,3 +1,8 @@
2000-11-09 Kazu Hirata <kazu@hxi.com>
* archive.c: Fix formatting.
* archures.c: Likewise.
2000-11-07 Richard Henderson <rth@redhat.com> 2000-11-07 Richard Henderson <rth@redhat.com>
* elfxx-ia64.c (elf64_ia64_final_link): New local unwind_output_sec. * elfxx-ia64.c (elf64_ia64_final_link): New local unwind_output_sec.

View file

@ -152,10 +152,8 @@ extern int errno;
the cache when we actually read one. We also don't sort the cache; the cache when we actually read one. We also don't sort the cache;
it's generally short enough to search linearly. it's generally short enough to search linearly.
Note that the pointers here point to the front of the ar_hdr, not Note that the pointers here point to the front of the ar_hdr, not
to the front of the contents! to the front of the contents! */
*/ struct ar_cache {
struct ar_cache
{
file_ptr ptr; file_ptr ptr;
bfd *arelt; bfd *arelt;
struct ar_cache *next; struct ar_cache *next;
@ -411,7 +409,7 @@ _bfd_generic_read_ar_hdr_mag (abfd, mag)
} }
} }
/* BSD4.4-style long filename. /* BSD4.4-style long filename.
Only implemented for reading, so far! */ Only implemented for reading, so far! */
else if (hdr.ar_name[0] == '#' else if (hdr.ar_name[0] == '#'
&& hdr.ar_name[1] == '1' && hdr.ar_name[1] == '1'
&& hdr.ar_name[2] == '/' && hdr.ar_name[2] == '/'
@ -446,9 +444,9 @@ _bfd_generic_read_ar_hdr_mag (abfd, mag)
e = memchr (hdr.ar_name, '\0', ar_maxnamelen (abfd)); e = memchr (hdr.ar_name, '\0', ar_maxnamelen (abfd));
if (e == NULL) if (e == NULL)
{ {
e = memchr (hdr.ar_name, '/', ar_maxnamelen (abfd)); e = memchr (hdr.ar_name, '/', ar_maxnamelen (abfd));
if (e == NULL) if (e == NULL)
e = memchr (hdr.ar_name, ' ', ar_maxnamelen (abfd)); e = memchr (hdr.ar_name, ' ', ar_maxnamelen (abfd));
} }
if (e != NULL) if (e != NULL)
@ -526,7 +524,7 @@ _bfd_get_elt_at_filepos (archive, filepos)
if (_bfd_add_bfd_to_archive_cache (archive, filepos, n_nfd)) if (_bfd_add_bfd_to_archive_cache (archive, filepos, n_nfd))
return n_nfd; return n_nfd;
/* huh? */ /* Huh? */
bfd_release (archive, (PTR) n_nfd); bfd_release (archive, (PTR) n_nfd);
bfd_release (archive, (PTR) new_areldata); bfd_release (archive, (PTR) new_areldata);
return NULL; return NULL;
@ -560,7 +558,6 @@ DESCRIPTION
the archive and the previous return value to return a created the archive and the previous return value to return a created
BFD to the next contained element. NULL is returned when there BFD to the next contained element. NULL is returned when there
are no more. are no more.
*/ */
bfd * bfd *
@ -781,7 +778,7 @@ do_slurp_bsd_armap (abfd)
} }
ardata->first_file_filepos = bfd_tell (abfd); ardata->first_file_filepos = bfd_tell (abfd);
/* Pad to an even boundary if you have to */ /* Pad to an even boundary if you have to. */
ardata->first_file_filepos += (ardata->first_file_filepos) % 2; ardata->first_file_filepos += (ardata->first_file_filepos) % 2;
/* FIXME, we should provide some way to free raw_ardata when /* FIXME, we should provide some way to free raw_ardata when
we are done using the strings from it. For now, it seems we are done using the strings from it. For now, it seems
@ -790,7 +787,8 @@ do_slurp_bsd_armap (abfd)
return true; return true;
} }
/* Returns false on error, true otherwise */ /* Returns false on error, true otherwise. */
static boolean static boolean
do_slurp_coff_armap (abfd) do_slurp_coff_armap (abfd)
bfd *abfd; bfd *abfd;
@ -835,7 +833,7 @@ do_slurp_coff_armap (abfd)
&& bfd_get_arch (abfd) == bfd_arch_i960 && bfd_get_arch (abfd) == bfd_arch_i960
&& bfd_get_flavour (abfd) == bfd_target_coff_flavour) && bfd_get_flavour (abfd) == bfd_target_coff_flavour)
{ {
/* This looks dangerous, let's do it the other way around */ /* This looks dangerous, let's do it the other way around. */
nsymz = bfd_getl32 ((PTR) int_buf); nsymz = bfd_getl32 ((PTR) int_buf);
stringsize = parsed_size - (4 * nsymz) - 4; stringsize = parsed_size - (4 * nsymz) - 4;
swap = bfd_getl32; swap = bfd_getl32;
@ -866,7 +864,7 @@ do_slurp_coff_armap (abfd)
goto release_raw_armap; goto release_raw_armap;
} }
/* OK, build the carsyms */ /* OK, build the carsyms. */
for (i = 0; i < nsymz; i++) for (i = 0; i < nsymz; i++)
{ {
rawptr = raw_armap + i; rawptr = raw_armap + i;
@ -879,13 +877,13 @@ do_slurp_coff_armap (abfd)
ardata->symdef_count = nsymz; ardata->symdef_count = nsymz;
ardata->first_file_filepos = bfd_tell (abfd); ardata->first_file_filepos = bfd_tell (abfd);
/* Pad to an even boundary if you have to */ /* Pad to an even boundary if you have to. */
ardata->first_file_filepos += (ardata->first_file_filepos) % 2; ardata->first_file_filepos += (ardata->first_file_filepos) % 2;
bfd_has_map (abfd) = true; bfd_has_map (abfd) = true;
bfd_release (abfd, (PTR) raw_armap); bfd_release (abfd, (PTR) raw_armap);
/* Check for a second archive header (as used by PE) */ /* Check for a second archive header (as used by PE). */
{ {
struct areltdata *tmp; struct areltdata *tmp;
@ -972,7 +970,7 @@ bfd_slurp_bsd_armap_f2 (abfd)
if (i != 16) if (i != 16)
return false; return false;
/* The archive has at least 16 bytes in it */ /* The archive has at least 16 bytes in it. */
if (bfd_seek (abfd, -16L, SEEK_CUR) != 0) if (bfd_seek (abfd, -16L, SEEK_CUR) != 0)
return false; return false;
@ -1021,7 +1019,7 @@ bfd_slurp_bsd_armap_f2 (abfd)
ardata->cache = 0; ardata->cache = 0;
stringsize = bfd_h_get_32 (abfd, raw_armap + HPUX_SYMDEF_COUNT_SIZE); stringsize = bfd_h_get_32 (abfd, raw_armap + HPUX_SYMDEF_COUNT_SIZE);
/* skip sym count and string sz */ /* Skip sym count and string sz. */
stringbase = ((char *) raw_armap stringbase = ((char *) raw_armap
+ HPUX_SYMDEF_COUNT_SIZE + HPUX_SYMDEF_COUNT_SIZE
+ BSD_STRING_COUNT_SIZE); + BSD_STRING_COUNT_SIZE);
@ -1041,7 +1039,7 @@ bfd_slurp_bsd_armap_f2 (abfd)
} }
ardata->first_file_filepos = bfd_tell (abfd); ardata->first_file_filepos = bfd_tell (abfd);
/* Pad to an even boundary if you have to */ /* Pad to an even boundary if you have to. */
ardata->first_file_filepos += (ardata->first_file_filepos) % 2; ardata->first_file_filepos += (ardata->first_file_filepos) % 2;
/* FIXME, we should provide some way to free raw_ardata when /* FIXME, we should provide some way to free raw_ardata when
we are done using the strings from it. For now, it seems we are done using the strings from it. For now, it seems
@ -1058,9 +1056,10 @@ bfd_slurp_bsd_armap_f2 (abfd)
element (the first in the archive, or second if there is an armap); element (the first in the archive, or second if there is an armap);
the name in the ar_hdr is replaced by <space><index into filename the name in the ar_hdr is replaced by <space><index into filename
element>. Index is the P.R. of an int (decimal). Data General have element>. Index is the P.R. of an int (decimal). Data General have
extended the format by using the prefix // for the special element */ extended the format by using the prefix // for the special element. */
/* Returns false on error, true otherwise. */
/* Returns false on error, true otherwise */
boolean boolean
_bfd_slurp_extended_name_table (abfd) _bfd_slurp_extended_name_table (abfd)
bfd *abfd; bfd *abfd;
@ -1114,22 +1113,25 @@ _bfd_slurp_extended_name_table (abfd)
{ {
char *temp = bfd_ardata (abfd)->extended_names; char *temp = bfd_ardata (abfd)->extended_names;
char *limit = temp + namedata->parsed_size; char *limit = temp + namedata->parsed_size;
for (; temp < limit; ++temp) { for (; temp < limit; ++temp)
if (*temp == '\012') {
temp[temp[-1] == '/' ? -1 : 0] = '\0'; if (*temp == '\012')
if (*temp == '\\') temp[temp[-1] == '/' ? -1 : 0] = '\0';
*temp = '/'; if (*temp == '\\')
} *temp = '/';
}
} }
/* Pad to an even boundary if you have to */ /* Pad to an even boundary if you have to. */
bfd_ardata (abfd)->first_file_filepos = bfd_tell (abfd); bfd_ardata (abfd)->first_file_filepos = bfd_tell (abfd);
bfd_ardata (abfd)->first_file_filepos += bfd_ardata (abfd)->first_file_filepos +=
(bfd_ardata (abfd)->first_file_filepos) % 2; (bfd_ardata (abfd)->first_file_filepos) % 2;
/* FIXME, we can't release namedata here because it was allocated /* FIXME, we can't release namedata here because it was allocated
below extended_names on the objalloc... */ below extended_names on the objalloc... */
/* bfd_release (abfd, namedata); */ #if 0
bfd_release (abfd, namedata);
#endif
} }
return true; return true;
} }
@ -1137,7 +1139,8 @@ _bfd_slurp_extended_name_table (abfd)
#ifdef VMS #ifdef VMS
/* Return a copy of the stuff in the filename between any :]> and a /* Return a copy of the stuff in the filename between any :]> and a
semicolon */ semicolon. */
static const char * static const char *
normalize (abfd, file) normalize (abfd, file)
bfd *abfd; bfd *abfd;
@ -1246,7 +1249,7 @@ _bfd_construct_extended_name_table (abfd, trailing_slash, tabloc, tablen)
*tablen = 0; *tablen = 0;
/* Figure out how long the table should be */ /* Figure out how long the table should be. */
for (current = abfd->archive_head; current != NULL; current = current->next) for (current = abfd->archive_head; current != NULL; current = current->next)
{ {
const char *normal; const char *normal;
@ -1329,7 +1332,7 @@ _bfd_construct_extended_name_table (abfd, trailing_slash, tabloc, tablen)
cases where you may safely use sprintf). */ cases where you may safely use sprintf). */
sprintf ((hdr->ar_name) + 1, "%-d", (unsigned) (strptr - *tabloc)); sprintf ((hdr->ar_name) + 1, "%-d", (unsigned) (strptr - *tabloc));
/* Kinda Kludgy. We should just use the returned value of /* Kinda Kludgy. We should just use the returned value of
sprintf but not all implementations get this right */ sprintf but not all implementations get this right. */
{ {
char *temp = hdr->ar_name + 2; char *temp = hdr->ar_name + 2;
for (; temp < hdr->ar_name + maxname; temp++) for (; temp < hdr->ar_name + maxname; temp++)
@ -1349,6 +1352,7 @@ _bfd_construct_extended_name_table (abfd, trailing_slash, tabloc, tablen)
#ifdef HPUX_LARGE_AR_IDS #ifdef HPUX_LARGE_AR_IDS
/* Function to encode large UID/GID values according to HP. */ /* Function to encode large UID/GID values according to HP. */
static void static void
hpux_uid_gid_encode (str, id) hpux_uid_gid_encode (str, id)
char str[6]; char str[6];
@ -1390,11 +1394,11 @@ bfd_ar_hdr_from_filesystem (abfd, filename, member)
if (member && (member->flags & BFD_IN_MEMORY) != 0) if (member && (member->flags & BFD_IN_MEMORY) != 0)
{ {
/* Assume we just "made" the member, and fake it */ /* Assume we just "made" the member, and fake it. */
struct bfd_in_memory *bim = (struct bfd_in_memory *) member->iostream; struct bfd_in_memory *bim = (struct bfd_in_memory *) member->iostream;
time(&status.st_mtime); time (&status.st_mtime);
status.st_uid = getuid(); status.st_uid = getuid ();
status.st_gid = getgid(); status.st_gid = getgid ();
status.st_mode = 0644; status.st_mode = 0644;
status.st_size = bim->size; status.st_size = bim->size;
} }
@ -1410,12 +1414,12 @@ bfd_ar_hdr_from_filesystem (abfd, filename, member)
return NULL; return NULL;
hdr = (struct ar_hdr *) (((char *) ared) + sizeof (struct areltdata)); hdr = (struct ar_hdr *) (((char *) ared) + sizeof (struct areltdata));
/* ar headers are space padded, not null padded! */ /* ar headers are space padded, not null padded! */
memset ((PTR) hdr, ' ', sizeof (struct ar_hdr)); memset ((PTR) hdr, ' ', sizeof (struct ar_hdr));
strncpy (hdr->ar_fmag, ARFMAG, 2); strncpy (hdr->ar_fmag, ARFMAG, 2);
/* Goddamned sprintf doesn't permit MAXIMUM field lengths */ /* Goddamned sprintf doesn't permit MAXIMUM field lengths. */
sprintf ((hdr->ar_date), "%-12ld", (long) status.st_mtime); sprintf ((hdr->ar_date), "%-12ld", (long) status.st_mtime);
#ifdef HPUX_LARGE_AR_IDS #ifdef HPUX_LARGE_AR_IDS
/* HP has a very "special" way to handle UID/GID's with numeric values /* HP has a very "special" way to handle UID/GID's with numeric values
@ -1437,7 +1441,7 @@ bfd_ar_hdr_from_filesystem (abfd, filename, member)
sprintf ((hdr->ar_size), "%-10ld", (long) status.st_size); sprintf ((hdr->ar_size), "%-10ld", (long) status.st_size);
/* Correct for a lossage in sprintf whereby it null-terminates. I cannot /* Correct for a lossage in sprintf whereby it null-terminates. I cannot
understand how these C losers could design such a ramshackle bunch of understand how these C losers could design such a ramshackle bunch of
IO operations */ IO operations. */
temp = (char *) hdr; temp = (char *) hdr;
temp1 = temp + sizeof (struct ar_hdr) - 2; temp1 = temp + sizeof (struct ar_hdr) - 2;
for (; temp < temp1; temp++) for (; temp < temp1; temp++)
@ -1453,9 +1457,9 @@ bfd_ar_hdr_from_filesystem (abfd, filename, member)
} }
/* This is magic required by the "ar" program. Since it's /* This is magic required by the "ar" program. Since it's
undocumented, it's undocumented. You may think that it would take undocumented, it's undocumented. You may think that it would take
a strong stomach to write this, and it does, but it takes even a a strong stomach to write this, and it does, but it takes even a
stronger stomach to try to code around such a thing! */ stronger stomach to try to code around such a thing! */
struct ar_hdr *bfd_special_undocumented_glue PARAMS ((bfd *, const char *)); struct ar_hdr *bfd_special_undocumented_glue PARAMS ((bfd *, const char *));
@ -1470,7 +1474,8 @@ bfd_special_undocumented_glue (abfd, filename)
return (struct ar_hdr *) ar_elt->arch_header; return (struct ar_hdr *) ar_elt->arch_header;
} }
/* Analogous to stat call */ /* Analogous to stat call. */
int int
bfd_generic_stat_arch_elt (abfd, buf) bfd_generic_stat_arch_elt (abfd, buf)
bfd *abfd; bfd *abfd;
@ -1487,26 +1492,33 @@ bfd_generic_stat_arch_elt (abfd, buf)
hdr = arch_hdr (abfd); hdr = arch_hdr (abfd);
#define foo(arelt, stelt, size) \ #define foo(arelt, stelt, size) \
buf->stelt = strtol (hdr->arelt, &aloser, size); \ buf->stelt = strtol (hdr->arelt, &aloser, size); \
if (aloser == hdr->arelt) return -1; if (aloser == hdr->arelt) \
return -1;
/* Some platforms support special notations for large IDs. */ /* Some platforms support special notations for large IDs. */
#ifdef HPUX_LARGE_AR_IDS #ifdef HPUX_LARGE_AR_IDS
# define foo2(arelt, stelt, size) \ # define foo2(arelt, stelt, size) \
if (hdr->arelt[5] == ' ') { foo (arelt, stelt, size); } \ if (hdr->arelt[5] == ' ') \
else { \ { \
int cnt; \ foo (arelt, stelt, size); \
for (buf->stelt = cnt = 0; cnt < 5; ++cnt) \ } \
{ \ else \
if (hdr->arelt[cnt] < ' ' || hdr->arelt[cnt] > ' ' + 0x3f) \ { \
return -1; \ int cnt; \
buf->stelt <<= 6; \ for (buf->stelt = cnt = 0; cnt < 5; ++cnt) \
buf->stelt += hdr->arelt[cnt] - ' '; \ { \
} \ if (hdr->arelt[cnt] < ' ' || hdr->arelt[cnt] > ' ' + 0x3f) \
if (hdr->arelt[5] < '@' || hdr->arelt[5] > '@' + 3) return -1; \ return -1; \
buf->stelt <<= 2; \ buf->stelt <<= 6; \
buf->stelt += hdr->arelt[5] - '@'; \ buf->stelt += hdr->arelt[cnt] - ' '; \
} } \
if (hdr->arelt[5] < '@' || hdr->arelt[5] > '@' + 3) \
return -1; \
buf->stelt <<= 2; \
buf->stelt += hdr->arelt[5] - '@'; \
}
#else #else
# define foo2(arelt, stelt, size) foo (arelt, stelt, size) # define foo2(arelt, stelt, size) foo (arelt, stelt, size)
#endif #endif
@ -1658,7 +1670,7 @@ bfd_gnu_truncate_arname (abfd, pathname, arhdr)
(hdr->ar_name)[length] = ar_padchar (abfd); (hdr->ar_name)[length] = ar_padchar (abfd);
} }
/* The BFD is open for write and has its format set to bfd_archive */ /* The BFD is open for write and has its format set to bfd_archive. */
boolean boolean
_bfd_write_archive_contents (arch) _bfd_write_archive_contents (arch)
@ -1669,7 +1681,7 @@ _bfd_write_archive_contents (arch)
bfd_size_type elength = 0; bfd_size_type elength = 0;
const char *ename = NULL; const char *ename = NULL;
boolean makemap = bfd_has_map (arch); boolean makemap = bfd_has_map (arch);
boolean hasobjects = false; /* if no .o's, don't bother to make a map */ boolean hasobjects = false; /* If no .o's, don't bother to make a map. */
bfd_size_type wrote; bfd_size_type wrote;
unsigned int i; unsigned int i;
int tries; int tries;
@ -1696,14 +1708,14 @@ _bfd_write_archive_contents (arch)
if (!current->arelt_data) if (!current->arelt_data)
return false; return false;
/* Put in the file name */ /* Put in the file name. */
BFD_SEND (arch, _bfd_truncate_arname, (arch, BFD_SEND (arch, _bfd_truncate_arname, (arch,
current->filename, current->filename,
(char *) arch_hdr (current))); (char *) arch_hdr (current)));
} }
if (makemap && ! hasobjects) if (makemap && ! hasobjects)
{ /* don't bother if we won't make a map! */ { /* Don't bother if we won't make a map! */
if ((bfd_check_format (current, bfd_object)) if ((bfd_check_format (current, bfd_object))
#if 0 /* FIXME -- these are not set correctly */ #if 0 /* FIXME -- these are not set correctly */
&& ((bfd_get_file_flags (current) & HAS_SYMS)) && ((bfd_get_file_flags (current) & HAS_SYMS))
@ -1763,7 +1775,7 @@ _bfd_write_archive_contents (arch)
unsigned int remaining = arelt_size (current); unsigned int remaining = arelt_size (current);
struct ar_hdr *hdr = arch_hdr (current); struct ar_hdr *hdr = arch_hdr (current);
/* write ar header */ /* Write ar header. */
if (bfd_write ((char *) hdr, 1, sizeof (*hdr), arch) != sizeof (*hdr)) if (bfd_write ((char *) hdr, 1, sizeof (*hdr), arch) != sizeof (*hdr))
return false; return false;
if (bfd_seek (current, (file_ptr) 0, SEEK_SET) != 0) if (bfd_seek (current, (file_ptr) 0, SEEK_SET) != 0)
@ -1813,7 +1825,7 @@ _bfd_write_archive_contents (arch)
return true; return true;
} }
/* Note that the namidx for the first symbol is 0 */ /* Note that the namidx for the first symbol is 0. */
boolean boolean
_bfd_compute_and_write_armap (arch, elength) _bfd_compute_and_write_armap (arch, elength)
@ -1846,13 +1858,12 @@ _bfd_compute_and_write_armap (arch, elength)
if (first_name == NULL) if (first_name == NULL)
goto error_return; goto error_return;
/* Drop all the files called __.SYMDEF, we're going to make our /* Drop all the files called __.SYMDEF, we're going to make our own. */
own */
while (arch->archive_head && while (arch->archive_head &&
strcmp (arch->archive_head->filename, "__.SYMDEF") == 0) strcmp (arch->archive_head->filename, "__.SYMDEF") == 0)
arch->archive_head = arch->archive_head->next; arch->archive_head = arch->archive_head->next;
/* Map over each element */ /* Map over each element. */
for (current = arch->archive_head; for (current = arch->archive_head;
current != (bfd *) NULL; current != (bfd *) NULL;
current = current->next, elt_no++) current = current->next, elt_no++)
@ -1883,7 +1894,8 @@ _bfd_compute_and_write_armap (arch, elength)
if (symcount < 0) if (symcount < 0)
goto error_return; goto error_return;
/* Now map over all the symbols, picking out the ones we want */ /* Now map over all the symbols, picking out the ones we
want. */
for (src_count = 0; src_count < symcount; src_count++) for (src_count = 0; src_count < symcount; src_count++)
{ {
flagword flags = (syms[src_count])->flags; flagword flags = (syms[src_count])->flags;
@ -1898,7 +1910,7 @@ _bfd_compute_and_write_armap (arch, elength)
size_t namelen; size_t namelen;
struct orl *new_map; struct orl *new_map;
/* This symbol will go into the archive header */ /* This symbol will go into the archive header. */
if (orl_count == orl_max) if (orl_count == orl_max)
{ {
orl_max *= 2; orl_max *= 2;
@ -1937,7 +1949,7 @@ _bfd_compute_and_write_armap (arch, elength)
} }
} }
/* OK, now we have collected all the data, let's write them out */ /* OK, now we have collected all the data, let's write them out. */
ret = BFD_SEND (arch, write_armap, ret = BFD_SEND (arch, write_armap,
(arch, elength, map, orl_count, stridx)); (arch, elength, map, orl_count, stridx));
@ -2029,7 +2041,7 @@ bsd_write_armap (arch, elength, map, orl_count, stridx)
return false; return false;
} }
/* now write the strings themselves */ /* Now write the strings themselves. */
bfd_h_put_32 (arch, stringsize, temp); bfd_h_put_32 (arch, stringsize, temp);
if (bfd_write (temp, 1, sizeof (temp), arch) != sizeof (temp)) if (bfd_write (temp, 1, sizeof (temp), arch) != sizeof (temp))
return false; return false;
@ -2072,10 +2084,13 @@ _bfd_archive_bsd_update_armap_timestamp (arch)
if (bfd_stat (arch, &archstat) == -1) if (bfd_stat (arch, &archstat) == -1)
{ {
perror (_("Reading archive file mod timestamp")); perror (_("Reading archive file mod timestamp"));
return true; /* Can't read mod time for some reason */
/* Can't read mod time for some reason. */
return true;
} }
if (archstat.st_mtime <= bfd_ardata (arch)->armap_timestamp) if (archstat.st_mtime <= bfd_ardata (arch)->armap_timestamp)
return true; /* OK by the linker's rules */ /* OK by the linker's rules. */
return true;
/* Update the timestamp. */ /* Update the timestamp. */
bfd_ardata (arch)->armap_timestamp = archstat.st_mtime + ARMAP_TIME_OFFSET; bfd_ardata (arch)->armap_timestamp = archstat.st_mtime + ARMAP_TIME_OFFSET;
@ -2096,10 +2111,13 @@ _bfd_archive_bsd_update_armap_timestamp (arch)
{ {
/* FIXME: bfd can't call perror. */ /* FIXME: bfd can't call perror. */
perror (_("Writing updated armap timestamp")); perror (_("Writing updated armap timestamp"));
return true; /* Some error while writing */
/* Some error while writing. */
return true;
} }
return false; /* We updated the timestamp successfully. */ /* We updated the timestamp successfully. */
return false;
} }
/* A coff armap looks like : /* A coff armap looks like :
@ -2125,7 +2143,7 @@ coff_write_armap (arch, elength, map, symbol_count, stridx)
int stridx; int stridx;
{ {
/* The size of the ranlib is the number of exported symbols in the /* The size of the ranlib is the number of exported symbols in the
archive * the number of bytes in a int, + an int for the count */ archive * the number of bytes in a int, + an int for the count. */
unsigned int ranlibsize = (symbol_count * 4) + 4; unsigned int ranlibsize = (symbol_count * 4) + 4;
unsigned int stringsize = stridx; unsigned int stringsize = stridx;
unsigned int mapsize = stringsize + ranlibsize; unsigned int mapsize = stringsize + ranlibsize;
@ -2139,7 +2157,7 @@ coff_write_armap (arch, elength, map, symbol_count, stridx)
if (padit) if (padit)
mapsize++; mapsize++;
/* work out where the first object file will go in the archive */ /* Work out where the first object file will go in the archive. */
archive_member_file_ptr = (mapsize archive_member_file_ptr = (mapsize
+ elength + elength
+ sizeof (struct ar_hdr) + sizeof (struct ar_hdr)
@ -2149,7 +2167,7 @@ coff_write_armap (arch, elength, map, symbol_count, stridx)
hdr.ar_name[0] = '/'; hdr.ar_name[0] = '/';
sprintf (hdr.ar_size, "%-10d", (int) mapsize); sprintf (hdr.ar_size, "%-10d", (int) mapsize);
sprintf (hdr.ar_date, "%ld", (long) time (NULL)); sprintf (hdr.ar_date, "%ld", (long) time (NULL));
/* This, at least, is what Intel coff sets the values to.: */ /* This, at least, is what Intel coff sets the values to. */
sprintf ((hdr.ar_uid), "%d", 0); sprintf ((hdr.ar_uid), "%d", 0);
sprintf ((hdr.ar_gid), "%d", 0); sprintf ((hdr.ar_gid), "%d", 0);
sprintf ((hdr.ar_mode), "%-7o", (unsigned) 0); sprintf ((hdr.ar_mode), "%-7o", (unsigned) 0);
@ -2159,7 +2177,7 @@ coff_write_armap (arch, elength, map, symbol_count, stridx)
if (((char *) (&hdr))[i] == '\0') if (((char *) (&hdr))[i] == '\0')
(((char *) (&hdr))[i]) = ' '; (((char *) (&hdr))[i]) = ' ';
/* Write the ar header for this item and the number of symbols */ /* Write the ar header for this item and the number of symbols. */
if (bfd_write ((PTR) &hdr, 1, sizeof (struct ar_hdr), arch) if (bfd_write ((PTR) &hdr, 1, sizeof (struct ar_hdr), arch)
!= sizeof (struct ar_hdr)) != sizeof (struct ar_hdr))
@ -2177,23 +2195,23 @@ coff_write_armap (arch, elength, map, symbol_count, stridx)
count = 0; count = 0;
while (current != (bfd *) NULL && count < symbol_count) while (current != (bfd *) NULL && count < symbol_count)
{ {
/* For each symbol which is used defined in this object, write out /* For each symbol which is used defined in this object, write
the object file's address in the archive */ out the object file's address in the archive. */
while (((bfd *) (map[count]).pos) == current) while (((bfd *) (map[count]).pos) == current)
{ {
bfd_write_bigendian_4byte_int (arch, archive_member_file_ptr); bfd_write_bigendian_4byte_int (arch, archive_member_file_ptr);
count++; count++;
} }
/* Add size of this archive entry */ /* Add size of this archive entry. */
archive_member_file_ptr += (arelt_size (current) archive_member_file_ptr += (arelt_size (current)
+ sizeof (struct ar_hdr)); + sizeof (struct ar_hdr));
/* remember aboout the even alignment */ /* Remember aboout the even alignment. */
archive_member_file_ptr += archive_member_file_ptr % 2; archive_member_file_ptr += archive_member_file_ptr % 2;
current = current->next; current = current->next;
} }
/* now write the strings themselves */ /* Now write the strings themselves. */
for (count = 0; count < symbol_count; count++) for (count = 0; count < symbol_count; count++)
{ {
size_t len = strlen (*map[count].name) + 1; size_t len = strlen (*map[count].name) + 1;

View file

@ -239,11 +239,9 @@ DESCRIPTION
. bfd_arch_cris, {* Axis CRIS *} . bfd_arch_cris, {* Axis CRIS *}
. bfd_arch_last . bfd_arch_last
. }; . };
*/ */
/* /*
SUBSECTION SUBSECTION
bfd_arch_info bfd_arch_info
@ -315,8 +313,7 @@ extern const bfd_arch_info_type bfd_mcore_arch;
extern const bfd_arch_info_type bfd_avr_arch; extern const bfd_arch_info_type bfd_avr_arch;
extern const bfd_arch_info_type bfd_ia64_arch; extern const bfd_arch_info_type bfd_ia64_arch;
static const bfd_arch_info_type * const bfd_archures_list[] = static const bfd_arch_info_type * const bfd_archures_list[] = {
{
#ifdef SELECT_ARCHITECTURES #ifdef SELECT_ARCHITECTURES
SELECT_ARCHITECTURES, SELECT_ARCHITECTURES,
#else #else
@ -394,7 +391,6 @@ DESCRIPTION
Figure out if BFD supports any cpu which could be described with Figure out if BFD supports any cpu which could be described with
the name @var{string}. Return a pointer to an <<arch_info>> the name @var{string}. Return a pointer to an <<arch_info>>
structure if a machine is found, otherwise NULL. structure if a machine is found, otherwise NULL.
*/ */
const bfd_arch_info_type * const bfd_arch_info_type *
@ -403,7 +399,7 @@ bfd_scan_arch (string)
{ {
const bfd_arch_info_type * const *app, *ap; const bfd_arch_info_type * const *app, *ap;
/* Look through all the installed architectures */ /* Look through all the installed architectures. */
for (app = bfd_archures_list; *app != NULL; app++) for (app = bfd_archures_list; *app != NULL; app++)
{ {
for (ap = *app; ap != NULL; ap = ap->next) for (ap = *app; ap != NULL; ap = ap->next)
@ -426,7 +422,6 @@ SYNOPSIS
DESCRIPTION DESCRIPTION
Return a freshly malloced NULL-terminated vector of the names Return a freshly malloced NULL-terminated vector of the names
of all the valid BFD architectures. Do not modify the names. of all the valid BFD architectures. Do not modify the names.
*/ */
const char ** const char **
@ -437,7 +432,7 @@ bfd_arch_list ()
const char **name_list; const char **name_list;
const bfd_arch_info_type * const *app; const bfd_arch_info_type * const *app;
/* Determine the number of architectures */ /* Determine the number of architectures. */
vec_length = 0; vec_length = 0;
for (app = bfd_archures_list; *app != NULL; app++) for (app = bfd_archures_list; *app != NULL; app++)
{ {
@ -453,7 +448,7 @@ bfd_arch_list ()
if (name_list == NULL) if (name_list == NULL)
return NULL; return NULL;
/* Point the list at each of the names */ /* Point the list at each of the names. */
name_ptr = name_list; name_ptr = name_list;
for (app = bfd_archures_list; *app != NULL; app++) for (app = bfd_archures_list; *app != NULL; app++)
{ {
@ -494,9 +489,9 @@ bfd_arch_get_compatible (abfd, bbfd)
/* If either architecture is unknown, then all we can do is assume /* If either architecture is unknown, then all we can do is assume
the user knows what he's doing. */ the user knows what he's doing. */
if (abfd->arch_info->arch == bfd_arch_unknown) if (abfd->arch_info->arch == bfd_arch_unknown)
return bbfd->arch_info; return bbfd->arch_info;
if (bbfd->arch_info->arch == bfd_arch_unknown) if (bbfd->arch_info->arch == bfd_arch_unknown)
return abfd->arch_info; return abfd->arch_info;
/* Otherwise architecture-specific code has to decide. */ /* Otherwise architecture-specific code has to decide. */
return abfd->arch_info->compatible (abfd->arch_info, bbfd->arch_info); return abfd->arch_info->compatible (abfd->arch_info, bbfd->arch_info);
@ -514,15 +509,13 @@ DESCRIPTION
architecture of the file. architecture of the file.
.extern const bfd_arch_info_type bfd_default_arch_struct; .extern const bfd_arch_info_type bfd_default_arch_struct;
*/ */
const bfd_arch_info_type bfd_default_arch_struct = const bfd_arch_info_type bfd_default_arch_struct = {
{ 32, 32, 8, bfd_arch_unknown, 0, "unknown", "unknown", 2, true,
32,32,8,bfd_arch_unknown,0,"unknown","unknown",2,true, bfd_default_compatible,
bfd_default_compatible, bfd_default_scan,
bfd_default_scan, 0,
0,
}; };
/* /*
@ -597,14 +590,13 @@ SYNOPSIS
DESCRIPTION DESCRIPTION
Return the enumerated type which describes the BFD @var{abfd}'s Return the enumerated type which describes the BFD @var{abfd}'s
architecture. architecture.
*/ */
enum bfd_architecture enum bfd_architecture
bfd_get_arch (abfd) bfd_get_arch (abfd)
bfd *abfd; bfd *abfd;
{ {
return abfd->arch_info->arch; return abfd->arch_info->arch;
} }
/* /*
@ -623,7 +615,7 @@ unsigned long
bfd_get_mach (abfd) bfd_get_mach (abfd)
bfd *abfd; bfd *abfd;
{ {
return abfd->arch_info->mach; return abfd->arch_info->mach;
} }
/* /*
@ -636,7 +628,6 @@ SYNOPSIS
DESCRIPTION DESCRIPTION
Return the number of bits in one of the BFD @var{abfd}'s Return the number of bits in one of the BFD @var{abfd}'s
architecture's bytes. architecture's bytes.
*/ */
unsigned int unsigned int
@ -679,7 +670,7 @@ DESCRIPTION
*/ */
const bfd_arch_info_type * const bfd_arch_info_type *
bfd_default_compatible (a,b) bfd_default_compatible (a, b)
const bfd_arch_info_type *a; const bfd_arch_info_type *a;
const bfd_arch_info_type *b; const bfd_arch_info_type *b;
{ {
@ -719,17 +710,17 @@ bfd_default_scan (info, string)
const char *printable_name_colon; const char *printable_name_colon;
/* Exact match of the architecture name (ARCH_NAME) and also the /* Exact match of the architecture name (ARCH_NAME) and also the
default architecture? */ default architecture? */
if (strcasecmp (string, info->arch_name) == 0 if (strcasecmp (string, info->arch_name) == 0
&& info->the_default) && info->the_default)
return true; return true;
/* Exact match of the machine name (PRINTABLE_NAME)? */ /* Exact match of the machine name (PRINTABLE_NAME)? */
if (strcasecmp (string, info->printable_name) == 0) if (strcasecmp (string, info->printable_name) == 0)
return true; return true;
/* Given that printable_name contains no colon, attempt to match: /* Given that printable_name contains no colon, attempt to match:
ARCH_NAME [ ":" ] PRINTABLE_NAME? */ ARCH_NAME [ ":" ] PRINTABLE_NAME? */
printable_name_colon = strchr (info->printable_name, ':'); printable_name_colon = strchr (info->printable_name, ':');
if (printable_name_colon == NULL) if (printable_name_colon == NULL)
{ {
@ -752,7 +743,7 @@ bfd_default_scan (info, string)
} }
/* Given that PRINTABLE_NAME has the form: <arch> ":" <mach>; /* Given that PRINTABLE_NAME has the form: <arch> ":" <mach>;
Attempt to match: <arch> <mach>? */ Attempt to match: <arch> <mach>? */
if (printable_name_colon != NULL) if (printable_name_colon != NULL)
{ {
int colon_index = printable_name_colon - info->printable_name; int colon_index = printable_name_colon - info->printable_name;
@ -766,36 +757,37 @@ bfd_default_scan (info, string)
attempt to match just <mach>, it could be ambigious. This test attempt to match just <mach>, it could be ambigious. This test
is left until later. */ is left until later. */
/* NOTE: The below is retained for compatibility only. Please do not /* NOTE: The below is retained for compatibility only. Please do
add to this code */ not add to this code. */
/* See how much of the supplied string matches with the /* See how much of the supplied string matches with the
architecture, eg the string m68k:68020 would match the 68k entry architecture, eg the string m68k:68020 would match the 68k entry
up to the :, then we get left with the machine number */ up to the :, then we get left with the machine number. */
for (ptr_src = string, ptr_tst = info->arch_name; for (ptr_src = string, ptr_tst = info->arch_name;
*ptr_src && *ptr_tst; *ptr_src && *ptr_tst;
ptr_src++, ptr_tst++) ptr_src++, ptr_tst++)
{ {
if (*ptr_src != *ptr_tst) break; if (*ptr_src != *ptr_tst)
break;
} }
/* Chewed up as much of the architecture as will match, skip any /* Chewed up as much of the architecture as will match, skip any
colons */ colons. */
if (*ptr_src == ':') if (*ptr_src == ':')
ptr_src++; ptr_src++;
if (*ptr_src == 0) if (*ptr_src == 0)
{ {
/* nothing more, then only keep this one if it is the default /* Nothing more, then only keep this one if it is the default
machine for this architecture */ machine for this architecture. */
return info->the_default; return info->the_default;
} }
number = 0; number = 0;
while (isdigit ((unsigned char) *ptr_src)) while (isdigit ((unsigned char) *ptr_src))
{ {
number = number * 10 + *ptr_src - '0'; number = number * 10 + *ptr_src - '0';
ptr_src++; ptr_src++;
} }
@ -973,11 +965,11 @@ bfd_printable_arch_mach (arch, machine)
enum bfd_architecture arch; enum bfd_architecture arch;
unsigned long machine; unsigned long machine;
{ {
const bfd_arch_info_type * ap = bfd_lookup_arch (arch, machine); const bfd_arch_info_type *ap = bfd_lookup_arch (arch, machine);
if (ap) if (ap)
return ap->printable_name; return ap->printable_name;
return "UNKNOWN!"; return "UNKNOWN!";
} }
/* /*
@ -991,15 +983,14 @@ DESCRIPTION
Return the number of octets (8-bit quantities) per target byte Return the number of octets (8-bit quantities) per target byte
(minimum addressable unit). In most cases, this will be one, but some (minimum addressable unit). In most cases, this will be one, but some
DSP targets have 16, 32, or even 48 bits per byte. DSP targets have 16, 32, or even 48 bits per byte.
*/ */
unsigned int unsigned int
bfd_octets_per_byte (abfd) bfd_octets_per_byte (abfd)
bfd * abfd; bfd *abfd;
{ {
return bfd_arch_mach_octets_per_byte (bfd_get_arch (abfd), return bfd_arch_mach_octets_per_byte (bfd_get_arch (abfd),
bfd_get_mach (abfd)); bfd_get_mach (abfd));
} }
/* /*
@ -1019,12 +1010,12 @@ DESCRIPTION
unsigned int unsigned int
bfd_arch_mach_octets_per_byte (arch, mach) bfd_arch_mach_octets_per_byte (arch, mach)
enum bfd_architecture arch; enum bfd_architecture arch;
unsigned long mach; unsigned long mach;
{ {
const bfd_arch_info_type * ap = bfd_lookup_arch (arch, mach); const bfd_arch_info_type *ap = bfd_lookup_arch (arch, mach);
if (ap) if (ap)
return ap->bits_per_byte / 8; return ap->bits_per_byte / 8;
return 1; return 1;
} }