* config/tc-ppc.c (toc_reloc_types): New variable.
authorAlan Modra <amodra@gmail.com>
Thu, 1 Jul 2010 04:50:21 +0000 (04:50 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 1 Jul 2010 04:50:21 +0000 (04:50 +0000)
(md_assemble): Set it.
(ppc_frob_file_before_adjust): Don't warn about toc section size
if we have large toc relocs and no small toc relocs.

gas/ChangeLog
gas/config/tc-ppc.c

index dc6c4dd..854f350 100644 (file)
@@ -1,3 +1,15 @@
+2010-07-01  Alan Modra  <amodra@gmail.com>
+
+       * config/tc-ppc.c (toc_reloc_types): New variable.
+       (md_assemble): Set it.
+       (ppc_frob_file_before_adjust): Don't warn about toc section size
+       if we have large toc relocs and no small toc relocs.
+
+2010-06-29  Alan Modra  <amodra@gmail.com>
+
+       * config/tc-moxie.c (md_apply_fix): Delete set but otherwise
+       unused variable.
+
 2010-06-29  Alan Modra  <amodra@gmail.com>
 
        * config/tc-maxq.h: Delete file.
index d36bbc9..f054756 100644 (file)
@@ -183,6 +183,12 @@ int ppc_cie_data_alignment;
 /* The type of processor we are assembling for.  This is one or more
    of the PPC_OPCODE flags defined in opcode/ppc.h.  */
 ppc_cpu_t ppc_cpu = 0;
+
+/* Flags set on encountering toc relocs.  */
+enum {
+  has_large_toc_reloc = 1,
+  has_small_toc_reloc = 2
+} toc_reloc_types;
 \f
 /* The target specific pseudo-ops which we support.  */
 
@@ -2168,6 +2174,7 @@ ppc_frob_file_before_adjust (void)
 
   toc = bfd_get_section_by_name (stdoutput, ".toc");
   if (toc != NULL
+      && toc_reloc_types != has_large_toc_reloc
       && bfd_section_size (stdoutput, toc) > 0x10000)
     as_warn (_("TOC section size exceeds 64k"));
 
@@ -2783,6 +2790,20 @@ md_assemble (char *str)
                    }
                }
 
+             switch (reloc)
+               {
+               case BFD_RELOC_PPC_TOC16:
+                 toc_reloc_types |= has_small_toc_reloc;
+                 break;
+               case BFD_RELOC_PPC64_TOC16_LO:
+               case BFD_RELOC_PPC64_TOC16_HI:
+               case BFD_RELOC_PPC64_TOC16_HA:
+                 toc_reloc_types |= has_large_toc_reloc;
+                 break;
+               default:
+                 break;
+               }
+
              if (ppc_obj64
                  && (operand->flags & (PPC_OPERAND_DS | PPC_OPERAND_DQ)) != 0)
                {