From: Alan Modra Date: Sat, 25 Mar 2023 10:45:46 +0000 (+1030) Subject: Use stdint types in coff internal_auxent X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a2c7ca15a5609ea230771fc418511a3b8db16bd1;p=binutils-gdb.git Use stdint types in coff internal_auxent long is a poor choice of type to store 32-bit values read from objects files by H_GET_32. H_GET_32 doesn't sign extend so tests like that in gdb/coffread.c for "negative" values won't work if long is larger than 32 bits. If long is 32-bit then code needs to be careful to not accidentally index negative array elements. (I'd rather see a segfault on an unmapped 4G array index than silently reading bogus data.) long is also a poor choice for x_sect.s_scnlen, which might have 64-bit values. It's better to use unsigned exact width types to avoid surprises. I decided to change the field names too, which makes most of this patch simply renaming. Besides that there are a few places where casts are no longer needed, and where printf format strings or tests need adjusting. include/ * coff/internal.h (union internal_auxent): Use unsigned stdint types. Rename l fields to u32 and u64 as appropriate. bfd/ * coff-bfd.c, * coff-rs6000.c, * coff64-rs6000.c, * coffcode.h, * coffgen.c, * cofflink.c, * coffswap.h, * peXXigen.c, * xcofflink.c: Adjust to suit internal_auxent changes. binutils/ * rdcoff.c: Adjust to suit internal_auxent changes. gas/ * config/obj-coff.h, * config/tc-ppc.c: Adjust to suit internal_auxent changes. gdb/ * coffread.c, * xcoffread.c: Adjust to suit internal_auxent changes. ld/ * pe-dll.c: Adjust to suit internal_auxent changes. --- diff --git a/bfd/coff-bfd.c b/bfd/coff-bfd.c index 9660b6b14e5..292778ecb56 100644 --- a/bfd/coff-bfd.c +++ b/bfd/coff-bfd.c @@ -83,7 +83,7 @@ bfd_coff_get_auxent (bfd *abfd, if (ent->fix_tag) { - pauxent->x_sym.x_tagndx.l = + pauxent->x_sym.x_tagndx.u32 = ((combined_entry_type *) pauxent->x_sym.x_tagndx.p - obj_raw_syments (abfd)); ent->fix_tag = 0; @@ -91,7 +91,7 @@ bfd_coff_get_auxent (bfd *abfd, if (ent->fix_end) { - pauxent->x_sym.x_fcnary.x_fcn.x_endndx.l = + pauxent->x_sym.x_fcnary.x_fcn.x_endndx.u32 = ((combined_entry_type *) pauxent->x_sym.x_fcnary.x_fcn.x_endndx.p - obj_raw_syments (abfd)); ent->fix_end = 0; @@ -99,7 +99,7 @@ bfd_coff_get_auxent (bfd *abfd, if (ent->fix_scnlen) { - pauxent->x_csect.x_scnlen.l = + pauxent->x_csect.x_scnlen.u64 = ((combined_entry_type *) pauxent->x_csect.x_scnlen.p - obj_raw_syments (abfd)); ent->fix_scnlen = 0; diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index ea8c8287652..6c4e32c9f0d 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -507,7 +507,7 @@ _bfd_xcoff_swap_aux_in (bfd *abfd, void * ext1, int type ATTRIBUTE_UNUSED, case C_HIDEXT: if (indx + 1 == numaux) { - in->x_csect.x_scnlen.l = H_GET_32 (abfd, ext->x_csect.x_scnlen); + in->x_csect.x_scnlen.u64 = 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 @@ -525,7 +525,7 @@ _bfd_xcoff_swap_aux_in (bfd *abfd, void * ext1, int type ATTRIBUTE_UNUSED, = H_GET_32 (abfd, ext->x_fcn.x_fsize); in->x_sym.x_fcnary.x_fcn.x_lnnoptr = H_GET_32 (abfd, ext->x_fcn.x_lnnoptr); - in->x_sym.x_fcnary.x_fcn.x_endndx.l + in->x_sym.x_fcnary.x_fcn.x_endndx.u32 = H_GET_32 (abfd, ext->x_fcn.x_endndx); } break; @@ -591,7 +591,7 @@ _bfd_xcoff_swap_aux_out (bfd *abfd, void * inp, int type ATTRIBUTE_UNUSED, case C_HIDEXT: if (indx + 1 == numaux) { - H_PUT_32 (abfd, in->x_csect.x_scnlen.l, ext->x_csect.x_scnlen); + H_PUT_32 (abfd, in->x_csect.x_scnlen.u64, 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 @@ -607,7 +607,7 @@ _bfd_xcoff_swap_aux_out (bfd *abfd, void * inp, int type ATTRIBUTE_UNUSED, H_PUT_32 (abfd, in->x_sym.x_misc.x_fsize, ext->x_fcn.x_fsize); H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext->x_fcn.x_lnnoptr); - H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, + H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.u32, ext->x_fcn.x_endndx); } break; @@ -4146,7 +4146,7 @@ xcoff_generate_rtinit (bfd *abfd, const char *init, const char *fini, syment.n_scnum = 1; syment.n_sclass = C_HIDEXT; syment.n_numaux = 1; - auxent.x_csect.x_scnlen.l = data_buffer_size; + auxent.x_csect.x_scnlen.u64 = data_buffer_size; auxent.x_csect.x_smtyp = 3 << 3 | XTY_SD; auxent.x_csect.x_smclas = XMC_RW; bfd_coff_swap_sym_out (abfd, &syment, diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index e3a5da37418..f8a0bde8c30 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -411,10 +411,10 @@ _bfd_xcoff64_swap_aux_in (bfd *abfd, void *ext1, int type ATTRIBUTE_UNUSED, if (auxtype != _AUX_CSECT) goto error; - bfd_vma h = H_GET_S32 (abfd, ext->x_csect.x_scnlen_hi); + bfd_vma h = H_GET_32 (abfd, ext->x_csect.x_scnlen_hi); bfd_vma l = H_GET_32 (abfd, ext->x_csect.x_scnlen_lo); - in->x_csect.x_scnlen.l = h << 32 | (l & 0xffffffff); + in->x_csect.x_scnlen.u64 = h << 32 | (l & 0xffffffff); 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); @@ -436,7 +436,7 @@ _bfd_xcoff64_swap_aux_in (bfd *abfd, void *ext1, int type ATTRIBUTE_UNUSED, = H_GET_64 (abfd, ext->x_fcn.x_lnnoptr); in->x_sym.x_misc.x_fsize = H_GET_32 (abfd, ext->x_fcn.x_fsize); - in->x_sym.x_fcnary.x_fcn.x_endndx.l + in->x_sym.x_fcnary.x_fcn.x_endndx.u32 = H_GET_32 (abfd, ext->x_fcn.x_endndx); } break; @@ -524,9 +524,9 @@ _bfd_xcoff64_swap_aux_out (bfd *abfd, void *inp, int type ATTRIBUTE_UNUSED, { bfd_vma temp; - temp = in->x_csect.x_scnlen.l & 0xffffffff; + temp = in->x_csect.x_scnlen.u64 & 0xffffffff; H_PUT_32 (abfd, temp, ext->x_csect.x_scnlen_lo); - temp = in->x_csect.x_scnlen.l >> 32; + temp = in->x_csect.x_scnlen.u64 >> 32; H_PUT_32 (abfd, temp, ext->x_csect.x_scnlen_hi); 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); @@ -542,7 +542,7 @@ _bfd_xcoff64_swap_aux_out (bfd *abfd, void *inp, int type ATTRIBUTE_UNUSED, H_PUT_64 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext->x_fcn.x_lnnoptr); H_PUT_32 (abfd, in->x_sym.x_misc.x_fsize, ext->x_fcn.x_fsize); - H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, + H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.u32, ext->x_fcn.x_endndx); H_PUT_8 (abfd, _AUX_FCN, ext->x_csect.x_auxtype); } @@ -2265,7 +2265,7 @@ xcoff64_generate_rtinit (bfd *abfd, const char *init, const char *fini, syment.n_scnum = 2; syment.n_sclass = C_HIDEXT; syment.n_numaux = 1; - auxent.x_csect.x_scnlen.l = data_buffer_size; + auxent.x_csect.x_scnlen.u64 = data_buffer_size; auxent.x_csect.x_smtyp = 3 << 3 | XTY_SD; auxent.x_csect.x_smclas = XMC_RW; bfd_coff_swap_sym_out (abfd, &syment, diff --git a/bfd/coffcode.h b/bfd/coffcode.h index d4a2a5c3d62..5d6be493325 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -2463,10 +2463,10 @@ coff_pointerize_aux_hook (bfd *abfd ATTRIBUTE_UNUSED, { BFD_ASSERT (! aux->is_sym); if (SMTYP_SMTYP (aux->u.auxent.x_csect.x_smtyp) == XTY_LD - && (bfd_vma) aux->u.auxent.x_csect.x_scnlen.l < obj_raw_syment_count (abfd)) + && aux->u.auxent.x_csect.x_scnlen.u64 < obj_raw_syment_count (abfd)) { aux->u.auxent.x_csect.x_scnlen.p = - table_base + aux->u.auxent.x_csect.x_scnlen.l; + table_base + aux->u.auxent.x_csect.x_scnlen.u64; aux->fix_scnlen = 1; } @@ -2505,21 +2505,21 @@ coff_print_aux (bfd *abfd ATTRIBUTE_UNUSED, if (SMTYP_SMTYP (aux->u.auxent.x_csect.x_smtyp) != XTY_LD) { BFD_ASSERT (! aux->fix_scnlen); - fprintf (file, "val %5" PRId64, - (int64_t) aux->u.auxent.x_csect.x_scnlen.l); + fprintf (file, "val %5" PRIu64, + aux->u.auxent.x_csect.x_scnlen.u64); } else { fprintf (file, "indx "); if (! aux->fix_scnlen) - fprintf (file, "%4" PRId64, - (int64_t) aux->u.auxent.x_csect.x_scnlen.l); + fprintf (file, "%4" PRIu64, + aux->u.auxent.x_csect.x_scnlen.u64); else fprintf (file, "%4ld", (long) (aux->u.auxent.x_csect.x_scnlen.p - table_base)); } fprintf (file, - " prmhsh %ld snhsh %u typ %d algn %d clss %u stb %ld snstb %u", + " prmhsh %u snhsh %u typ %d algn %d clss %u stb %u snstb %u", aux->u.auxent.x_csect.x_parmhash, (unsigned int) aux->u.auxent.x_csect.x_snhash, SMTYP_SMTYP (aux->u.auxent.x_csect.x_smtyp), @@ -5745,7 +5745,7 @@ coff_bigobj_swap_aux_in (bfd *abfd, break; default: - in->x_sym.x_tagndx.l = H_GET_32 (abfd, ext->Sym.WeakDefaultSymIndex); + in->x_sym.x_tagndx.u32 = H_GET_32 (abfd, ext->Sym.WeakDefaultSymIndex); /* Characteristics is ignored. */ break; } @@ -5793,7 +5793,7 @@ coff_bigobj_swap_aux_out (bfd * abfd, break; } - H_PUT_32 (abfd, in->x_sym.x_tagndx.l, ext->Sym.WeakDefaultSymIndex); + H_PUT_32 (abfd, in->x_sym.x_tagndx.u32, ext->Sym.WeakDefaultSymIndex); H_PUT_32 (abfd, 1, ext->Sym.WeakSearchType); return AUXESZ; diff --git a/bfd/coffgen.c b/bfd/coffgen.c index 0b764b0c45f..3eec2d5e23c 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -802,19 +802,19 @@ coff_mangle_symbols (bfd *bfd_ptr) BFD_ASSERT (! a->is_sym); if (a->fix_tag) { - a->u.auxent.x_sym.x_tagndx.l = + a->u.auxent.x_sym.x_tagndx.u32 = a->u.auxent.x_sym.x_tagndx.p->offset; a->fix_tag = 0; } if (a->fix_end) { - a->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l = + a->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32 = a->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.p->offset; a->fix_end = 0; } if (a->fix_scnlen) { - a->u.auxent.x_csect.x_scnlen.l = + a->u.auxent.x_csect.x_scnlen.u64 = a->u.auxent.x_csect.x_scnlen.p->offset; a->fix_scnlen = 0; } @@ -1463,25 +1463,24 @@ coff_pointerize_aux (bfd *abfd, if ((ISFCN (type) || ISTAG (n_sclass) || n_sclass == C_BLOCK || n_sclass == C_FCN) - && auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l > 0 - && auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l - < (long) obj_raw_syment_count (abfd) - && table_base + auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l - < table_end) + && auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32 > 0 + && (auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32 + < obj_raw_syment_count (abfd)) + && (table_base + auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32 + < table_end)) { auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.p = - table_base + auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l; + table_base + auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32; auxent->fix_end = 1; } /* A negative tagndx is meaningless, but the SCO 3.2v4 cc can generate one, so we must be careful to ignore it. */ - if ((unsigned long) auxent->u.auxent.x_sym.x_tagndx.l - < obj_raw_syment_count (abfd) - && table_base + auxent->u.auxent.x_sym.x_tagndx.l < table_end) + if (auxent->u.auxent.x_sym.x_tagndx.u32 < obj_raw_syment_count (abfd) + && table_base + auxent->u.auxent.x_sym.x_tagndx.u32 < table_end) { auxent->u.auxent.x_sym.x_tagndx.p = - table_base + auxent->u.auxent.x_sym.x_tagndx.l; + table_base + auxent->u.auxent.x_sym.x_tagndx.u32; auxent->fix_tag = 1; } } @@ -2092,7 +2091,7 @@ coff_print_symbol (bfd *abfd, if (auxp->fix_tag) tagndx = auxp->u.auxent.x_sym.x_tagndx.p - root; else - tagndx = auxp->u.auxent.x_sym.x_tagndx.l; + tagndx = auxp->u.auxent.x_sym.x_tagndx.u32; fprintf (file, "\n"); @@ -2112,8 +2111,8 @@ coff_print_symbol (bfd *abfd, break; case C_DWARF: - fprintf (file, "AUX scnlen 0x%lx nreloc %ld", - (unsigned long) auxp->u.auxent.x_sect.x_scnlen, + fprintf (file, "AUX scnlen %#" PRIx64 " nreloc %" PRId64, + auxp->u.auxent.x_sect.x_scnlen, auxp->u.auxent.x_sect.x_nreloc); break; @@ -2128,7 +2127,7 @@ coff_print_symbol (bfd *abfd, if (auxp->u.auxent.x_scn.x_checksum != 0 || auxp->u.auxent.x_scn.x_associated != 0 || auxp->u.auxent.x_scn.x_comdat != 0) - fprintf (file, " checksum 0x%lx assoc %d comdat %d", + fprintf (file, " checksum 0x%x assoc %d comdat %d", auxp->u.auxent.x_scn.x_checksum, auxp->u.auxent.x_scn.x_associated, auxp->u.auxent.x_scn.x_comdat); @@ -2145,7 +2144,7 @@ coff_print_symbol (bfd *abfd, next = (auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.p - root); else - next = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l; + next = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.u32; llnos = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_lnnoptr; fprintf (file, "AUX tagndx %ld ttlsiz 0x%lx lnnos %ld next %ld", @@ -2797,8 +2796,8 @@ _bfd_coff_gc_mark_hook (asection *sec, record indicating that if the weak symbol is not resolved, another external symbol is used instead. */ struct coff_link_hash_entry *h2 = - h->auxbfd->tdata.coff_obj_data->sym_hashes[ - h->aux->x_sym.x_tagndx.l]; + h->auxbfd->tdata.coff_obj_data->sym_hashes + [h->aux->x_sym.x_tagndx.u32]; if (h2 && h2->root.type != bfd_link_hash_undefined) return h2->root.u.def.section; diff --git a/bfd/cofflink.c b/bfd/cofflink.c index 0de2e0bc391..9baec2fc712 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -1617,7 +1617,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) islp = isymp + 2; esl = esym + 2 * isymesz; eslend = ((bfd_byte *) obj_coff_external_syms (input_bfd) - + aux.x_sym.x_fcnary.x_fcn.x_endndx.l * isymesz); + + aux.x_sym.x_fcnary.x_fcn.x_endndx.u32 * isymesz); while (esl < eslend) { const char *elename; @@ -1656,7 +1656,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) bfd_coff_swap_aux_in (input_bfd, (esl + isymesz), islp->n_type, islp->n_sclass, 0, islp->n_numaux, &eleaux); - indx = eleaux.x_sym.x_tagndx.l; + indx = eleaux.x_sym.x_tagndx.u32; /* FIXME: If this tagndx entry refers to a symbol defined later in this file, we just ignore it. @@ -1997,7 +1997,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) || isymp->n_sclass == C_BLOCK || isymp->n_sclass == C_FCN) { - indx = auxp->x_sym.x_fcnary.x_fcn.x_endndx.l; + indx = auxp->x_sym.x_fcnary.x_fcn.x_endndx.u32; if (indx > 0 && indx < obj_raw_syment_count (input_bfd)) { @@ -2014,20 +2014,20 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) indx = output_index; else indx = flaginfo->sym_indices[indx]; - auxp->x_sym.x_fcnary.x_fcn.x_endndx.l = indx; + auxp->x_sym.x_fcnary.x_fcn.x_endndx.u32 = indx; } } - indx = auxp->x_sym.x_tagndx.l; + indx = auxp->x_sym.x_tagndx.u32; if (indx > 0 && indx < obj_raw_syment_count (input_bfd)) { long symindx; symindx = flaginfo->sym_indices[indx]; if (symindx < 0) - auxp->x_sym.x_tagndx.l = 0; + auxp->x_sym.x_tagndx.u32 = 0; else - auxp->x_sym.x_tagndx.l = symindx; + auxp->x_sym.x_tagndx.u32 = symindx; } /* The .bf symbols are supposed to be linked through @@ -2045,7 +2045,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) { if (flaginfo->last_bf_index != -1) { - flaginfo->last_bf.x_sym.x_fcnary.x_fcn.x_endndx.l = + flaginfo->last_bf.x_sym.x_fcnary.x_fcn.x_endndx.u32 = *indexp; if ((bfd_size_type) flaginfo->last_bf_index @@ -2093,7 +2093,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) } } - if (auxp->x_sym.x_fcnary.x_fcn.x_endndx.l != 0) + if (auxp->x_sym.x_fcnary.x_fcn.x_endndx.u32 != 0) flaginfo->last_bf_index = -1; else { @@ -3002,8 +3002,8 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, external causes the library member to be linked. See also linker.c: generic_link_check_archive_element. */ struct coff_link_hash_entry *h2 = - h->auxbfd->tdata.coff_obj_data->sym_hashes[ - h->aux->x_sym.x_tagndx.l]; + h->auxbfd->tdata.coff_obj_data->sym_hashes + [h->aux->x_sym.x_tagndx.u32]; if (!h2 || h2->root.type == bfd_link_hash_undefined) { diff --git a/bfd/coffswap.h b/bfd/coffswap.h index 03f52bd0486..190b8f02a0b 100644 --- a/bfd/coffswap.h +++ b/bfd/coffswap.h @@ -460,7 +460,7 @@ coff_swap_aux_in (bfd *abfd, break; } - in->x_sym.x_tagndx.l = H_GET_32 (abfd, ext->x_sym.x_tagndx); + in->x_sym.x_tagndx.u32 = H_GET_32 (abfd, ext->x_sym.x_tagndx); #ifndef NO_TVNDX in->x_sym.x_tvndx = H_GET_16 (abfd, ext->x_sym.x_tvndx); #endif @@ -469,7 +469,7 @@ coff_swap_aux_in (bfd *abfd, || ISTAG (in_class)) { in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR (abfd, ext); - in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX (abfd, ext); + in->x_sym.x_fcnary.x_fcn.x_endndx.u32 = GET_FCN_ENDNDX (abfd, ext); } else { @@ -552,7 +552,7 @@ coff_swap_aux_out (bfd * abfd, break; } - H_PUT_32 (abfd, in->x_sym.x_tagndx.l, ext->x_sym.x_tagndx); + H_PUT_32 (abfd, in->x_sym.x_tagndx.u32, ext->x_sym.x_tagndx); #ifndef NO_TVNDX H_PUT_16 (abfd, in->x_sym.x_tvndx, ext->x_sym.x_tvndx); #endif @@ -561,7 +561,7 @@ coff_swap_aux_out (bfd * abfd, || ISTAG (in_class)) { PUT_FCN_LNNOPTR (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext); - PUT_FCN_ENDNDX (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext); + PUT_FCN_ENDNDX (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.u32, ext); } else { diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index 42f2d21cee3..d240e018a39 100644 --- a/bfd/peXXigen.c +++ b/bfd/peXXigen.c @@ -316,14 +316,14 @@ _bfd_XXi_swap_aux_in (bfd * abfd, break; } - in->x_sym.x_tagndx.l = H_GET_32 (abfd, ext->x_sym.x_tagndx); + in->x_sym.x_tagndx.u32 = H_GET_32 (abfd, ext->x_sym.x_tagndx); in->x_sym.x_tvndx = H_GET_16 (abfd, ext->x_sym.x_tvndx); if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) || ISTAG (in_class)) { in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR (abfd, ext); - in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX (abfd, ext); + in->x_sym.x_fcnary.x_fcn.x_endndx.u32 = GET_FCN_ENDNDX (abfd, ext); } else { @@ -391,14 +391,14 @@ _bfd_XXi_swap_aux_out (bfd * abfd, break; } - H_PUT_32 (abfd, in->x_sym.x_tagndx.l, ext->x_sym.x_tagndx); + H_PUT_32 (abfd, in->x_sym.x_tagndx.u32, ext->x_sym.x_tagndx); H_PUT_16 (abfd, in->x_sym.x_tvndx, ext->x_sym.x_tvndx); if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) || ISTAG (in_class)) { PUT_FCN_LNNOPTR (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext); - PUT_FCN_ENDNDX (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext); + PUT_FCN_ENDNDX (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.u32, ext); } else { diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c index a67f24ba847..b57ed21afb9 100644 --- a/bfd/xcofflink.c +++ b/bfd/xcofflink.c @@ -1577,14 +1577,14 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) /* This is an external reference. */ if (sym.n_sclass == C_HIDEXT || sym.n_scnum != N_UNDEF - || aux.x_csect.x_scnlen.l != 0) + || aux.x_csect.x_scnlen.u64 != 0) { _bfd_error_handler /* xgettext:c-format */ (_("%pB: bad XTY_ER symbol `%s': class %d scnum %d " "scnlen %" PRId64), abfd, name, sym.n_sclass, sym.n_scnum, - (int64_t) aux.x_csect.x_scnlen.l); + aux.x_csect.x_scnlen.u64); bfd_set_error (bfd_error_bad_value); goto error_return; } @@ -1608,12 +1608,12 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) if (aux.x_csect.x_smclas == XMC_TC0) { if (sym.n_sclass != C_HIDEXT - || aux.x_csect.x_scnlen.l != 0) + || aux.x_csect.x_scnlen.u64 != 0) { _bfd_error_handler /* xgettext:c-format */ - (_("%pB: XMC_TC0 symbol `%s' is class %d scnlen %" PRId64), - abfd, name, sym.n_sclass, (int64_t) aux.x_csect.x_scnlen.l); + (_("%pB: XMC_TC0 symbol `%s' is class %d scnlen %" PRIu64), + abfd, name, sym.n_sclass, aux.x_csect.x_scnlen.u64); bfd_set_error (bfd_error_bad_value); goto error_return; } @@ -1643,9 +1643,9 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) && sym.n_sclass == C_HIDEXT && info->output_bfd->xvec == abfd->xvec && ((bfd_xcoff_is_xcoff32 (abfd) - && aux.x_csect.x_scnlen.l == 4) + && aux.x_csect.x_scnlen.u64 == 4) || (bfd_xcoff_is_xcoff64 (abfd) - && aux.x_csect.x_scnlen.l == 8))) + && aux.x_csect.x_scnlen.u64 == 8))) { asection *enclosing; struct internal_reloc *relocs; @@ -1776,7 +1776,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) if (! bfd_is_abs_section (enclosing) && ((bfd_vma) sym.n_value < enclosing->vma - || ((bfd_vma) sym.n_value + aux.x_csect.x_scnlen.l + || (sym.n_value + aux.x_csect.x_scnlen.u64 > enclosing->vma + enclosing->size))) { _bfd_error_handler @@ -1790,8 +1790,8 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) csect->filepos = (enclosing->filepos + sym.n_value - enclosing->vma); - csect->size = aux.x_csect.x_scnlen.l; - csect->rawsize = aux.x_csect.x_scnlen.l; + csect->size = aux.x_csect.x_scnlen.u64; + csect->rawsize = aux.x_csect.x_scnlen.u64; csect->flags |= SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS; csect->alignment_power = SMTYP_ALIGN (aux.x_csect.x_smtyp); @@ -1876,13 +1876,12 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) bool bad; bad = false; - if (aux.x_csect.x_scnlen.l < 0 - || (aux.x_csect.x_scnlen.l - >= esym - (bfd_byte *) obj_coff_external_syms (abfd))) + if (aux.x_csect.x_scnlen.u64 + >= (size_t) (esym - (bfd_byte *) obj_coff_external_syms (abfd))) bad = true; if (! bad) { - section = xcoff_data (abfd)->csects[aux.x_csect.x_scnlen.l]; + section = xcoff_data (abfd)->csects[aux.x_csect.x_scnlen.u64]; if (section == NULL || (section->flags & SEC_HAS_CONTENTS) == 0) bad = true; @@ -1929,7 +1928,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) if (csect == NULL) goto error_return; csect->vma = sym.n_value; - csect->size = aux.x_csect.x_scnlen.l; + csect->size = aux.x_csect.x_scnlen.u64; csect->alignment_power = SMTYP_ALIGN (aux.x_csect.x_smtyp); /* There are a number of other fields and section flags which we do not bother to set. */ @@ -1956,7 +1955,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) csect->flags |= SEC_IS_COMMON; csect->size = 0; section = csect; - value = aux.x_csect.x_scnlen.l; + value = aux.x_csect.x_scnlen.u64; } break; @@ -5556,7 +5555,7 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo, { unsigned long indx; - indx = aux.x_csect.x_scnlen.l; + indx = aux.x_csect.x_scnlen.u64; if (indx < obj_raw_syment_count (input_bfd)) { long symindx; @@ -5564,11 +5563,11 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo, symindx = flinfo->sym_indices[indx]; if (symindx < 0) { - aux.x_csect.x_scnlen.l = 0; + aux.x_csect.x_scnlen.u64 = 0; } else { - aux.x_csect.x_scnlen.l = symindx; + aux.x_csect.x_scnlen.u64 = symindx; } } } @@ -5582,7 +5581,7 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo, || isymp->n_sclass == C_BLOCK || isymp->n_sclass == C_FCN) { - indx = aux.x_sym.x_fcnary.x_fcn.x_endndx.l; + indx = aux.x_sym.x_fcnary.x_fcn.x_endndx.u32; if (indx > 0 && indx < obj_raw_syment_count (input_bfd)) { @@ -5597,21 +5596,21 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo, indx = output_index; else indx = flinfo->sym_indices[indx]; - aux.x_sym.x_fcnary.x_fcn.x_endndx.l = indx; + aux.x_sym.x_fcnary.x_fcn.x_endndx.u32 = indx; } } - indx = aux.x_sym.x_tagndx.l; + indx = aux.x_sym.x_tagndx.u32; if (indx > 0 && indx < obj_raw_syment_count (input_bfd)) { long symindx; symindx = flinfo->sym_indices[indx]; if (symindx < 0) - aux.x_sym.x_tagndx.l = 0; + aux.x_sym.x_tagndx.u32 = 0; else - aux.x_sym.x_tagndx.l = symindx; + aux.x_sym.x_tagndx.u32 = symindx; } } @@ -6208,7 +6207,7 @@ xcoff_find_tc0 (bfd *output_bfd, struct xcoff_final_link_info *flinfo) memset (&iraux, 0, sizeof iraux); iraux.x_csect.x_smtyp = XTY_SD; iraux.x_csect.x_smclas = XMC_TC0; - iraux.x_csect.x_scnlen.l = 0; + iraux.x_csect.x_scnlen.u64 = 0; bfd_coff_swap_aux_out (output_bfd, &iraux, T_NULL, C_HIDEXT, 0, 1, flinfo->outsyms + bfd_coff_symesz (output_bfd)); @@ -6424,7 +6423,7 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf) whether the output is 32 or 64 bit. */ memset (&iraux, 0, sizeof iraux); iraux.x_csect.x_smtyp = XTY_SD; - /* iraux.x_csect.x_scnlen.l = 4 or 8, see below. */ + /* iraux.x_csect.x_scnlen.u64 = 4 or 8, see below. */ iraux.x_csect.x_smclas = XMC_TC; /* 32 bit uses a 32 bit R_POS to do the relocations @@ -6436,12 +6435,12 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf) if (bfd_xcoff_is_xcoff64 (output_bfd)) { irel->r_size = 63; - iraux.x_csect.x_scnlen.l = 8; + iraux.x_csect.x_scnlen.u64 = 8; } else if (bfd_xcoff_is_xcoff32 (output_bfd)) { irel->r_size = 31; - iraux.x_csect.x_scnlen.l = 4; + iraux.x_csect.x_scnlen.u64 = 4; } else return false; @@ -6716,7 +6715,7 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf) /* For stub symbols, the section already has its correct size. */ if (h->root.u.def.section->owner == xcoff_hash_table (flinfo->info)->params->stub_bfd) { - aux.x_csect.x_scnlen.l = h->root.u.def.section->size; + aux.x_csect.x_scnlen.u64 = h->root.u.def.section->size; } else if ((h->flags & XCOFF_HAS_SIZE) != 0) { @@ -6726,7 +6725,7 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf) { if (l->h == h) { - aux.x_csect.x_scnlen.l = l->size; + aux.x_csect.x_scnlen.u64 = l->size; break; } } @@ -6739,7 +6738,7 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf) isym.n_scnum = h->root.u.c.p->section->output_section->target_index; isym.n_sclass = C_EXT; aux.x_csect.x_smtyp = XTY_CM; - aux.x_csect.x_scnlen.l = h->root.u.c.size; + aux.x_csect.x_scnlen.u64 = h->root.u.c.size; } else abort (); @@ -6771,7 +6770,7 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf) outsym += bfd_coff_symesz (output_bfd); aux.x_csect.x_smtyp = XTY_LD; - aux.x_csect.x_scnlen.l = obj_raw_syment_count (output_bfd); + aux.x_csect.x_scnlen.u64 = obj_raw_syment_count (output_bfd); bfd_coff_swap_aux_out (output_bfd, (void *) &aux, T_NULL, C_EXT, 0, 1, (void *) outsym); outsym += bfd_coff_auxesz (output_bfd); diff --git a/binutils/rdcoff.c b/binutils/rdcoff.c index 4d18d47ca11..95b3c54cff8 100644 --- a/binutils/rdcoff.c +++ b/binutils/rdcoff.c @@ -176,13 +176,13 @@ parse_coff_type (bfd *abfd, struct coff_symbols *symbols, return type; } - if (pauxent != NULL && pauxent->x_sym.x_tagndx.l > 0) + if (pauxent != NULL && (int32_t) pauxent->x_sym.x_tagndx.u32 > 0) { debug_type *slot; /* This is a reference to an existing type. FIXME: gdb checks that the class is not C_STRTAG, nor C_UNTAG, nor C_ENTAG. */ - slot = coff_get_slot (types, pauxent->x_sym.x_tagndx.l); + slot = coff_get_slot (types, pauxent->x_sym.x_tagndx.u32); if (*slot != DEBUG_TYPE_NULL) return *slot; else @@ -328,7 +328,7 @@ parse_coff_struct_type (bfd *abfd, struct coff_symbols *symbols, int count; bool done; - symend = pauxent->x_sym.x_fcnary.x_fcn.x_endndx.l; + symend = pauxent->x_sym.x_fcnary.x_fcn.x_endndx.u32; alloc = 10; fields = (debug_field *) xmalloc (alloc * sizeof *fields); @@ -438,7 +438,7 @@ parse_coff_enum_type (bfd *abfd, struct coff_symbols *symbols, int count; bool done; - symend = pauxent->x_sym.x_fcnary.x_fcn.x_endndx.l; + symend = pauxent->x_sym.x_fcnary.x_fcn.x_endndx.u32; alloc = 10; names = (const char **) xmalloc (alloc * sizeof *names); diff --git a/gas/config/obj-coff.h b/gas/config/obj-coff.h index 98492274c5c..2a97c38474f 100644 --- a/gas/config/obj-coff.h +++ b/gas/config/obj-coff.h @@ -160,7 +160,7 @@ /* Omit the tv related fields. */ /* Accessors. */ -#define SA_GET_SYM_TAGNDX(s) (SYM_AUXENT (s)->x_sym.x_tagndx.l) +#define SA_GET_SYM_TAGNDX(s) (SYM_AUXENT (s)->x_sym.x_tagndx.u32) #define SA_GET_SYM_LNNO(s) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno) #define SA_GET_SYM_SIZE(s) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size) #define SA_GET_SYM_FSIZE(s) (SYM_AUXENT (s)->x_sym.x_misc.x_fsize) diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index a3af5f5e276..d25c751378d 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -6158,7 +6158,7 @@ ppc_frob_symbol (symbolS *sym) csectaux = &coffsymbol (symbol_get_bfdsym (within)) ->native[S_GET_NUMBER_AUXILIARY(within)].u.auxent; - SA_SET_SYM_FSIZE (sym, csectaux->x_csect.x_scnlen.l); + SA_SET_SYM_FSIZE (sym, csectaux->x_csect.x_scnlen.u64); } } else if (S_GET_STORAGE_CLASS (sym) == C_FCN @@ -6204,7 +6204,7 @@ ppc_frob_symbol (symbolS *sym) { /* This is the TOC table. */ know (strcmp (S_GET_NAME (sym), "TOC") == 0); - a->x_csect.x_scnlen.l = 0; + a->x_csect.x_scnlen.u64 = 0; a->x_csect.x_smtyp = (2 << 3) | XTY_SD; } else if (symbol_get_tc (sym)->subseg != 0) @@ -6212,13 +6212,13 @@ ppc_frob_symbol (symbolS *sym) /* This is a csect symbol. x_scnlen is the size of the csect. */ if (symbol_get_tc (sym)->next == (symbolS *) NULL) - a->x_csect.x_scnlen.l = (bfd_section_size (S_GET_SEGMENT (sym)) - - S_GET_VALUE (sym)); + a->x_csect.x_scnlen.u64 + = bfd_section_size (S_GET_SEGMENT (sym)) - S_GET_VALUE (sym); else { resolve_symbol_value (symbol_get_tc (sym)->next); - a->x_csect.x_scnlen.l = (S_GET_VALUE (symbol_get_tc (sym)->next) - - S_GET_VALUE (sym)); + a->x_csect.x_scnlen.u64 + = S_GET_VALUE (symbol_get_tc (sym)->next) - S_GET_VALUE (sym); } if (symbol_get_tc (sym)->symbol_class == XMC_BS || symbol_get_tc (sym)->symbol_class == XMC_UL) @@ -6230,7 +6230,7 @@ ppc_frob_symbol (symbolS *sym) || S_GET_SEGMENT (sym) == ppc_xcoff_tbss_section.segment) { /* This is a common symbol. */ - a->x_csect.x_scnlen.l = symbol_get_frag (sym)->fr_offset; + a->x_csect.x_scnlen.u64 = symbol_get_frag (sym)->fr_offset; a->x_csect.x_smtyp = (symbol_get_tc (sym)->align << 3) | XTY_CM; if (S_GET_SEGMENT (sym) == ppc_xcoff_tbss_section.segment) symbol_get_tc (sym)->symbol_class = XMC_UL; @@ -6251,7 +6251,7 @@ ppc_frob_symbol (symbolS *sym) else if (! S_IS_DEFINED (sym)) { /* This is an external symbol. */ - a->x_csect.x_scnlen.l = 0; + a->x_csect.x_scnlen.u64 = 0; a->x_csect.x_smtyp = XTY_ER; } else if (ppc_is_toc_sym (sym)) @@ -6267,17 +6267,17 @@ ppc_frob_symbol (symbolS *sym) || (!ppc_is_toc_sym (next))) { if (ppc_after_toc_frag == (fragS *) NULL) - a->x_csect.x_scnlen.l = (bfd_section_size (data_section) - - S_GET_VALUE (sym)); + a->x_csect.x_scnlen.u64 + = bfd_section_size (data_section) - S_GET_VALUE (sym); else - a->x_csect.x_scnlen.l = (ppc_after_toc_frag->fr_address - - S_GET_VALUE (sym)); + a->x_csect.x_scnlen.u64 + = ppc_after_toc_frag->fr_address - S_GET_VALUE (sym); } else { resolve_symbol_value (next); - a->x_csect.x_scnlen.l = (S_GET_VALUE (next) - - S_GET_VALUE (sym)); + a->x_csect.x_scnlen.u64 + = S_GET_VALUE (next) - S_GET_VALUE (sym); } a->x_csect.x_smtyp = (2 << 3) | XTY_SD; } @@ -6302,7 +6302,7 @@ ppc_frob_symbol (symbolS *sym) if (csect == (symbolS *) NULL) { as_warn (_("warning: symbol %s has no csect"), S_GET_NAME (sym)); - a->x_csect.x_scnlen.l = 0; + a->x_csect.x_scnlen.u64 = 0; } else { @@ -6435,7 +6435,7 @@ ppc_adjust_symtab (void) i = S_GET_NUMBER_AUXILIARY (csect); S_SET_NUMBER_AUXILIARY (csect, i + 1); a = &coffsymbol (symbol_get_bfdsym (csect))->native[i + 1].u.auxent; - a->x_csect.x_scnlen.l = 0; + a->x_csect.x_scnlen.u64 = 0; a->x_csect.x_smtyp = XTY_SD; a->x_csect.x_parmhash = 0; a->x_csect.x_snhash = 0; diff --git a/gdb/coffread.c b/gdb/coffread.c index e993b17db09..8e88aaca2ad 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -1767,7 +1767,7 @@ decode_type (struct coff_symbol *cs, unsigned int c_type, /* Define an array type. */ /* auxent refers to array, not base type. */ - if (aux->x_sym.x_tagndx.l == 0) + if (aux->x_sym.x_tagndx.u32 == 0) cs->c_naux = 0; /* Shift the indices down. */ @@ -1794,14 +1794,14 @@ decode_type (struct coff_symbol *cs, unsigned int c_type, unions, and enums, so we have to check the c_sclass field. SCO 3.2v4 cc gets confused with pointers to pointers to defined structs, and generates negative x_tagndx fields. */ - if (cs->c_naux > 0 && aux->x_sym.x_tagndx.l != 0) + if (cs->c_naux > 0 && aux->x_sym.x_tagndx.u32 != 0) { if (cs->c_sclass != C_STRTAG && cs->c_sclass != C_UNTAG && cs->c_sclass != C_ENTAG - && aux->x_sym.x_tagndx.l >= 0) + && (int32_t) aux->x_sym.x_tagndx.u32 >= 0) { - type = coff_alloc_type (aux->x_sym.x_tagndx.l); + type = coff_alloc_type (aux->x_sym.x_tagndx.u32); return type; } else @@ -1824,7 +1824,7 @@ decode_function_type (struct coff_symbol *cs, union internal_auxent *aux, struct objfile *objfile) { - if (aux->x_sym.x_tagndx.l == 0) + if (aux->x_sym.x_tagndx.u32 == 0) cs->c_naux = 0; /* auxent refers to function, not base type. */ @@ -1896,7 +1896,7 @@ decode_base_type (struct coff_symbol *cs, { type = coff_read_struct_type (cs->c_symnum, aux->x_sym.x_misc.x_lnsz.x_size, - aux->x_sym.x_fcnary.x_fcn.x_endndx.l, + aux->x_sym.x_fcnary.x_fcn.x_endndx.u32, objfile); } return type; @@ -1916,7 +1916,7 @@ decode_base_type (struct coff_symbol *cs, { type = coff_read_struct_type (cs->c_symnum, aux->x_sym.x_misc.x_lnsz.x_size, - aux->x_sym.x_fcnary.x_fcn.x_endndx.l, + aux->x_sym.x_fcnary.x_fcn.x_endndx.u32, objfile); } type->set_code (TYPE_CODE_UNION); @@ -1937,7 +1937,7 @@ decode_base_type (struct coff_symbol *cs, { type = coff_read_enum_type (cs->c_symnum, aux->x_sym.x_misc.x_lnsz.x_size, - aux->x_sym.x_fcnary.x_fcn.x_endndx.l, + aux->x_sym.x_fcnary.x_fcn.x_endndx.u32, objfile); } return type; diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index a07f40b5702..f1fb1953c62 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1062,7 +1062,7 @@ read_xcoff_symtab (struct objfile *objfile, legacy_psymtab *pst) /* Dealing with a symbol with a csect entry. */ #define CSECT(PP) ((PP)->x_csect) -#define CSECT_LEN(PP) (CSECT(PP).x_scnlen.l) +#define CSECT_LEN(PP) (CSECT(PP).x_scnlen.u64) #define CSECT_ALIGN(PP) (SMTYP_ALIGN(CSECT(PP).x_smtyp)) #define CSECT_SMTYP(PP) (SMTYP_SMTYP(CSECT(PP).x_smtyp)) #define CSECT_SCLAS(PP) (CSECT(PP).x_smclas) @@ -2173,7 +2173,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, if (pst != NULL) { CORE_ADDR highval = - symbol.n_value + csect_aux.x_csect.x_scnlen.l; + symbol.n_value + CSECT_LEN (&csect_aux); if (highval > pst->raw_text_high ()) pst->set_text_high (highval); diff --git a/include/coff/internal.h b/include/coff/internal.h index 9d742d9e68d..92a0abfd4f1 100644 --- a/include/coff/internal.h +++ b/include/coff/internal.h @@ -549,40 +549,40 @@ union internal_auxent { union { - long l; /* str, un, or enum tag indx */ + uint32_t u32; /* str, un, or enum tag indx */ struct coff_ptr_struct *p; - } x_tagndx; + } x_tagndx; union { struct { - unsigned short x_lnno; /* declaration line number */ - unsigned short x_size; /* str/union/array size */ - } x_lnsz; - long x_fsize; /* size of function */ - } x_misc; + uint16_t x_lnno; /* declaration line number */ + uint16_t x_size; /* str/union/array size */ + } x_lnsz; + uint32_t x_fsize; /* size of function */ + } x_misc; union { struct { /* if ISFCN, tag, or .bb */ - bfd_signed_vma x_lnnoptr; /* ptr to fcn line # */ + uint64_t x_lnnoptr; /* ptr to fcn line # */ union { /* entry ndx past block end */ - long l; + uint32_t u32; struct coff_ptr_struct *p; - } x_endndx; - } x_fcn; + } x_endndx; + } x_fcn; struct { /* if ISARY, up to 4 dimen. */ - unsigned short x_dimen[DIMNUM]; - } x_ary; - } x_fcnary; + uint16_t x_dimen[DIMNUM]; + } x_ary; + } x_fcnary; - unsigned short x_tvndx; /* tv index */ - } x_sym; + uint16_t x_tvndx; /* tv index */ + } x_sym; struct { @@ -600,28 +600,28 @@ union internal_auxent 32 bits. */ uintptr_t x_zeroes; uintptr_t x_offset; - } x_n; + } x_n; } x_n; - unsigned char x_ftype; - } x_file; + uint8_t x_ftype; + } x_file; struct { - long x_scnlen; /* section length */ - unsigned short x_nreloc; /* # relocation entries */ - unsigned short x_nlinno; /* # line numbers */ - unsigned long x_checksum; /* section COMDAT checksum for PE */ - unsigned short x_associated; /* COMDAT associated section index for PE */ - unsigned char x_comdat; /* COMDAT selection number for PE */ - } x_scn; + uint32_t x_scnlen; /* section length */ + uint16_t x_nreloc; /* # relocation entries */ + uint16_t x_nlinno; /* # line numbers */ + uint32_t x_checksum; /* section COMDAT checksum for PE */ + uint16_t x_associated; /* COMDAT associated section index for PE */ + uint8_t x_comdat; /* COMDAT selection number for PE */ + } x_scn; struct { - long x_tvfill; /* tv fill value */ - unsigned short x_tvlen; /* length of .tv */ - unsigned short x_tvran[2]; /* tv range */ - } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ + uint32_t x_tvfill; /* tv fill value */ + uint16_t x_tvlen; /* length of .tv */ + uint16_t x_tvran[2]; /* tv range */ + } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ /****************************************** * RS/6000-specific auxent - last auxent for every external symbol @@ -630,18 +630,18 @@ union internal_auxent { union { /* csect length or enclosing csect */ - bfd_signed_vma l; + uint64_t u64; struct coff_ptr_struct *p; } x_scnlen; - long x_parmhash; /* parm type hash index */ - unsigned short x_snhash; /* sect num with parm hash */ - unsigned char x_smtyp; /* symbol align and type */ + uint32_t x_parmhash; /* parm type hash index */ + uint16_t x_snhash; /* sect num with parm hash */ + uint8_t x_smtyp; /* symbol align and type */ /* 0-4 - Log 2 of alignment */ /* 5-7 - symbol type */ - unsigned char x_smclas; /* storage mapping class */ - long x_stab; /* dbx stab info index */ - unsigned short x_snstab; /* sect num with dbx stab */ - } x_csect; /* csect definition information */ + uint8_t x_smclas; /* storage mapping class */ + uint32_t x_stab; /* dbx stab info index */ + uint16_t x_snstab; /* sect num with dbx stab */ + } x_csect; /* csect definition information */ /* x_smtyp values: */ @@ -677,8 +677,8 @@ union internal_auxent struct { - long x_scnlen; /* Section length */ - long x_nreloc; /* Number of relocation entries */ + uint64_t x_scnlen; /* Section length */ + uint64_t x_nreloc; /* Number of relocation entries */ } x_sect; }; diff --git a/ld/pe-dll.c b/ld/pe-dll.c index 7e0d886cfb9..ab13e3bb94a 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -1611,7 +1611,7 @@ generate_reloc (bfd *abfd, struct bfd_link_info *info) if (h->symbol_class != C_NT_WEAK || h->numaux != 1) continue; h2 = h->auxbfd->tdata.coff_obj_data->sym_hashes - [h->aux->x_sym.x_tagndx.l]; + [h->aux->x_sym.x_tagndx.u32]; /* We don't want a base reloc if the aux sym is not found, undefined, or if it is the constant ABS zero default value. (We broaden that slightly by