| Index: bfd/elf32-mips.c
|
| diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
|
| index 61e8b454ff00aeebe06e8301a19533e17da79fe1..eec2ef7f053f731bad13ee802aa287a9fe3df989 100644
|
| --- a/bfd/elf32-mips.c
|
| +++ b/bfd/elf32-mips.c
|
| @@ -1515,7 +1515,7 @@ static reloc_howto_type elf_mips_copy_howto =
|
| FALSE, /* pc_relative */
|
| 0, /* bitpos */
|
| complain_overflow_bitfield, /* complain_on_overflow */
|
| - bfd_elf_generic_reloc, /* special_function */
|
| + _bfd_mips_elf_generic_reloc, /* special_function */
|
| "R_MIPS_COPY", /* name */
|
| FALSE, /* partial_inplace */
|
| 0x0, /* src_mask */
|
| @@ -1531,13 +1531,29 @@ static reloc_howto_type elf_mips_jump_slot_howto =
|
| FALSE, /* pc_relative */
|
| 0, /* bitpos */
|
| complain_overflow_bitfield, /* complain_on_overflow */
|
| - bfd_elf_generic_reloc, /* special_function */
|
| + _bfd_mips_elf_generic_reloc, /* special_function */
|
| "R_MIPS_JUMP_SLOT", /* name */
|
| FALSE, /* partial_inplace */
|
| 0x0, /* src_mask */
|
| 0x0, /* dst_mask */
|
| FALSE); /* pcrel_offset */
|
|
|
| +/* Used in EH tables. */
|
| +static reloc_howto_type elf_mips_eh_howto =
|
| + HOWTO (R_MIPS_EH, /* type */
|
| + 0, /* rightshift */
|
| + 2, /* size (0 = byte, 1 = short, 2 = long) */
|
| + 32, /* bitsize */
|
| + FALSE, /* pc_relative */
|
| + 0, /* bitpos */
|
| + complain_overflow_signed, /* complain_on_overflow */
|
| + _bfd_mips_elf_generic_reloc, /* special_function */
|
| + "R_MIPS_EH", /* name */
|
| + TRUE, /* partial_inplace */
|
| + 0xffffffff, /* src_mask */
|
| + 0xffffffff, /* dst_mask */
|
| + FALSE); /* pcrel_offset */
|
| +
|
| /* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a
|
| dangerous relocation. */
|
|
|
| @@ -2010,6 +2026,8 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
|
| return &elf_mips_copy_howto;
|
| case BFD_RELOC_MIPS_JUMP_SLOT:
|
| return &elf_mips_jump_slot_howto;
|
| + case BFD_RELOC_MIPS_EH:
|
| + return &elf_mips_eh_howto;
|
| }
|
| }
|
|
|
| @@ -2055,6 +2073,8 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
|
| return &elf_mips_copy_howto;
|
| if (strcasecmp (elf_mips_jump_slot_howto.name, r_name) == 0)
|
| return &elf_mips_jump_slot_howto;
|
| + if (strcasecmp (elf_mips_eh_howto.name, r_name) == 0)
|
| + return &elf_mips_eh_howto;
|
|
|
| return NULL;
|
| }
|
| @@ -2079,6 +2099,8 @@ mips_elf32_rtype_to_howto (unsigned int r_type,
|
| return &elf_mips_copy_howto;
|
| case R_MIPS_JUMP_SLOT:
|
| return &elf_mips_jump_slot_howto;
|
| + case R_MIPS_EH:
|
| + return &elf_mips_eh_howto;
|
| default:
|
| if (r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max)
|
| return &elf_micromips_howto_table_rel[r_type - R_MICROMIPS_min];
|
| @@ -2145,18 +2167,17 @@ mips_elf32_object_p (bfd *abfd)
|
| {
|
| unsigned long mach;
|
|
|
| + if (ABI_N32_P (abfd))
|
| + return FALSE;
|
| +
|
| /* Irix 5 and 6 are broken. Object file symbol tables are not always
|
| sorted correctly such that local symbols precede global symbols,
|
| and the sh_info field in the symbol table is not always right. */
|
| if (SGI_COMPAT (abfd))
|
| elf_bad_symtab (abfd) = TRUE;
|
|
|
| - if (ABI_N32_P (abfd))
|
| - return FALSE;
|
| -
|
| mach = _bfd_elf_mips_mach (elf_elfheader (abfd)->e_flags);
|
| bfd_default_set_arch_mach (abfd, bfd_arch_mips, mach);
|
| -
|
| return TRUE;
|
| }
|
|
|
| @@ -2187,10 +2208,10 @@ elf32_mips_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
|
|
|
| case 256: /* Linux/MIPS */
|
| /* pr_cursig */
|
| - elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
|
| + elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
|
|
|
| /* pr_pid */
|
| - elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24);
|
| + elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 24);
|
|
|
| /* pr_reg */
|
| offset = 72;
|
| @@ -2213,9 +2234,9 @@ elf32_mips_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
|
| return FALSE;
|
|
|
| case 128: /* Linux/MIPS elf_prpsinfo */
|
| - elf_tdata (abfd)->core_program
|
| + elf_tdata (abfd)->core->program
|
| = _bfd_elfcore_strndup (abfd, note->descdata + 32, 16);
|
| - elf_tdata (abfd)->core_command
|
| + elf_tdata (abfd)->core->command
|
| = _bfd_elfcore_strndup (abfd, note->descdata + 48, 80);
|
| }
|
|
|
| @@ -2224,7 +2245,7 @@ elf32_mips_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
|
| implementations, so strip it off if it exists. */
|
|
|
| {
|
| - char *command = elf_tdata (abfd)->core_command;
|
| + char *command = elf_tdata (abfd)->core->command;
|
| int n = strlen (command);
|
|
|
| if (0 < n && command[n - 1] == ' ')
|
| @@ -2345,7 +2366,6 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
|
| #define elf_backend_default_use_rela_p 0
|
| #define elf_backend_sign_extend_vma TRUE
|
| #define elf_backend_plt_readonly 1
|
| -#define elf_backend_plt_sym_val _bfd_mips_elf_plt_sym_val
|
|
|
| #define elf_backend_discard_info _bfd_mips_elf_discard_info
|
| #define elf_backend_ignore_discarded_relocs \
|
| @@ -2357,6 +2377,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
|
| mips_elf_is_local_label_name
|
| #define bfd_elf32_bfd_is_target_special_symbol \
|
| _bfd_mips_elf_is_target_special_symbol
|
| +#define bfd_elf32_get_synthetic_symtab _bfd_mips_elf_get_synthetic_symtab
|
| #define bfd_elf32_find_nearest_line _bfd_mips_elf_find_nearest_line
|
| #define bfd_elf32_find_inliner_info _bfd_mips_elf_find_inliner_info
|
| #define bfd_elf32_new_section_hook _bfd_mips_elf_new_section_hook
|
| @@ -2372,6 +2393,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
|
| #define bfd_elf32_bfd_print_private_bfd_data \
|
| _bfd_mips_elf_print_private_bfd_data
|
| #define bfd_elf32_bfd_relax_section _bfd_mips_elf_relax_section
|
| +#define bfd_elf32_mkobject _bfd_mips_elf_mkobject
|
|
|
| /* Support for SGI-ish mips targets. */
|
| #define TARGET_LITTLE_SYM bfd_elf32_littlemips_vec
|
| @@ -2464,6 +2486,7 @@ mips_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker)
|
| #define TARGET_LITTLE_NAME "elf32-littlemips-vxworks"
|
| #define TARGET_BIG_SYM bfd_elf32_bigmips_vxworks_vec
|
| #define TARGET_BIG_NAME "elf32-bigmips-vxworks"
|
| +#undef ELF_OSABI
|
|
|
| #undef elf32_bed
|
| #define elf32_bed elf32_mips_vxworks_bed
|
| @@ -2483,7 +2506,6 @@ mips_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker)
|
| #define elf_backend_default_use_rela_p 1
|
| #undef elf_backend_got_header_size
|
| #define elf_backend_got_header_size (4 * 3)
|
| -#undef elf_backend_plt_sym_val
|
|
|
| #undef elf_backend_finish_dynamic_symbol
|
| #define elf_backend_finish_dynamic_symbol \
|
| @@ -2509,4 +2531,6 @@ mips_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker)
|
| #undef elf_backend_symbol_processing
|
| /* NOTE: elf_backend_rela_normal is not defined for MIPS. */
|
|
|
| +#undef bfd_elf32_get_synthetic_symtab
|
| +
|
| #include "elf32-target.h"
|
|
|