Index: bfd/elf32-xgate.c |
diff --git a/bfd/elf32-xgate.c b/bfd/elf32-xgate.c |
index bd62438eff46649ce52f31559ad5353888b9beab..b822260277ca30a290679d7d7649995d11b8f79b 100644 |
--- a/bfd/elf32-xgate.c |
+++ b/bfd/elf32-xgate.c |
@@ -106,8 +106,8 @@ static reloc_howto_type elf_xgate_howto_table[] = |
bfd_elf_generic_reloc, /* special_function */ |
"R_XGATE_16", /* name */ |
FALSE, /* partial_inplace */ |
- 0x00ff, /* src_mask */ |
- 0x00ff, /* dst_mask */ |
+ 0xffff, /* src_mask */ |
+ 0xffff, /* dst_mask */ |
FALSE), /* pcrel_offset */ |
/* A 32 bit absolute relocation. This one is never used for the |
@@ -437,7 +437,7 @@ xgate_elf_bfd_link_hash_table_free (struct bfd_link_hash_table *hash) |
bfd_hash_table_free (ret->stub_hash_table); |
free (ret->stub_hash_table); |
- _bfd_generic_link_hash_table_free (hash); |
+ _bfd_elf_link_hash_table_free (hash); |
} |
/* Create a XGATE ELF linker hash table. */ |
@@ -448,11 +448,10 @@ xgate_elf_bfd_link_hash_table_create (bfd *abfd) |
struct xgate_elf_link_hash_table *ret; |
bfd_size_type amt = sizeof(struct xgate_elf_link_hash_table); |
- ret = (struct xgate_elf_link_hash_table *) bfd_malloc (amt); |
+ ret = (struct xgate_elf_link_hash_table *) bfd_zmalloc (amt); |
if (ret == (struct xgate_elf_link_hash_table *) NULL) |
return NULL; |
- memset (ret, 0, amt); |
if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, |
_bfd_elf_link_hash_newfunc, sizeof(struct elf_link_hash_entry), |
XGATE_ELF_DATA)) |
@@ -463,7 +462,7 @@ xgate_elf_bfd_link_hash_table_create (bfd *abfd) |
/* Init the stub hash table too. */ |
amt = sizeof(struct bfd_hash_table); |
- ret->stub_hash_table = (struct bfd_hash_table*) bfd_malloc (amt); |
+ ret->stub_hash_table = (struct bfd_hash_table*) bfd_zmalloc (amt); |
if (ret->stub_hash_table == NULL) |
{ |
free (ret); |
@@ -472,12 +471,11 @@ xgate_elf_bfd_link_hash_table_create (bfd *abfd) |
if (!bfd_hash_table_init (ret->stub_hash_table, stub_hash_newfunc, |
sizeof(struct elf32_xgate_stub_hash_entry))) |
- return NULL; |
- |
- ret->stub_bfd = NULL; |
- ret->stub_section = 0; |
- ret->add_stub_section = NULL; |
- ret->sym_cache.abfd = NULL; |
+ { |
+ free (ret->stub_hash_table); |
+ free (ret); |
+ return NULL; |
+ } |
return &ret->root.root; |
} |