diff options
-rw-r--r-- | gas/ChangeLog | 12 | ||||
-rw-r--r-- | gas/config/tc-ppc.c | 21 |
2 files changed, 33 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index dc6c4dd..854f350 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -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. diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index d36bbc9..f054756 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -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; /* 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) { |