X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fconfig%2Ftc-ia64.c;h=c0eb593f02b11422eaba4561d281169fd147d6f4;hb=add39d2344036db9334bdeb1ec20a90beaa3ca49;hp=b8ffe4e116ff575cdab6f062b9a3328248c0b616;hpb=9aff4b7ac12edba0c170c2a55763c3973b708749;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c index b8ffe4e116..c0eb593f02 100644 --- a/gas/config/tc-ia64.c +++ b/gas/config/tc-ia64.c @@ -1,5 +1,5 @@ /* tc-ia64.c -- Assembler for the HP/Intel IA-64 architecture. - Copyright 1998-2013 Free Software Foundation, Inc. + Copyright (C) 1998-2016 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of GAS, the GNU Assembler. @@ -302,7 +302,7 @@ static struct struct label_fix *tag_fixups; struct unw_rec_list *unwind_record; /* Unwind directive. */ expressionS opnd[6]; - char *src_file; + const char *src_file; unsigned int src_line; struct dwarf2_line_info debug_line; } @@ -672,7 +672,7 @@ static struct rsrc { int insn_srlz; /* current insn serialization state */ int data_srlz; /* current data serialization state */ int qp_regno; /* qualifying predicate for this usage */ - char *file; /* what file marked this dependency */ + const char *file; /* what file marked this dependency */ unsigned int line; /* what line marked this dependency */ struct mem_offset mem_offset; /* optional memory offset hint */ enum { CMP_NONE, CMP_OR, CMP_AND } cmp_type; /* OR or AND compare? */ @@ -829,7 +829,7 @@ ar_is_only_in_integer_unit (int reg) return reg >= 64 && reg <= 111; } -/* Determine if application register REGNUM resides only in the memory +/* Determine if application register REGNUM resides only in the memory unit (as opposed to the integer unit). */ static int ar_is_only_in_memory_unit (int reg) @@ -856,7 +856,7 @@ set_section (char *name) /* Map 's' to SHF_IA_64_SHORT. */ bfd_vma -ia64_elf_section_letter (int letter, char **ptr_msg) +ia64_elf_section_letter (int letter, const char **ptr_msg) { if (letter == 's') return SHF_IA_64_SHORT; @@ -1025,25 +1025,16 @@ ia64_flush_insns (void) as_bad (_("qualifying predicate not followed by instruction")); } -static void -ia64_do_align (int nbytes) -{ - char *saved_input_line_pointer = input_line_pointer; - - input_line_pointer = ""; - s_align_bytes (nbytes); - input_line_pointer = saved_input_line_pointer; -} - void ia64_cons_align (int nbytes) { if (md.auto_align) { - char *saved_input_line_pointer = input_line_pointer; - input_line_pointer = ""; - s_align_bytes (nbytes); - input_line_pointer = saved_input_line_pointer; + int log; + for (log = 0; (nbytes & 1) != 1; nbytes >>= 1) + log++; + + do_align (log, NULL, 0, 0); } } @@ -1054,7 +1045,7 @@ ia64_cons_align (int nbytes) static void obj_elf_vms_common (int ignore ATTRIBUTE_UNUSED) { - char *sec_name; + const char *sec_name; char *sym_name; char c; offsetT size; @@ -1084,19 +1075,18 @@ obj_elf_vms_common (int ignore ATTRIBUTE_UNUSED) return; } - sym_name = input_line_pointer; - c = get_symbol_end (); + c = get_symbol_name (&sym_name); if (input_line_pointer == sym_name) { - *input_line_pointer = c; + (void) restore_line_pointer (c); as_bad (_("expected symbol name")); ignore_rest_of_line (); return; } symbolP = symbol_find_or_make (sym_name); - *input_line_pointer = c; + (void) restore_line_pointer (c); if ((S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP)) && !S_IS_COMMON (symbolP)) @@ -1751,7 +1741,7 @@ static unw_rec_list * alloc_record (unw_record_type t) { unw_rec_list *ptr; - ptr = xmalloc (sizeof (*ptr)); + ptr = XNEW (unw_rec_list); memset (ptr, 0, sizeof (*ptr)); ptr->slot_number = SLOT_NUM_NOT_SET; ptr->r.type = t; @@ -2660,8 +2650,7 @@ set_imask (unw_rec_list *region, if (!imask) { imask_size = (region->r.record.r.rlen * 2 + 7) / 8 + 1; - imask = xmalloc (imask_size); - memset (imask, 0, imask_size); + imask = XCNEWVEC (unsigned char, imask_size); region->r.record.r.imask_size = imask_size; region->r.record.r.mask.i = imask; @@ -3167,12 +3156,11 @@ dot_radix (int dummy ATTRIBUTE_UNUSED) if (is_it_end_of_statement ()) return; - radix = input_line_pointer; - ch = get_symbol_end (); + ch = get_symbol_name (&radix); ia64_canonicalize_symbol_name (radix); if (strcasecmp (radix, "C")) as_bad (_("Radix `%s' unsupported or invalid"), radix); - *input_line_pointer = ch; + (void) restore_line_pointer (ch); demand_empty_rest_of_line (); } @@ -3279,11 +3267,12 @@ add_unwind_entry (unw_rec_list *ptr, int sep) if (sep == ',') { + char *name; /* Parse a tag permitted for the current directive. */ int ch; SKIP_WHITESPACE (); - ch = get_symbol_end (); + ch = get_symbol_name (&name); /* FIXME: For now, just issue a warning that this isn't implemented. */ { static int warned; @@ -3294,7 +3283,7 @@ add_unwind_entry (unw_rec_list *ptr, int sep) as_warn (_("Tags on unwind pseudo-ops aren't supported, yet")); } } - *input_line_pointer = ch; + (void) restore_line_pointer (ch); } if (sep != NOT_A_CHAR) demand_empty_rest_of_line (); @@ -3340,7 +3329,7 @@ dot_vframe (int dummy ATTRIBUTE_UNUSED) if (! (unwind.prologue_mask & 2)) add_unwind_entry (output_psp_gr (reg), NOT_A_CHAR); else if (reg != unwind.prologue_gr - + (unsigned) popcount (unwind.prologue_mask & (-2 << 1))) + + (unsigned) popcount (unwind.prologue_mask & -(2 << 1))) as_warn (_("Operand of .vframe contradicts .prologue")); } @@ -3422,7 +3411,7 @@ dot_save (int dummy ATTRIBUTE_UNUSED) if (! (unwind.prologue_mask & 4)) add_unwind_entry (output_pfs_gr (reg2), NOT_A_CHAR); else if (reg2 != unwind.prologue_gr - + (unsigned) popcount (unwind.prologue_mask & (-4 << 1))) + + (unsigned) popcount (unwind.prologue_mask & -(4 << 1))) as_warn (_("Second operand of .save contradicts .prologue")); break; case REG_AR + AR_LC: @@ -3441,7 +3430,7 @@ dot_save (int dummy ATTRIBUTE_UNUSED) if (! (unwind.prologue_mask & 1)) add_unwind_entry (output_preds_gr (reg2), NOT_A_CHAR); else if (reg2 != unwind.prologue_gr - + (unsigned) popcount (unwind.prologue_mask & (-1 << 1))) + + (unsigned) popcount (unwind.prologue_mask & -(1 << 1))) as_warn (_("Second operand of .save contradicts .prologue")); break; case REG_PRIUNAT: @@ -3522,7 +3511,7 @@ dot_restorereg (int pred) add_unwind_entry (output_spill_reg (ab, reg, 0, 0, qp), sep); } -static char *special_linkonce_name[] = +static const char *special_linkonce_name[] = { ".gnu.linkonce.ia64unw.", ".gnu.linkonce.ia64unwi." }; @@ -3567,7 +3556,6 @@ start_unwind_section (const segT text_seg, int sec_index) char *sec_name; const char *prefix = special_section_name [sec_index]; const char *suffix; - size_t prefix_len, suffix_len, sec_name_len; sec_text_name = segment_name (text_seg); text_name = sec_text_name; @@ -3591,20 +3579,13 @@ start_unwind_section (const segT text_seg, int sec_index) suffix += sizeof (".gnu.linkonce.t.") - 1; } - prefix_len = strlen (prefix); - suffix_len = strlen (suffix); - sec_name_len = prefix_len + suffix_len; - sec_name = alloca (sec_name_len + 1); - memcpy (sec_name, prefix, prefix_len); - memcpy (sec_name + prefix_len, suffix, suffix_len); - sec_name [sec_name_len] = '\0'; + sec_name = concat (prefix, suffix, NULL); /* Handle COMDAT group. */ if ((text_seg->flags & SEC_LINK_ONCE) != 0 && (elf_section_flags (text_seg) & SHF_GROUP) != 0) { char *section; - size_t len, group_name_len; const char *group_name = elf_group_name (text_seg); if (group_name == NULL) @@ -3612,22 +3593,14 @@ start_unwind_section (const segT text_seg, int sec_index) as_bad (_("Group section `%s' has no group signature"), sec_text_name); ignore_rest_of_line (); + free (sec_name); return; } - /* We have to construct a fake section directive. */ - group_name_len = strlen (group_name); - len = (sec_name_len - + 16 /* ,"aG",@progbits, */ - + group_name_len /* ,group_name */ - + 7); /* ,comdat */ - - section = alloca (len + 1); - memcpy (section, sec_name, sec_name_len); - memcpy (section + sec_name_len, ",\"aG\",@progbits,", 16); - memcpy (section + sec_name_len + 16, group_name, group_name_len); - memcpy (section + len - 7, ",comdat", 7); - section [len] = '\0'; + + /* We have to construct a fake section directive. */ + section = concat (sec_name, ",\"aG\",@progbits,", group_name, ",comdat", NULL); set_section (section); + free (section); } else { @@ -3637,6 +3610,7 @@ start_unwind_section (const segT text_seg, int sec_index) } elf_linked_to_section (now_seg) = text_seg; + free (sec_name); } static void @@ -3687,7 +3661,7 @@ generate_unwind_image (const segT text_seg) /* Set expression which points to start of unwind descriptor area. */ unwind.info = expr_build_dot (); - + frag_var (rs_machine_dependent, size, size, 0, 0, (offsetT) (long) unwind.personality_routine, (char *) list); @@ -4135,7 +4109,7 @@ save_prologue_count (unsigned long lbl, unsigned int count) lpc->prologue_count = count; else { - label_prologue_count *new_lpc = xmalloc (sizeof (* new_lpc)); + label_prologue_count *new_lpc = XNEW (label_prologue_count); new_lpc->next = unwind.saved_prologue_counts; new_lpc->label_number = lbl; @@ -4145,7 +4119,7 @@ save_prologue_count (unsigned long lbl, unsigned int count) } static void -free_saved_prologue_counts () +free_saved_prologue_counts (void) { label_prologue_count *lpc = unwind.saved_prologue_counts; label_prologue_count *next; @@ -4232,16 +4206,16 @@ static void dot_personality (int dummy ATTRIBUTE_UNUSED) { char *name, *p, c; + if (!in_procedure ("personality")) return; SKIP_WHITESPACE (); - name = input_line_pointer; - c = get_symbol_end (); + c = get_symbol_name (&name); p = input_line_pointer; unwind.personality_routine = symbol_find_or_make (name); unwind.force_unwind_entry = 1; *p = c; - SKIP_WHITESPACE (); + SKIP_WHITESPACE_AFTER_NAME (); demand_empty_rest_of_line (); } @@ -4271,8 +4245,7 @@ dot_proc (int dummy ATTRIBUTE_UNUSED) while (1) { SKIP_WHITESPACE (); - name = input_line_pointer; - c = get_symbol_end (); + c = get_symbol_name (&name); p = input_line_pointer; if (!*name) as_bad (_("Empty argument of .proc")); @@ -4288,14 +4261,14 @@ dot_proc (int dummy ATTRIBUTE_UNUSED) } else { - pending = xmalloc (sizeof (*pending)); + pending = XNEW (proc_pending); pending->sym = sym; last_pending = last_pending->next = pending; } symbol_get_bfdsym (sym)->flags |= BSF_FUNCTION; } *p = c; - SKIP_WHITESPACE (); + SKIP_WHITESPACE_AFTER_NAME (); if (*input_line_pointer != ',') break; ++input_line_pointer; @@ -4307,7 +4280,7 @@ dot_proc (int dummy ATTRIBUTE_UNUSED) } last_pending->next = NULL; demand_empty_rest_of_line (); - ia64_do_align (16); + do_align (4, NULL, 0, 0); unwind.prologue = 0; unwind.prologue_count = 0; @@ -4362,12 +4335,14 @@ dot_prologue (int dummy ATTRIBUTE_UNUSED) as_warn (_("Pointless use of zero first operand to .prologue")); else mask = e.X_add_number; - n = popcount (mask); + + n = popcount (mask); if (sep == ',') parse_operand_and_eval (&e, 0); else e.X_op = O_absent; + if (e.X_op == O_constant && e.X_add_number >= 0 && e.X_add_number < 128) @@ -4387,7 +4362,6 @@ dot_prologue (int dummy ATTRIBUTE_UNUSED) as_bad (_("Second operand to .prologue must be the first of %d general registers"), n); grsave = 0; } - } if (mask) @@ -4466,14 +4440,15 @@ dot_endp (int dummy ATTRIBUTE_UNUSED) symbol_get_frag (unwind.proc_pending.sym)); else e.X_add_symbol = unwind.proc_pending.sym; - ia64_cons_fix_new (frag_now, where, bytes_per_address, &e); + ia64_cons_fix_new (frag_now, where, bytes_per_address, &e, + BFD_RELOC_NONE); e.X_op = O_pseudo_fixup; e.X_op_symbol = pseudo_func[FUNC_SEG_RELATIVE].u.sym; e.X_add_number = 0; e.X_add_symbol = proc_end; ia64_cons_fix_new (frag_now, where + bytes_per_address, - bytes_per_address, &e); + bytes_per_address, &e, BFD_RELOC_NONE); if (unwind.info) { @@ -4482,7 +4457,7 @@ dot_endp (int dummy ATTRIBUTE_UNUSED) e.X_add_number = 0; e.X_add_symbol = unwind.info; ia64_cons_fix_new (frag_now, where + (bytes_per_address * 2), - bytes_per_address, &e); + bytes_per_address, &e, BFD_RELOC_NONE); } } subseg_set (saved_seg, saved_subseg); @@ -4508,8 +4483,7 @@ dot_endp (int dummy ATTRIBUTE_UNUSED) S_SET_SIZE (sym, frag_now_fix () - S_GET_VALUE (sym)); else { - symbol_get_obj (sym)->size = - (expressionS *) xmalloc (sizeof (expressionS)); + symbol_get_obj (sym)->size = XNEW (expressionS); symbol_get_obj (sym)->size->X_op = O_subtract; symbol_get_obj (sym)->size->X_add_symbol = symbol_new (FAKE_LABEL_NAME, now_seg, @@ -4528,8 +4502,7 @@ dot_endp (int dummy ATTRIBUTE_UNUSED) char *name, *p, c; SKIP_WHITESPACE (); - name = input_line_pointer; - c = get_symbol_end (); + c = get_symbol_name (&name); p = input_line_pointer; if (!*name) (md.unwind_check == unwind_check_warning @@ -4551,7 +4524,7 @@ dot_endp (int dummy ATTRIBUTE_UNUSED) as_warn (_("`%s' was not specified with previous .proc"), name); } *p = c; - SKIP_WHITESPACE (); + SKIP_WHITESPACE_AFTER_NAME (); if (*input_line_pointer != ',') break; ++input_line_pointer; @@ -4637,12 +4610,11 @@ dot_rot (int type) drpp = &md.dynreg[type]; while (1) { - start = input_line_pointer; - ch = get_symbol_end (); + ch = get_symbol_name (&start); len = strlen (ia64_canonicalize_symbol_name (start)); *input_line_pointer = ch; - SKIP_WHITESPACE (); + SKIP_WHITESPACE_AFTER_NAME (); if (*input_line_pointer != '[') { as_bad (_("Expected '['")); @@ -4768,8 +4740,7 @@ dot_psr (int dummy ATTRIBUTE_UNUSED) while (1) { - option = input_line_pointer; - ch = get_symbol_end (); + ch = get_symbol_name (&option); if (strcmp (option, "lsb") == 0) md.flags &= ~EF_IA_64_BE; else if (strcmp (option, "msb") == 0) @@ -4782,7 +4753,7 @@ dot_psr (int dummy ATTRIBUTE_UNUSED) as_bad (_("Unknown psr option `%s'"), option); *input_line_pointer = ch; - SKIP_WHITESPACE (); + SKIP_WHITESPACE_AFTER_NAME (); if (*input_line_pointer != ',') break; @@ -4805,36 +4776,21 @@ cross_section (int ref, void (*builder) (int), int ua) char *start, *end; int saved_auto_align; unsigned int section_count; + char *name; + char c; SKIP_WHITESPACE (); start = input_line_pointer; - if (*start == '"') + c = get_symbol_name (&name); + if (input_line_pointer == start) { - int len; - char *name; - - name = demand_copy_C_string (&len); - obstack_free(¬es, name); - if (!name) - { - ignore_rest_of_line (); - return; - } - } - else - { - char c = get_symbol_end (); - - if (input_line_pointer == start) - { - as_bad (_("Missing section name")); - ignore_rest_of_line (); - return; - } - *input_line_pointer = c; + as_bad (_("Missing section name")); + ignore_rest_of_line (); + return; } + * input_line_pointer = c; + SKIP_WHITESPACE_AFTER_NAME (); end = input_line_pointer; - SKIP_WHITESPACE (); if (*input_line_pointer != ',') { as_bad (_("Comma expected after section name")); @@ -4876,20 +4832,20 @@ stmt_float_cons (int kind) switch (kind) { case 'd': - alignment = 8; + alignment = 3; break; case 'x': case 'X': - alignment = 16; + alignment = 4; break; case 'f': default: - alignment = 4; + alignment = 2; break; } - ia64_do_align (alignment); + do_align (alignment, NULL, 0, 0); float_cons (kind); } @@ -5025,7 +4981,7 @@ static void print_prmask (valueT mask) { int regno; - char *comma = ""; + const char *comma = ""; for (regno = 0; regno < 64; regno++) { if (mask & ((valueT) 1 << regno)) @@ -5067,8 +5023,11 @@ dot_pred_rel (int type) } else if (*input_line_pointer == '@') { - char *form = ++input_line_pointer; - char c = get_symbol_end(); + char *form; + char c; + + ++input_line_pointer; + c = get_symbol_name (&form); if (strcmp (form, "mutex") == 0) type = 'm'; @@ -5076,7 +5035,7 @@ dot_pred_rel (int type) type = 'c'; else if (strcmp (form, "imply") == 0) type = 'i'; - *input_line_pointer = c; + (void) restore_line_pointer (c); } else { @@ -5214,8 +5173,7 @@ dot_entry (int dummy ATTRIBUTE_UNUSED) do { - name = input_line_pointer; - c = get_symbol_end (); + c = get_symbol_name (&name); symbolP = symbol_find_or_make (name); err = hash_insert (md.entry_hash, S_GET_NAME (symbolP), (void *) symbolP); @@ -5224,7 +5182,7 @@ dot_entry (int dummy ATTRIBUTE_UNUSED) name, err); *input_line_pointer = c; - SKIP_WHITESPACE (); + SKIP_WHITESPACE_AFTER_NAME (); c = *input_line_pointer; if (c == ',') { @@ -6008,10 +5966,10 @@ operand_match (const struct ia64_opcode *idesc, int res_index, expressionS *e) if (e->X_op == O_constant) { /* 5-bit signed scaled by 64 */ - if ((e->X_add_number <= ( 0xf << 6 )) + if ((e->X_add_number <= ( 0xf << 6 )) && (e->X_add_number >= -( 0x10 << 6 ))) { - + /* Must be a multiple of 64 */ if ((e->X_add_number & 0x3f) != 0) as_warn (_("stride must be a multiple of 64; lower 6 bits ignored")); @@ -6027,7 +5985,7 @@ operand_match (const struct ia64_opcode *idesc, int res_index, expressionS *e) if (e->X_op == O_constant) { /* 6-bit unsigned biased by 1 -- count 0 is meaningless */ - if ((e->X_add_number <= 64) + if ((e->X_add_number <= 64) && (e->X_add_number > 0) ) { return OPERAND_MATCH; @@ -6142,7 +6100,7 @@ parse_operands (struct ia64_opcode *idesc) for (; ; ++i) { - if (i < NELEMS (CURR_SLOT.opnd)) + if (i < NELEMS (CURR_SLOT.opnd)) { sep = parse_operand_maybe_eval (CURR_SLOT.opnd + i, '=', idesc->operands[i]); @@ -7010,7 +6968,7 @@ emit_one_bundle (void) as_bad_where (md.slot[curr].src_file, md.slot[curr].src_line, _("Missing '}' at end of file")); } - + know (md.num_slots_in_use < NUM_SLOTS); t0 = end_of_insn_group | (template_val << 1) | (insn[0] << 5) | (insn[1] << 46); @@ -7021,7 +6979,7 @@ emit_one_bundle (void) } int -md_parse_option (int c, char *arg) +md_parse_option (int c, const char *arg) { switch (c) @@ -7747,8 +7705,7 @@ ia64_unrecognized_line (int ch) recognize labels. */ if (is_name_beginner (*input_line_pointer)) { - s = input_line_pointer; - c = get_symbol_end (); + c = get_symbol_name (&s); } else if (LOCAL_LABELS_FB && ISDIGIT (*input_line_pointer)) @@ -7830,9 +7787,8 @@ ia64_frob_label (struct symbol *sym) if (md.path == md.maxpaths) { md.maxpaths += 20; - md.entry_labels = (const char **) - xrealloc ((void *) md.entry_labels, - md.maxpaths * sizeof (char *)); + md.entry_labels = XRESIZEVEC (const char *, md.entry_labels, + md.maxpaths); } md.entry_labels[md.path++] = S_GET_NAME (sym); } @@ -8095,8 +8051,7 @@ ia64_parse_name (char *name, expressionS *e, char *nextcharP) } } - end = alloca (strlen (name) + 1); - strcpy (end, name); + end = xstrdup (name); name = ia64_canonicalize_symbol_name (end); if ((dr = hash_find (md.dynreg_hash, name))) { @@ -8106,8 +8061,10 @@ ia64_parse_name (char *name, expressionS *e, char *nextcharP) bits. */ e->X_op = O_register; e->X_add_number = dr->base | (dr->num_regs << 16); + free (end); return 1; } + free (end); return 0; } @@ -9652,7 +9609,7 @@ update_qp_mutex (valueT mask) print_prmask (qp_mutexes[i].prmask); fprintf (stderr, "\n"); } - + /* Deal with the old mutex with more than 3+ PRs only if the new mutex on the same execution path with it. @@ -9665,7 +9622,7 @@ update_qp_mutex (valueT mask) if (add == 0 && (qp_mutexes[i].prmask & mask) == mask) add = 1; - + qp_mutexes[i].prmask &= ~mask; if (qp_mutexes[i].prmask & (qp_mutexes[i].prmask - 1)) { @@ -9675,7 +9632,7 @@ update_qp_mutex (valueT mask) i++; } } - + if (keep == 0) /* Remove the mutex. */ qp_mutexes[i] = qp_mutexes[--qp_mutexeslen]; @@ -9772,9 +9729,7 @@ add_qp_imply (int p1, int p2) if (qp_implieslen == qp_impliestotlen) { qp_impliestotlen += 20; - qp_implies = (struct qp_imply *) - xrealloc ((void *) qp_implies, - qp_impliestotlen * sizeof (struct qp_imply)); + qp_implies = XRESIZEVEC (struct qp_imply, qp_implies, qp_impliestotlen); } if (md.debug_dv) fprintf (stderr, " Registering PR%d implies PR%d\n", p1, p2); @@ -9817,9 +9772,7 @@ add_qp_mutex (valueT mask) if (qp_mutexeslen == qp_mutexestotlen) { qp_mutexestotlen += 20; - qp_mutexes = (struct qpmutex *) - xrealloc ((void *) qp_mutexes, - qp_mutexestotlen * sizeof (struct qpmutex)); + qp_mutexes = XRESIZEVEC (struct qpmutex, qp_mutexes, qp_mutexestotlen); } if (md.debug_dv) { @@ -10233,9 +10186,7 @@ mark_resource (struct ia64_opcode *idesc ATTRIBUTE_UNUSED, if (regdepslen == regdepstotlen) { regdepstotlen += 20; - regdeps = (struct rsrc *) - xrealloc ((void *) regdeps, - regdepstotlen * sizeof (struct rsrc)); + regdeps = XRESIZEVEC (struct rsrc, regdeps, regdepstotlen); } regdeps[regdepslen] = *spec; @@ -10707,7 +10658,8 @@ check_dv (struct ia64_opcode *idesc) void md_assemble (char *str) { - char *saved_input_line_pointer, *mnemonic; + char *saved_input_line_pointer, *temp; + const char *mnemonic; const struct pseudo_opcode *pdesc; struct ia64_opcode *idesc; unsigned char qp_regno; @@ -10719,12 +10671,12 @@ md_assemble (char *str) /* extract the opcode (mnemonic): */ - mnemonic = input_line_pointer; - ch = get_symbol_end (); + ch = get_symbol_name (&temp); + mnemonic = temp; pdesc = (struct pseudo_opcode *) hash_find (md.pseudo_hash, mnemonic); if (pdesc) { - *input_line_pointer = ch; + (void) restore_line_pointer (ch); (*pdesc->handler) (pdesc->arg); goto done; } @@ -10732,7 +10684,7 @@ md_assemble (char *str) /* Find the instruction descriptor matching the arguments. */ idesc = ia64_find_opcode (mnemonic); - *input_line_pointer = ch; + (void) restore_line_pointer (ch); if (!idesc) { as_bad (_("Unknown opcode `%s'"), mnemonic); @@ -10796,7 +10748,7 @@ md_assemble (char *str) { enum ia64_opnd opnd1, opnd2; int rop; - + opnd1 = idesc->operands[0]; opnd2 = idesc->operands[1]; if (opnd1 == IA64_OPND_AR3) @@ -10874,7 +10826,7 @@ md_assemble (char *str) /* Build the instruction. */ CURR_SLOT.qp_regno = qp_regno; CURR_SLOT.idesc = idesc; - as_where (&CURR_SLOT.src_file, &CURR_SLOT.src_line); + CURR_SLOT.src_file = as_where (&CURR_SLOT.src_line); dwarf2_where (&CURR_SLOT.debug_line); dwarf2_consume_line_info (); @@ -11056,9 +11008,9 @@ ia64_dwarf2_emit_offset (symbolS *symbol, unsigned int size) fixup. We pick the right reloc code depending on the byteorder currently in effect. */ void -ia64_cons_fix_new (fragS *f, int where, int nbytes, expressionS *exp) +ia64_cons_fix_new (fragS *f, int where, int nbytes, expressionS *exp, + bfd_reloc_code_real_type code) { - bfd_reloc_code_real_type code; fixS *fix; switch (nbytes) @@ -11590,8 +11542,8 @@ tc_gen_reloc (asection *sec ATTRIBUTE_UNUSED, fixS *fixp) { arelent *reloc; - reloc = xmalloc (sizeof (*reloc)); - reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); + reloc = XNEW (arelent); + reloc->sym_ptr_ptr = XNEW (asymbol *); *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; reloc->addend = fixp->fx_offset; @@ -11615,7 +11567,7 @@ tc_gen_reloc (asection *sec ATTRIBUTE_UNUSED, fixS *fixp) #define MAX_LITTLENUMS 5 -char * +const char * md_atof (int type, char *lit, int *size) { LITTLENUM_TYPE words[MAX_LITTLENUMS]; @@ -11699,7 +11651,7 @@ ia64_handle_align (fragS *fragp) bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix; p = fragp->fr_literal + fragp->fr_fix; - /* If no paddings are needed, we check if we need a stop bit. */ + /* If no paddings are needed, we check if we need a stop bit. */ if (!bytes && fragp->tc_frag_data) { if (fragp->fr_fix < 16) @@ -11784,7 +11736,7 @@ ia64_check_label (symbolS *label) the relocatable file. */ struct alias { - char *file; /* The file where the directive is seen. */ + const char *file; /* The file where the directive is seen. */ unsigned int line; /* The line number the directive is at. */ const char *name; /* The original name of the symbol. */ }; @@ -11804,8 +11756,7 @@ dot_alias (int section) struct hash_control *ahash, *nhash; const char *kind; - name = input_line_pointer; - delim = get_symbol_end (); + delim = get_symbol_name (&name); end_name = input_line_pointer; *end_name = delim; @@ -11816,7 +11767,7 @@ dot_alias (int section) return; } - SKIP_WHITESPACE (); + SKIP_WHITESPACE_AFTER_NAME (); if (*input_line_pointer != ',') { @@ -11877,10 +11828,10 @@ dot_alias (int section) goto out; } - h = (struct alias *) xmalloc (sizeof (struct alias)); - as_where (&h->file, &h->line); + h = XNEW (struct alias); + h->file = as_where (&h->line); h->name = name; - + error_string = hash_jam (ahash, alias, (void *) h); if (error_string) { @@ -12000,7 +11951,7 @@ ia64_vms_note (void) bname = xstrdup (lbasename (out_file_name)); if ((p = strrchr (bname, '.'))) *p = '\0'; - + /* VMS note header is 24 bytes long. */ p = frag_more (8 + 8 + 8); number_to_chars_littleendian (p + 0, 8, 8);