| Index: bfd/elf32-m68k.c
|
| diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c
|
| index 6946841e4458934fa8f032b60017717ade9b796d..d8e3be1c35e66d91bab762b610e76ddafa98397e 100644
|
| --- a/bfd/elf32-m68k.c
|
| +++ b/bfd/elf32-m68k.c
|
| @@ -1,6 +1,6 @@
|
| /* Motorola 68k series support for 32-bit ELF
|
| Copyright 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
|
| - 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
| + 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
| Free Software Foundation, Inc.
|
|
|
| This file is part of BFD, the Binary File Descriptor library.
|
| @@ -950,7 +950,7 @@ elf_m68k_link_hash_table_create (bfd *abfd)
|
| struct elf_m68k_link_hash_table *ret;
|
| bfd_size_type amt = sizeof (struct elf_m68k_link_hash_table);
|
|
|
| - ret = (struct elf_m68k_link_hash_table *) bfd_malloc (amt);
|
| + ret = (struct elf_m68k_link_hash_table *) bfd_zmalloc (amt);
|
| if (ret == (struct elf_m68k_link_hash_table *) NULL)
|
| return NULL;
|
|
|
| @@ -963,12 +963,6 @@ elf_m68k_link_hash_table_create (bfd *abfd)
|
| return NULL;
|
| }
|
|
|
| - ret->sym_cache.abfd = NULL;
|
| - ret->plt_info = NULL;
|
| - ret->local_gp_p = FALSE;
|
| - ret->use_neg_got_offsets_p = FALSE;
|
| - ret->allow_multigot_p = FALSE;
|
| - ret->multi_got_.bfd2got = NULL;
|
| ret->multi_got_.global_symndx = 1;
|
|
|
| return &ret->root.root;
|
| @@ -988,6 +982,7 @@ elf_m68k_link_hash_table_free (struct bfd_link_hash_table *_htab)
|
| htab_delete (htab->multi_got_.bfd2got);
|
| htab->multi_got_.bfd2got = NULL;
|
| }
|
| + _bfd_elf_link_hash_table_free (_htab);
|
| }
|
|
|
| /* Set the right machine number. */
|
| @@ -2589,6 +2584,10 @@ elf_m68k_check_relocs (bfd *abfd,
|
| while (h->root.type == bfd_link_hash_indirect
|
| || h->root.type == bfd_link_hash_warning)
|
| h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
| +
|
| + /* PR15323, ref flags aren't set for references in the same
|
| + object. */
|
| + h->root.non_ir_ref = 1;
|
| }
|
|
|
| switch (ELF32_R_TYPE (rel->r_info))
|
| @@ -3368,7 +3367,7 @@ elf_m68k_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
| #define add_dynamic_entry(TAG, VAL) \
|
| _bfd_elf_add_dynamic_entry (info, TAG, VAL)
|
|
|
| - if (!info->shared)
|
| + if (info->executable)
|
| {
|
| if (!add_dynamic_entry (DT_DEBUG, 0))
|
| return FALSE;
|
| @@ -3670,12 +3669,12 @@ elf_m68k_relocate_section (bfd *output_bfd,
|
| }
|
| else
|
| {
|
| - bfd_boolean warned;
|
| + bfd_boolean warned, ignored;
|
|
|
| RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
|
| r_symndx, symtab_hdr, sym_hashes,
|
| h, sec, relocation,
|
| - unresolved_reloc, warned);
|
| + unresolved_reloc, warned, ignored);
|
| }
|
|
|
| if (sec != NULL && discarded_section (sec))
|
| @@ -4742,7 +4741,9 @@ bfd_elf_m68k_set_target_options (struct bfd_link_info *info, int got_handling)
|
| }
|
|
|
| static enum elf_reloc_type_class
|
| -elf32_m68k_reloc_type_class (const Elf_Internal_Rela *rela)
|
| +elf32_m68k_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
|
| + const asection *rel_sec ATTRIBUTE_UNUSED,
|
| + const Elf_Internal_Rela *rela)
|
| {
|
| switch ((int) ELF32_R_TYPE (rela->r_info))
|
| {
|
| @@ -4782,10 +4783,10 @@ elf_m68k_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
|
|
|
| case 154: /* Linux/m68k */
|
| /* 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 + 22);
|
| + elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 22);
|
|
|
| /* pr_reg */
|
| offset = 70;
|
| @@ -4808,11 +4809,11 @@ elf_m68k_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
|
| return FALSE;
|
|
|
| case 124: /* Linux/m68k elf_prpsinfo. */
|
| - elf_tdata (abfd)->core_pid
|
| + elf_tdata (abfd)->core->pid
|
| = bfd_get_32 (abfd, note->descdata + 12);
|
| - elf_tdata (abfd)->core_program
|
| + elf_tdata (abfd)->core->program
|
| = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
|
| - elf_tdata (abfd)->core_command
|
| + elf_tdata (abfd)->core->command
|
| = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
|
| }
|
|
|
| @@ -4820,7 +4821,7 @@ elf_m68k_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
|
| onto the end of the args in some (at least one anyway)
|
| 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 (n > 0 && command[n - 1] == ' ')
|
|
|