* coff-rs6000.c (xcoff_howto_table): Fix src_mask entries. Make all
authorAlan Modra <amodra@gmail.com>
Tue, 6 Aug 2002 02:29:25 +0000 (02:29 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 6 Aug 2002 02:29:25 +0000 (02:29 +0000)
relocs with bitsize == 16 have size = 1.
(xcoff_reloc_type_ba): Correct src_mask and dst_mask adjustment.
(xcoff_reloc_type_br): Likewise.
(xcoff_reloc_type_crel): Likewise.
(xcoff_ppc_relocate_section): Set up src_mask and dst_mask correctly.
* coff64-rs6000.c (xcoff64_reloc_type_br): Correct src_mask and
dst_mask adjustment.
(xcoff64_ppc_relocate_section): Set up src_mask and dst_mask correctly.
(xcoff64_howto_table): Fix src_mask entries.  Make all relocs with
bitsize == 16 have size = 1.

bfd/ChangeLog
bfd/coff-rs6000.c
bfd/coff64-rs6000.c

index d175600879331e7b46a4fe9c22c6df44925ab67e..5624683d7eeb6f3ad3b9da942824f9831e76d774 100644 (file)
@@ -1,3 +1,17 @@
+2002-08-06  Alan Modra  <amodra@bigpond.net.au>
+
+       * coff-rs6000.c (xcoff_howto_table): Fix src_mask entries.  Make all
+       relocs with bitsize == 16 have size = 1.
+       (xcoff_reloc_type_ba): Correct src_mask and dst_mask adjustment.
+       (xcoff_reloc_type_br): Likewise.
+       (xcoff_reloc_type_crel): Likewise.
+       (xcoff_ppc_relocate_section): Set up src_mask and dst_mask correctly.
+       * coff64-rs6000.c (xcoff64_reloc_type_br): Correct src_mask and
+       dst_mask adjustment.
+       (xcoff64_ppc_relocate_section): Set up src_mask and dst_mask correctly.
+       (xcoff64_howto_table): Fix src_mask entries.  Make all relocs with
+       bitsize == 16 have size = 1.
+
 2002-08-01  Denis Chertykov  <denisc@overta.ru>
 
        * elf32-ip2k.c: Processor manufacturer changed to Ubicom.
index 347095350139e2aac2623367cdfc075f3db0fe76..3e773239b150a97636e61d34f3d7a67dd81b29eb 100644 (file)
@@ -588,7 +588,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_POS",               /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -603,7 +603,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_NEG",               /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -618,7 +618,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_REL",               /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -633,7 +633,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_TOC",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -648,14 +648,14 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RTB",               /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
   /* External TOC relative symbol.  */
   HOWTO (R_GL,                 /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -663,14 +663,14 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_GL",                /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Local TOC relative symbol.  */
   HOWTO (R_TCL,                        /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -678,7 +678,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_TCL",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -695,8 +695,8 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_BA_26",             /* name */
         true,                  /* partial_inplace */
-        0x3fffffc,             /* src_mask */
-        0x3fffffc,             /* dst_mask */
+        0xfc000003,            /* src_mask */
+        0x03fffffc,            /* dst_mask */
         false),                /* pcrel_offset */
 
   EMPTY_HOWTO (9),
@@ -712,8 +712,8 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_BR",                /* name */
         true,                  /* partial_inplace */
-        0x3fffffc,             /* src_mask */
-        0x3fffffc,             /* dst_mask */
+        0xfc000003,            /* src_mask */
+        0x03fffffc,            /* dst_mask */
         false),                /* pcrel_offset */
 
   EMPTY_HOWTO (0xb),
@@ -721,7 +721,7 @@ reloc_howto_type xcoff_howto_table[] =
   /* Indirect load.  */
   HOWTO (R_RL,                 /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -729,14 +729,14 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RL",                /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Load address.  */
   HOWTO (R_RLA,                        /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -744,7 +744,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RLA",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -757,7 +757,7 @@ reloc_howto_type xcoff_howto_table[] =
         32,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
-        complain_overflow_bitfield, /* complain_on_overflow */
+        complain_overflow_dont, /* complain_on_overflow */
         0,                     /* special_function */
         "R_REF",               /* name */
         false,                 /* partial_inplace */
@@ -771,7 +771,7 @@ reloc_howto_type xcoff_howto_table[] =
   /* TOC relative indirect load.  */
   HOWTO (R_TRL,                        /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -779,14 +779,14 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_TRL",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
   /* TOC relative load address.  */
   HOWTO (R_TRLA,                /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -794,7 +794,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_TRLA",              /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -809,7 +809,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RRTBI",             /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -824,14 +824,14 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RRTBA",             /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Modifiable call absolute indirect.  */
   HOWTO (R_CAI,                        /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -839,14 +839,14 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_CAI",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Modifiable call relative.  */
   HOWTO (R_CREL,                /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -854,7 +854,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_CREL",              /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -869,8 +869,8 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RBA",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
-        0xffff,                /* dst_mask */
+        0xfc000003,            /* src_mask */
+        0x03fffffc,            /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Modifiable branch absolute.  */
@@ -884,8 +884,8 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RBAC",              /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
-        0xffff,                /* dst_mask */
+        0,                     /* src_mask */
+        0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Modifiable branch relative.  */
@@ -899,14 +899,14 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RBR_26",            /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
-        0xffff,                /* dst_mask */
+        0xfc000003,            /* src_mask */
+        0x03fffffc,            /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Modifiable branch absolute.  */
   HOWTO (R_RBRC,                /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -914,7 +914,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RBRC",              /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -929,7 +929,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_BA_16",             /* name */
         true,                  /* partial_inplace */
-        0xfffc,                /* src_mask */
+        0x0003,                /* src_mask */
         0xfffc,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -944,7 +944,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RBR_16",            /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -959,7 +959,7 @@ reloc_howto_type xcoff_howto_table[] =
         0,                     /* special_function */
         "R_RBA_16",            /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -2885,8 +2885,8 @@ xcoff_reloc_type_ba (input_bfd, input_section, output_bfd, rel, sym, howto,
      bfd_vma *relocation;
      bfd_byte *contents ATTRIBUTE_UNUSED;
 {
-  howto->src_mask &= ~3;
-  howto->dst_mask = howto->src_mask;
+  howto->src_mask |= 3;
+  howto->dst_mask &= ~3;
 
   *relocation = val + addend;
 
@@ -2960,8 +2960,8 @@ xcoff_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto,
     }
   
   howto->pc_relative = true;
-  howto->src_mask &= ~3;
-  howto->dst_mask = howto->src_mask;
+  howto->src_mask |= 3;
+  howto->dst_mask &= ~3;
 
   /* A PC relative reloc includes the section address.  */
   addend += input_section->vma;
@@ -2987,8 +2987,8 @@ xcoff_reloc_type_crel (input_bfd, input_section, output_bfd, rel, sym, howto,
      bfd_byte *contents ATTRIBUTE_UNUSED;
 {
   howto->pc_relative = true;
-  howto->src_mask &= ~3;
-  howto->dst_mask = howto->src_mask;
+  howto->src_mask |= 3;
+  howto->dst_mask &= ~3;
 
   /* A PC relative reloc includes the section address.  */
   addend += input_section->vma;
@@ -3348,7 +3348,8 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd,
       howto.special_function = NULL;
       howto.name = "internal";
       howto.partial_inplace = true;
-      howto.src_mask = howto.dst_mask = N_ONES(howto.bitsize);
+      howto.dst_mask = N_ONES (howto.bitsize);
+      howto.src_mask = ~howto.dst_mask & N_ONES (8 << howto.size);
       howto.pcrel_offset = false;
 
       /* symbol */
index 15ef61b66d061418d4bc594b931fe273cc9f0e2e..6badb4d28a707f60e9add7dd7ce5330c88cf6516 100644 (file)
@@ -1132,8 +1132,8 @@ xcoff64_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto,
     }
   
   howto->pc_relative = true;
-  howto->src_mask &= ~3;
-  howto->dst_mask = howto->src_mask;
+  howto->src_mask |= 3;
+  howto->dst_mask &= ~3;
   
   /* A PC relative reloc includes the section address.  */
   addend += input_section->vma;
@@ -1196,7 +1196,8 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd,
       howto.special_function = NULL;
       howto.name = "internal";
       howto.partial_inplace = true;
-      howto.src_mask = howto.dst_mask = N_ONES(howto.bitsize);
+      howto.dst_mask = N_ONES (howto.bitsize);
+      howto.src_mask = ~howto.dst_mask & N_ONES (8 << howto.size);
       howto.pcrel_offset = false;
 
       /* symbol */
@@ -1357,7 +1358,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_POS_64",            /* name */
         true,                  /* partial_inplace */
-        MINUS_ONE,             /* src_mask */
+        0,                     /* src_mask */
         MINUS_ONE,             /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1372,7 +1373,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_NEG",               /* name */
         true,                  /* partial_inplace */
-        MINUS_ONE,             /* src_mask */
+        0,                     /* src_mask */
         MINUS_ONE,             /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1387,7 +1388,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_REL",               /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1402,7 +1403,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_TOC",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1417,14 +1418,14 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RTB",               /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
   /* External TOC relative symbol.  */
   HOWTO (R_GL,                 /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -1432,14 +1433,14 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_GL",                /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Local TOC relative symbol.         */
   HOWTO (R_TCL,                        /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -1447,7 +1448,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_TCL",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1464,8 +1465,8 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_BA_26",             /* name */
         true,                  /* partial_inplace */
-        0x3fffffc,             /* src_mask */
-        0x3fffffc,             /* dst_mask */
+        0xfc000003,            /* src_mask */
+        0x03fffffc,            /* dst_mask */
         false),                /* pcrel_offset */
 
   EMPTY_HOWTO (9),
@@ -1481,8 +1482,8 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_BR",                /* name */
         true,                  /* partial_inplace */
-        0x3fffffc,             /* src_mask */
-        0x3fffffc,             /* dst_mask */
+        0xfc000003,            /* src_mask */
+        0x03fffffc,            /* dst_mask */
         false),                /* pcrel_offset */
 
   EMPTY_HOWTO (0xb),
@@ -1490,7 +1491,7 @@ reloc_howto_type xcoff64_howto_table[] =
   /* Indirect load.  */
   HOWTO (R_RL,                 /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -1498,14 +1499,14 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RL",                /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Load address.  */
   HOWTO (R_RLA,                        /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -1513,7 +1514,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RLA",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1540,7 +1541,7 @@ reloc_howto_type xcoff64_howto_table[] =
   /* TOC relative indirect load.  */
   HOWTO (R_TRL,                        /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -1548,14 +1549,14 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_TRL",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
   /* TOC relative load address.         */
   HOWTO (R_TRLA,               /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -1563,7 +1564,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_TRLA",              /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1578,7 +1579,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RRTBI",             /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1593,14 +1594,14 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RRTBA",             /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Modifiable call absolute indirect.         */
   HOWTO (R_CAI,                        /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -1608,14 +1609,14 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_CAI",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Modifiable call relative.  */
   HOWTO (R_CREL,               /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -1623,7 +1624,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_CREL",              /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1638,8 +1639,8 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RBA",               /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
-        0xffff,                /* dst_mask */
+        0xfc000003,            /* src_mask */
+        0x03fffffc,            /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Modifiable branch absolute.  */
@@ -1653,8 +1654,8 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RBAC",              /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
-        0xffff,                /* dst_mask */
+        0,                     /* src_mask */
+        0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Modifiable branch relative.  */
@@ -1668,14 +1669,14 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RBR_26",            /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
-        0xffff,                /* dst_mask */
+        0xfc000003,            /* src_mask */
+        0x03fffffc,            /* dst_mask */
         false),                /* pcrel_offset */
 
   /* Modifiable branch absolute.  */
   HOWTO (R_RBRC,               /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
         false,                 /* pc_relative */
         0,                     /* bitpos */
@@ -1683,7 +1684,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RBRC",              /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1697,7 +1698,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_POS_32",            /* name */
         true,                  /* partial_inplace */
-        0xffffffff,            /* src_mask */
+        0,                     /* src_mask */
         0xffffffff,            /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1712,7 +1713,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_BA_16",             /* name */
         true,                  /* partial_inplace */
-        0xfffc,                /* src_mask */
+        0x0003,                /* src_mask */
         0xfffc,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1727,7 +1728,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RBR_16",            /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
@@ -1742,7 +1743,7 @@ reloc_howto_type xcoff64_howto_table[] =
         0,                     /* special_function */
         "R_RBA_16",            /* name */
         true,                  /* partial_inplace */
-        0xffff,                /* src_mask */
+        0,                     /* src_mask */
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */