/* tc-hppa.c -- Assemble for the PA
- Copyright (C) 1989-2017 Free Software Foundation, Inc.
+ Copyright (C) 1989-2020 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
static struct call_desc last_call_desc;
/* handle of the OPCODE hash table */
-static struct hash_control *op_hash = NULL;
+static htab_t op_hash = NULL;
/* These characters can be suffixes of opcode names and they may be
followed by meaningful whitespace. We don't include `,' and `!'
/* ??? It might be better to hide this +8 stuff in tc_cfi_emit_pcrel_expr,
undefine DIFF_EXPR_OK, and let these sorts of complex expressions fail
when R_HPPA_COMPLEX == R_PARISC_UNIMPLEMENTED. */
- if (fixp->fx_r_type == (bfd_reloc_code_real_type) R_HPPA_COMPLEX
+ if (fixp->fx_r_type == (int) R_HPPA_COMPLEX
&& fixp->fx_pcrel)
{
- fixp->fx_r_type = R_HPPA_PCREL_CALL;
+ fixp->fx_r_type = (int) R_HPPA_PCREL_CALL;
fixp->fx_offset += 8;
}
codes = hppa_gen_reloc_type (stdoutput,
- fixp->fx_r_type,
+ (int) fixp->fx_r_type,
hppa_fixp->fx_r_format,
hppa_fixp->fx_r_field,
fixp->fx_subsy != NULL,
valueT
md_section_align (asection *segment, valueT size)
{
- int align = bfd_get_section_alignment (stdoutput, segment);
+ int align = bfd_section_alignment (segment);
int align2 = (1 << align) - 1;
return (size + align2) & ~align2;
}
/* Look up the opcode in the hash table. */
- if ((insn = (struct pa_opcode *) hash_find (op_hash, str)) == NULL)
+ if ((insn = (struct pa_opcode *) str_hash_find (op_hash, str)) == NULL)
{
as_bad (_("Unknown opcode: `%s'"), str);
return;
if (the_insn.reloc != R_HPPA_NONE)
fix_new_hppa (frag_now, (to - frag_now->fr_literal), 4, NULL,
(offsetT) 0, &the_insn.exp, the_insn.pcrel,
- the_insn.reloc, the_insn.field_selector,
+ (int) the_insn.reloc, the_insn.field_selector,
the_insn.format, the_insn.arg_reloc, 0);
#ifdef OBJ_ELF
char *name, *p;
symbolS *symbolP;
- if ((bfd_get_section_flags (stdoutput, now_seg)
+ if ((bfd_section_flags (now_seg)
& (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
!= (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
return;
else
{
symbolP = symbol_new (name, now_seg,
- S_GET_VALUE (call_info->start_symbol), frag_now);
+ symbol_get_frag (call_info->start_symbol),
+ S_GET_VALUE (call_info->start_symbol));
gas_assert (symbolP);
S_CLEAR_EXTERNAL (symbolP);
symbol_table_insert (symbolP);
if (seg == ASEC_NULL)
{
seg = subseg_new (UNWIND_SECTION_NAME, 0);
- bfd_set_section_flags (stdoutput, seg,
- SEC_READONLY | SEC_HAS_CONTENTS
- | SEC_LOAD | SEC_RELOC | SEC_ALLOC | SEC_DATA);
- bfd_set_section_alignment (stdoutput, seg, 2);
+ bfd_set_section_flags (seg, (SEC_READONLY | SEC_HAS_CONTENTS | SEC_LOAD
+ | SEC_RELOC | SEC_ALLOC | SEC_DATA));
+ bfd_set_section_alignment (seg, 2);
}
subseg_set (seg, 0);
{
/* symbol value should be the offset of the
last instruction of the function */
- symbolP = symbol_new (name, now_seg, (valueT) (frag_now_fix () - 4),
- frag_now);
+ symbolP = symbol_new (name, now_seg, frag_now, frag_now_fix () - 4);
gas_assert (symbolP);
S_CLEAR_EXTERNAL (symbolP);
seg_info (section)->bss = 1;
/* Now set the flags. */
- bfd_set_section_flags (stdoutput, section, applicable);
+ bfd_set_section_flags (section, applicable);
/* Record any alignment request for this section. */
record_alignment (section, exact_log2 (alignment));
/* Set the starting offset for this section. */
- bfd_set_section_vma (stdoutput, section,
- pa_subspace_start (space, quadrant));
+ bfd_set_section_vma (section, pa_subspace_start (space, quadrant));
/* Now that all the flags are set, update an existing subspace,
or create a new one. */
{
text_section = segment;
applicable = bfd_applicable_section_flags (stdoutput);
- bfd_set_section_flags (stdoutput, segment,
+ bfd_set_section_flags (segment,
applicable & (SEC_ALLOC | SEC_LOAD
| SEC_RELOC | SEC_CODE
| SEC_READONLY
{
data_section = segment;
applicable = bfd_applicable_section_flags (stdoutput);
- bfd_set_section_flags (stdoutput, segment,
+ bfd_set_section_flags (segment,
applicable & (SEC_ALLOC | SEC_LOAD
| SEC_RELOC
| SEC_HAS_CONTENTS));
{
bss_section = segment;
applicable = bfd_applicable_section_flags (stdoutput);
- bfd_set_section_flags (stdoutput, segment,
+ bfd_set_section_flags (segment,
applicable & SEC_ALLOC);
}
else if (!strcmp (pa_def_subspaces[i].name, "$LIT$"))
{
applicable = bfd_applicable_section_flags (stdoutput);
- bfd_set_section_flags (stdoutput, segment,
+ bfd_set_section_flags (segment,
applicable & (SEC_ALLOC | SEC_LOAD
| SEC_RELOC
| SEC_READONLY
else if (!strcmp (pa_def_subspaces[i].name, "$MILLICODE$"))
{
applicable = bfd_applicable_section_flags (stdoutput);
- bfd_set_section_flags (stdoutput, segment,
+ bfd_set_section_flags (segment,
applicable & (SEC_ALLOC | SEC_LOAD
| SEC_RELOC
| SEC_READONLY
else if (!strcmp (pa_def_subspaces[i].name, "$UNWIND$"))
{
applicable = bfd_applicable_section_flags (stdoutput);
- bfd_set_section_flags (stdoutput, segment,
+ bfd_set_section_flags (segment,
applicable & (SEC_ALLOC | SEC_LOAD
| SEC_RELOC
| SEC_READONLY
void
md_begin (void)
{
- const char *retval = NULL;
int lose = 0;
unsigned int i = 0;
pa_spaces_begin ();
#endif
- op_hash = hash_new ();
+ op_hash = str_htab_create ();
while (i < NUMOPCODES)
{
const char *name = pa_opcodes[i].name;
- retval = hash_insert (op_hash, name, (struct pa_opcode *) &pa_opcodes[i]);
- if (retval != NULL && *retval != '\0')
- {
- as_fatal (_("Internal error: can't hash `%s': %s\n"), name, retval);
- lose = 1;
- }
+ if (str_hash_insert (op_hash, name, &pa_opcodes[i], 0) != NULL)
+ as_fatal (_("duplicate %s"), name);
do
{
/* LR/RR selectors are implicitly used for a number of different relocation
types. We must ensure that none of these types are adjusted (see below)
even if they occur with a different selector. */
- code = elf_hppa_reloc_final_type (stdoutput, fixp->fx_r_type,
+ code = elf_hppa_reloc_final_type (stdoutput,
+ (int) fixp->fx_r_type,
hppa_fix->fx_r_format,
hppa_fix->fx_r_field);
{
struct fix *new_fix;
- new_fix = obj_elf_vtable_entry (0);
+ new_fix = obj_elf_get_vtable_entry ();
if (new_fix)
{
{
struct fix *new_fix;
- new_fix = obj_elf_vtable_inherit (0);
+ new_fix = obj_elf_get_vtable_inherit ();
if (new_fix)
{