X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Felf64-mips.c;h=ad00a3db19b4a36e646080904fc3365f03b8a4e7;hb=e9e0a58e87c33963dda1800900c0e43b7c0213c0;hp=f79d889bb3ff5661c036c3891803d5f4f905d43f;hpb=33bb52fb4e77c96f77dee32dea89fa32869ce015;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c index f79d889bb3..ad00a3db19 100644 --- a/bfd/elf64-mips.c +++ b/bfd/elf64-mips.c @@ -1724,6 +1724,38 @@ static reloc_howto_type elf_mips_gnu_rela16_s2 = 0x0000ffff, /* dst_mask */ TRUE); /* pcrel_offset */ +/* Originally a VxWorks extension, but now used for other systems too. */ +static reloc_howto_type elf_mips_copy_howto = + HOWTO (R_MIPS_COPY, /* type */ + 0, /* rightshift */ + 0, /* this one is variable size */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_MIPS_COPY", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0x0, /* dst_mask */ + FALSE); /* pcrel_offset */ + +/* Originally a VxWorks extension, but now used for other systems too. */ +static reloc_howto_type elf_mips_jump_slot_howto = + HOWTO (R_MIPS_JUMP_SLOT, /* type */ + 0, /* rightshift */ + 4, /* size (0 = byte, 1 = short, 2 = long) */ + 64, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_MIPS_JUMP_SLOT", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0x0, /* dst_mask */ + FALSE); /* pcrel_offset */ + /* Swap in a MIPS 64-bit Rel reloc. */ static void @@ -2283,6 +2315,10 @@ bfd_elf64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, return &elf_mips_gnu_vtinherit_howto; case BFD_RELOC_VTABLE_ENTRY: return &elf_mips_gnu_vtentry_howto; + case BFD_RELOC_MIPS_COPY: + return &elf_mips_copy_howto; + case BFD_RELOC_MIPS_JUMP_SLOT: + return &elf_mips_jump_slot_howto; default: bfd_set_error (bfd_error_bad_value); return NULL; @@ -2318,6 +2354,10 @@ bfd_elf64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, return &elf_mips_gnu_rel16_s2; if (strcasecmp (elf_mips_gnu_rela16_s2.name, r_name) == 0) return &elf_mips_gnu_rela16_s2; + if (strcasecmp (elf_mips_copy_howto.name, r_name) == 0) + return &elf_mips_copy_howto; + if (strcasecmp (elf_mips_jump_slot_howto.name, r_name) == 0) + return &elf_mips_jump_slot_howto; return NULL; } @@ -2338,6 +2378,10 @@ mips_elf64_rtype_to_howto (unsigned int r_type, bfd_boolean rela_p) return &elf_mips_gnu_rela16_s2; else return &elf_mips_gnu_rel16_s2; + case R_MIPS_COPY: + return &elf_mips_copy_howto; + case R_MIPS_JUMP_SLOT: + return &elf_mips_jump_slot_howto; default: if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max) { @@ -3196,6 +3240,9 @@ const struct elf_size_info mips_elf64_size_info = #define elf_backend_may_use_rel_p 1 #define elf_backend_may_use_rela_p 1 #define elf_backend_default_use_rela_p 1 +#define elf_backend_rela_plts_and_copies_p 0 +#define elf_backend_plt_readonly 1 +#define elf_backend_plt_sym_val _bfd_mips_elf_plt_sym_val #define elf_backend_sign_extend_vma TRUE @@ -3210,6 +3257,7 @@ const struct elf_size_info mips_elf64_size_info = #define bfd_elf64_set_section_contents _bfd_mips_elf_set_section_contents #define bfd_elf64_bfd_get_relocated_section_contents \ _bfd_elf_mips_get_relocated_section_contents +#define bfd_elf64_mkobject _bfd_mips_elf_mkobject #define bfd_elf64_bfd_link_hash_table_create \ _bfd_mips_elf_link_hash_table_create #define bfd_elf64_bfd_final_link _bfd_mips_elf_final_link