diff options
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/coff-rs6000.c | 17 | ||||
-rw-r--r-- | bfd/coff64-rs6000.c | 18 |
3 files changed, 40 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 9cc7518..e207399 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2002-05-30 Tom Rix <trix@redhat.com> + + * coff-rs6000.c (xcoff_rtype2howto): Handle 16 bit R_RBA. + * coff64-rs6000.c (xcoff64_rtype2howto): Same. + 2002-05-30 Richard Henderson <rth@redhat.com> * elf64-alpha.c (ALPHA_ELF_LINK_HASH_LU_TLSGD, diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index f560c7f..6d55978 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -948,6 +948,21 @@ reloc_howto_type xcoff_howto_table[] = 0xffff, /* dst_mask */ false), /* pcrel_offset */ + /* Modifiable branch relative. */ + HOWTO (R_RBA, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + 0, /* special_function */ + "R_RBA_16", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ + }; void @@ -968,6 +983,8 @@ xcoff_rtype2howto (relent, internal) relent->howto = &xcoff_howto_table[0x1c]; else if (R_RBR == internal->r_type) relent->howto = &xcoff_howto_table[0x1d]; + else if (R_RBA == internal->r_type) + relent->howto = &xcoff_howto_table[0x1e]; } /* The r_size field of an XCOFF reloc encodes the bitsize of the diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index d13fa0f..068b2c2 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -1730,6 +1730,22 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ + + /* Modifiable branch absolute. */ + HOWTO (R_RBA, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + 0, /* special_function */ + "R_RBA_16", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ + }; void @@ -1750,6 +1766,8 @@ xcoff64_rtype2howto (relent, internal) relent->howto = &xcoff64_howto_table[0x1d]; else if (R_RBR == internal->r_type) relent->howto = &xcoff64_howto_table[0x1e]; + else if (R_RBA == internal->r_type) + relent->howto = &xcoff64_howto_table[0x1f]; } /* Special case 32 bit */ else if (31 == (internal->r_size & 0x3f)) |