---- a/bfd/elf32-avr32.c
-+++ b/bfd/elf32-avr32.c
-@@ -352,7 +352,8 @@ struct elf_avr32_link_hash_table
- unsigned int relax_pass;
- };
- #define avr32_elf_hash_table(p) \
-- ((struct elf_avr32_link_hash_table *)((p)->hash))
-+ (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-+ == AVR32_ELF_DATA ? ((struct elf_avr32_link_hash_table *) ((p)->hash)) : NULL)
-
- static struct bfd_hash_entry *
- avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry,
-@@ -414,7 +415,8 @@ avr32_elf_link_hash_table_create(bfd *ab
-
- if (! _bfd_elf_link_hash_table_init(&ret->root, abfd,
- avr32_elf_link_hash_newfunc,
-- sizeof (struct elf_avr32_link_hash_entry)))
-+ sizeof (struct elf_avr32_link_hash_entry),
-+ AVR32_ELF_DATA))
- {
- free(ret);
- return NULL;
-@@ -497,6 +499,9 @@ avr32_elf_create_got_section (bfd *dynob
- htab = avr32_elf_hash_table(info);
- flags = bed->dynamic_sec_flags;
-
-+ if (htab == NULL)
-+ return FALSE;
-+
- if (htab->sgot)
- return TRUE;
-
-@@ -534,6 +539,9 @@ avr32_elf_create_dynamic_sections (bfd *
- htab = avr32_elf_hash_table(info);
- flags = bed->dynamic_sec_flags;
-
-+ if (htab == NULL)
-+ return FALSE;
-+
- if (!avr32_elf_create_got_section (dynobj, info))
- return FALSE;
-
-@@ -574,6 +582,9 @@ avr32_check_relocs (bfd *abfd, struct bf
- symtab_hdr = &elf_tdata(abfd)->symtab_hdr;
- sym_hashes = elf_sym_hashes(abfd);
- htab = avr32_elf_hash_table(info);
-+ if (htab == NULL)
-+ return FALSE;
-+
- local_got_ents = elf_local_got_ents(abfd);
- sgot = htab->sgot;
-
-@@ -756,6 +767,9 @@ avr32_elf_adjust_dynamic_symbol(struct b
- havr = (struct elf_avr32_link_hash_entry *)h;
- dynobj = elf_hash_table(info)->dynobj;
-
-+ if (htab == NULL)
-+ return FALSE;
-+
- /* Make sure we know what is going on here. */
- BFD_ASSERT (dynobj != NULL
- && (h->u.weakdef != NULL
-@@ -1066,6 +1080,9 @@ allocate_dynrelocs(struct elf_link_hash_
- htab = avr32_elf_hash_table(info);
- havr = (struct elf_avr32_link_hash_entry *)h;
-
-+ if (htab == NULL)
-+ return FALSE;
-+
- got = h->got.glist;
-
- /* If got is NULL, the symbol is never referenced through the GOT */
-@@ -1117,6 +1134,9 @@ avr32_elf_size_dynamic_sections (bfd *ou
- pr_debug("(4) size dynamic sections\n");
-
- htab = avr32_elf_hash_table(info);
-+ if (htab == NULL)
-+ return FALSE;
-+
- dynobj = htab->root.dynobj;
- BFD_ASSERT(dynobj != NULL);
-
-@@ -3260,6 +3280,9 @@ avr32_elf_relocate_section(bfd *output_b
- return TRUE;
-
- htab = avr32_elf_hash_table(info);
-+ if (htab == NULL)
-+ return FALSE;
-+
- symtab_hdr = &elf_tdata(input_bfd)->symtab_hdr;
- sym_hashes = elf_sym_hashes(input_bfd);
- local_got_ents = elf_local_got_ents(input_bfd);
-@@ -3582,6 +3605,9 @@ avr32_elf_finish_dynamic_symbol(bfd *out
- pr_debug("(7) finish dynamic symbol: %s\n", h->root.root.string);
-
- htab = avr32_elf_hash_table(info);
-+ if (htab == NULL)
-+ return FALSE;
-+
- got = h->got.glist;
-
- if (got && got->refcount > 0)
-@@ -3648,6 +3674,9 @@ avr32_elf_finish_dynamic_sections(bfd *o
- pr_debug("(8) finish dynamic sections\n");
-
- htab = avr32_elf_hash_table(info);
-+ if (htab == NULL)
-+ return FALSE;
-+
- sgot = htab->sgot;
- sdyn = bfd_get_section_by_name(htab->root.dynobj, ".dynamic");
-