[4/8] bfd/ELF: fold BFD_RELOC_<arch>_GOTOFF*

Message ID ae72d351-bf6a-4133-93bf-6668dcbd68a4@suse.com
State New
Headers
Series bfd: another little bit of reloc enum cleanup |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 success Build passed
linaro-tcwg-bot/tcwg_binutils_build--master-arm success Build passed
linaro-tcwg-bot/tcwg_binutils_check--master-arm success Test passed
linaro-tcwg-bot/tcwg_binutils_check--master-aarch64 success Test passed

Commit Message

Jan Beulich March 13, 2026, 9:54 a.m. UTC
  For many of the cases there's no need to have separate relocs per arch;
just like for other more or less generic ones a single one (per purpose;
a 64-bit generic one is being introduced) will do. Arm64, C-Sky, and
KVX - sadly - continue to be exceptions.
  

Comments

Jens Remus March 13, 2026, 4:10 p.m. UTC | #1
On 3/13/2026 10:54 AM, Jan Beulich wrote:
> For many of the cases there's no need to have separate relocs per arch;
> just like for other more or less generic ones a single one (per purpose;
> a 64-bit generic one is being introduced) will do. Arm64, C-Sky, and
> KVX - sadly - continue to be exceptions.

Hello Jan, hopefully you don't mind my perhaps newbie question:

Isn't the removal of e.g. BFD_RELOC_390_GOTOFF64 breaking the existing
external BFD API?  At least all of these relocations are documented in
the BFD documentation:
https://sourceware.org/binutils/docs/bfd.html#index-BFD_005fRELOC_005f390_005fGOTOFF64

Technically the following s390 64-bit (s390x) changes look good to me.

> --- a/bfd/bfd-in2.h
> +++ b/bfd/bfd-in2.h
> @@ -3306,6 +3306,7 @@ enum bfd_reloc_code_real
>    BFD_RELOC_32_GOT_PCREL,
>    BFD_RELOC_16_GOT_PCREL,
>    BFD_RELOC_8_GOT_PCREL,
> +  BFD_RELOC_64_GOTOFF,
>    BFD_RELOC_32_GOTOFF,
>    BFD_RELOC_16_GOTOFF,
>    BFD_RELOC_LO16_GOTOFF,

> @@ -5427,9 +5412,6 @@ enum bfd_reloc_code_real
>    /* 32 bit rel. offset to GOT entry.  */
>    BFD_RELOC_390_GOTENT,
>  
> -  /* 64 bit offset to GOT.  */
> -  BFD_RELOC_390_GOTOFF64,
> -
>    /* 12-bit offset to symbol-entry within GOT, with PLT handling.  */
>    BFD_RELOC_390_GOTPLT12,
>  

> --- a/bfd/elf64-s390.c
> +++ b/bfd/elf64-s390.c
> @@ -263,7 +263,7 @@ elf_s390_reloc_type_lookup (bfd *abfd,
>        return &elf_howto_table[(int) R_390_GOTENT];
>      case BFD_RELOC_16_GOTOFF:
>        return &elf_howto_table[(int) R_390_GOTOFF16];
> -    case BFD_RELOC_390_GOTOFF64:
> +    case BFD_RELOC_64_GOTOFF:
>        return &elf_howto_table[(int) R_390_GOTOFF64];
>      case BFD_RELOC_390_GOTPLT12:
>        return &elf_howto_table[(int) R_390_GOTPLT12];

> --- a/bfd/libbfd.h
> +++ b/bfd/libbfd.h
> @@ -1081,6 +1081,7 @@ static const char *const bfd_reloc_code_
>    "BFD_RELOC_32_GOT_PCREL",
>    "BFD_RELOC_16_GOT_PCREL",
>    "BFD_RELOC_8_GOT_PCREL",
> +  "BFD_RELOC_64_GOTOFF",
>    "BFD_RELOC_32_GOTOFF",
>    "BFD_RELOC_16_GOTOFF",
>    "BFD_RELOC_LO16_GOTOFF",

> @@ -2409,7 +2394,6 @@ static const char *const bfd_reloc_code_
>    "BFD_RELOC_390_GOTPCDBL",
>    "BFD_RELOC_390_GOT64",
>    "BFD_RELOC_390_GOTENT",
> -  "BFD_RELOC_390_GOTOFF64",
>    "BFD_RELOC_390_GOTPLT12",
>    "BFD_RELOC_390_GOTPLT16",
>    "BFD_RELOC_390_GOTPLT32",

> --- a/bfd/reloc.c
> +++ b/bfd/reloc.c
> @@ -1435,6 +1435,8 @@ ENUMX
>  ENUMX
>    BFD_RELOC_8_GOT_PCREL
>  ENUMX
> +  BFD_RELOC_64_GOTOFF
> +ENUMX
>    BFD_RELOC_32_GOTOFF
>  ENUMX
>    BFD_RELOC_16_GOTOFF

> @@ -4989,10 +4959,6 @@ ENUM
>  ENUMDOC
>    32 bit rel. offset to GOT entry.
>  ENUM
> -  BFD_RELOC_390_GOTOFF64
> -ENUMDOC
> -  64 bit offset to GOT.
> -ENUM
>    BFD_RELOC_390_GOTPLT12
>  ENUMDOC
>    12-bit offset to symbol-entry within GOT, with PLT handling.

> --- a/gas/config/tc-s390.c
> +++ b/gas/config/tc-s390.c
> @@ -1294,7 +1294,7 @@ s390_elf_cons (int nbytes /* 1=.byte, 2=
>  		  BFD_RELOC_390_GOT64,		/* ELF_SUFFIX_GOT  */
>  		  BFD_RELOC_64_PLT_PCREL,	/* ELF_SUFFIX_PLT  */
>  		  BFD_RELOC_UNUSED,		/* ELF_SUFFIX_GOTENT  */
> -		  BFD_RELOC_390_GOTOFF64,	/* ELF_SUFFIX_GOTOFF  */
> +		  BFD_RELOC_64_GOTOFF,		/* ELF_SUFFIX_GOTOFF  */
>  		  BFD_RELOC_390_GOTPLT64,	/* ELF_SUFFIX_GOTPLT  */
>  		  BFD_RELOC_390_PLTOFF64,	/* ELF_SUFFIX_PLTOFF  */
>  		  BFD_RELOC_390_TLS_GD64,	/* ELF_SUFFIX_TLS_GD  */
> @@ -2383,7 +2383,7 @@ tc_s390_fix_adjustable (fixS *fixP)
>    /* adjust_reloc_syms doesn't know about the GOT.  */
>    if (   fixP->fx_r_type == BFD_RELOC_16_GOTOFF
>        || fixP->fx_r_type == BFD_RELOC_32_GOTOFF
> -      || fixP->fx_r_type == BFD_RELOC_390_GOTOFF64
> +      || fixP->fx_r_type == BFD_RELOC_64_GOTOFF
>        || fixP->fx_r_type == BFD_RELOC_390_PLTOFF16
>        || fixP->fx_r_type == BFD_RELOC_390_PLTOFF32
>        || fixP->fx_r_type == BFD_RELOC_390_PLTOFF64
> @@ -2445,7 +2445,7 @@ tc_s390_force_relocation (struct fix *fi
>      case BFD_RELOC_390_GOT20:
>      case BFD_RELOC_32_GOT_PCREL:
>      case BFD_RELOC_32_GOTOFF:
> -    case BFD_RELOC_390_GOTOFF64:
> +    case BFD_RELOC_64_GOTOFF:
>      case BFD_RELOC_390_PLTOFF16:
>      case BFD_RELOC_390_PLTOFF32:
>      case BFD_RELOC_390_PLTOFF64:
> @@ -2750,7 +2750,7 @@ md_apply_fix (fixS *fixP, valueT *valP,
>  	    md_number_to_chars (where, value, sizeof (int));
>  	  break;
>  
> -	case BFD_RELOC_390_GOTOFF64:
> +	case BFD_RELOC_64_GOTOFF:
>  	  if (fixP->fx_done)
>  	    md_number_to_chars (where, value, 8);
>  	  break;
Regards,
Jens
  
Jens Remus March 13, 2026, 4:17 p.m. UTC | #2
On 3/13/2026 10:54 AM, Jan Beulich wrote:
> For many of the cases there's no need to have separate relocs per arch;
> just like for other more or less generic ones a single one (per purpose;
> a 64-bit generic one is being introduced) will do. Arm64, C-Sky, and
> KVX - sadly - continue to be exceptions.

> --- a/gas/config/tc-m32r.c
> +++ b/gas/config/tc-m32r.c
> @@ -1967,11 +1967,11 @@ m32r_cgen_record_fixup_exp (fragS *frag,
>  
>      case BFD_RELOC_M32R_GOTOFF:
>        if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_HI16_SLO)
> -        r_type = BFD_RELOC_M32R_GOTOFF_HI_SLO;
> +        r_type = BFD_RELOC_HI16_S_GOTOFF;
>        else if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_HI16_ULO)
> -        r_type = BFD_RELOC_M32R_GOTOFF_HI_ULO;
> +        r_type = BFD_RELOC_HI16_GOTOFF;
>        else if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_LO16)
> -        r_type = BFD_RELOC_M32R_GOTOFF_LO;
> +        r_type = BFD_RELOC_LO16_GOTOFF;
>        break;
>  
>      case BFD_RELOC_M32R_26_PLTREL:

git am complained this patch would be adding 3 lines with whitespace
errors.  Looking at the source it seems you did the most logical thing
though.

Regards,
Jens
  
Hans-Peter Nilsson March 15, 2026, 1:27 a.m. UTC | #3
On Fri, 13 Mar 2026, Jens Remus wrote:

> On 3/13/2026 10:54 AM, Jan Beulich wrote:
> > For many of the cases there's no need to have separate relocs per arch;
> > just like for other more or less generic ones a single one (per purpose;
> > a 64-bit generic one is being introduced) will do. Arm64, C-Sky, and
> > KVX - sadly - continue to be exceptions.
> 
> Hello Jan, hopefully you don't mind my perhaps newbie question:
> 
> Isn't the removal of e.g. BFD_RELOC_390_GOTOFF64 breaking the existing
> external BFD API?  At least all of these relocations are documented in
> the BFD documentation:
> https://sourceware.org/binutils/docs/bfd.html#index-BFD_005fRELOC_005f390_005fGOTOFF64

Of course not; if it had been part of an important external ABI, 
there would have been coverage in the binutils testsuite and Jan 
would have noticed that way.

(Yes, that was tongue-in-cheek and all that, just hoping to make 
a certain point wrt. test-case importance, and FAOD not directed 
at neither you nor Jan.)

brgds, H-P
  
Michael Matz March 16, 2026, 3:22 p.m. UTC | #4
Hello,

On Sat, 14 Mar 2026, Hans-Peter Nilsson wrote:

> > On 3/13/2026 10:54 AM, Jan Beulich wrote:
> > > For many of the cases there's no need to have separate relocs per arch;
> > > just like for other more or less generic ones a single one (per purpose;
> > > a 64-bit generic one is being introduced) will do. Arm64, C-Sky, and
> > > KVX - sadly - continue to be exceptions.
> > 
> > Hello Jan, hopefully you don't mind my perhaps newbie question:
> > 
> > Isn't the removal of e.g. BFD_RELOC_390_GOTOFF64 breaking the existing
> > external BFD API?  At least all of these relocations are documented in
> > the BFD documentation:
> > https://sourceware.org/binutils/docs/bfd.html#index-BFD_005fRELOC_005f390_005fGOTOFF64
> 
> Of course not; if it had been part of an important external ABI, 
> there would have been coverage in the binutils testsuite and Jan 
> would have noticed that way.
> 
> (Yes, that was tongue-in-cheek and all that, just hoping to make 
> a certain point wrt. test-case importance, and FAOD not directed 
> at neither you nor Jan.)

There never was an "existing external BFD API".  All non-binutils users of 
libbfd are on their own.  If we ever wanted to change that we'd have to 
start with the function signatures and which of them are exported from the 
shared libbfd.  We never did that and would seem strange if we started 
with such effort with constants for relocations.


Ciao,
Michael.
  
Hans-Peter Nilsson March 16, 2026, 11:33 p.m. UTC | #5
On Mon, 16 Mar 2026, Michael Matz wrote:
> Hello,
> 
> On Sat, 14 Mar 2026, Hans-Peter Nilsson wrote:
> 
> > > On 3/13/2026 10:54 AM, Jan Beulich wrote:
> > > > For many of the cases there's no need to have separate relocs per arch;
> > > > just like for other more or less generic ones a single one (per purpose;
> > > > a 64-bit generic one is being introduced) will do. Arm64, C-Sky, and
> > > > KVX - sadly - continue to be exceptions.
> > > 
> > > Hello Jan, hopefully you don't mind my perhaps newbie question:
> > > 
> > > Isn't the removal of e.g. BFD_RELOC_390_GOTOFF64 breaking the existing
> > > external BFD API?  At least all of these relocations are documented in
> > > the BFD documentation:
> > > https://sourceware.org/binutils/docs/bfd.html#index-BFD_005fRELOC_005f390_005fGOTOFF64
> > 
> > Of course not; if it had been part of an important external ABI, 
> > there would have been coverage in the binutils testsuite and Jan 
> > would have noticed that way.
> > 
> > (Yes, that was tongue-in-cheek and all that, just hoping to make 
> > a certain point wrt. test-case importance, and FAOD not directed 
> > at neither you nor Jan.)
> 
> There never was an "existing external BFD API".
> [...]

My bad choice of words "external ABI"; I did not mean libbfd.
(Having said that, it happens to also be covered by that 
statement; it's not an "important external ABI".)

I meant existing binutils functionality as in e.g. input to gas 
and other input objects, implying certain object output.

For example, in a slightly worse world, this could have affected 
the gas .reloc pseudo, but AFAICT it doesn't.

brgds, H-P
  
Jan Beulich March 19, 2026, 7:30 a.m. UTC | #6
On 13.03.2026 17:10, Jens Remus wrote:
> On 3/13/2026 10:54 AM, Jan Beulich wrote:
>> For many of the cases there's no need to have separate relocs per arch;
>> just like for other more or less generic ones a single one (per purpose;
>> a 64-bit generic one is being introduced) will do. Arm64, C-Sky, and
>> KVX - sadly - continue to be exceptions.
> 
> Hello Jan, hopefully you don't mind my perhaps newbie question:
> 
> Isn't the removal of e.g. BFD_RELOC_390_GOTOFF64 breaking the existing
> external BFD API?  At least all of these relocations are documented in
> the BFD documentation:
> https://sourceware.org/binutils/docs/bfd.html#index-BFD_005fRELOC_005f390_005fGOTOFF64

I expect other replies have already clarified the situation? (Sorry, I had
taken a few days off.)

Jan
  
Jan Beulich March 19, 2026, 7:32 a.m. UTC | #7
On 13.03.2026 17:17, Jens Remus wrote:
> On 3/13/2026 10:54 AM, Jan Beulich wrote:
>> For many of the cases there's no need to have separate relocs per arch;
>> just like for other more or less generic ones a single one (per purpose;
>> a 64-bit generic one is being introduced) will do. Arm64, C-Sky, and
>> KVX - sadly - continue to be exceptions.
> 
>> --- a/gas/config/tc-m32r.c
>> +++ b/gas/config/tc-m32r.c
>> @@ -1967,11 +1967,11 @@ m32r_cgen_record_fixup_exp (fragS *frag,
>>  
>>      case BFD_RELOC_M32R_GOTOFF:
>>        if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_HI16_SLO)
>> -        r_type = BFD_RELOC_M32R_GOTOFF_HI_SLO;
>> +        r_type = BFD_RELOC_HI16_S_GOTOFF;
>>        else if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_HI16_ULO)
>> -        r_type = BFD_RELOC_M32R_GOTOFF_HI_ULO;
>> +        r_type = BFD_RELOC_HI16_GOTOFF;
>>        else if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_LO16)
>> -        r_type = BFD_RELOC_M32R_GOTOFF_LO;
>> +        r_type = BFD_RELOC_LO16_GOTOFF;
>>        break;
>>  
>>      case BFD_RELOC_M32R_26_PLTREL:
> 
> git am complained this patch would be adding 3 lines with whitespace
> errors.  Looking at the source it seems you did the most logical thing
> though.

Hmm, interesting. That must be the 8 blanks which should be a hard tab. I
can fix that as I'm touching the lines, sure.

Jan
  
Jens Remus March 19, 2026, 8:46 a.m. UTC | #8
On 3/19/2026 8:32 AM, Jan Beulich wrote:
> On 13.03.2026 17:17, Jens Remus wrote:
>> On 3/13/2026 10:54 AM, Jan Beulich wrote:
>>> For many of the cases there's no need to have separate relocs per arch;
>>> just like for other more or less generic ones a single one (per purpose;
>>> a 64-bit generic one is being introduced) will do. Arm64, C-Sky, and
>>> KVX - sadly - continue to be exceptions.
>>
>>> --- a/gas/config/tc-m32r.c
>>> +++ b/gas/config/tc-m32r.c
>>> @@ -1967,11 +1967,11 @@ m32r_cgen_record_fixup_exp (fragS *frag,
>>>  
>>>      case BFD_RELOC_M32R_GOTOFF:
>>>        if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_HI16_SLO)
>>> -        r_type = BFD_RELOC_M32R_GOTOFF_HI_SLO;
>>> +        r_type = BFD_RELOC_HI16_S_GOTOFF;
>>>        else if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_HI16_ULO)
>>> -        r_type = BFD_RELOC_M32R_GOTOFF_HI_ULO;
>>> +        r_type = BFD_RELOC_HI16_GOTOFF;
>>>        else if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_LO16)
>>> -        r_type = BFD_RELOC_M32R_GOTOFF_LO;
>>> +        r_type = BFD_RELOC_LO16_GOTOFF;
>>>        break;
>>>  
>>>      case BFD_RELOC_M32R_26_PLTREL:
>>
>> git am complained this patch would be adding 3 lines with whitespace
>> errors.  Looking at the source it seems you did the most logical thing
>> though.
> 
> Hmm, interesting. That must be the 8 blanks which should be a hard tab. I
> can fix that as I'm touching the lines, sure.

Looking at the indentation in the file the use of tabs is rather seldom,
so I think it is ok to use spaces, so that it stays consistent.

Regards,
Jens
  

Patch

--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -3306,6 +3306,7 @@  enum bfd_reloc_code_real
   BFD_RELOC_32_GOT_PCREL,
   BFD_RELOC_16_GOT_PCREL,
   BFD_RELOC_8_GOT_PCREL,
+  BFD_RELOC_64_GOTOFF,
   BFD_RELOC_32_GOTOFF,
   BFD_RELOC_16_GOTOFF,
   BFD_RELOC_LO16_GOTOFF,
@@ -3760,8 +3761,6 @@  enum bfd_reloc_code_real
   BFD_RELOC_FRV_FUNCDESC_GOTOFFHI,
   BFD_RELOC_FRV_FUNCDESC_GOTOFFLO,
   BFD_RELOC_FRV_GOTOFF12,
-  BFD_RELOC_FRV_GOTOFFHI,
-  BFD_RELOC_FRV_GOTOFFLO,
   BFD_RELOC_FRV_GETTLSOFF,
   BFD_RELOC_FRV_TLSDESC_VALUE,
   BFD_RELOC_FRV_GOTTLSDESC12,
@@ -3817,7 +3816,6 @@  enum bfd_reloc_code_real
   /* i386/elf relocations.  */
   BFD_RELOC_386_GOT32,
   BFD_RELOC_386_PLT32,
-  BFD_RELOC_386_GOTOFF,
   BFD_RELOC_386_GOTPC,
   BFD_RELOC_386_TLS_TPOFF,
   BFD_RELOC_386_TLS_IE,
@@ -3848,7 +3846,6 @@  enum bfd_reloc_code_real
   BFD_RELOC_X86_64_DTPOFF32,
   BFD_RELOC_X86_64_GOTTPOFF,
   BFD_RELOC_X86_64_TPOFF32,
-  BFD_RELOC_X86_64_GOTOFF64,
   BFD_RELOC_X86_64_GOTPC32,
   BFD_RELOC_X86_64_GOT64,
   BFD_RELOC_X86_64_GOTPCREL64,
@@ -4165,7 +4162,6 @@  enum bfd_reloc_code_real
 
   /* Relocations for setting up GOTs and PLTs for shared libraries.  */
   BFD_RELOC_ARM_GOT32,
-  BFD_RELOC_ARM_GOTOFF,
   BFD_RELOC_ARM_GOTPC,
   BFD_RELOC_ARM_GOT_PREL,
 
@@ -4352,7 +4348,6 @@  enum bfd_reloc_code_real
   BFD_RELOC_ARC_32_PCREL,
   BFD_RELOC_ARC_GOT32,
   BFD_RELOC_ARC_GOTPC32,
-  BFD_RELOC_ARC_GOTOFF,
   BFD_RELOC_ARC_GOTPC,
   BFD_RELOC_ARC_S21W_PCREL_PLT,
   BFD_RELOC_ARC_S25H_PCREL_PLT,
@@ -4417,8 +4412,6 @@  enum bfd_reloc_code_real
   BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI,
   BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO,
   BFD_RELOC_BFIN_GOTOFF17M4,
-  BFD_RELOC_BFIN_GOTOFFHI,
-  BFD_RELOC_BFIN_GOTOFFLO,
 
   /* ADI Blackfin GOT relocation.  */
   BFD_RELOC_BFIN_GOT,
@@ -4591,9 +4584,6 @@  enum bfd_reloc_code_real
   BFD_RELOC_M32R_GOT24,
   BFD_RELOC_M32R_26_PLTREL,
   BFD_RELOC_M32R_GOTOFF,
-  BFD_RELOC_M32R_GOTOFF_HI_ULO,
-  BFD_RELOC_M32R_GOTOFF_HI_SLO,
-  BFD_RELOC_M32R_GOTOFF_LO,
   BFD_RELOC_M32R_GOTPC24,
   BFD_RELOC_M32R_GOT16_HI_ULO,
   BFD_RELOC_M32R_GOT16_HI_SLO,
@@ -4919,8 +4909,6 @@  enum bfd_reloc_code_real
   BFD_RELOC_V850_32_GOT,
   BFD_RELOC_V850_22_PLT_PCREL,
   BFD_RELOC_V850_32_PLT_PCREL,
-  BFD_RELOC_V850_16_GOTOFF,
-  BFD_RELOC_V850_32_GOTOFF,
 
   /* Start code.  */
   BFD_RELOC_V850_CODE,
@@ -5054,8 +5042,6 @@  enum bfd_reloc_code_real
   BFD_RELOC_METAG_LOOG,
   BFD_RELOC_METAG_REL8,
   BFD_RELOC_METAG_REL16,
-  BFD_RELOC_METAG_HI16_GOTOFF,
-  BFD_RELOC_METAG_LO16_GOTOFF,
   BFD_RELOC_METAG_GETSET_GOTOFF,
   BFD_RELOC_METAG_GETSET_GOT,
   BFD_RELOC_METAG_HI16_GOTPC,
@@ -5063,7 +5049,6 @@  enum bfd_reloc_code_real
   BFD_RELOC_METAG_HI16_PLT,
   BFD_RELOC_METAG_LO16_PLT,
   BFD_RELOC_METAG_RELBRANCH_PLT,
-  BFD_RELOC_METAG_GOTOFF,
   BFD_RELOC_METAG_PLT,
   BFD_RELOC_METAG_TLS_GD,
   BFD_RELOC_METAG_TLS_LDM,
@@ -5427,9 +5412,6 @@  enum bfd_reloc_code_real
   /* 32 bit rel. offset to GOT entry.  */
   BFD_RELOC_390_GOTENT,
 
-  /* 64 bit offset to GOT.  */
-  BFD_RELOC_390_GOTOFF64,
-
   /* 12-bit offset to symbol-entry within GOT, with PLT handling.  */
   BFD_RELOC_390_GOTPLT12,
 
@@ -6152,8 +6134,6 @@  enum bfd_reloc_code_real
   BFD_RELOC_LM32_CALL,
   BFD_RELOC_LM32_BRANCH,
   BFD_RELOC_LM32_16_GOT,
-  BFD_RELOC_LM32_GOTOFF_HI16,
-  BFD_RELOC_LM32_GOTOFF_LO16,
 
   /* Difference between two section addreses.  Must be followed by a
      BFD_RELOC_MACH_O_PAIR.  */
--- a/bfd/elf32-arc.c
+++ b/bfd/elf32-arc.c
@@ -385,6 +385,7 @@  arc_elf_link_hash_table_create (bfd *abf
 #define BFD_RELOC_ARC_32	BFD_RELOC_32
 #define BFD_RELOC_ARC_PC32	BFD_RELOC_32_PCREL
 #define BFD_RELOC_ARC_PLT32	BFD_RELOC_32_PLT_PCREL
+#define BFD_RELOC_ARC_GOTOFF	BFD_RELOC_32_GOTOFF
 #define BFD_RELOC_ARC_COPY	BFD_RELOC_COPY
 #define BFD_RELOC_ARC_GLOB_DAT	BFD_RELOC_GLOB_DAT
 #define BFD_RELOC_ARC_JMP_SLOT	BFD_RELOC_JMP_SLOT
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -2019,7 +2019,7 @@  static const struct elf32_arm_reloc_map
     {BFD_RELOC_GLOB_DAT,	     R_ARM_GLOB_DAT},
     {BFD_RELOC_JMP_SLOT,	     R_ARM_JUMP_SLOT},
     {BFD_RELOC_RELATIVE,	     R_ARM_RELATIVE},
-    {BFD_RELOC_ARM_GOTOFF,	     R_ARM_GOTOFF32},
+    {BFD_RELOC_32_GOTOFF,	     R_ARM_GOTOFF32},
     {BFD_RELOC_ARM_GOTPC,	     R_ARM_GOTPC},
     {BFD_RELOC_ARM_GOT_PREL,	     R_ARM_GOT_PREL},
     {BFD_RELOC_ARM_GOT32,	     R_ARM_GOT32},
--- a/bfd/elf32-bfin.c
+++ b/bfd/elf32-bfin.c
@@ -1034,8 +1034,8 @@  static const struct bfin_reloc_map bfin_
   { BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI, R_BFIN_FUNCDESC_GOTOFFHI },
   { BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO, R_BFIN_FUNCDESC_GOTOFFLO },
   { BFD_RELOC_BFIN_GOTOFF17M4,   R_BFIN_GOTOFF17M4 },
-  { BFD_RELOC_BFIN_GOTOFFHI,   R_BFIN_GOTOFFHI },
-  { BFD_RELOC_BFIN_GOTOFFLO,   R_BFIN_GOTOFFLO },
+  { BFD_RELOC_HI16_GOTOFF,		R_BFIN_GOTOFFHI },
+  { BFD_RELOC_LO16_GOTOFF,		R_BFIN_GOTOFFLO },
 
   { BFD_RELOC_VTABLE_INHERIT,		R_BFIN_GNU_VTINHERIT },
   { BFD_RELOC_VTABLE_ENTRY,		R_BFIN_GNU_VTENTRY },
--- a/bfd/elf32-frv.c
+++ b/bfd/elf32-frv.c
@@ -2441,10 +2441,10 @@  frv_reloc_type_lookup (bfd *abfd ATTRIBU
     case BFD_RELOC_FRV_GOTOFF12:
       return &elf32_frv_howto_table[ (int) R_FRV_GOTOFF12];
 
-    case BFD_RELOC_FRV_GOTOFFHI:
+    case BFD_RELOC_HI16_GOTOFF:
       return &elf32_frv_howto_table[ (int) R_FRV_GOTOFFHI];
 
-    case BFD_RELOC_FRV_GOTOFFLO:
+    case BFD_RELOC_LO16_GOTOFF:
       return &elf32_frv_howto_table[ (int) R_FRV_GOTOFFLO];
 
     case BFD_RELOC_FRV_GETTLSOFF:
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -233,8 +233,8 @@  elf_i386_reloc_type_lookup (bfd *abfd,
       TRACE ("BFD_RELOC_RELATIVE");
       return &elf_howto_table[R_386_RELATIVE];
 
-    case BFD_RELOC_386_GOTOFF:
-      TRACE ("BFD_RELOC_386_GOTOFF");
+    case BFD_RELOC_32_GOTOFF:
+      TRACE ("BFD_RELOC_32_GOTOFF");
       return &elf_howto_table[R_386_GOTOFF];
 
     case BFD_RELOC_386_GOTPC:
--- a/bfd/elf32-lm32.c
+++ b/bfd/elf32-lm32.c
@@ -442,8 +442,8 @@  static const struct lm32_reloc_map lm32_
   { BFD_RELOC_VTABLE_INHERIT,	R_LM32_GNU_VTINHERIT },
   { BFD_RELOC_VTABLE_ENTRY,	R_LM32_GNU_VTENTRY },
   { BFD_RELOC_LM32_16_GOT,	R_LM32_16_GOT },
-  { BFD_RELOC_LM32_GOTOFF_HI16, R_LM32_GOTOFF_HI16 },
-  { BFD_RELOC_LM32_GOTOFF_LO16, R_LM32_GOTOFF_LO16 },
+  { BFD_RELOC_HI16_GOTOFF,	R_LM32_GOTOFF_HI16 },
+  { BFD_RELOC_LO16_GOTOFF,	R_LM32_GOTOFF_LO16 },
   { BFD_RELOC_COPY,		R_LM32_COPY },
   { BFD_RELOC_GLOB_DAT,		R_LM32_GLOB_DAT },
   { BFD_RELOC_JMP_SLOT,		R_LM32_JMP_SLOT },
--- a/bfd/elf32-m32r.c
+++ b/bfd/elf32-m32r.c
@@ -1223,9 +1223,9 @@  static const struct m32r_reloc_map m32r_
   { BFD_RELOC_M32R_GOTPC_HI_ULO, R_M32R_GOTPC_HI_ULO },
   { BFD_RELOC_M32R_GOTPC_HI_SLO, R_M32R_GOTPC_HI_SLO },
   { BFD_RELOC_M32R_GOTPC_LO, R_M32R_GOTPC_LO },
-  { BFD_RELOC_M32R_GOTOFF_HI_ULO, R_M32R_GOTOFF_HI_ULO },
-  { BFD_RELOC_M32R_GOTOFF_HI_SLO, R_M32R_GOTOFF_HI_SLO },
-  { BFD_RELOC_M32R_GOTOFF_LO, R_M32R_GOTOFF_LO },
+  { BFD_RELOC_HI16_GOTOFF, R_M32R_GOTOFF_HI_ULO },
+  { BFD_RELOC_HI16_S_GOTOFF, R_M32R_GOTOFF_HI_SLO },
+  { BFD_RELOC_LO16_GOTOFF, R_M32R_GOTOFF_LO },
 };
 #endif
 
--- a/bfd/elf32-metag.c
+++ b/bfd/elf32-metag.c
@@ -709,8 +709,8 @@  static const struct metag_reloc_map meta
     { BFD_RELOC_VTABLE_ENTRY,	     R_METAG_GNU_VTENTRY },
     { BFD_RELOC_METAG_REL8,	     R_METAG_REL8 },
     { BFD_RELOC_METAG_REL16,	     R_METAG_REL16 },
-    { BFD_RELOC_METAG_HI16_GOTOFF,   R_METAG_HI16_GOTOFF },
-    { BFD_RELOC_METAG_LO16_GOTOFF,   R_METAG_LO16_GOTOFF },
+    { BFD_RELOC_HI16_GOTOFF,	     R_METAG_HI16_GOTOFF },
+    { BFD_RELOC_LO16_GOTOFF,	     R_METAG_LO16_GOTOFF },
     { BFD_RELOC_METAG_GETSET_GOTOFF, R_METAG_GETSET_GOTOFF },
     { BFD_RELOC_METAG_GETSET_GOT,    R_METAG_GETSET_GOT },
     { BFD_RELOC_METAG_HI16_GOTPC,    R_METAG_HI16_GOTPC },
@@ -718,7 +718,7 @@  static const struct metag_reloc_map meta
     { BFD_RELOC_METAG_HI16_PLT,	     R_METAG_HI16_PLT },
     { BFD_RELOC_METAG_LO16_PLT,	     R_METAG_LO16_PLT },
     { BFD_RELOC_METAG_RELBRANCH_PLT, R_METAG_RELBRANCH_PLT },
-    { BFD_RELOC_METAG_GOTOFF,	     R_METAG_GOTOFF },
+    { BFD_RELOC_32_GOTOFF,	     R_METAG_GOTOFF },
     { BFD_RELOC_METAG_PLT,	     R_METAG_PLT },
     { BFD_RELOC_COPY,		     R_METAG_COPY },
     { BFD_RELOC_JMP_SLOT,	     R_METAG_JMP_SLOT },
--- a/bfd/elf32-v850.c
+++ b/bfd/elf32-v850.c
@@ -1740,8 +1740,8 @@  static const struct v850_elf_reloc_map v
   { BFD_RELOC_GLOB_DAT,			   R_V850_GLOB_DAT		 },
   { BFD_RELOC_JMP_SLOT,			   R_V850_JMP_SLOT		 },
   { BFD_RELOC_RELATIVE,			   R_V850_RELATIVE		 },
-  { BFD_RELOC_V850_16_GOTOFF,		   R_V850_16_GOTOFF		 },
-  { BFD_RELOC_V850_32_GOTOFF,		   R_V850_32_GOTOFF		 },
+  { BFD_RELOC_16_GOTOFF,		   R_V850_16_GOTOFF		 },
+  { BFD_RELOC_32_GOTOFF,		   R_V850_32_GOTOFF		 },
   { BFD_RELOC_V850_CODE,		   R_V850_CODE			 },
   { BFD_RELOC_V850_DATA,		   R_V850_DATA			 },
 };
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -263,7 +263,7 @@  elf_s390_reloc_type_lookup (bfd *abfd,
       return &elf_howto_table[(int) R_390_GOTENT];
     case BFD_RELOC_16_GOTOFF:
       return &elf_howto_table[(int) R_390_GOTOFF16];
-    case BFD_RELOC_390_GOTOFF64:
+    case BFD_RELOC_64_GOTOFF:
       return &elf_howto_table[(int) R_390_GOTOFF64];
     case BFD_RELOC_390_GOTPLT12:
       return &elf_howto_table[(int) R_390_GOTPLT12];
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -255,7 +255,7 @@  static const struct elf_reloc_map x86_64
   { BFD_RELOC_X86_64_GOTTPOFF,	R_X86_64_GOTTPOFF, },
   { BFD_RELOC_X86_64_TPOFF32,	R_X86_64_TPOFF32, },
   { BFD_RELOC_64_PCREL,		R_X86_64_PC64, },
-  { BFD_RELOC_X86_64_GOTOFF64,	R_X86_64_GOTOFF64, },
+  { BFD_RELOC_64_GOTOFF,	R_X86_64_GOTOFF64, },
   { BFD_RELOC_X86_64_GOTPC32,	R_X86_64_GOTPC32, },
   { BFD_RELOC_X86_64_GOT64,	R_X86_64_GOT64, },
   { BFD_RELOC_X86_64_GOTPCREL64,R_X86_64_GOTPCREL64, },
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -1081,6 +1081,7 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_32_GOT_PCREL",
   "BFD_RELOC_16_GOT_PCREL",
   "BFD_RELOC_8_GOT_PCREL",
+  "BFD_RELOC_64_GOTOFF",
   "BFD_RELOC_32_GOTOFF",
   "BFD_RELOC_16_GOTOFF",
   "BFD_RELOC_LO16_GOTOFF",
@@ -1373,8 +1374,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_FRV_FUNCDESC_GOTOFFHI",
   "BFD_RELOC_FRV_FUNCDESC_GOTOFFLO",
   "BFD_RELOC_FRV_GOTOFF12",
-  "BFD_RELOC_FRV_GOTOFFHI",
-  "BFD_RELOC_FRV_GOTOFFLO",
   "BFD_RELOC_FRV_GETTLSOFF",
   "BFD_RELOC_FRV_TLSDESC_VALUE",
   "BFD_RELOC_FRV_GOTTLSDESC12",
@@ -1408,7 +1407,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_MN10300_TLS_TPOFF",
   "BFD_RELOC_386_GOT32",
   "BFD_RELOC_386_PLT32",
-  "BFD_RELOC_386_GOTOFF",
   "BFD_RELOC_386_GOTPC",
   "BFD_RELOC_386_TLS_TPOFF",
   "BFD_RELOC_386_TLS_IE",
@@ -1437,7 +1435,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_X86_64_DTPOFF32",
   "BFD_RELOC_X86_64_GOTTPOFF",
   "BFD_RELOC_X86_64_TPOFF32",
-  "BFD_RELOC_X86_64_GOTOFF64",
   "BFD_RELOC_X86_64_GOTPC32",
   "BFD_RELOC_X86_64_GOT64",
   "BFD_RELOC_X86_64_GOTPCREL64",
@@ -1683,7 +1680,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_ARM_TLS_LDM32_FDPIC",
   "BFD_RELOC_ARM_TLS_IE32_FDPIC",
   "BFD_RELOC_ARM_GOT32",
-  "BFD_RELOC_ARM_GOTOFF",
   "BFD_RELOC_ARM_GOTPC",
   "BFD_RELOC_ARM_GOT_PREL",
   "BFD_RELOC_ARM_TLS_GD32",
@@ -1855,7 +1851,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_ARC_32_PCREL",
   "BFD_RELOC_ARC_GOT32",
   "BFD_RELOC_ARC_GOTPC32",
-  "BFD_RELOC_ARC_GOTOFF",
   "BFD_RELOC_ARC_GOTPC",
   "BFD_RELOC_ARC_S21W_PCREL_PLT",
   "BFD_RELOC_ARC_S25H_PCREL_PLT",
@@ -1896,8 +1891,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI",
   "BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO",
   "BFD_RELOC_BFIN_GOTOFF17M4",
-  "BFD_RELOC_BFIN_GOTOFFHI",
-  "BFD_RELOC_BFIN_GOTOFFLO",
   "BFD_RELOC_BFIN_GOT",
   "BFD_RELOC_BFIN_PLTPC",
   "BFD_ARELOC_BFIN_PUSH",
@@ -1953,9 +1946,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_M32R_GOT24",
   "BFD_RELOC_M32R_26_PLTREL",
   "BFD_RELOC_M32R_GOTOFF",
-  "BFD_RELOC_M32R_GOTOFF_HI_ULO",
-  "BFD_RELOC_M32R_GOTOFF_HI_SLO",
-  "BFD_RELOC_M32R_GOTOFF_LO",
   "BFD_RELOC_M32R_GOTPC24",
   "BFD_RELOC_M32R_GOT16_HI_ULO",
   "BFD_RELOC_M32R_GOT16_HI_SLO",
@@ -2124,8 +2114,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_V850_32_GOT",
   "BFD_RELOC_V850_22_PLT_PCREL",
   "BFD_RELOC_V850_32_PLT_PCREL",
-  "BFD_RELOC_V850_16_GOTOFF",
-  "BFD_RELOC_V850_32_GOTOFF",
   "BFD_RELOC_V850_CODE",
   "BFD_RELOC_V850_DATA",
   "BFD_RELOC_TIC30_LDP",
@@ -2202,8 +2190,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_METAG_LOOG",
   "BFD_RELOC_METAG_REL8",
   "BFD_RELOC_METAG_REL16",
-  "BFD_RELOC_METAG_HI16_GOTOFF",
-  "BFD_RELOC_METAG_LO16_GOTOFF",
   "BFD_RELOC_METAG_GETSET_GOTOFF",
   "BFD_RELOC_METAG_GETSET_GOT",
   "BFD_RELOC_METAG_HI16_GOTPC",
@@ -2211,7 +2197,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_METAG_HI16_PLT",
   "BFD_RELOC_METAG_LO16_PLT",
   "BFD_RELOC_METAG_RELBRANCH_PLT",
-  "BFD_RELOC_METAG_GOTOFF",
   "BFD_RELOC_METAG_PLT",
   "BFD_RELOC_METAG_TLS_GD",
   "BFD_RELOC_METAG_TLS_LDM",
@@ -2409,7 +2394,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_390_GOTPCDBL",
   "BFD_RELOC_390_GOT64",
   "BFD_RELOC_390_GOTENT",
-  "BFD_RELOC_390_GOTOFF64",
   "BFD_RELOC_390_GOTPLT12",
   "BFD_RELOC_390_GOTPLT16",
   "BFD_RELOC_390_GOTPLT32",
@@ -2814,8 +2798,6 @@  static const char *const bfd_reloc_code_
   "BFD_RELOC_LM32_CALL",
   "BFD_RELOC_LM32_BRANCH",
   "BFD_RELOC_LM32_16_GOT",
-  "BFD_RELOC_LM32_GOTOFF_HI16",
-  "BFD_RELOC_LM32_GOTOFF_LO16",
   "BFD_RELOC_MACH_O_SECTDIFF",
   "BFD_RELOC_MACH_O_LOCAL_SECTDIFF",
   "BFD_RELOC_MACH_O_PAIR",
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -1435,6 +1435,8 @@  ENUMX
 ENUMX
   BFD_RELOC_8_GOT_PCREL
 ENUMX
+  BFD_RELOC_64_GOTOFF
+ENUMX
   BFD_RELOC_32_GOTOFF
 ENUMX
   BFD_RELOC_16_GOTOFF
@@ -2228,10 +2230,6 @@  ENUMX
 ENUMX
   BFD_RELOC_FRV_GOTOFF12
 ENUMX
-  BFD_RELOC_FRV_GOTOFFHI
-ENUMX
-  BFD_RELOC_FRV_GOTOFFLO
-ENUMX
   BFD_RELOC_FRV_GETTLSOFF
 ENUMX
   BFD_RELOC_FRV_TLSDESC_VALUE
@@ -2322,8 +2320,6 @@  ENUM
 ENUMX
   BFD_RELOC_386_PLT32
 ENUMX
-  BFD_RELOC_386_GOTOFF
-ENUMX
   BFD_RELOC_386_GOTPC
 ENUMX
   BFD_RELOC_386_TLS_TPOFF
@@ -2383,8 +2379,6 @@  ENUMX
 ENUMX
   BFD_RELOC_X86_64_TPOFF32
 ENUMX
-  BFD_RELOC_X86_64_GOTOFF64
-ENUMX
   BFD_RELOC_X86_64_GOTPC32
 ENUMX
   BFD_RELOC_X86_64_GOT64
@@ -2965,8 +2959,6 @@  ENUMDOC
 ENUM
   BFD_RELOC_ARM_GOT32
 ENUMX
-  BFD_RELOC_ARM_GOTOFF
-ENUMX
   BFD_RELOC_ARM_GOTPC
 ENUMX
   BFD_RELOC_ARM_GOT_PREL
@@ -3331,8 +3323,6 @@  ENUMX
 ENUMX
   BFD_RELOC_ARC_GOTPC32
 ENUMX
-  BFD_RELOC_ARC_GOTOFF
-ENUMX
   BFD_RELOC_ARC_GOTPC
 ENUMX
   BFD_RELOC_ARC_S21W_PCREL_PLT
@@ -3437,10 +3427,6 @@  ENUMX
   BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO
 ENUMX
   BFD_RELOC_BFIN_GOTOFF17M4
-ENUMX
-  BFD_RELOC_BFIN_GOTOFFHI
-ENUMX
-  BFD_RELOC_BFIN_GOTOFFLO
 ENUMDOC
   ADI Blackfin FD-PIC relocations.
 ENUM
@@ -3674,12 +3660,6 @@  ENUMX
 ENUMX
   BFD_RELOC_M32R_GOTOFF
 ENUMX
-  BFD_RELOC_M32R_GOTOFF_HI_ULO
-ENUMX
-  BFD_RELOC_M32R_GOTOFF_HI_SLO
-ENUMX
-  BFD_RELOC_M32R_GOTOFF_LO
-ENUMX
   BFD_RELOC_M32R_GOTPC24
 ENUMX
   BFD_RELOC_M32R_GOT16_HI_ULO
@@ -4177,10 +4157,6 @@  ENUMX
   BFD_RELOC_V850_22_PLT_PCREL
 ENUMX
   BFD_RELOC_V850_32_PLT_PCREL
-ENUMX
-  BFD_RELOC_V850_16_GOTOFF
-ENUMX
-  BFD_RELOC_V850_32_GOTOFF
 ENUMDOC
   DSO relocations.
 ENUM
@@ -4402,10 +4378,6 @@  ENUMX
 ENUMX
   BFD_RELOC_METAG_REL16
 ENUMX
-  BFD_RELOC_METAG_HI16_GOTOFF
-ENUMX
-  BFD_RELOC_METAG_LO16_GOTOFF
-ENUMX
   BFD_RELOC_METAG_GETSET_GOTOFF
 ENUMX
   BFD_RELOC_METAG_GETSET_GOT
@@ -4420,8 +4392,6 @@  ENUMX
 ENUMX
   BFD_RELOC_METAG_RELBRANCH_PLT
 ENUMX
-  BFD_RELOC_METAG_GOTOFF
-ENUMX
   BFD_RELOC_METAG_PLT
 ENUMX
   BFD_RELOC_METAG_TLS_GD
@@ -4989,10 +4959,6 @@  ENUM
 ENUMDOC
   32 bit rel. offset to GOT entry.
 ENUM
-  BFD_RELOC_390_GOTOFF64
-ENUMDOC
-  64 bit offset to GOT.
-ENUM
   BFD_RELOC_390_GOTPLT12
 ENUMDOC
   12-bit offset to symbol-entry within GOT, with PLT handling.
@@ -6140,10 +6106,6 @@  ENUMX
   BFD_RELOC_LM32_BRANCH
 ENUMX
   BFD_RELOC_LM32_16_GOT
-ENUMX
-  BFD_RELOC_LM32_GOTOFF_HI16
-ENUMX
-  BFD_RELOC_LM32_GOTOFF_LO16
 ENUMDOC
   Lattice Mico32 relocations.
 
--- a/gas/config/tc-arc.c
+++ b/gas/config/tc-arc.c
@@ -542,7 +542,7 @@  static const struct arc_reloc_op_tag
 }
   arc_reloc_op[] =
 {
-  DEF (gotoff,  BFD_RELOC_ARC_GOTOFF,		1),
+  DEF (gotoff,  BFD_RELOC_32_GOTOFF,		1),
   DEF (gotpc,   BFD_RELOC_ARC_GOTPC32,		0),
   DEF (plt,	BFD_RELOC_32_PLT_PCREL,		0),
   DEF (sda,	DUMMY_RELOC_ARC_ENTRY,		1),
@@ -3099,7 +3099,7 @@  md_apply_fix (fixS *fixP,
       gas_assert (!fixP->fx_subsy);
       /* Fall through.  */
 
-    case BFD_RELOC_ARC_GOTOFF:
+    case BFD_RELOC_32_GOTOFF:
     case BFD_RELOC_ARC_32_ME:
     case BFD_RELOC_32_PCREL:
       md_number_to_chars_midend (fixpos, value, fixP->fx_size);
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -23894,7 +23894,7 @@  static const struct asm_shift_name shift
 static struct reloc_entry reloc_names[] =
 {
   { "got",     BFD_RELOC_ARM_GOT32   },	 { "GOT",     BFD_RELOC_ARM_GOT32   },
-  { "gotoff",  BFD_RELOC_ARM_GOTOFF  },	 { "GOTOFF",  BFD_RELOC_ARM_GOTOFF  },
+  { "gotoff",  BFD_RELOC_32_GOTOFF  },	 { "GOTOFF",  BFD_RELOC_32_GOTOFF  },
   { "plt",     BFD_RELOC_32_PLT_PCREL},	 { "PLT",     BFD_RELOC_32_PLT_PCREL},
   { "target1", BFD_RELOC_ARM_TARGET1 },	 { "TARGET1", BFD_RELOC_ARM_TARGET1 },
   { "target2", BFD_RELOC_ARM_TARGET2 },	 { "TARGET2", BFD_RELOC_ARM_TARGET2 },
@@ -28458,7 +28458,7 @@  md_apply_fix (fixS *	fixP,
       break;
 
     case BFD_RELOC_ARM_GOT32:
-    case BFD_RELOC_ARM_GOTOFF:
+    case BFD_RELOC_32_GOTOFF:
       break;
 
     case BFD_RELOC_ARM_GOT_PREL:
@@ -29413,7 +29413,7 @@  tc_gen_reloc (asection *section, fixS *f
     case BFD_RELOC_ARM_TLS_DESCSEQ:
     case BFD_RELOC_ARM_THM_TLS_DESCSEQ:
     case BFD_RELOC_ARM_GOT32:
-    case BFD_RELOC_ARM_GOTOFF:
+    case BFD_RELOC_32_GOTOFF:
     case BFD_RELOC_ARM_GOT_PREL:
     case BFD_RELOC_32_PLT_PCREL:
     case BFD_RELOC_ARM_TARGET1:
@@ -29746,7 +29746,7 @@  arm_fix_adjustable (fixS * fixP)
   /* Don't allow symbols to be discarded on GOT related relocs.	 */
   if (fixP->fx_r_type == BFD_RELOC_32_PLT_PCREL
       || fixP->fx_r_type == BFD_RELOC_ARM_GOT32
-      || fixP->fx_r_type == BFD_RELOC_ARM_GOTOFF
+      || fixP->fx_r_type == BFD_RELOC_32_GOTOFF
       || fixP->fx_r_type == BFD_RELOC_ARM_TLS_GD32
       || fixP->fx_r_type == BFD_RELOC_ARM_TLS_GD32_FDPIC
       || fixP->fx_r_type == BFD_RELOC_ARM_TLS_LE32
--- a/gas/config/tc-frv.c
+++ b/gas/config/tc-frv.c
@@ -1399,8 +1399,8 @@  frv_force_relocation (fixS *fix)
     case BFD_RELOC_FRV_FUNCDESC_GOTOFFHI:
     case BFD_RELOC_FRV_FUNCDESC_GOTOFFLO:
     case BFD_RELOC_FRV_GOTOFF12:
-    case BFD_RELOC_FRV_GOTOFFHI:
-    case BFD_RELOC_FRV_GOTOFFLO:
+    case BFD_RELOC_HI16_GOTOFF:
+    case BFD_RELOC_LO16_GOTOFF:
     case BFD_RELOC_FRV_GETTLSOFF:
     case BFD_RELOC_FRV_TLSDESC_VALUE:
     case BFD_RELOC_FRV_GOTTLSDESC12:
@@ -1455,8 +1455,8 @@  md_apply_fix (fixS *fixP, valueT *valP,
       case BFD_RELOC_FRV_FUNCDESC_GOTOFFHI:
       case BFD_RELOC_FRV_FUNCDESC_GOTOFFLO:
       case BFD_RELOC_FRV_GOTOFF12:
-      case BFD_RELOC_FRV_GOTOFFHI:
-      case BFD_RELOC_FRV_GOTOFFLO:
+      case BFD_RELOC_HI16_GOTOFF:
+      case BFD_RELOC_LO16_GOTOFF:
       case BFD_RELOC_FRV_GETTLSOFF:
       case BFD_RELOC_FRV_TLSDESC_VALUE:
       case BFD_RELOC_FRV_GOTTLSDESC12:
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1403,8 +1403,8 @@  gotrel[] =
     { STRING_COMMA_LEN ("GOTPLT"),   { _dummy_first_bfd_reloc_code_real,
 				       BFD_RELOC_X86_64_GOTPLT64 },
     OPERAND_TYPE_IMM64_DISP64, true },
-    { STRING_COMMA_LEN ("GOTOFF"),   { BFD_RELOC_386_GOTOFF,
-				       BFD_RELOC_X86_64_GOTOFF64 },
+    { STRING_COMMA_LEN ("GOTOFF"),   { BFD_RELOC_32_GOTOFF,
+				       BFD_RELOC_64_GOTOFF },
     OPERAND_TYPE_IMM64_DISP64, true },
     { STRING_COMMA_LEN ("GOTPCREL"), { _dummy_first_bfd_reloc_code_real,
 				       BFD_RELOC_X86_64_GOTPCREL },
@@ -4097,7 +4097,7 @@  tc_i386_fix_adjustable (fixS *fixP)
      for size relocations.  */
   if (fixP->fx_r_type == BFD_RELOC_SIZE32
       || fixP->fx_r_type == BFD_RELOC_SIZE64
-      || fixP->fx_r_type == BFD_RELOC_386_GOTOFF
+      || fixP->fx_r_type == BFD_RELOC_32_GOTOFF
       || fixP->fx_r_type == BFD_RELOC_386_GOT32
       || fixP->fx_r_type == BFD_RELOC_386_GOT32X
       || fixP->fx_r_type == BFD_RELOC_386_TLS_GD
@@ -4127,7 +4127,7 @@  tc_i386_fix_adjustable (fixS *fixP)
       || fixP->fx_r_type == BFD_RELOC_X86_64_CODE_6_GOTTPOFF
       || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF32
       || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF64
-      || fixP->fx_r_type == BFD_RELOC_X86_64_GOTOFF64
+      || fixP->fx_r_type == BFD_RELOC_64_GOTOFF
       || fixP->fx_r_type == BFD_RELOC_X86_64_GOT64
       || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPC32_TLSDESC
       || fixP->fx_r_type == BFD_RELOC_X86_64_CODE_4_GOTPC32_TLSDESC
@@ -15077,9 +15077,9 @@  i386_finalize_displacement (segT exp_seg
   /* We do this to make sure that the section symbol is in
      the symbol table.  We will ultimately change the relocation
      to be relative to the beginning of the section.  */
-  if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
+  if (i.reloc[this_operand] == BFD_RELOC_32_GOTOFF
       || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
-      || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
+      || i.reloc[this_operand] == BFD_RELOC_64_GOTOFF)
     {
       if (exp->X_op != O_symbol)
 	goto inv_disp;
@@ -15092,7 +15092,7 @@  i386_finalize_displacement (segT exp_seg
       exp->X_op_symbol = GOT_symbol;
       if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
 	i.reloc[this_operand] = BFD_RELOC_32_PCREL;
-      else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
+      else if (i.reloc[this_operand] == BFD_RELOC_64_GOTOFF)
 	i.reloc[this_operand] = BFD_RELOC_64;
       else
 	i.reloc[this_operand] = BFD_RELOC_32;
@@ -18418,9 +18418,9 @@  i386_validate_fix (fixS *fixp)
 	  else
 	    {
 	      if (!object_64bit)
-		fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
+		fixp->fx_r_type = BFD_RELOC_32_GOTOFF;
 	      else
-		fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
+		fixp->fx_r_type = BFD_RELOC_64_GOTOFF;
 	    }
 	  fixp->fx_subsy = 0;
 	}
@@ -18524,7 +18524,7 @@  tc_gen_reloc (asection *section ATTRIBUT
     case BFD_RELOC_386_PLT32:
     case BFD_RELOC_386_GOT32:
     case BFD_RELOC_386_GOT32X:
-    case BFD_RELOC_386_GOTOFF:
+    case BFD_RELOC_32_GOTOFF:
     case BFD_RELOC_386_GOTPC:
     case BFD_RELOC_386_TLS_GD:
     case BFD_RELOC_386_TLS_LDM:
@@ -18546,7 +18546,7 @@  tc_gen_reloc (asection *section ATTRIBUT
     case BFD_RELOC_X86_64_CODE_6_GOTTPOFF:
     case BFD_RELOC_X86_64_TPOFF32:
     case BFD_RELOC_X86_64_TPOFF64:
-    case BFD_RELOC_X86_64_GOTOFF64:
+    case BFD_RELOC_64_GOTOFF:
     case BFD_RELOC_X86_64_GOTPC32:
     case BFD_RELOC_X86_64_GOT64:
     case BFD_RELOC_X86_64_GOTPCREL64:
@@ -18661,7 +18661,7 @@  tc_gen_reloc (asection *section ATTRIBUT
 	  case BFD_RELOC_X86_64_DTPOFF64:
 	  case BFD_RELOC_X86_64_TPOFF64:
 	  case BFD_RELOC_64_PCREL:
-	  case BFD_RELOC_X86_64_GOTOFF64:
+	  case BFD_RELOC_64_GOTOFF:
 	  case BFD_RELOC_X86_64_GOT64:
 	  case BFD_RELOC_X86_64_GOTPCREL64:
 	  case BFD_RELOC_X86_64_GOTPC64:
--- a/gas/config/tc-lm32.c
+++ b/gas/config/tc-lm32.c
@@ -318,9 +318,9 @@  md_cgen_lookup_reloc (const CGEN_INSN *i
     case LM32_OPERAND_GOT16:
       return BFD_RELOC_LM32_16_GOT;
     case LM32_OPERAND_GOTOFFHI16:
-      return BFD_RELOC_LM32_GOTOFF_HI16;
+      return BFD_RELOC_HI16_GOTOFF;
     case LM32_OPERAND_GOTOFFLO16:
-      return BFD_RELOC_LM32_GOTOFF_LO16;
+      return BFD_RELOC_LO16_GOTOFF;
     case LM32_OPERAND_GP16:
       return BFD_RELOC_GPREL16;
     case LM32_OPERAND_LO16:
--- a/gas/config/tc-m32r.c
+++ b/gas/config/tc-m32r.c
@@ -1967,11 +1967,11 @@  m32r_cgen_record_fixup_exp (fragS *frag,
 
     case BFD_RELOC_M32R_GOTOFF:
       if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_HI16_SLO)
-        r_type = BFD_RELOC_M32R_GOTOFF_HI_SLO;
+        r_type = BFD_RELOC_HI16_S_GOTOFF;
       else if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_HI16_ULO)
-        r_type = BFD_RELOC_M32R_GOTOFF_HI_ULO;
+        r_type = BFD_RELOC_HI16_GOTOFF;
       else if (fixP->fx_cgen.opinfo == BFD_RELOC_M32R_LO16)
-        r_type = BFD_RELOC_M32R_GOTOFF_LO;
+        r_type = BFD_RELOC_LO16_GOTOFF;
       break;
 
     case BFD_RELOC_M32R_26_PLTREL:
--- a/gas/config/tc-metag.c
+++ b/gas/config/tc-metag.c
@@ -679,7 +679,7 @@  parse_imm_addr (const char *line, metag_
 	  addr->reloc_type = BFD_RELOC_METAG_TLS_IE;
 	}
       else if (exp->X_op == O_PIC_reloc &&
-	  exp->X_md == BFD_RELOC_METAG_GOTOFF)
+	  exp->X_md == BFD_RELOC_32_GOTOFF)
 	{
 	  exp->X_op = O_symbol;
 	  addr->reloc_type = BFD_RELOC_METAG_GETSET_GOTOFF;
@@ -1880,12 +1880,12 @@  parse_imm16 (const char *line, metag_ins
 	{
 	  exp->X_op = O_symbol;
 
-	  if (exp->X_md == BFD_RELOC_METAG_GOTOFF)
+	  if (exp->X_md == BFD_RELOC_32_GOTOFF)
 	    {
 	      if (is_hi)
-		insn->reloc_type = BFD_RELOC_METAG_HI16_GOTOFF;
+		insn->reloc_type = BFD_RELOC_HI16_GOTOFF;
 	      else if (is_lo)
-		insn->reloc_type = BFD_RELOC_METAG_LO16_GOTOFF;
+		insn->reloc_type = BFD_RELOC_LO16_GOTOFF;
 	      else
 		return NULL;
 	    }
@@ -6779,8 +6779,8 @@  metag_fix_adjustable (fixS * fixP)
   if (S_IS_WEAK (fixP->fx_addsy))
     return 0;
 
-  if (fixP->fx_r_type == BFD_RELOC_METAG_HI16_GOTOFF ||
-      fixP->fx_r_type == BFD_RELOC_METAG_LO16_GOTOFF ||
+  if (fixP->fx_r_type == BFD_RELOC_HI16_GOTOFF ||
+      fixP->fx_r_type == BFD_RELOC_LO16_GOTOFF ||
       fixP->fx_r_type == BFD_RELOC_METAG_GETSET_GOTOFF ||
       fixP->fx_r_type == BFD_RELOC_METAG_GETSET_GOT ||
       fixP->fx_r_type == BFD_RELOC_METAG_HI16_GOTPC ||
@@ -6922,7 +6922,7 @@  metag_parse_name (char const * name, exp
     goto no_suffix;
   else if ((next_end = metag_end_of_match (next + 1, "GOTOFF")))
     {
-      reloc_type = BFD_RELOC_METAG_GOTOFF;
+      reloc_type = BFD_RELOC_32_GOTOFF;
       op_type = O_PIC_reloc;
     }
   else if ((next_end = metag_end_of_match (next + 1, "GOT")))
--- a/gas/config/tc-s390.c
+++ b/gas/config/tc-s390.c
@@ -1294,7 +1294,7 @@  s390_elf_cons (int nbytes /* 1=.byte, 2=
 		  BFD_RELOC_390_GOT64,		/* ELF_SUFFIX_GOT  */
 		  BFD_RELOC_64_PLT_PCREL,	/* ELF_SUFFIX_PLT  */
 		  BFD_RELOC_UNUSED,		/* ELF_SUFFIX_GOTENT  */
-		  BFD_RELOC_390_GOTOFF64,	/* ELF_SUFFIX_GOTOFF  */
+		  BFD_RELOC_64_GOTOFF,		/* ELF_SUFFIX_GOTOFF  */
 		  BFD_RELOC_390_GOTPLT64,	/* ELF_SUFFIX_GOTPLT  */
 		  BFD_RELOC_390_PLTOFF64,	/* ELF_SUFFIX_PLTOFF  */
 		  BFD_RELOC_390_TLS_GD64,	/* ELF_SUFFIX_TLS_GD  */
@@ -2383,7 +2383,7 @@  tc_s390_fix_adjustable (fixS *fixP)
   /* adjust_reloc_syms doesn't know about the GOT.  */
   if (   fixP->fx_r_type == BFD_RELOC_16_GOTOFF
       || fixP->fx_r_type == BFD_RELOC_32_GOTOFF
-      || fixP->fx_r_type == BFD_RELOC_390_GOTOFF64
+      || fixP->fx_r_type == BFD_RELOC_64_GOTOFF
       || fixP->fx_r_type == BFD_RELOC_390_PLTOFF16
       || fixP->fx_r_type == BFD_RELOC_390_PLTOFF32
       || fixP->fx_r_type == BFD_RELOC_390_PLTOFF64
@@ -2445,7 +2445,7 @@  tc_s390_force_relocation (struct fix *fi
     case BFD_RELOC_390_GOT20:
     case BFD_RELOC_32_GOT_PCREL:
     case BFD_RELOC_32_GOTOFF:
-    case BFD_RELOC_390_GOTOFF64:
+    case BFD_RELOC_64_GOTOFF:
     case BFD_RELOC_390_PLTOFF16:
     case BFD_RELOC_390_PLTOFF32:
     case BFD_RELOC_390_PLTOFF64:
@@ -2750,7 +2750,7 @@  md_apply_fix (fixS *fixP, valueT *valP,
 	    md_number_to_chars (where, value, sizeof (int));
 	  break;
 
-	case BFD_RELOC_390_GOTOFF64:
+	case BFD_RELOC_64_GOTOFF:
 	  if (fixP->fx_done)
 	    md_number_to_chars (where, value, 8);
 	  break;
--- a/opcodes/frv-asm.c
+++ b/opcodes/frv-asm.c
@@ -256,7 +256,7 @@  parse_ulo16 (CGEN_CPU_DESC cd,
 	{
 	  *strp += 10;
 	  errmsg = parse_symbolic_address (cd, strp, opindex,
-					   BFD_RELOC_FRV_GOTOFFLO,
+					   BFD_RELOC_LO16_GOTOFF,
 					   & result_type, & value);
 	  if (**strp != ')')
 	    return "missing ')'";
@@ -382,7 +382,7 @@  parse_uslo16 (CGEN_CPU_DESC cd,
 	{
 	  *strp += 10;
 	  errmsg = parse_symbolic_address (cd, strp, opindex,
-					   BFD_RELOC_FRV_GOTOFFLO,
+					   BFD_RELOC_LO16_GOTOFF,
 					   & result_type, & value);
 	  if (**strp != ')')
 	    return "missing ')'";
@@ -515,7 +515,7 @@  parse_uhi16 (CGEN_CPU_DESC cd,
 	{
 	  *strp += 10;
 	  errmsg = parse_symbolic_address (cd, strp, opindex,
-					   BFD_RELOC_FRV_GOTOFFHI,
+					   BFD_RELOC_HI16_GOTOFF,
 					   & result_type, & value);
 	  if (**strp != ')')
 	    return "missing ')'";
--- a/opcodes/lm32-asm.c
+++ b/opcodes/lm32-asm.c
@@ -211,7 +211,7 @@  parse_gotoff_hi16 (CGEN_CPU_DESC cd,
       bfd_vma value;
 
       *strp += 11;
-      errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LM32_GOTOFF_HI16,
+      errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_HI16_GOTOFF,
                                    & result_type, & value);
       if (**strp != ')')
         return _("missing `)'");
@@ -241,7 +241,7 @@  parse_gotoff_lo16 (CGEN_CPU_DESC cd,
       bfd_vma value;
 
       *strp += 11;
-      errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LM32_GOTOFF_LO16,
+      errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LO16_GOTOFF,
                                    &result_type, &value);
       if (**strp != ')')
         return _("missing `)'");