diff options
author | Martin Liska <mliska@suse.cz> | 2020-08-18 10:57:21 +0200 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-08-20 10:56:07 +0930 |
commit | 629310abec8811510177101f3c7992dfd4be24dd (patch) | |
tree | d8de5773b66f877c3f8a7ddb9a4bd27d1a4705fa /gas/config/tc-arm.c | |
parent | 494b2fc8078502f84a2ff2a3402a5989b221526d (diff) | |
download | gdb-629310abec8811510177101f3c7992dfd4be24dd.zip gdb-629310abec8811510177101f3c7992dfd4be24dd.tar.gz gdb-629310abec8811510177101f3c7992dfd4be24dd.tar.bz2 |
Port gas/config/* to str_htab.
* config/obj-coff-seh.c (seh_hash_insert): Port to use new
str_htab type.
(seh_hash_find): Likewise.
(seh_hash_find_or_make): Likewise.
* config/obj-coff.c (tag_init): Likewise.
(tag_insert): Likewise.
(tag_find): Likewise.
* config/obj-elf.c (struct group_list): Likewise.
(build_additional_section_info): Likewise.
(free_section_idx): Likewise.
(elf_adjust_symtab): Likewise.
(elf_frob_file_after_relocs): Likewise.
* config/tc-aarch64.c (INSN_SIZE): Likewise.
(parse_reg): Likewise.
(insert_reg_alias): Likewise.
(create_register_alias): Likewise.
(s_unreq): Likewise.
(parse_shift): Likewise.
(parse_pldop): Likewise.
(parse_barrier): Likewise.
(parse_barrier_psb): Likewise.
(parse_bti_operand): Likewise.
(parse_sys_reg): Likewise.
(parse_sys_ins_reg): Likewise.
(lookup_mnemonic): Likewise.
(opcode_lookup): Likewise.
(parse_operands): Likewise.
(checked_hash_insert): Likewise.
(sysreg_hash_insert): Likewise.
(fill_instruction_hash_table): Likewise.
(md_begin): Likewise.
* config/tc-alpha.c (struct alpha_reloc_tag): Likewise.
(get_alpha_reloc_tag): Likewise.
(assemble_tokens_to_insn): Likewise.
(assemble_tokens): Likewise.
(md_begin): Likewise.
* config/tc-arc.c (arc_find_opcode): Likewise.
(arc_insert_opcode): Likewise.
(find_opcode_match): Likewise.
(declare_register): Likewise.
(declare_addrtype): Likewise.
(md_begin): Likewise.
(arc_parse_name): Likewise.
(tc_arc_regname_to_dw2regnum): Likewise.
(arc_extcorereg): Likewise.
* config/tc-arm.c (MVE_BAD_QREG): Likewise.
(arm_reg_parse_multi): Likewise.
(parse_reloc): Likewise.
(insert_reg_alias): Likewise.
(create_register_alias): Likewise.
(s_unreq): Likewise.
(parse_shift): Likewise.
(parse_psr): Likewise.
(parse_cond): Likewise.
(parse_barrier): Likewise.
(do_vfp_nsyn_opcode): Likewise.
(opcode_lookup): Likewise.
(arm_tc_equal_in_insn): Likewise.
(md_begin): Likewise.
* config/tc-avr.c (md_begin): Likewise.
(avr_ldi_expression): Likewise.
(md_assemble): Likewise.
(avr_update_gccisr): Likewise.
(avr_emit_insn): Likewise.
* config/tc-cr16.c (get_register): Likewise.
(get_register_pair): Likewise.
(get_index_register): Likewise.
(get_index_register_pair): Likewise.
(get_pregister): Likewise.
(get_pregisterp): Likewise.
(initialise_reg_hash_table): Likewise.
(md_begin): Likewise.
(cr16_assemble): Likewise.
(md_assemble): Likewise.
* config/tc-cris.c (cris_insn_first_word_frag): Likewise.
(md_begin): Likewise.
(cris_process_instruction): Likewise.
* config/tc-crx.c (get_register): Likewise.
(get_copregister): Likewise.
(md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-csky.c (md_begin): Likewise.
(parse_opcode): Likewise.
(get_operand_value): Likewise.
(v1_work_jbsr): Likewise.
(v2_work_rotlc): Likewise.
(v2_work_bgeni): Likewise.
(v2_work_not): Likewise.
* config/tc-d10v.c (sizeof): Likewise.
(md_begin): Likewise.
(do_assemble): Likewise.
(md_apply_fix): Likewise.
* config/tc-d30v.c (sizeof): Likewise.
(md_begin): Likewise.
(do_assemble): Likewise.
* config/tc-dlx.c (RELOC_DLX_VTENTRY): Likewise.
(md_begin): Likewise.
(machine_ip): Likewise.
* config/tc-ft32.c (md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-h8300.c (md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-hppa.c (pa_ip): Likewise.
(md_begin): Likewise.
* config/tc-i386.c (md_begin): Likewise.
(i386_print_statistics): Likewise.
(parse_insn): Likewise.
(process_operands): Likewise.
(i386_index_check): Likewise.
(parse_real_register): Likewise.
* config/tc-ia64.c (dot_rot): Likewise.
(dot_entry): Likewise.
(declare_register): Likewise.
(md_begin): Likewise.
(ia64_parse_name): Likewise.
(md_assemble): Likewise.
(dot_alias): Likewise.
(do_alias): Likewise.
(ia64_adjust_symtab): Likewise.
(do_secalias): Likewise.
(ia64_frob_file): Likewise.
* config/tc-m68hc11.c (m68hc11_print_statistics): Likewise.
(md_begin): Likewise.
(print_insn_format): Likewise.
(md_assemble): Likewise.
* config/tc-m68k.c (tc_gen_reloc): Likewise.
(m68k_ip): Likewise.
(md_begin): Likewise.
* config/tc-mcore.c (md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-microblaze.c (md_begin): Likewise.
(md_assemble): Likewise.
(md_apply_fix): Likewise.
* config/tc-mips.c (nopic_need_relax): Likewise.
(md_begin): Likewise.
(macro_build): Likewise.
(mips16_macro_build): Likewise.
(mips_lookup_insn): Likewise.
(mips_ip): Likewise.
(mips16_ip): Likewise.
* config/tc-mmix.c (sizeof): Likewise.
(mmix_md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-mn10200.c (md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-mn10300.c (HAVE_AM30): Likewise.
(md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-moxie.c (md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-msp430.c (md_begin): Likewise.
(msp430_operands): Likewise.
(md_assemble): Likewise.
* config/tc-nds32.c (PV_DONT_CARE): Likewise.
(builtin_isreg): Likewise.
(builtin_regnum): Likewise.
(nds32_init_nds32_pseudo_opcodes): Likewise.
(nds32_lookup_pseudo_opcode): Likewise.
(nds32_relax_hint): Likewise.
(md_begin): Likewise.
(nds32_find_reloc_table): Likewise.
(nds32_elf_append_relax_relocs_traverse): Likewise.
(nds32_relax_branch_instructions): Likewise.
(md_convert_frag): Likewise.
(nds32_elf_analysis_relax_hint): Likewise.
(tc_nds32_regname_to_dw2regnum): Likewise.
* config/tc-nios2.c (nios2_opcode_lookup): Likewise.
(nios2_reg_lookup): Likewise.
(nios2_ps_lookup): Likewise.
(md_begin): Likewise.
* config/tc-ns32k.c (struct hash_control): Likewise.
(parse): Likewise.
(md_begin): Likewise.
* config/tc-pdp11.c (md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-pj.c (fake_opcode): Likewise.
(alias): Likewise.
(md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-ppc.c (ppc_setup_opcodes): Likewise.
(md_assemble): Likewise.
* config/tc-pru.c (pru_opcode_lookup): Likewise.
(pru_reg_lookup): Likewise.
(md_begin): Likewise.
(md_end): Likewise.
* config/tc-riscv.c (init_ext_version_hash): Likewise.
(riscv_get_default_ext_version): Likewise.
(riscv_set_arch): Likewise.
(init_opcode_names_hash): Likewise.
(opcode_name_lookup): Likewise.
(enum reg_class): Likewise.
(hash_reg_name): Likewise.
(riscv_init_csr_hash): Likewise.
(reg_csr_lookup_internal): Likewise.
(reg_lookup_internal): Likewise.
(init_opcode_hash): Likewise.
(md_begin): Likewise.
(DECLARE_CSR): Likewise.
(macro_build): Likewise.
(riscv_ip): Likewise.
* config/tc-s390.c (register_name): Likewise.
(s390_setup_opcodes): Likewise.
(md_begin): Likewise.
(md_assemble): Likewise.
(s390_insn): Likewise.
* config/tc-score.c (struct s3_reg_map): Likewise.
(s3_score_reg_parse): Likewise.
(s3_dependency_type_from_insn): Likewise.
(s3_parse_16_32_inst): Likewise.
(s3_parse_48_inst): Likewise.
(s3_insert_reg): Likewise.
(s3_build_reg_hsh): Likewise.
(s3_build_score_ops_hsh): Likewise.
(s3_build_dependency_insn_hsh): Likewise.
(s3_begin): Likewise.
* config/tc-score7.c (struct s7_reg_map): Likewise.
(s7_score_reg_parse): Likewise.
(s7_dependency_type_from_insn): Likewise.
(s7_parse_16_32_inst): Likewise.
(s7_build_score_ops_hsh): Likewise.
(s7_build_dependency_insn_hsh): Likewise.
(s7_insert_reg): Likewise.
(s7_build_reg_hsh): Likewise.
(s7_begin): Likewise.
* config/tc-sh.c (EMPTY): Likewise.
(md_begin): Likewise.
(find_cooked_opcode): Likewise.
* config/tc-sparc.c (md_begin): Likewise.
(sparc_ip): Likewise.
* config/tc-spu.c (md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-tic30.c (md_begin): Likewise.
(tic30_operand): Likewise.
(tic30_parallel_insn): Likewise.
(md_assemble): Likewise.
* config/tc-tic4x.c (TIC4X_ALT_SYNTAX): Likewise.
(tic4x_asg): Likewise.
(tic4x_inst_insert): Likewise.
(tic4x_inst_add): Likewise.
(md_begin): Likewise.
(tic4x_operand_parse): Likewise.
(md_assemble): Likewise.
* config/tc-tic54x.c (MAX_SUBSYM_HASH): Likewise.
(stag_add_field_symbols): Likewise.
(tic54x_endstruct): Likewise.
(tic54x_tag): Likewise.
(tic54x_remove_local_label): Likewise.
(tic54x_clear_local_labels): Likewise.
(tic54x_var): Likewise.
(tic54x_macro_start): Likewise.
(tic54x_macro_info): Likewise.
(tic54x_macro_end): Likewise.
(subsym_isreg): Likewise.
(subsym_structsz): Likewise.
(md_begin): Likewise.
(is_mmreg): Likewise.
(is_type): Likewise.
(encode_condition): Likewise.
(encode_cc3): Likewise.
(encode_cc2): Likewise.
(encode_operand): Likewise.
(tic54x_parse_insn): Likewise.
(tic54x_parse_parallel_insn_firstline): Likewise.
(subsym_create_or_replace): Likewise.
(subsym_lookup): Likewise.
(subsym_substitute): Likewise.
(tic54x_undefined_symbol): Likewise.
* config/tc-tic6x.c (md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-tilegx.c (O_hw2_last_plt): Likewise.
(INSERT_SPECIAL_OP): Likewise.
(md_begin): Likewise.
(tilegx_parse_name): Likewise.
(parse_reg_expression): Likewise.
(md_assemble): Likewise.
* config/tc-tilepro.c (O_tls_ie_load): Likewise.
(INSERT_SPECIAL_OP): Likewise.
(tilepro_parse_name): Likewise.
(parse_reg_expression): Likewise.
(md_assemble): Likewise.
* config/tc-v850.c (md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-vax.c (md_ri_to_chars): Likewise.
(vip_begin): Likewise.
(vip): Likewise.
(main): Likewise.
(md_begin): Likewise.
* config/tc-wasm32.c (md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-xgate.c (xgate_parse_operand): Likewise.
(md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-z8k.c (md_begin): Likewise.
(md_assemble): Likewise.
Diffstat (limited to 'gas/config/tc-arm.c')
-rw-r--r-- | gas/config/tc-arm.c | 121 |
1 files changed, 62 insertions, 59 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 2555921..3b17e20 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -945,15 +945,15 @@ struct asm_opcode #define BAD_EL_TYPE _("bad element type for instruction") #define MVE_BAD_QREG _("MVE vector register Q[0..7] expected") -static struct hash_control * arm_ops_hsh; -static struct hash_control * arm_cond_hsh; -static struct hash_control * arm_vcond_hsh; -static struct hash_control * arm_shift_hsh; -static struct hash_control * arm_psr_hsh; -static struct hash_control * arm_v7m_psr_hsh; -static struct hash_control * arm_reg_hsh; -static struct hash_control * arm_reloc_hsh; -static struct hash_control * arm_barrier_opt_hsh; +static htab_t arm_ops_hsh; +static htab_t arm_cond_hsh; +static htab_t arm_vcond_hsh; +static htab_t arm_shift_hsh; +static htab_t arm_psr_hsh; +static htab_t arm_v7m_psr_hsh; +static htab_t arm_reg_hsh; +static htab_t arm_reloc_hsh; +static htab_t arm_barrier_opt_hsh; /* Stuff needed to resolve the label ambiguity As: @@ -1427,7 +1427,7 @@ arm_reg_parse_multi (char **ccp) p++; while (ISALPHA (*p) || ISDIGIT (*p) || *p == '_'); - reg = (struct reg_entry *) hash_find_n (arm_reg_hsh, start, p - start); + reg = (struct reg_entry *) str_hash_find_n (arm_reg_hsh, start, p - start); if (!reg) return NULL; @@ -2546,7 +2546,7 @@ parse_reloc (char **str) return -1; if ((r = (struct reloc_entry *) - hash_find_n (arm_reloc_hsh, p, q - p)) == NULL) + str_hash_find_n (arm_reloc_hsh, p, q - p)) == NULL) return -1; *str = q + 1; @@ -2561,7 +2561,7 @@ insert_reg_alias (char *str, unsigned number, int type) struct reg_entry *new_reg; const char *name; - if ((new_reg = (struct reg_entry *) hash_find (arm_reg_hsh, str)) != 0) + if ((new_reg = (struct reg_entry *) str_hash_find (arm_reg_hsh, str)) != 0) { if (new_reg->builtin) as_warn (_("ignoring attempt to redefine built-in register '%s'"), str); @@ -2583,8 +2583,7 @@ insert_reg_alias (char *str, unsigned number, int type) new_reg->builtin = FALSE; new_reg->neon = NULL; - if (hash_insert (arm_reg_hsh, name, (void *) new_reg)) - abort (); + str_hash_insert (arm_reg_hsh, name, new_reg); return new_reg; } @@ -2632,7 +2631,7 @@ create_register_alias (char * newname, char *p) if (*oldname == '\0') return FALSE; - old = (struct reg_entry *) hash_find (arm_reg_hsh, oldname); + old = (struct reg_entry *) str_hash_find (arm_reg_hsh, oldname); if (!old) { as_warn (_("unknown register '%s' -- .req ignored"), oldname); @@ -2884,7 +2883,7 @@ s_unreq (int a ATTRIBUTE_UNUSED) as_bad (_("invalid syntax for .unreq directive")); else { - struct reg_entry *reg = (struct reg_entry *) hash_find (arm_reg_hsh, + struct reg_entry *reg = (struct reg_entry *) str_hash_find (arm_reg_hsh, name); if (!reg) @@ -2897,7 +2896,7 @@ s_unreq (int a ATTRIBUTE_UNUSED) char * p; char * nbuf; - hash_delete (arm_reg_hsh, name, FALSE); + str_hash_delete (arm_reg_hsh, name); free ((char *) reg->name); free (reg->neon); free (reg); @@ -2909,10 +2908,10 @@ s_unreq (int a ATTRIBUTE_UNUSED) nbuf = strdup (name); for (p = nbuf; *p; p++) *p = TOUPPER (*p); - reg = (struct reg_entry *) hash_find (arm_reg_hsh, nbuf); + reg = (struct reg_entry *) str_hash_find (arm_reg_hsh, nbuf); if (reg) { - hash_delete (arm_reg_hsh, nbuf, FALSE); + str_hash_delete (arm_reg_hsh, nbuf); free ((char *) reg->name); free (reg->neon); free (reg); @@ -2920,10 +2919,10 @@ s_unreq (int a ATTRIBUTE_UNUSED) for (p = nbuf; *p; p++) *p = TOLOWER (*p); - reg = (struct reg_entry *) hash_find (arm_reg_hsh, nbuf); + reg = (struct reg_entry *) str_hash_find (arm_reg_hsh, nbuf); if (reg) { - hash_delete (arm_reg_hsh, nbuf, FALSE); + str_hash_delete (arm_reg_hsh, nbuf); free ((char *) reg->name); free (reg->neon); free (reg); @@ -5537,7 +5536,7 @@ parse_shift (char **str, int i, enum parse_shift_mode mode) return FAIL; } - shift_name = (const struct asm_shift_name *) hash_find_n (arm_shift_hsh, *str, + shift_name = (const struct asm_shift_name *) str_hash_find_n (arm_shift_hsh, *str, p - *str); if (shift_name == NULL) @@ -6338,7 +6337,7 @@ parse_psr (char **str, bfd_boolean lhs) || strncasecmp (start, "psr", 3) == 0) p = start + strcspn (start, "rR") + 1; - psr = (const struct asm_psr *) hash_find_n (arm_v7m_psr_hsh, start, + psr = (const struct asm_psr *) str_hash_find_n (arm_v7m_psr_hsh, start, p - start); if (!psr) @@ -6441,7 +6440,7 @@ parse_psr (char **str, bfd_boolean lhs) } else { - psr = (const struct asm_psr *) hash_find_n (arm_psr_hsh, start, + psr = (const struct asm_psr *) str_hash_find_n (arm_psr_hsh, start, p - start); if (!psr) goto error; @@ -6633,7 +6632,7 @@ parse_cond (char **str) n++; } - c = (const struct asm_cond *) hash_find_n (arm_cond_hsh, cond, n); + c = (const struct asm_cond *) str_hash_find_n (arm_cond_hsh, cond, n); if (!c) { inst.error = _("condition required"); @@ -6656,7 +6655,7 @@ parse_barrier (char **str) while (ISALPHA (*q)) q++; - o = (const struct asm_barrier_opt *) hash_find_n (arm_barrier_opt_hsh, p, + o = (const struct asm_barrier_opt *) str_hash_find_n (arm_barrier_opt_hsh, p, q - p); if (!o) return FAIL; @@ -15606,7 +15605,7 @@ do_vfp_nsyn_opcode (const char *opname) { const struct asm_opcode *opcode; - opcode = (const struct asm_opcode *) hash_find (arm_ops_hsh, opname); + opcode = (const struct asm_opcode *) str_hash_find (arm_ops_hsh, opname); if (!opcode) abort (); @@ -22620,7 +22619,7 @@ opcode_lookup (char **str) *str = end; /* Look for unaffixed or special-case affixed mnemonic. */ - opcode = (const struct asm_opcode *) hash_find_n (arm_ops_hsh, base, + opcode = (const struct asm_opcode *) str_hash_find_n (arm_ops_hsh, base, end - base); if (opcode) { @@ -22634,7 +22633,7 @@ opcode_lookup (char **str) if (warn_on_deprecated && unified_syntax) as_tsktsk (_("conditional infixes are deprecated in unified syntax")); affix = base + (opcode->tag - OT_odd_infix_0); - cond = (const struct asm_cond *) hash_find_n (arm_cond_hsh, affix, 2); + cond = (const struct asm_cond *) str_hash_find_n (arm_cond_hsh, affix, 2); gas_assert (cond); inst.cond = cond->value; @@ -22647,8 +22646,8 @@ opcode_lookup (char **str) if (end - base < 2) return NULL; affix = end - 1; - cond = (const struct asm_cond *) hash_find_n (arm_vcond_hsh, affix, 1); - opcode = (const struct asm_opcode *) hash_find_n (arm_ops_hsh, base, + cond = (const struct asm_cond *) str_hash_find_n (arm_vcond_hsh, affix, 1); + opcode = (const struct asm_opcode *) str_hash_find_n (arm_ops_hsh, base, affix - base); /* If this opcode can not be vector predicated then don't accept it with a vector predication code. */ @@ -22664,8 +22663,8 @@ opcode_lookup (char **str) /* Look for suffixed mnemonic. */ affix = end - 2; - cond = (const struct asm_cond *) hash_find_n (arm_cond_hsh, affix, 2); - opcode = (const struct asm_opcode *) hash_find_n (arm_ops_hsh, base, + cond = (const struct asm_cond *) str_hash_find_n (arm_cond_hsh, affix, 2); + opcode = (const struct asm_opcode *) str_hash_find_n (arm_ops_hsh, base, affix - base); } @@ -22715,13 +22714,13 @@ opcode_lookup (char **str) /* Look for infixed mnemonic in the usual position. */ affix = base + 3; - cond = (const struct asm_cond *) hash_find_n (arm_cond_hsh, affix, 2); + cond = (const struct asm_cond *) str_hash_find_n (arm_cond_hsh, affix, 2); if (!cond) return NULL; memcpy (save, affix, 2); memmove (affix, affix + 2, (end - affix) - 2); - opcode = (const struct asm_opcode *) hash_find_n (arm_ops_hsh, base, + opcode = (const struct asm_opcode *) str_hash_find_n (arm_ops_hsh, base, (end - base) - 2); memmove (affix + 2, affix, (end - affix) - 2); memcpy (affix, save, 2); @@ -27989,16 +27988,19 @@ arm_tc_equal_in_insn (int c ATTRIBUTE_UNUSED, char * name) for (p = nbuf; *p; p++) *p = TOLOWER (*p); - if (hash_find (arm_ops_hsh, nbuf) != NULL) + if (str_hash_find (arm_ops_hsh, nbuf) != NULL) { - static struct hash_control * already_warned = NULL; + static htab_t already_warned = NULL; if (already_warned == NULL) - already_warned = hash_new (); + already_warned = str_htab_create (); /* Only warn about the symbol once. To keep the code - simple we let hash_insert do the lookup for us. */ - if (hash_insert (already_warned, nbuf, NULL) == NULL) - as_warn (_("[-mwarn-syms]: Assignment makes a symbol match an ARM instruction: %s"), name); + simple we let str_hash_insert do the lookup for us. */ + if (str_hash_find (already_warned, nbuf) == NULL) + { + as_warn (_("[-mwarn-syms]: Assignment makes a symbol match an ARM instruction: %s"), name); + str_hash_insert (already_warned, nbuf, NULL); + } } else free (nbuf); @@ -30716,36 +30718,37 @@ md_begin (void) unsigned mach; unsigned int i; - if ( (arm_ops_hsh = hash_new ()) == NULL - || (arm_cond_hsh = hash_new ()) == NULL - || (arm_vcond_hsh = hash_new ()) == NULL - || (arm_shift_hsh = hash_new ()) == NULL - || (arm_psr_hsh = hash_new ()) == NULL - || (arm_v7m_psr_hsh = hash_new ()) == NULL - || (arm_reg_hsh = hash_new ()) == NULL - || (arm_reloc_hsh = hash_new ()) == NULL - || (arm_barrier_opt_hsh = hash_new ()) == NULL) + if ( (arm_ops_hsh = str_htab_create ()) == NULL + || (arm_cond_hsh = str_htab_create ()) == NULL + || (arm_vcond_hsh = str_htab_create ()) == NULL + || (arm_shift_hsh = str_htab_create ()) == NULL + || (arm_psr_hsh = str_htab_create ()) == NULL + || (arm_v7m_psr_hsh = str_htab_create ()) == NULL + || (arm_reg_hsh = str_htab_create ()) == NULL + || (arm_reloc_hsh = str_htab_create ()) == NULL + || (arm_barrier_opt_hsh = str_htab_create ()) == NULL) as_fatal (_("virtual memory exhausted")); for (i = 0; i < sizeof (insns) / sizeof (struct asm_opcode); i++) - hash_insert (arm_ops_hsh, insns[i].template_name, (void *) (insns + i)); + if (str_hash_find (arm_ops_hsh, insns[i].template_name) == NULL) + str_hash_insert (arm_ops_hsh, insns[i].template_name, (void *) (insns + i)); for (i = 0; i < sizeof (conds) / sizeof (struct asm_cond); i++) - hash_insert (arm_cond_hsh, conds[i].template_name, (void *) (conds + i)); + str_hash_insert (arm_cond_hsh, conds[i].template_name, (void *) (conds + i)); for (i = 0; i < sizeof (vconds) / sizeof (struct asm_cond); i++) - hash_insert (arm_vcond_hsh, vconds[i].template_name, (void *) (vconds + i)); + str_hash_insert (arm_vcond_hsh, vconds[i].template_name, (void *) (vconds + i)); for (i = 0; i < sizeof (shift_names) / sizeof (struct asm_shift_name); i++) - hash_insert (arm_shift_hsh, shift_names[i].name, (void *) (shift_names + i)); + str_hash_insert (arm_shift_hsh, shift_names[i].name, (void *) (shift_names + i)); for (i = 0; i < sizeof (psrs) / sizeof (struct asm_psr); i++) - hash_insert (arm_psr_hsh, psrs[i].template_name, (void *) (psrs + i)); + str_hash_insert (arm_psr_hsh, psrs[i].template_name, (void *) (psrs + i)); for (i = 0; i < sizeof (v7m_psrs) / sizeof (struct asm_psr); i++) - hash_insert (arm_v7m_psr_hsh, v7m_psrs[i].template_name, + str_hash_insert (arm_v7m_psr_hsh, v7m_psrs[i].template_name, (void *) (v7m_psrs + i)); for (i = 0; i < sizeof (reg_names) / sizeof (struct reg_entry); i++) - hash_insert (arm_reg_hsh, reg_names[i].name, (void *) (reg_names + i)); + str_hash_insert (arm_reg_hsh, reg_names[i].name, (void *) (reg_names + i)); for (i = 0; i < sizeof (barrier_opt_names) / sizeof (struct asm_barrier_opt); i++) - hash_insert (arm_barrier_opt_hsh, barrier_opt_names[i].template_name, + str_hash_insert (arm_barrier_opt_hsh, barrier_opt_names[i].template_name, (void *) (barrier_opt_names + i)); #ifdef OBJ_ELF for (i = 0; i < ARRAY_SIZE (reloc_names); i++) @@ -30756,7 +30759,7 @@ md_begin (void) /* This makes encode_branch() use the EABI versions of this relocation. */ entry->reloc = BFD_RELOC_UNUSED; - hash_insert (arm_reloc_hsh, entry->name, (void *) entry); + str_hash_insert (arm_reloc_hsh, entry->name, (void *) entry); } #endif |