+2020-04-29  Gunther Nikl  <gnikl@justmail.de>
+
+       * aoutx.h (swap_std_reloc_out): Special case 64 bit relocations.
+       (aout_link_reloc_link_order): Likewise. Make r_length an unsigned.
+
 2020-04-28  Alan Modra  <amodra@gmail.com>
 
        * vms-alpha.c (_bfd_vms_slurp_etir): Correct divide by zero check.
 
   PUT_WORD (abfd, g->address, natptr->r_address);
 
   BFD_ASSERT (g->howto != NULL);
-  r_length = g->howto->size ;  /* Size as a power of two.  */
+
+  if (bfd_get_reloc_size (g->howto) != 8)
+    r_length = g->howto->size; /* Size as a power of two.  */
+  else
+    r_length = 3;
+
   r_pcrel  = (int) g->howto->pc_relative; /* Relative to PC?  */
   /* XXX This relies on relocs coming from a.out files.  */
   r_baserel = (g->howto->type & 8) != 0;
        int r_baserel;
        int r_jmptable;
        int r_relative;
-       int r_length;
+       unsigned int r_length;
 
        r_pcrel = (int) howto->pc_relative;
        r_baserel = (howto->type & 8) != 0;
        r_jmptable = (howto->type & 16) != 0;
        r_relative = (howto->type & 32) != 0;
-       r_length = howto->size;
+       if (bfd_get_reloc_size (howto) != 8)
+         r_length = howto->size;       /* Size as a power of two.  */
+       else
+         r_length = 3;
 
        PUT_WORD (flaginfo->output_bfd, p->offset, srel.r_address);
        if (bfd_header_big_endian (flaginfo->output_bfd))