aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-ppc.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2001-10-04 05:03:44 +0000
committerAlan Modra <amodra@gmail.com>2001-10-04 05:03:44 +0000
commit9c7977b3bd65e9bd23099541931e0328e7393b85 (patch)
treee8c4ca3d15836adc38952efeae556d5d28501bf9 /gas/config/tc-ppc.c
parentf983ac445ddae1834768b777bde1715949de0de9 (diff)
downloadgdb-9c7977b3bd65e9bd23099541931e0328e7393b85.zip
gdb-9c7977b3bd65e9bd23099541931e0328e7393b85.tar.gz
gdb-9c7977b3bd65e9bd23099541931e0328e7393b85.tar.bz2
* config/tc-ppc.c (md_assemble <DS relocs>): Test ppc_size as well
as BFD_DEFAULT_TARGET_SIZE. (ppc_tc): Likewise. (ppc_is_toc_sym): Likewise. (md_apply_fix3): Likewise.
Diffstat (limited to 'gas/config/tc-ppc.c')
-rw-r--r--gas/config/tc-ppc.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index a9a7e22..ff63dfc 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -2176,6 +2176,7 @@ md_assemble (str)
}
if (BFD_DEFAULT_TARGET_SIZE == 64
+ && ppc_size == PPC_OPCODE_64
&& (operand->flags & PPC_OPERAND_DS) != 0)
{
switch (reloc)
@@ -3586,6 +3587,7 @@ ppc_tc (ignore)
#endif /* OBJ_XCOFF */
#ifdef OBJ_ELF
+ int align;
/* Skip the TOC symbol name. */
while (is_part_of_name (*input_line_pointer)
@@ -3596,8 +3598,9 @@ ppc_tc (ignore)
++input_line_pointer;
/* Align to a four/eight byte boundary. */
- frag_align (BFD_DEFAULT_TARGET_SIZE == 64 ? 3 : 2, 0, 0);
- record_alignment (now_seg, BFD_DEFAULT_TARGET_SIZE == 64 ? 3 : 2);
+ align = BFD_DEFAULT_TARGET_SIZE == 64 && ppc_size == PPC_OPCODE_64 ? 3 : 2;
+ frag_align (align, 0, 0);
+ record_alignment (now_seg, align);
#endif /* OBJ_ELF */
if (*input_line_pointer != ',')
@@ -3630,7 +3633,7 @@ ppc_is_toc_sym (sym)
#endif
#ifdef OBJ_ELF
const char *sname = segment_name (S_GET_SEGMENT (sym));
- if (BFD_DEFAULT_TARGET_SIZE == 64)
+ if (BFD_DEFAULT_TARGET_SIZE == 64 && ppc_size == PPC_OPCODE_64)
return strcmp (sname, ".toc") == 0;
else
return strcmp (sname, ".got") == 0;
@@ -5174,6 +5177,7 @@ md_apply_fix3 (fixp, valuep, seg)
fixp->fx_r_type = BFD_RELOC_PPC_TOC16;
#ifdef OBJ_ELF
if (BFD_DEFAULT_TARGET_SIZE == 64
+ && ppc_size == PPC_OPCODE_64
&& (operand->flags & PPC_OPERAND_DS) != 0)
fixp->fx_r_type = BFD_RELOC_PPC64_TOC16_DS;
#endif
@@ -5207,9 +5211,11 @@ md_apply_fix3 (fixp, valuep, seg)
#endif
switch (fixp->fx_r_type)
{
-#if BFD_DEFAULT_TARGET_SIZE != 64
case BFD_RELOC_CTOR:
-#endif
+ if (BFD_DEFAULT_TARGET_SIZE == 64 && ppc_size == PPC_OPCODE_64)
+ goto ctor64;
+ /* fall through */
+
case BFD_RELOC_32:
if (fixp->fx_pcrel)
fixp->fx_r_type = BFD_RELOC_32_PCREL;
@@ -5223,10 +5229,8 @@ md_apply_fix3 (fixp, valuep, seg)
value, 4);
break;
-#if BFD_DEFAULT_TARGET_SIZE == 64
- case BFD_RELOC_CTOR:
-#endif
case BFD_RELOC_64:
+ ctor64:
if (fixp->fx_pcrel)
fixp->fx_r_type = BFD_RELOC_64_PCREL;
/* fall through */