public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Use stdint types in coff internal_auxent
@ 2023-03-27 11:33 Alan Modra
  0 siblings, 0 replies; only message in thread
From: Alan Modra @ 2023-03-27 11:33 UTC (permalink / raw)
  To: bfd-cvs, gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a2c7ca15a5609ea230771fc418511a3b8db16bd1

commit a2c7ca15a5609ea230771fc418511a3b8db16bd1
Author: Alan Modra <amodra@gmail.com>
Date:   Sat Mar 25 21:15:46 2023 +1030

    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:
---
 bfd/coff-bfd.c          |  6 ++--
 bfd/coff-rs6000.c       | 10 +++----
 bfd/coff64-rs6000.c     | 14 ++++-----
 bfd/coffcode.h          | 18 +++++------
 bfd/coffgen.c           | 39 ++++++++++++------------
 bfd/cofflink.c          | 22 +++++++-------
 bfd/coffswap.h          |  8 ++---
 bfd/peXXigen.c          |  8 ++---
 bfd/xcofflink.c         | 63 +++++++++++++++++++-------------------
 binutils/rdcoff.c       |  8 ++---
 gas/config/obj-coff.h   |  2 +-
 gas/config/tc-ppc.c     | 32 ++++++++++----------
 gdb/coffread.c          | 16 +++++-----
 gdb/xcoffread.c         |  4 +--
 include/coff/internal.h | 80 ++++++++++++++++++++++++-------------------------
 ld/pe-dll.c             |  2 +-
 16 files changed, 165 insertions(+), 167 deletions(-)

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-03-27 11:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-27 11:33 [binutils-gdb] Use stdint types in coff internal_auxent Alan Modra

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).