diff options
author | Alan Modra <amodra@gmail.com> | 2001-09-18 09:57:26 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2001-09-18 09:57:26 +0000 |
commit | dc810e3900d47ab2eea86d50231ff2e70b596847 (patch) | |
tree | 13fc3d267fb99c450380f08a0775b2dff076b8d7 /bfd/coff-rs6000.c | |
parent | 417412a27c87b0e738a21122a38d48aa35317eb8 (diff) | |
download | gdb-dc810e3900d47ab2eea86d50231ff2e70b596847.zip gdb-dc810e3900d47ab2eea86d50231ff2e70b596847.tar.gz gdb-dc810e3900d47ab2eea86d50231ff2e70b596847.tar.bz2 |
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
Diffstat (limited to 'bfd/coff-rs6000.c')
-rw-r--r-- | bfd/coff-rs6000.c | 611 |
1 files changed, 307 insertions, 304 deletions
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index 3b02400..44ede25 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -76,10 +76,10 @@ void _bfd_xcoff_rtype2howto PARAMS ((arelent *, struct internal_reloc *)); #define COFF_LONG_FILENAMES #define NO_COFF_SYMBOLS #define RTYPE2HOWTO(cache_ptr, dst) _bfd_xcoff_rtype2howto (cache_ptr, dst) -#define coff_mkobject _bfd_xcoff_mkobject -#define coff_bfd_copy_private_bfd_data _bfd_xcoff_copy_private_bfd_data -#define coff_bfd_is_local_label_name _bfd_xcoff_is_local_label_name -#define coff_bfd_reloc_type_lookup _bfd_xcoff_reloc_type_lookup +#define coff_mkobject _bfd_xcoff_mkobject +#define coff_bfd_copy_private_bfd_data _bfd_xcoff_copy_private_bfd_data +#define coff_bfd_is_local_label_name _bfd_xcoff_is_local_label_name +#define coff_bfd_reloc_type_lookup _bfd_xcoff_reloc_type_lookup #ifdef AIX_CORE extern const bfd_target * rs6000coff_core_p (); extern boolean rs6000coff_core_file_matches_executable_p (); @@ -155,10 +155,9 @@ _bfd_xcoff_mkobject (abfd) bfd *abfd; { coff_data_type *coff; + bfd_size_type amt = sizeof (struct xcoff_tdata); - abfd->tdata.xcoff_obj_data = - ((struct xcoff_tdata *) - bfd_zalloc (abfd, sizeof (struct xcoff_tdata))); + abfd->tdata.xcoff_obj_data = (struct xcoff_tdata *) bfd_zalloc (abfd, amt); if (abfd->tdata.xcoff_obj_data == NULL) return false; coff = coff_data (abfd); @@ -240,8 +239,6 @@ _bfd_xcoff_is_local_label_name (abfd, name) return false; } - - void _bfd_xcoff_swap_sym_in (abfd, ext1, in1) bfd *abfd; @@ -258,15 +255,14 @@ _bfd_xcoff_swap_sym_in (abfd, ext1, in1) else { in->_n._n_n._n_zeroes = 0; - in->_n._n_n._n_offset = - bfd_h_get_32 (abfd, (bfd_byte *) ext->e.e.e_offset); + in->_n._n_n._n_offset = H_GET_32 (abfd, ext->e.e.e_offset); } - in->n_value = bfd_h_get_32 (abfd, (bfd_byte *) ext->e_value); - in->n_scnum = bfd_h_get_16 (abfd, (bfd_byte *) ext->e_scnum); - in->n_type = bfd_h_get_16 (abfd, (bfd_byte *) ext->e_type); - in->n_sclass = bfd_h_get_8 (abfd, ext->e_sclass); - in->n_numaux = bfd_h_get_8 (abfd, ext->e_numaux); + in->n_value = H_GET_32 (abfd, ext->e_value); + in->n_scnum = H_GET_16 (abfd, ext->e_scnum); + in->n_type = H_GET_16 (abfd, ext->e_type); + in->n_sclass = H_GET_8 (abfd, ext->e_sclass); + in->n_numaux = H_GET_8 (abfd, ext->e_numaux); } unsigned int @@ -284,26 +280,18 @@ _bfd_xcoff_swap_sym_out (abfd, inp, extp) } else { - bfd_h_put_32 (abfd, 0, (bfd_byte *) ext->e.e.e_zeroes); - bfd_h_put_32 (abfd, in->_n._n_n._n_offset, - (bfd_byte *) ext->e.e.e_offset); + H_PUT_32 (abfd, 0, ext->e.e.e_zeroes); + H_PUT_32 (abfd, in->_n._n_n._n_offset, ext->e.e.e_offset); } - bfd_h_put_32 (abfd, in->n_value , (bfd_byte *) ext->e_value); - bfd_h_put_16 (abfd, in->n_scnum , (bfd_byte *) ext->e_scnum); - bfd_h_put_16 (abfd, in->n_type , (bfd_byte *) ext->e_type); - bfd_h_put_8 (abfd, in->n_sclass , ext->e_sclass); - bfd_h_put_8 (abfd, in->n_numaux , ext->e_numaux); + H_PUT_32 (abfd, in->n_value, ext->e_value); + H_PUT_16 (abfd, in->n_scnum, ext->e_scnum); + H_PUT_16 (abfd, in->n_type, ext->e_type); + H_PUT_8 (abfd, in->n_sclass, ext->e_sclass); + H_PUT_8 (abfd, in->n_numaux, ext->e_numaux); return bfd_coff_symesz (abfd); } -#define PUTWORD bfd_h_put_32 -#define PUTHALF bfd_h_put_16 -#define PUTBYTE bfd_h_put_8 -#define GETWORD bfd_h_get_32 -#define GETHALF bfd_h_get_16 -#define GETBYTE bfd_h_get_8 - void _bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) bfd *abfd; @@ -323,8 +311,8 @@ _bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) if (ext->x_file.x_fname[0] == 0) { in->x_file.x_n.x_zeroes = 0; - in->x_file.x_n.x_offset = - bfd_h_get_32 (abfd, (bfd_byte *) ext->x_file.x_n.x_offset); + in->x_file.x_n.x_offset = + H_GET_32 (abfd, ext->x_file.x_n.x_offset); } else { @@ -346,18 +334,16 @@ _bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) case C_HIDEXT: if (indx + 1 == numaux) { - in->x_csect.x_scnlen.l = - bfd_h_get_32 (abfd, ext->x_csect.x_scnlen); - in->x_csect.x_parmhash = bfd_h_get_32 (abfd, - ext->x_csect.x_parmhash); - in->x_csect.x_snhash = bfd_h_get_16 (abfd, ext->x_csect.x_snhash); + in->x_csect.x_scnlen.l = H_GET_32 (abfd, ext->x_csect.x_scnlen); + in->x_csect.x_parmhash = H_GET_32 (abfd, ext->x_csect.x_parmhash); + in->x_csect.x_snhash = H_GET_16 (abfd, ext->x_csect.x_snhash); /* We don't have to hack bitfields in x_smtyp because it's defined by shifts-and-ands, which are equivalent on all byte orders. */ - in->x_csect.x_smtyp = bfd_h_get_8 (abfd, ext->x_csect.x_smtyp); - in->x_csect.x_smclas = bfd_h_get_8 (abfd, ext->x_csect.x_smclas); - in->x_csect.x_stab = bfd_h_get_32 (abfd, ext->x_csect.x_stab); - in->x_csect.x_snstab = bfd_h_get_16 (abfd, ext->x_csect.x_snstab); + in->x_csect.x_smtyp = H_GET_8 (abfd, ext->x_csect.x_smtyp); + in->x_csect.x_smclas = H_GET_8 (abfd, ext->x_csect.x_smclas); + in->x_csect.x_stab = H_GET_32 (abfd, ext->x_csect.x_stab); + in->x_csect.x_snstab = H_GET_16 (abfd, ext->x_csect.x_snstab); goto end; } break; @@ -367,12 +353,9 @@ _bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) case C_HIDDEN: if (type == T_NULL) { - in->x_scn.x_scnlen = bfd_h_get_32(abfd, - (bfd_byte *) ext->x_scn.x_scnlen); - in->x_scn.x_nreloc = bfd_h_get_16(abfd, - (bfd_byte *) ext->x_scn.x_nreloc); - in->x_scn.x_nlinno = bfd_h_get_16(abfd, - (bfd_byte *) ext->x_scn.x_nlinno); + in->x_scn.x_scnlen = H_GET_32 (abfd, ext->x_scn.x_scnlen); + in->x_scn.x_nreloc = H_GET_16 (abfd, ext->x_scn.x_nreloc); + in->x_scn.x_nlinno = H_GET_16 (abfd, ext->x_scn.x_nlinno); /* PE defines some extra fields; we zero them out for safety. */ in->x_scn.x_checksum = 0; @@ -384,38 +367,38 @@ _bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) break; } - in->x_sym.x_tagndx.l = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_tagndx); - in->x_sym.x_tvndx = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_tvndx); + in->x_sym.x_tagndx.l = H_GET_32 (abfd, ext->x_sym.x_tagndx); + in->x_sym.x_tvndx = H_GET_16 (abfd, ext->x_sym.x_tvndx); if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) { - in->x_sym.x_fcnary.x_fcn.x_lnnoptr = bfd_h_get_32(abfd, (bfd_byte *) - ext->x_sym.x_fcnary.x_fcn.x_lnnoptr); - in->x_sym.x_fcnary.x_fcn.x_endndx.l = bfd_h_get_32(abfd, (bfd_byte *) - ext->x_sym.x_fcnary.x_fcn.x_endndx); + in->x_sym.x_fcnary.x_fcn.x_lnnoptr = + H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr); + in->x_sym.x_fcnary.x_fcn.x_endndx.l = + H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_endndx); } else { in->x_sym.x_fcnary.x_ary.x_dimen[0] = - bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[0]); + H_GET_16 (abfd, ext->x_sym.x_fcnary.x_ary.x_dimen[0]); in->x_sym.x_fcnary.x_ary.x_dimen[1] = - bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[1]); + H_GET_16 (abfd, ext->x_sym.x_fcnary.x_ary.x_dimen[1]); in->x_sym.x_fcnary.x_ary.x_dimen[2] = - bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[2]); + H_GET_16 (abfd, ext->x_sym.x_fcnary.x_ary.x_dimen[2]); in->x_sym.x_fcnary.x_ary.x_dimen[3] = - bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[3]); + H_GET_16 (abfd, ext->x_sym.x_fcnary.x_ary.x_dimen[3]); } if (ISFCN (type)) { - in->x_sym.x_misc.x_fsize = bfd_h_get_32 (abfd, (bfd_byte *) ext->x_sym.x_misc.x_fsize); + in->x_sym.x_misc.x_fsize = H_GET_32 (abfd, ext->x_sym.x_misc.x_fsize); } else { - in->x_sym.x_misc.x_lnsz.x_lnno = bfd_h_get_16 (abfd, (bfd_byte *) - ext->x_sym.x_misc.x_lnsz.x_lnno); - in->x_sym.x_misc.x_lnsz.x_size = bfd_h_get_16 (abfd, (bfd_byte *) - ext->x_sym.x_misc.x_lnsz.x_size); + in->x_sym.x_misc.x_lnsz.x_lnno = + H_GET_16 (abfd, ext->x_sym.x_misc.x_lnsz.x_lnno); + in->x_sym.x_misc.x_lnsz.x_size = + H_GET_16 (abfd, ext->x_sym.x_misc.x_lnsz.x_size); } end: ; @@ -445,10 +428,8 @@ _bfd_xcoff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) case C_FILE: if (in->x_file.x_fname[0] == 0) { - PUTWORD (abfd, 0, (bfd_byte *) ext->x_file.x_n.x_zeroes); - PUTWORD (abfd, - in->x_file.x_n.x_offset, - (bfd_byte *) ext->x_file.x_n.x_offset); + H_PUT_32 (abfd, 0, ext->x_file.x_n.x_zeroes); + H_PUT_32 (abfd, in->x_file.x_n.x_offset, ext->x_file.x_n.x_offset); } else { @@ -461,16 +442,16 @@ _bfd_xcoff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) case C_HIDEXT: if (indx + 1 == numaux) { - PUTWORD (abfd, in->x_csect.x_scnlen.l,ext->x_csect.x_scnlen); - PUTWORD (abfd, in->x_csect.x_parmhash, ext->x_csect.x_parmhash); - PUTHALF (abfd, in->x_csect.x_snhash, ext->x_csect.x_snhash); + H_PUT_32 (abfd, in->x_csect.x_scnlen.l, ext->x_csect.x_scnlen); + H_PUT_32 (abfd, in->x_csect.x_parmhash, ext->x_csect.x_parmhash); + H_PUT_16 (abfd, in->x_csect.x_snhash, ext->x_csect.x_snhash); /* We don't have to hack bitfields in x_smtyp because it's defined by shifts-and-ands, which are equivalent on all byte orders. */ - PUTBYTE (abfd, in->x_csect.x_smtyp, ext->x_csect.x_smtyp); - PUTBYTE (abfd, in->x_csect.x_smclas, ext->x_csect.x_smclas); - PUTWORD (abfd, in->x_csect.x_stab, ext->x_csect.x_stab); - PUTHALF (abfd, in->x_csect.x_snstab, ext->x_csect.x_snstab); + H_PUT_8 (abfd, in->x_csect.x_smtyp, ext->x_csect.x_smtyp); + H_PUT_8 (abfd, in->x_csect.x_smclas, ext->x_csect.x_smclas); + H_PUT_32 (abfd, in->x_csect.x_stab, ext->x_csect.x_stab); + H_PUT_16 (abfd, in->x_csect.x_snstab, ext->x_csect.x_snstab); goto end; } break; @@ -480,45 +461,44 @@ _bfd_xcoff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) case C_HIDDEN: if (type == T_NULL) { - bfd_h_put_32(abfd, in->x_scn.x_scnlen, (bfd_byte *) ext->x_scn.x_scnlen); - bfd_h_put_16(abfd, in->x_scn.x_nreloc, (bfd_byte *) ext->x_scn.x_nreloc); - bfd_h_put_16(abfd, in->x_scn.x_nlinno, (bfd_byte *) ext->x_scn.x_nlinno); + H_PUT_32 (abfd, in->x_scn.x_scnlen, ext->x_scn.x_scnlen); + H_PUT_16 (abfd, in->x_scn.x_nreloc, ext->x_scn.x_nreloc); + H_PUT_16 (abfd, in->x_scn.x_nlinno, ext->x_scn.x_nlinno); goto end; } break; } - PUTWORD (abfd, in->x_sym.x_tagndx.l, (bfd_byte *) ext->x_sym.x_tagndx); - bfd_h_put_16 (abfd, in->x_sym.x_tvndx , (bfd_byte *) ext->x_sym.x_tvndx); + H_PUT_32 (abfd, in->x_sym.x_tagndx.l, ext->x_sym.x_tagndx); + H_PUT_16 (abfd, in->x_sym.x_tvndx, ext->x_sym.x_tvndx); if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) { - bfd_h_put_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, - (bfd_byte *) ext->x_sym.x_fcnary.x_fcn.x_lnnoptr); - PUTWORD (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, - (bfd_byte *) ext->x_sym.x_fcnary.x_fcn.x_endndx); + H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, + ext->x_sym.x_fcnary.x_fcn.x_lnnoptr); + H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, + ext->x_sym.x_fcnary.x_fcn.x_endndx); } else { - bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[0], - (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[0]); - bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[1], - (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[1]); - bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[2], - (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[2]); - bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[3], - (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[3]); + H_PUT_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[0], + ext->x_sym.x_fcnary.x_ary.x_dimen[0]); + H_PUT_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[1], + ext->x_sym.x_fcnary.x_ary.x_dimen[1]); + H_PUT_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[2], + ext->x_sym.x_fcnary.x_ary.x_dimen[2]); + H_PUT_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[3], + ext->x_sym.x_fcnary.x_ary.x_dimen[3]); } if (ISFCN (type)) - PUTWORD (abfd, in->x_sym.x_misc.x_fsize, - (bfd_byte *) ext->x_sym.x_misc.x_fsize); + H_PUT_32 (abfd, in->x_sym.x_misc.x_fsize, ext->x_sym.x_misc.x_fsize); else { - bfd_h_put_16 (abfd, in->x_sym.x_misc.x_lnsz.x_lnno, - (bfd_byte *)ext->x_sym.x_misc.x_lnsz.x_lnno); - bfd_h_put_16 (abfd, in->x_sym.x_misc.x_lnsz.x_size, - (bfd_byte *)ext->x_sym.x_misc.x_lnsz.x_size); + H_PUT_16 (abfd, in->x_sym.x_misc.x_lnsz.x_lnno, + ext->x_sym.x_misc.x_lnsz.x_lnno); + H_PUT_16 (abfd, in->x_sym.x_misc.x_lnsz.x_size, + ext->x_sym.x_misc.x_lnsz.x_size); } end: @@ -913,7 +893,7 @@ _bfd_xcoff_rtype2howto (relent, internal) type matches this information. The bitsize is not significant for R_REF relocs. */ if (relent->howto->dst_mask != 0 - && (relent->howto->bitsize + && (relent->howto->bitsize != ((unsigned int) internal->r_size & 0x3f) + 1)) abort (); #if 0 @@ -1031,12 +1011,14 @@ _bfd_xcoff_slurp_armap (abfd) return false; /* The symbol table starts with a normal archive header. */ - if (bfd_read ((PTR) &hdr, SIZEOF_AR_HDR, 1, abfd) != SIZEOF_AR_HDR) + if (bfd_bread ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd) + != SIZEOF_AR_HDR) return false; /* Skip the name (normally empty). */ namlen = strtol (hdr.namlen, (char **) NULL, 10); - if (bfd_seek (abfd, ((namlen + 1) & ~1) + SXCOFFARFMAG, SEEK_CUR) != 0) + off = ((namlen + 1) & ~ (size_t) 1) + SXCOFFARFMAG; + if (bfd_seek (abfd, off, SEEK_CUR) != 0) return false; sz = strtol (hdr.size, (char **) NULL, 10); @@ -1045,28 +1027,28 @@ _bfd_xcoff_slurp_armap (abfd) contents = (bfd_byte *) bfd_alloc (abfd, sz); if (contents == NULL) return false; - if (bfd_read ((PTR) contents, 1, sz, abfd) != sz) + if (bfd_bread ((PTR) contents, sz, abfd) != sz) return false; /* The symbol table starts with a four byte count. */ - c = bfd_h_get_32 (abfd, contents); - + c = H_GET_32 (abfd, contents); + if (c * 4 >= sz) { bfd_set_error (bfd_error_bad_value); return false; } - - bfd_ardata (abfd)->symdefs = ((carsym *) - bfd_alloc (abfd, c * sizeof (carsym))); + + bfd_ardata (abfd)->symdefs = + ((carsym *) bfd_alloc (abfd, c * sizeof (carsym))); if (bfd_ardata (abfd)->symdefs == NULL) return false; - + /* After the count comes a list of four byte file offsets. */ for (i = 0, arsym = bfd_ardata (abfd)->symdefs, p = contents + 4; i < c; ++i, ++arsym, p += 4) - arsym->file_offset = bfd_h_get_32 (abfd, p); + arsym->file_offset = H_GET_32 (abfd, p); } else { @@ -1084,13 +1066,14 @@ _bfd_xcoff_slurp_armap (abfd) return false; /* The symbol table starts with a normal archive header. */ - if (bfd_read ((PTR) &hdr, SIZEOF_AR_HDR_BIG, 1, abfd) + if (bfd_bread ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG) return false; /* Skip the name (normally empty). */ namlen = strtol (hdr.namlen, (char **) NULL, 10); - if (bfd_seek (abfd, ((namlen + 1) & ~1) + SXCOFFARFMAG, SEEK_CUR) != 0) + off = ((namlen + 1) & ~ (size_t) 1) + SXCOFFARFMAG; + if (bfd_seek (abfd, off, SEEK_CUR) != 0) return false; /* XXX This actually has to be a call to strtoll (at least on 32-bit @@ -1102,28 +1085,28 @@ _bfd_xcoff_slurp_armap (abfd) contents = (bfd_byte *) bfd_alloc (abfd, sz); if (contents == NULL) return false; - if (bfd_read ((PTR) contents, 1, sz, abfd) != sz) + if (bfd_bread ((PTR) contents, sz, abfd) != sz) return false; /* The symbol table starts with an eight byte count. */ - c = bfd_h_get_64 (abfd, contents); + c = H_GET_64 (abfd, contents); if (c * 8 >= sz) { bfd_set_error (bfd_error_bad_value); return false; } - - bfd_ardata (abfd)->symdefs = ((carsym *) - bfd_alloc (abfd, c * sizeof (carsym))); + + bfd_ardata (abfd)->symdefs = + ((carsym *) bfd_alloc (abfd, c * sizeof (carsym))); if (bfd_ardata (abfd)->symdefs == NULL) return false; - + /* After the count comes a list of eight byte file offsets. */ for (i = 0, arsym = bfd_ardata (abfd)->symdefs, p = contents + 8; i < c; ++i, ++arsym, p += 8) - arsym->file_offset = bfd_h_get_64 (abfd, p); + arsym->file_offset = H_GET_64 (abfd, p); } /* After the file offsets come null terminated symbol names. */ @@ -1153,8 +1136,9 @@ _bfd_xcoff_archive_p (abfd) bfd *abfd; { char magic[SXCOFFARMAG]; + bfd_size_type amt; - if (bfd_read ((PTR) magic, SXCOFFARMAG, 1, abfd) != SXCOFFARMAG) + if (bfd_bread ((PTR) magic, (bfd_size_type) SXCOFFARMAG, abfd) != SXCOFFARMAG) { if (bfd_get_error () != bfd_error_system_call) bfd_set_error (bfd_error_wrong_format); @@ -1171,9 +1155,8 @@ _bfd_xcoff_archive_p (abfd) /* We are setting bfd_ardata(abfd) here, but since bfd_ardata involves a cast, we can't do it as the left operand of assignment. */ - abfd->tdata.aout_ar_data = - (struct artdata *) bfd_zalloc (abfd, sizeof (struct artdata)); - + amt = sizeof (struct artdata); + abfd->tdata.aout_ar_data = (struct artdata *) bfd_zalloc (abfd, amt); if (bfd_ardata (abfd) == (struct artdata *) NULL) return NULL; @@ -1192,8 +1175,9 @@ _bfd_xcoff_archive_p (abfd) memcpy (hdr.magic, magic, SXCOFFARMAG); /* Now read the rest of the file header. */ - if (bfd_read ((PTR) &hdr.memoff, SIZEOF_AR_FILE_HDR - SXCOFFARMAG, 1, - abfd) != SIZEOF_AR_FILE_HDR - SXCOFFARMAG) + if (bfd_bread ((PTR) &hdr.memoff, + (bfd_size_type) SIZEOF_AR_FILE_HDR - SXCOFFARMAG, abfd) + != SIZEOF_AR_FILE_HDR - SXCOFFARMAG) { if (bfd_get_error () != bfd_error_system_call) bfd_set_error (bfd_error_wrong_format); @@ -1203,7 +1187,8 @@ _bfd_xcoff_archive_p (abfd) bfd_ardata (abfd)->first_file_filepos = strtol (hdr.firstmemoff, (char **) NULL, 10); - bfd_ardata (abfd)->tdata = bfd_zalloc (abfd, SIZEOF_AR_FILE_HDR); + amt = SIZEOF_AR_FILE_HDR; + bfd_ardata (abfd)->tdata = bfd_zalloc (abfd, amt); if (bfd_ardata (abfd)->tdata == NULL) return NULL; @@ -1218,8 +1203,9 @@ _bfd_xcoff_archive_p (abfd) memcpy (hdr.magic, magic, SXCOFFARMAG); /* Now read the rest of the file header. */ - if (bfd_read ((PTR) &hdr.memoff, SIZEOF_AR_FILE_HDR_BIG - SXCOFFARMAG, 1, - abfd) != SIZEOF_AR_FILE_HDR_BIG - SXCOFFARMAG) + if (bfd_bread ((PTR) &hdr.memoff, + (bfd_size_type) SIZEOF_AR_FILE_HDR_BIG - SXCOFFARMAG, abfd) + != SIZEOF_AR_FILE_HDR_BIG - SXCOFFARMAG) { if (bfd_get_error () != bfd_error_system_call) bfd_set_error (bfd_error_wrong_format); @@ -1232,7 +1218,8 @@ _bfd_xcoff_archive_p (abfd) bfd_ardata (abfd)->first_file_filepos = strtol (hdr.firstmemoff, (char **) NULL, 10); - bfd_ardata (abfd)->tdata = bfd_zalloc (abfd, SIZEOF_AR_FILE_HDR_BIG); + amt = SIZEOF_AR_FILE_HDR_BIG; + bfd_ardata (abfd)->tdata = bfd_zalloc (abfd, amt); if (bfd_ardata (abfd)->tdata == NULL) return NULL; @@ -1255,10 +1242,11 @@ PTR _bfd_xcoff_read_ar_hdr (abfd) bfd *abfd; { - size_t namlen; + bfd_size_type namlen; struct areltdata *ret; + bfd_size_type amt = sizeof (struct areltdata); - ret = (struct areltdata *) bfd_alloc (abfd, sizeof (struct areltdata)); + ret = (struct areltdata *) bfd_alloc (abfd, amt); if (ret == NULL) return NULL; @@ -1267,22 +1255,23 @@ _bfd_xcoff_read_ar_hdr (abfd) struct xcoff_ar_hdr hdr; struct xcoff_ar_hdr *hdrp; - if (bfd_read ((PTR) &hdr, SIZEOF_AR_HDR, 1, abfd) != SIZEOF_AR_HDR) + if (bfd_bread ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd) + != SIZEOF_AR_HDR) { free (ret); return NULL; } namlen = strtol (hdr.namlen, (char **) NULL, 10); - hdrp = (struct xcoff_ar_hdr *) bfd_alloc (abfd, - SIZEOF_AR_HDR + namlen + 1); + amt = SIZEOF_AR_HDR + namlen + 1; + hdrp = (struct xcoff_ar_hdr *) bfd_alloc (abfd, amt); if (hdrp == NULL) { free (ret); return NULL; } memcpy (hdrp, &hdr, SIZEOF_AR_HDR); - if (bfd_read ((char *) hdrp + SIZEOF_AR_HDR, 1, namlen, abfd) != namlen) + if (bfd_bread ((char *) hdrp + SIZEOF_AR_HDR, namlen, abfd) != namlen) { free (ret); return NULL; @@ -1298,7 +1287,7 @@ _bfd_xcoff_read_ar_hdr (abfd) struct xcoff_ar_hdr_big hdr; struct xcoff_ar_hdr_big *hdrp; - if (bfd_read ((PTR) &hdr, SIZEOF_AR_HDR_BIG, 1, abfd) + if (bfd_bread ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG) { free (ret); @@ -1306,16 +1295,15 @@ _bfd_xcoff_read_ar_hdr (abfd) } namlen = strtol (hdr.namlen, (char **) NULL, 10); - hdrp = (struct xcoff_ar_hdr_big *) bfd_alloc (abfd, - SIZEOF_AR_HDR_BIG - + namlen + 1); + amt = SIZEOF_AR_HDR_BIG + namlen + 1; + hdrp = (struct xcoff_ar_hdr_big *) bfd_alloc (abfd, amt); if (hdrp == NULL) { free (ret); return NULL; } memcpy (hdrp, &hdr, SIZEOF_AR_HDR_BIG); - if (bfd_read ((char *) hdrp + SIZEOF_AR_HDR_BIG, 1, namlen, abfd) != namlen) + if (bfd_bread ((char *) hdrp + SIZEOF_AR_HDR_BIG, namlen, abfd) != namlen) { free (ret); return NULL; @@ -1331,7 +1319,7 @@ _bfd_xcoff_read_ar_hdr (abfd) } /* Skip over the XCOFFARFMAG at the end of the file name. */ - if (bfd_seek (abfd, (namlen & 1) + SXCOFFARFMAG, SEEK_CUR) != 0) + if (bfd_seek (abfd, (file_ptr) ((namlen & 1) + SXCOFFARFMAG), SEEK_CUR) != 0) return NULL; return (PTR) ret; @@ -1486,12 +1474,14 @@ xcoff_write_armap_old (abfd, elength, map, orl_count, stridx) if (*p == '\0') *p = ' '; - if (bfd_write ((PTR) &hdr, SIZEOF_AR_HDR, 1, abfd) != SIZEOF_AR_HDR - || bfd_write (XCOFFARFMAG, 1, SXCOFFARFMAG, abfd) != SXCOFFARFMAG) + if (bfd_bwrite ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd) + != SIZEOF_AR_HDR + || (bfd_bwrite (XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd) + != SXCOFFARFMAG)) return false; - bfd_h_put_32 (abfd, orl_count, buf); - if (bfd_write (buf, 1, 4, abfd) != 4) + H_PUT_32 (abfd, orl_count, buf); + if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4) return false; sub = abfd->archive_head; @@ -1501,15 +1491,15 @@ xcoff_write_armap_old (abfd, elength, map, orl_count, stridx) { size_t namlen; - while (((bfd *) (map[i]).pos) == sub) + while (map[i].u.abfd == sub) { - bfd_h_put_32 (abfd, fileoff, buf); - if (bfd_write (buf, 1, 4, abfd) != 4) + H_PUT_32 (abfd, fileoff, buf); + if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4) return false; ++i; } namlen = strlen (normalize_filename (sub)); - namlen = (namlen + 1) &~ 1; + namlen = (namlen + 1) &~ (size_t) 1; fileoff += (SIZEOF_AR_HDR + namlen + SXCOFFARFMAG @@ -1525,7 +1515,7 @@ xcoff_write_armap_old (abfd, elength, map, orl_count, stridx) name = *map[i].name; namlen = strlen (name); - if (bfd_write (name, 1, namlen + 1, abfd) != namlen + 1) + if (bfd_bwrite (name, (bfd_size_type) (namlen + 1), abfd) != namlen + 1) return false; } @@ -1534,7 +1524,7 @@ xcoff_write_armap_old (abfd, elength, map, orl_count, stridx) char b; b = '\0'; - if (bfd_write (&b, 1, 1, abfd) != 1) + if (bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1) return false; } @@ -1579,7 +1569,7 @@ xcoff_write_one_armap_big (abfd, map, orl_count, orl_ccount, stridx, bits64, sprintf (hdr.nextoff, "%ld", (strtol (prevoff, (char **) NULL, 10) + (long) (4 + orl_ccount * 4 + stridx))); } - + memcpy (hdr.prevoff, prevoff, sizeof (hdr.prevoff)); sprintf (hdr.date, "%d", 0); sprintf (hdr.uid, "%d", 0); @@ -1594,12 +1584,14 @@ xcoff_write_one_armap_big (abfd, map, orl_count, orl_ccount, stridx, bits64, memcpy (nextoff, hdr.nextoff, sizeof (hdr.nextoff)); - if (bfd_write ((PTR) &hdr, SIZEOF_AR_HDR_BIG, 1, abfd) != SIZEOF_AR_HDR_BIG - || bfd_write (XCOFFARFMAG, 1, SXCOFFARFMAG, abfd) != SXCOFFARFMAG) + if ((bfd_bwrite ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd) + != SIZEOF_AR_HDR_BIG) + || (bfd_bwrite (XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd) + != SXCOFFARFMAG)) return false; - bfd_h_put_32 (abfd, orl_ccount, buf); - if (bfd_write (buf, 1, 4, abfd) != 4) + H_PUT_32 (abfd, orl_ccount, buf); + if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4) return false; sub = abfd->archive_head; @@ -1609,20 +1601,20 @@ xcoff_write_one_armap_big (abfd, map, orl_count, orl_ccount, stridx, bits64, { size_t namlen; - if ((bfd_arch_bits_per_address ((bfd *) map[i].pos) == 64) == bits64) - while (((bfd *) (map[i]).pos) == sub) + if ((bfd_arch_bits_per_address (map[i].u.abfd) == 64) == bits64) + while (map[i].u.abfd == sub) { - bfd_h_put_32 (abfd, fileoff, buf); - if (bfd_write (buf, 1, 4, abfd) != 4) + H_PUT_32 (abfd, fileoff, buf); + if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4) return false; i++; } else - while (((bfd *) (map[i]).pos) == sub) + while (map[i].u.abfd == sub) i++; namlen = strlen (normalize_filename (sub)); - namlen = (namlen + 1) &~ 1; + namlen = (namlen + 1) &~ (size_t) 1; fileoff += (SIZEOF_AR_HDR_BIG + namlen + SXCOFFARFMAG @@ -1636,7 +1628,7 @@ xcoff_write_one_armap_big (abfd, map, orl_count, orl_ccount, stridx, bits64, { const char *name; size_t namlen; - bfd *ob = (bfd *)map[i].pos; + bfd *ob = map[i].u.abfd; if (ob != object_bfd) arch_info = bfd_get_arch_info (ob); @@ -1645,7 +1637,7 @@ xcoff_write_one_armap_big (abfd, map, orl_count, orl_ccount, stridx, bits64, name = *map[i].name; namlen = strlen (name); - if (bfd_write (name, 1, namlen + 1, abfd) != namlen + 1) + if (bfd_bwrite (name, (bfd_size_type) (namlen + 1), abfd) != namlen + 1) return false; } @@ -1654,7 +1646,7 @@ xcoff_write_one_armap_big (abfd, map, orl_count, orl_ccount, stridx, bits64, char b; b = '\0'; - if (bfd_write (&b, 1, 1, abfd) != 1) + if (bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1) return false; } @@ -1684,7 +1676,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) object_bfd = NULL; for (i = 0; i < orl_count; i++) { - bfd *ob = (bfd *)map[i].pos; + bfd *ob = map[i].u.abfd; unsigned int len; if (ob != object_bfd) arch_info = bfd_get_arch_info (ob); @@ -1708,7 +1700,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) /* Now write out each map. */ if (! xcoff_write_one_armap_big (abfd, map, orl_count, orl_count_32, - stridx_32, false, + stridx_32, false, xcoff_ardata_big (abfd)->memoff, xcoff_ardata_big (abfd)->symoff)) return false; @@ -1717,7 +1709,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) xcoff_ardata_big (abfd)->symoff, xcoff_ardata_big (abfd)->symoff64)) return false; - + return true; } @@ -1743,14 +1735,14 @@ xcoff_write_archive_contents_old (abfd) bfd *abfd; { struct xcoff_ar_file_hdr fhdr; - size_t count; - size_t total_namlen; + bfd_size_type count; + bfd_size_type total_namlen; file_ptr *offsets; boolean makemap; boolean hasobjects; - file_ptr prevoff, nextoff; + ufile_ptr prevoff, nextoff; bfd *sub; - unsigned int i; + size_t i; struct xcoff_ar_hdr ahdr; bfd_size_type size; char *p; @@ -1772,7 +1764,7 @@ xcoff_write_archive_contents_old (abfd) if (offsets == NULL) return false; - if (bfd_seek (abfd, SIZEOF_AR_FILE_HDR, SEEK_SET) != 0) + if (bfd_seek (abfd, (file_ptr) SIZEOF_AR_FILE_HDR, SEEK_SET) != 0) return false; makemap = bfd_has_map (abfd); @@ -1782,7 +1774,7 @@ xcoff_write_archive_contents_old (abfd) for (sub = abfd->archive_head, i = 0; sub != NULL; sub = sub->next, i++) { const char *name; - size_t namlen; + bfd_size_type namlen; struct xcoff_ar_hdr *ahdrp; bfd_size_type remaining; @@ -1820,7 +1812,8 @@ xcoff_write_archive_contents_old (abfd) if (sub->arelt_data == NULL) { - sub->arelt_data = bfd_alloc (sub, sizeof (struct areltdata)); + size = sizeof (struct areltdata); + sub->arelt_data = bfd_alloc (sub, size); if (sub->arelt_data == NULL) return false; } @@ -1833,7 +1826,7 @@ xcoff_write_archive_contents_old (abfd) /* If the length of the name is odd, we write out the null byte after the name as well. */ - namlen = (namlen + 1) &~ 1; + namlen = (namlen + 1) &~ (bfd_size_type) 1; remaining = arelt_size (sub); size = (SIZEOF_AR_HDR @@ -1855,9 +1848,10 @@ xcoff_write_archive_contents_old (abfd) if (*p == '\0') *p = ' '; - if (bfd_write ((PTR) ahdrp, 1, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR - || bfd_write ((PTR) name, 1, namlen, abfd) != namlen - || (bfd_write ((PTR) XCOFFARFMAG, 1, SXCOFFARFMAG, abfd) + if ((bfd_bwrite ((PTR) ahdrp, (bfd_size_type) SIZEOF_AR_HDR, abfd) + != SIZEOF_AR_HDR) + || (bfd_bwrite ((PTR) name, namlen, abfd) != namlen) + || (bfd_bwrite ((PTR) XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd) != SXCOFFARFMAG)) return false; @@ -1871,8 +1865,8 @@ xcoff_write_archive_contents_old (abfd) amt = sizeof buffer; if (amt > remaining) amt = remaining; - if (bfd_read (buffer, 1, amt, sub) != amt - || bfd_write (buffer, 1, amt, abfd) != amt) + if (bfd_bread (buffer, amt, sub) != amt + || bfd_bwrite (buffer, amt, abfd) != amt) return false; remaining -= amt; } @@ -1882,7 +1876,7 @@ xcoff_write_archive_contents_old (abfd) bfd_byte b; b = '\0'; - if (bfd_write (&b, 1, 1, abfd) != 1) + if (bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1) return false; } } @@ -1922,28 +1916,29 @@ xcoff_write_archive_contents_old (abfd) if (*p == '\0') *p = ' '; - if (bfd_write ((PTR) &ahdr, 1, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR - || (bfd_write ((PTR) XCOFFARFMAG, 1, SXCOFFARFMAG, abfd) + if ((bfd_bwrite ((PTR) &ahdr, (bfd_size_type) SIZEOF_AR_HDR, abfd) + != SIZEOF_AR_HDR) + || (bfd_bwrite ((PTR) XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd) != SXCOFFARFMAG)) return false; sprintf (decbuf, "%-12ld", (long) count); - if (bfd_write ((PTR) decbuf, 1, 12, abfd) != 12) + if (bfd_bwrite ((PTR) decbuf, (bfd_size_type) 12, abfd) != 12) return false; - for (i = 0; i < count; i++) + for (i = 0; i < (size_t) count; i++) { sprintf (decbuf, "%-12ld", (long) offsets[i]); - if (bfd_write ((PTR) decbuf, 1, 12, abfd) != 12) + if (bfd_bwrite ((PTR) decbuf, (bfd_size_type) 12, abfd) != 12) return false; } for (sub = abfd->archive_head; sub != NULL; sub = sub->next) { const char *name; - size_t namlen; + bfd_size_type namlen; name = normalize_filename (sub); namlen = strlen (name); - if (bfd_write ((PTR) name, 1, namlen + 1, abfd) != namlen + 1) + if (bfd_bwrite ((PTR) name, namlen + 1, abfd) != namlen + 1) return false; } if ((size & 1) != 0) @@ -1951,7 +1946,7 @@ xcoff_write_archive_contents_old (abfd) bfd_byte b; b = '\0'; - if (bfd_write ((PTR) &b, 1, 1, abfd) != 1) + if (bfd_bwrite ((PTR) &b, (bfd_size_type) 1, abfd) != 1) return false; } @@ -1976,8 +1971,8 @@ xcoff_write_archive_contents_old (abfd) *p = ' '; if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0 - || (bfd_write ((PTR) &fhdr, SIZEOF_AR_FILE_HDR, 1, abfd) != - SIZEOF_AR_FILE_HDR)) + || (bfd_bwrite ((PTR) &fhdr, (bfd_size_type) SIZEOF_AR_FILE_HDR, abfd) + != SIZEOF_AR_FILE_HDR)) return false; return true; @@ -1988,14 +1983,14 @@ xcoff_write_archive_contents_big (abfd) bfd *abfd; { struct xcoff_ar_file_hdr_big fhdr; - size_t count; - size_t total_namlen; + bfd_size_type count; + bfd_size_type total_namlen; file_ptr *offsets; boolean makemap; boolean hasobjects; - file_ptr prevoff, nextoff; + ufile_ptr prevoff, nextoff; bfd *sub; - unsigned int i; + size_t i; struct xcoff_ar_hdr_big ahdr; bfd_size_type size; char *p; @@ -2017,7 +2012,7 @@ xcoff_write_archive_contents_big (abfd) if (offsets == NULL) return false; - if (bfd_seek (abfd, SIZEOF_AR_FILE_HDR_BIG, SEEK_SET) != 0) + if (bfd_seek (abfd, (file_ptr) SIZEOF_AR_FILE_HDR_BIG, SEEK_SET) != 0) return false; makemap = bfd_has_map (abfd); @@ -2027,7 +2022,7 @@ xcoff_write_archive_contents_big (abfd) for (sub = abfd->archive_head, i = 0; sub != NULL; sub = sub->next, i++) { const char *name; - size_t namlen; + bfd_size_type namlen; struct xcoff_ar_hdr_big *ahdrp; bfd_size_type remaining; @@ -2070,7 +2065,8 @@ xcoff_write_archive_contents_big (abfd) if (sub->arelt_data == NULL) { - sub->arelt_data = bfd_alloc (sub, sizeof (struct areltdata)); + size = sizeof (struct areltdata); + sub->arelt_data = bfd_alloc (sub, size); if (sub->arelt_data == NULL) return false; } @@ -2086,7 +2082,7 @@ xcoff_write_archive_contents_big (abfd) /* If the length of the name is odd, we write out the null byte after the name as well. */ - namlen = (namlen + 1) &~ 1; + namlen = (namlen + 1) &~ (bfd_size_type) 1; remaining = arelt_size (sub); size = (SIZEOF_AR_HDR_BIG @@ -2108,10 +2104,10 @@ xcoff_write_archive_contents_big (abfd) if (*p == '\0') *p = ' '; - if (bfd_write ((PTR) ahdrp, 1, SIZEOF_AR_HDR_BIG, abfd) - != SIZEOF_AR_HDR_BIG - || bfd_write ((PTR) name, 1, namlen, abfd) != namlen - || (bfd_write ((PTR) XCOFFARFMAG, 1, SXCOFFARFMAG, abfd) + if ((bfd_bwrite ((PTR) ahdrp, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd) + != SIZEOF_AR_HDR_BIG) + || bfd_bwrite ((PTR) name, (bfd_size_type) namlen, abfd) != namlen + || (bfd_bwrite ((PTR) XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd) != SXCOFFARFMAG)) return false; @@ -2125,8 +2121,8 @@ xcoff_write_archive_contents_big (abfd) amt = sizeof buffer; if (amt > remaining) amt = remaining; - if (bfd_read (buffer, 1, amt, sub) != amt - || bfd_write (buffer, 1, amt, abfd) != amt) + if (bfd_bread (buffer, amt, sub) != amt + || bfd_bwrite (buffer, amt, abfd) != amt) return false; remaining -= amt; } @@ -2136,7 +2132,7 @@ xcoff_write_archive_contents_big (abfd) bfd_byte b; b = '\0'; - if (bfd_write (&b, 1, 1, abfd) != 1) + if (bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1) return false; } } @@ -2188,18 +2184,19 @@ xcoff_write_archive_contents_big (abfd) if (*p == '\0') *p = ' '; - if (bfd_write ((PTR) &ahdr, 1, SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG - || (bfd_write ((PTR) XCOFFARFMAG, 1, SXCOFFARFMAG, abfd) + if ((bfd_bwrite ((PTR) &ahdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd) + != SIZEOF_AR_HDR_BIG) + || (bfd_bwrite ((PTR) XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd) != SXCOFFARFMAG)) return false; sprintf (decbuf, "%-12ld", (long) count); - if (bfd_write ((PTR) decbuf, 1, 12, abfd) != 12) + if (bfd_bwrite ((PTR) decbuf, (bfd_size_type) 12, abfd) != 12) return false; - for (i = 0; i < count; i++) + for (i = 0; i < (size_t) count; i++) { sprintf (decbuf, "%-12ld", (long) offsets[i]); - if (bfd_write ((PTR) decbuf, 1, 12, abfd) != 12) + if (bfd_bwrite ((PTR) decbuf, (bfd_size_type) 12, abfd) != 12) return false; } for (sub = abfd->archive_head; sub != NULL; sub = sub->next) @@ -2209,7 +2206,8 @@ xcoff_write_archive_contents_big (abfd) name = normalize_filename (sub); namlen = strlen (name); - if (bfd_write ((PTR) name, 1, namlen + 1, abfd) != namlen + 1) + if (bfd_bwrite ((PTR) name, (bfd_size_type) (namlen + 1), abfd) + != namlen + 1) return false; } if ((size & 1) != 0) @@ -2217,7 +2215,7 @@ xcoff_write_archive_contents_big (abfd) bfd_byte b; b = '\0'; - if (bfd_write ((PTR) &b, 1, 1, abfd) != 1) + if (bfd_bwrite ((PTR) &b, (bfd_size_type) 1, abfd) != 1) return false; } @@ -2244,8 +2242,8 @@ xcoff_write_archive_contents_big (abfd) *p = ' '; if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0 - || (bfd_write ((PTR) &fhdr, SIZEOF_AR_FILE_HDR_BIG, 1, abfd) != - SIZEOF_AR_FILE_HDR_BIG)) + || (bfd_bwrite ((PTR) &fhdr, (bfd_size_type) SIZEOF_AR_FILE_HDR_BIG, abfd) + != SIZEOF_AR_FILE_HDR_BIG)) return false; return true; @@ -2315,7 +2313,7 @@ xcoff_swap_ldhdr_out (abfd, src, d) { struct external_ldhdr *dst = (struct external_ldhdr *) d; - bfd_put_32 (abfd, src->l_version, dst->l_version); + bfd_put_32 (abfd, (bfd_vma) src->l_version, dst->l_version); bfd_put_32 (abfd, src->l_nsyms, dst->l_nsyms); bfd_put_32 (abfd, src->l_nreloc, dst->l_nreloc); bfd_put_32 (abfd, src->l_istlen, dst->l_istlen); @@ -2363,11 +2361,12 @@ xcoff_swap_ldsym_out (abfd, src, d) memcpy (dst->_l._l_name, src->_l._l_name, SYMNMLEN); else { - bfd_put_32 (abfd, 0, dst->_l._l_l._l_zeroes); - bfd_put_32 (abfd, src->_l._l_l._l_offset, dst->_l._l_l._l_offset); + bfd_put_32 (abfd, (bfd_vma) 0, dst->_l._l_l._l_zeroes); + bfd_put_32 (abfd, (bfd_vma) src->_l._l_l._l_offset, + dst->_l._l_l._l_offset); } bfd_put_32 (abfd, src->l_value, dst->l_value); - bfd_put_16 (abfd, src->l_scnum, dst->l_scnum); + bfd_put_16 (abfd, (bfd_vma) src->l_scnum, dst->l_scnum); bfd_put_8 (abfd, src->l_smtype, dst->l_smtype); bfd_put_8 (abfd, src->l_smclas, dst->l_smclas); bfd_put_32 (abfd, src->l_ifile, dst->l_ifile); @@ -2402,8 +2401,8 @@ xcoff_swap_ldrel_out (abfd, src, d) bfd_put_32 (abfd, src->l_vaddr, dst->l_vaddr); bfd_put_32 (abfd, src->l_symndx, dst->l_symndx); - bfd_put_16 (abfd, src->l_rtype, dst->l_rtype); - bfd_put_16 (abfd, src->l_rsecnm, dst->l_rsecnm); + bfd_put_16 (abfd, (bfd_vma) src->l_rtype, dst->l_rtype); + bfd_put_16 (abfd, (bfd_vma) src->l_rsecnm, dst->l_rsecnm); } @@ -2456,7 +2455,7 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, addend = 0; } else - { + { h = obj_xcoff_sym_hashes (input_bfd)[symndx]; sym = syms + symndx; addend = - sym->n_value; @@ -2715,12 +2714,16 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, if (next == 0x4def7b82 /* cror 15,15,15 */ || next == 0x4ffffb82 /* cror 31,31,31 */ || next == 0x60000000) /* ori r0,r0,0 */ - bfd_put_32 (input_bfd, 0x80410014, pnext); /* lwz r1,20(r1) */ + bfd_put_32 (input_bfd, + (bfd_vma) 0x80410014, /* lwz r1,20(r1) */ + pnext); } else { if (next == 0x80410014) /* lwz r1,20(r1) */ - bfd_put_32 (input_bfd, 0x60000000, pnext); /* ori r0,r0,0 */ + bfd_put_32 (input_bfd, + (bfd_vma) 0x60000000, /* ori r0,r0,0 */ + pnext); } } @@ -2785,7 +2788,7 @@ _bfd_xcoff_put_ldsymbol_name (abfd, ldinfo, ldsym, name) { if (ldinfo->string_size + len + 3 > ldinfo->string_alc) { - size_t newalc; + bfd_size_type newalc; bfd_byte *newstrings; newalc = ldinfo->string_alc * 2; @@ -2805,8 +2808,8 @@ _bfd_xcoff_put_ldsymbol_name (abfd, ldinfo, ldsym, name) ldinfo->strings = newstrings; } - bfd_put_16 (ldinfo->output_bfd, len + 1, - ldinfo->strings + ldinfo->string_size); + bfd_put_16 (ldinfo->output_bfd, (bfd_vma) (len + 1), + ldinfo->strings + ldinfo->string_size); strcpy (ldinfo->strings + ldinfo->string_size + 2, name); ldsym->_l._l_l._l_zeroes = 0; ldsym->_l._l_l._l_offset = ldinfo->string_size + 2; @@ -2817,7 +2820,7 @@ _bfd_xcoff_put_ldsymbol_name (abfd, ldinfo, ldsym, name) } static boolean -_bfd_xcoff_put_symbol_name (bfd *abfd, struct bfd_strtab_hash *strtab, +_bfd_xcoff_put_symbol_name (bfd *abfd, struct bfd_strtab_hash *strtab, struct internal_syment *sym, const char *name) { @@ -2843,7 +2846,7 @@ _bfd_xcoff_put_symbol_name (bfd *abfd, struct bfd_strtab_hash *strtab, } static asection * -xcoff_create_csect_from_smclas (abfd, aux, symbol_name) +xcoff_create_csect_from_smclas (abfd, aux, symbol_name) bfd *abfd; union internal_auxent *aux; const char *symbol_name; @@ -2856,13 +2859,13 @@ xcoff_create_csect_from_smclas (abfd, aux, symbol_name) { ".pr", ".ro", ".db", ".tc", ".ua", ".rw", ".gl", ".xo", ".sv", ".bs", ".ds", ".uc", ".ti", ".tb", NULL, ".tc0", - ".td", NULL, ".sv3264" + ".td", NULL, ".sv3264" }; if ((19 >= aux->x_csect.x_smclas) && (NULL != names[aux->x_csect.x_smclas])) { - return_value = bfd_make_section_anyway + return_value = bfd_make_section_anyway (abfd, names[aux->x_csect.x_smclas]); } else @@ -2876,7 +2879,7 @@ xcoff_create_csect_from_smclas (abfd, aux, symbol_name) return return_value; } -static boolean +static boolean xcoff_is_lineno_count_overflow (abfd, value) bfd *abfd ATTRIBUTE_UNUSED; bfd_vma value; @@ -2887,7 +2890,7 @@ xcoff_is_lineno_count_overflow (abfd, value) return false; } -static boolean +static boolean xcoff_is_reloc_count_overflow (abfd, value) bfd *abfd ATTRIBUTE_UNUSED; bfd_vma value; @@ -2911,29 +2914,29 @@ xcoff_loader_reloc_offset (abfd, ldhdr) bfd *abfd; struct internal_ldhdr *ldhdr; { - return bfd_xcoff_ldhdrsz(abfd) + + return bfd_xcoff_ldhdrsz(abfd) + (ldhdr->l_nsyms * bfd_xcoff_ldsymsz(abfd)); } static reloc_howto_type xcoff_dynamic_reloc = -HOWTO (0, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ +HOWTO (0, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_POS", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ + 0, /* special_function */ + "R_POS", /* name */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ false); /* pcrel_offset */ -/* glink - - The first word of global linkage code must be modified by filling in +/* glink + + The first word of global linkage code must be modified by filling in the correct TOC offset. */ static unsigned long xcoff_glink_code[9] = @@ -2950,11 +2953,11 @@ static unsigned long xcoff_glink_code[9] = }; -static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = +static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = { { /* COFF backend, defined in libcoff.h. */ _bfd_xcoff_swap_aux_in, /* _bfd_coff_swap_aux_in */ - _bfd_xcoff_swap_sym_in, /* _bfd_coff_swap_sym_in */ + _bfd_xcoff_swap_sym_in, /* _bfd_coff_swap_sym_in */ coff_swap_lineno_in, /* _bfd_coff_swap_lineno_in */ _bfd_xcoff_swap_aux_out, /* _bfd_swap_aux_out */ _bfd_xcoff_swap_sym_out, /* _bfd_swap_sym_out */ @@ -2993,10 +2996,10 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = dummy_reloc16_estimate, /* _bfd_coff_reloc16_estimate */ NULL, /* bfd_coff_sym_is_global */ coff_compute_section_file_positions, /* _bfd_coff_compute_section_file_positions */ - NULL , /* _bfd_coff_start_final_link */ + NULL, /* _bfd_coff_start_final_link */ xcoff_ppc_relocate_section, /* _bfd_coff_relocate_section */ coff_rtype_to_howto, /* _bfd_coff_rtype_to_howto */ - NULL , /* _bfd_coff_addust_symndx */ + NULL, /* _bfd_coff_addust_symndx */ _bfd_generic_link_add_one_symbol, /* _bfd_coff_add_one_symbol */ coff_link_output_has_begun, /* _bfd_coff_link_output_has_begun */ coff_final_link_postscript /* _bfd_coff_final_link_postscript */ @@ -3005,7 +3008,7 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = 0x01DF, /* magic number */ bfd_arch_rs6000, /* architecture */ bfd_mach_rs6k, /* machine */ - + /* Function pointers to xcoff specific swap routines. */ xcoff_swap_ldhdr_in, /* _xcoff_swap_ldhdr_in */ xcoff_swap_ldhdr_out, /* _xcoff_swap_ldhdr_out */ @@ -3070,7 +3073,7 @@ const bfd_target rs6000coff_vec = bfd_putb32, /* bfd_putx32 */ bfd_getb16, /* bfd_getx16 */ bfd_getb_signed_16, /* bfd_getx_signed_16 */ - bfd_putb16, /* bfd_putx16 */ + bfd_putb16, /* bfd_putx16 */ /* hdrs */ bfd_getb64, /* bfd_h_getx64 */ @@ -3082,39 +3085,39 @@ const bfd_target rs6000coff_vec = bfd_getb16, /* bfd_h_getx16 */ bfd_getb_signed_16, /* bfd_h_getx_signed_16 */ bfd_putb16, /* bfd_h_putx16 */ - + { /* bfd_check_format */ - _bfd_dummy_target, - coff_object_p, - _bfd_xcoff_archive_p, + _bfd_dummy_target, + coff_object_p, + _bfd_xcoff_archive_p, CORE_FILE_P }, - + { /* bfd_set_format */ - bfd_false, + bfd_false, coff_mkobject, - _bfd_generic_mkarchive, + _bfd_generic_mkarchive, bfd_false }, - + {/* bfd_write_contents */ - bfd_false, + bfd_false, coff_write_object_contents, - _bfd_xcoff_write_archive_contents, + _bfd_xcoff_write_archive_contents, bfd_false }, - + /* Generic */ bfd_true, /* _close_and_cleanup */ bfd_true, /* _bfd_free_cached_info */ coff_new_section_hook, /* _new_section_hook */ _bfd_generic_get_section_contents, /* _bfd_get_section_contents */ /* _bfd_get_section_contents_in_window */ - _bfd_generic_get_section_contents_in_window, + _bfd_generic_get_section_contents_in_window, /* Copy */ _bfd_xcoff_copy_private_bfd_data, /* _bfd_copy_private_bfd */ - /* _bfd_merge_private_bfd_data */ + /* _bfd_merge_private_bfd_data */ ((boolean (*) (bfd *, bfd *)) bfd_true), /* _bfd_copy_pivate_section_data */ ((boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true), @@ -3127,12 +3130,12 @@ const bfd_target rs6000coff_vec = coff_core_file_failing_command, /* _core_file_failing_command */ coff_core_file_failing_signal, /* _core_file_failing_signal */ /* _core_file_matches_executable_p */ - coff_core_file_matches_executable_p, + coff_core_file_matches_executable_p, /* Archive */ _bfd_xcoff_slurp_armap, /* _slurp_armap */ - /* XCOFF archives do not have - anything which corresponds to + /* XCOFF archives do not have + anything which corresponds to an extended name table. */ bfd_false, /* _slurp_extended_name_table */ /* _construct_extended_name_table */ @@ -3143,7 +3146,7 @@ const bfd_target rs6000coff_vec = _bfd_xcoff_openr_next_archived_file, /* _openr_next_archived_file */ _bfd_generic_get_elt_at_index, /* _get_elt_at_index */ _bfd_xcoff_generic_stat_arch_elt, /* _generic_dtat_arch_elt */ - /* XCOFF archives do not have + /* XCOFF archives do not have a timestamp. */ bfd_true, /* _update_armap_timestamp */ @@ -3179,37 +3182,37 @@ const bfd_target rs6000coff_vec = _bfd_xcoff_bfd_final_link, /* _bfd_filnal_link */ _bfd_generic_link_split_section, /* _bfd_link_split_section */ bfd_generic_gc_sections, /* _bfd_gc_sections */ - bfd_generic_merge_sections, /* _bfd_merge_sections */ + bfd_generic_merge_sections, /* _bfd_merge_sections */ /* Dynamic */ /* _get_dynamic_symtab_upper_bound */ - _bfd_xcoff_get_dynamic_symtab_upper_bound, + _bfd_xcoff_get_dynamic_symtab_upper_bound, _bfd_xcoff_canonicalize_dynamic_symtab, /* _cononicalize_dynamic_symtab */ _bfd_xcoff_get_dynamic_reloc_upper_bound,/* _get_dynamic_reloc_upper_bound */ _bfd_xcoff_canonicalize_dynamic_reloc, /* _cononicalize_dynamic_reloc */ /* Opposite endian version, none exists */ NULL, - + /* back end data */ (void *) &bfd_xcoff_backend_data, }; -/* +/* * xcoff-powermac target * Old target. - * Only difference between this target and the rs6000 target is the + * Only difference between this target and the rs6000 target is the * the default architecture and machine type used in coffcode.h * * PowerPC Macs use the same magic numbers as RS/6000 * (because that's how they were bootstrapped originally), - * but they are always PowerPC architecture. + * but they are always PowerPC architecture. */ -static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data = +static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data = { { /* COFF backend, defined in libcoff.h */ _bfd_xcoff_swap_aux_in, /* _bfd_coff_swap_aux_in */ - _bfd_xcoff_swap_sym_in, /* _bfd_coff_swap_sym_in */ + _bfd_xcoff_swap_sym_in, /* _bfd_coff_swap_sym_in */ coff_swap_lineno_in, /* _bfd_coff_swap_lineno_in */ _bfd_xcoff_swap_aux_out, /* _bfd_swap_aux_out */ _bfd_xcoff_swap_sym_out, /* _bfd_swap_sym_out */ @@ -3225,7 +3228,7 @@ static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data = AUXESZ, /* _bfd_auxesz */ RELSZ, /* _bfd_relsz */ LINESZ, /* _bfd_linesz */ - FILNMLEN, /* _bfd_filnmlen */ + FILNMLEN, /* _bfd_filnmlen */ true, /* _bfd_coff_long_filenames */ false, /* _bfd_coff_long_section_names */ (3), /* _bfd_coff_default_section_alignment_power */ @@ -3240,7 +3243,7 @@ static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data = coff_mkobject_hook, /* _bfd_mkobject_hook */ styp_to_sec_flags, /* _bfd_syp_to_sec_flags */ coff_set_alignment_hook, /* _bfd_set_alignment_hook */ - coff_slurp_symbol_table, /* _bfd_coff_slurp_symbol_table */ + coff_slurp_symbol_table, /* _bfd_coff_slurp_symbol_table */ symname_in_debug_hook, /* _coff_symname_in_debug_hook */ coff_pointerize_aux_hook, /* _bfd_coff_pointerize_aux_hook */ coff_print_aux, /* bfd_coff_print_aux */ @@ -3249,10 +3252,10 @@ static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data = NULL, /* bfd_coff_sym_is_global */ /* _bfd_coff_compute_section_file_positions */ coff_compute_section_file_positions, - NULL , /* _bfd_coff_start_final_link */ - xcoff_ppc_relocate_section, /* _bfd_coff_relocate_section */ + NULL, /* _bfd_coff_start_final_link */ + xcoff_ppc_relocate_section, /* _bfd_coff_relocate_section */ coff_rtype_to_howto, /* _bfd_coff_rtype_to_howto */ - NULL , /* _bfd_coff_addust_symndx */ + NULL, /* _bfd_coff_addust_symndx */ _bfd_generic_link_add_one_symbol, /* _bfd_coff_add_one_symbol */ coff_link_output_has_begun, /* _bfd_coff_link_output_has_begun */ coff_final_link_postscript /* _bfd_coff_final_link_postscript */ @@ -3298,7 +3301,7 @@ static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data = /* glink */ &xcoff_glink_code[0], (36), /* _xcoff_glink_size */ - + }; /* The transfer vector that leads the outside world to all of the above. */ @@ -3327,7 +3330,7 @@ const bfd_target pmac_xcoff_vec = bfd_putb32, /* bfd_putx32 */ bfd_getb16, /* bfd_getx16 */ bfd_getb_signed_16, /* bfd_getx_signed_16 */ - bfd_putb16, /* bfd_putx16 */ + bfd_putb16, /* bfd_putx16 */ /* hdrs */ bfd_getb64, /* bfd_h_getx64 */ @@ -3339,39 +3342,39 @@ const bfd_target pmac_xcoff_vec = bfd_getb16, /* bfd_h_getx16 */ bfd_getb_signed_16, /* bfd_h_getx_signed_16 */ bfd_putb16, /* bfd_h_putx16 */ - + { /* bfd_check_format */ - _bfd_dummy_target, - coff_object_p, - _bfd_xcoff_archive_p, + _bfd_dummy_target, + coff_object_p, + _bfd_xcoff_archive_p, CORE_FILE_P }, - + { /* bfd_set_format */ - bfd_false, + bfd_false, coff_mkobject, - _bfd_generic_mkarchive, + _bfd_generic_mkarchive, bfd_false }, - + {/* bfd_write_contents */ - bfd_false, + bfd_false, coff_write_object_contents, - _bfd_xcoff_write_archive_contents, + _bfd_xcoff_write_archive_contents, bfd_false }, - + /* Generic */ bfd_true, /* _close_and_cleanup */ bfd_true, /* _bfd_free_cached_info */ coff_new_section_hook, /* _new_section_hook */ _bfd_generic_get_section_contents, /* _bfd_get_section_contents */ /* _bfd_get_section_contents_in_window */ - _bfd_generic_get_section_contents_in_window, + _bfd_generic_get_section_contents_in_window, /* Copy */ _bfd_xcoff_copy_private_bfd_data, /* _bfd_copy_private_bfd */ - /* _bfd_merge_private_bfd_data */ + /* _bfd_merge_private_bfd_data */ ((boolean (*) (bfd *, bfd *)) bfd_true), /* _bfd_copy_pivate_section_data */ ((boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true), @@ -3384,12 +3387,12 @@ const bfd_target pmac_xcoff_vec = coff_core_file_failing_command, /* _core_file_failing_command */ coff_core_file_failing_signal, /* _core_file_failing_signal */ /* _core_file_matches_executable_p */ - coff_core_file_matches_executable_p, + coff_core_file_matches_executable_p, /* Archive */ _bfd_xcoff_slurp_armap, /* _slurp_armap */ - /* XCOFF archives do not have - anything which corresponds to + /* XCOFF archives do not have + anything which corresponds to an extended name table. */ bfd_false, /* _slurp_extended_name_table */ /* _construct_extended_name_table */ @@ -3400,7 +3403,7 @@ const bfd_target pmac_xcoff_vec = _bfd_xcoff_openr_next_archived_file, /* _openr_next_archived_file */ _bfd_generic_get_elt_at_index, /* _get_elt_at_index */ _bfd_xcoff_generic_stat_arch_elt, /* _generic_dtat_arch_elt */ - /* XCOFF archives do not have + /* XCOFF archives do not have a timestamp. */ bfd_true, /* _update_armap_timestamp */ @@ -3440,14 +3443,14 @@ const bfd_target pmac_xcoff_vec = /* Dynamic */ /* _get_dynamic_symtab_upper_bound */ - _bfd_xcoff_get_dynamic_symtab_upper_bound, + _bfd_xcoff_get_dynamic_symtab_upper_bound, _bfd_xcoff_canonicalize_dynamic_symtab, /* _cononicalize_dynamic_symtab */ _bfd_xcoff_get_dynamic_reloc_upper_bound,/* _get_dynamic_reloc_upper_bound */ _bfd_xcoff_canonicalize_dynamic_reloc, /* _cononicalize_dynamic_reloc */ /* Opposite endian version, none exists */ NULL, - + /* back end data */ (void *) &bfd_pmac_xcoff_backend_data, }; |