diff options
author | Maciej W. Rozycki <macro@linux-mips.org> | 2013-02-18 23:20:43 +0000 |
---|---|---|
committer | Maciej W. Rozycki <macro@linux-mips.org> | 2013-02-18 23:20:43 +0000 |
commit | a0ce48d620584a1ed7073a2c40595b0a2440362d (patch) | |
tree | 0d90e931bce32217bb8b4fc020700200d8872e78 /bfd/elfn32-mips.c | |
parent | 04c16009a1be185dc1d991492fe8d74989669d82 (diff) | |
download | binutils-redhat-a0ce48d620584a1ed7073a2c40595b0a2440362d.tar.gz |
* elf64-mips.c (micromips_elf64_howto_table_rel): Add
R_MICROMIPS_SCN_DISP and R_MICROMIPS_JALR.
(micromips_elf64_howto_table_rela): Likewise.
(micromips_reloc_map): Add BFD_RELOC_MICROMIPS_JALR.
* elfn32-mips.c (elf_micromips_howto_table_rel): Add
R_MICROMIPS_SCN_DISP and R_MICROMIPS_JALR.
(elf_micromips_howto_table_rela): Likewise.
(micromips_reloc_map): Add BFD_RELOC_MICROMIPS_JALR.
Diffstat (limited to 'bfd/elfn32-mips.c')
-rw-r--r-- | bfd/elfn32-mips.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c index 08c8e5faec..88049000f6 100644 --- a/bfd/elfn32-mips.c +++ b/bfd/elfn32-mips.c @@ -2149,6 +2149,37 @@ static reloc_howto_type elf_micromips_howto_table_rel[] = 0x0000ffff, /* src_mask */ 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ + + /* Section displacement. */ + HOWTO (R_MICROMIPS_SCN_DISP, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + _bfd_mips_elf_generic_reloc, /* special_function */ + "R_MICROMIPS_SCN_DISP", /* name */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* Protected jump conversion. This is an optimization hint. No + relocation is required for correctness. */ + HOWTO (R_MICROMIPS_JALR, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + _bfd_mips_elf_generic_reloc, /* special_function */ + "R_MICROMIPS_JALR", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x00000000, /* dst_mask */ + FALSE), /* pcrel_offset */ }; static reloc_howto_type elf_micromips_howto_table_rela[] = @@ -2460,6 +2491,37 @@ static reloc_howto_type elf_micromips_howto_table_rela[] = 0, /* src_mask */ 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ + + /* Section displacement. */ + HOWTO (R_MICROMIPS_SCN_DISP, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + _bfd_mips_elf_generic_reloc, /* special_function */ + "R_MICROMIPS_SCN_DISP", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* Protected jump conversion. This is an optimization hint. No + relocation is required for correctness. */ + HOWTO (R_MICROMIPS_JALR, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + _bfd_mips_elf_generic_reloc, /* special_function */ + "R_MICROMIPS_JALR", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x00000000, /* dst_mask */ + FALSE), /* pcrel_offset */ }; /* GNU extension to record C++ vtable hierarchy */ @@ -2967,6 +3029,8 @@ static const struct elf_reloc_map micromips_reloc_map[] = { BFD_RELOC_MICROMIPS_HIGHEST, R_MICROMIPS_HIGHEST - R_MICROMIPS_min }, { BFD_RELOC_MICROMIPS_CALL_HI16, R_MICROMIPS_CALL_HI16 - R_MICROMIPS_min }, { BFD_RELOC_MICROMIPS_CALL_LO16, R_MICROMIPS_CALL_LO16 - R_MICROMIPS_min }, + { BFD_RELOC_MICROMIPS_SCN_DISP, R_MICROMIPS_SCN_DISP - R_MICROMIPS_min }, + { BFD_RELOC_MICROMIPS_JALR, R_MICROMIPS_JALR - R_MICROMIPS_min }, }; /* Given a BFD reloc type, return a howto structure. */ |