diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/config/tc-arc.c | 21 | ||||
-rw-r--r-- | gas/config/tc-arc.h | 3 |
2 files changed, 23 insertions, 1 deletions
diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c index 6c5b1d6..fd648b7 100644 --- a/gas/config/tc-arc.c +++ b/gas/config/tc-arc.c @@ -774,6 +774,15 @@ arc_insert_opcode (const struct arc_opcode *opcode) entry->count++; } +static void +arc_opcode_free (void *elt) +{ + string_tuple_t *tuple = (string_tuple_t *) elt; + struct arc_opcode_hash_entry *entry = (void *) tuple->value; + free (entry->opcode); + free (entry); + free (tuple); +} /* Like md_number_to_chars but for middle-endian values. The 4-byte limm value, is encoded as 'middle-endian' for a little-endian target. This @@ -2605,7 +2614,8 @@ md_begin (void) bfd_set_private_flags (stdoutput, selected_cpu.eflags); /* Set up a hash table for the instructions. */ - arc_opcode_hash = str_htab_create (); + arc_opcode_hash = htab_create_alloc (16, hash_string_tuple, eq_string_tuple, + arc_opcode_free, xcalloc, free); /* Initialize the hash table with the insns. */ do @@ -2710,6 +2720,15 @@ md_begin (void) declare_addrtype ("cxd", ARC_NPS400_ADDRTYPE_CXD); } +void +arc_md_end (void) +{ + htab_delete (arc_opcode_hash); + htab_delete (arc_reg_hash); + htab_delete (arc_aux_hash); + htab_delete (arc_addrtype_hash); +} + /* Write a value out to the object file, using the appropriate endianness. */ diff --git a/gas/config/tc-arc.h b/gas/config/tc-arc.h index 29b4582..d7b989e 100644 --- a/gas/config/tc-arc.h +++ b/gas/config/tc-arc.h @@ -268,4 +268,7 @@ struct arc_relax_type int nflg; }; +extern void arc_md_end (void); +#define md_end arc_md_end + #endif |