From e8cd04d60295202a8fb60e299e5d29414f92d759 Mon Sep 17 00:00:00 2001 From: amodra Date: Tue, 8 Apr 2003 23:01:47 +0000 Subject: [PATCH] * config/tc-ppc.c (md_apply_fix3): Generate ADDR16 relocs. --- gas/ChangeLog | 4 ++++ gas/config/tc-ppc.c | 23 +++++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 9918fc5577..cf54e8501f 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,7 @@ +2003-04-09 Alan Modra + + * config/tc-ppc.c (md_apply_fix3): Generate ADDR16 relocs. + 2003-04-08 Nick Clifton * as.c (perform_an_assembly_pass): If using cgen, call diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index 293627e3d8..7436fbdd37 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -5522,15 +5522,26 @@ md_apply_fix3 (fixP, valP, seg) #if defined (OBJ_XCOFF) || defined (OBJ_ELF) else if ((operand->flags & PPC_OPERAND_PARENS) != 0 && operand->bits == 16 - && operand->shift == 0 - && ppc_is_toc_sym (fixP->fx_addsy)) + && operand->shift == 0) { - fixP->fx_r_type = BFD_RELOC_PPC_TOC16; + if (ppc_is_toc_sym (fixP->fx_addsy)) + { + fixP->fx_r_type = BFD_RELOC_PPC_TOC16; #ifdef OBJ_ELF - if (ppc_obj64 - && (operand->flags & PPC_OPERAND_DS) != 0) - fixP->fx_r_type = BFD_RELOC_PPC64_TOC16_DS; + if (ppc_obj64 + && (operand->flags & PPC_OPERAND_DS) != 0) + fixP->fx_r_type = BFD_RELOC_PPC64_TOC16_DS; +#endif + } + else + { + fixP->fx_r_type = BFD_RELOC_16; +#ifdef OBJ_ELF + if (ppc_obj64 + && (operand->flags & PPC_OPERAND_DS) != 0) + fixP->fx_r_type = BFD_RELOC_PPC64_ADDR16_DS; #endif + } fixP->fx_size = 2; if (target_big_endian) fixP->fx_where += 2; -- 2.11.0