X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fconfig%2Ftc-hppa.c;h=aea78dc953688035809ffd224b564e0bf5cacb0b;hb=29a2809e4210d5055291e95de861b493c55b9c0a;hp=da17a29da29af0b4ddf8d4801e0b74cd756e7a87;hpb=d02603dc201f80cd9d2a1f4b1a16110b1e04222b;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c index da17a29da2..aea78dc953 100644 --- a/gas/config/tc-hppa.c +++ b/gas/config/tc-hppa.c @@ -1,5 +1,5 @@ /* tc-hppa.c -- Assemble for the PA - Copyright (C) 1989-2015 Free Software Foundation, Inc. + Copyright (C) 1989-2016 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -350,7 +350,7 @@ typedef struct space_dictionary_chain sd_chain_struct; struct default_subspace_dict { /* Name of the subspace. */ - char *name; + const char *name; /* FIXME. Is this still needed? */ char defined; @@ -403,7 +403,7 @@ struct default_subspace_dict struct default_space_dict { /* Name of the space. */ - char *name; + const char *name; /* Space number. It is possible to identify spaces within assembly code numerically! */ @@ -465,7 +465,7 @@ struct hppa_fix_struct struct pd_reg { - char *name; + const char *name; int value; }; @@ -473,7 +473,7 @@ struct pd_reg to a condition number which can be recorded in an instruction. */ struct fp_cond_map { - char *string; + const char *string; int cond; }; @@ -481,7 +481,7 @@ struct fp_cond_map string to a field selector type. */ struct selector_entry { - char *prefix; + const char *prefix; int field_selector; }; @@ -503,27 +503,27 @@ static void pa_align (int); static void pa_space (int); static void pa_spnum (int); static void pa_subspace (int); -static sd_chain_struct *create_new_space (char *, int, int, - int, int, int, - asection *, int); +static sd_chain_struct *create_new_space (const char *, int, int, + int, int, int, + asection *, int); static ssd_chain_struct *create_new_subspace (sd_chain_struct *, - char *, int, int, - int, int, int, int, - int, int, int, int, - int, asection *); + const char *, int, int, + int, int, int, int, + int, int, int, int, + int, asection *); static ssd_chain_struct *update_subspace (sd_chain_struct *, - char *, int, int, int, - int, int, int, int, - int, int, int, int, - asection *); -static sd_chain_struct *is_defined_space (char *); -static ssd_chain_struct *is_defined_subspace (char *); + char *, int, int, int, + int, int, int, int, + int, int, int, int, + asection *); +static sd_chain_struct *is_defined_space (const char *); +static ssd_chain_struct *is_defined_subspace (const char *); static sd_chain_struct *pa_segment_to_space (asection *); static ssd_chain_struct *pa_subsegment_to_subspace (asection *, subsegT); static sd_chain_struct *pa_find_space_by_number (int); static unsigned int pa_subspace_start (sd_chain_struct *, int); -static sd_chain_struct *pa_parse_space_stmt (char *, int); +static sd_chain_struct *pa_parse_space_stmt (const char *, int); #endif /* File and globally scoped variable declarations. */ @@ -1194,7 +1194,7 @@ fix_new_hppa (fragS *frag, int unwind_bits ATTRIBUTE_UNUSED) { fixS *new_fix; - struct hppa_fix_struct *hppa_fix = obstack_alloc (¬es, sizeof (struct hppa_fix_struct)); + struct hppa_fix_struct *hppa_fix = XOBNEW (¬es, struct hppa_fix_struct); if (exp != NULL) new_fix = fix_new_exp (frag, where, size, exp, pcrel, r_type); @@ -1319,7 +1319,7 @@ pa_parse_nullif (char **s) return nullif; } -char * +const char * md_atof (int type, char *litP, int *sizeP) { return ieee_md_atof (type, litP, sizeP, TRUE); @@ -1355,9 +1355,9 @@ tc_gen_reloc (asection *section, fixS *fixp) gas_assert (hppa_fixp != 0); gas_assert (section != 0); - reloc = xmalloc (sizeof (arelent)); + reloc = XNEW (arelent); - reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); + reloc->sym_ptr_ptr = XNEW (asymbol *); *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); /* Allow fixup_segment to recognize hand-written pc-relative relocations. @@ -1388,8 +1388,8 @@ tc_gen_reloc (asection *section, fixS *fixp) for (n_relocs = 0; codes[n_relocs]; n_relocs++) ; - relocs = xmalloc (sizeof (arelent *) * n_relocs + 1); - reloc = xmalloc (sizeof (arelent) * n_relocs); + relocs = XNEWVEC (arelent *, n_relocs + 1); + reloc = XNEWVEC (arelent, n_relocs); for (i = 0; i < n_relocs; i++) relocs[i] = &reloc[i]; @@ -1447,7 +1447,7 @@ tc_gen_reloc (asection *section, fixS *fixp) break; } - reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); + reloc->sym_ptr_ptr = XNEW (asymbol *); *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); reloc->howto = bfd_reloc_type_lookup (stdoutput, (bfd_reloc_code_real_type) code); @@ -1463,7 +1463,7 @@ tc_gen_reloc (asection *section, fixS *fixp) { code = *codes[i]; - relocs[i]->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); + relocs[i]->sym_ptr_ptr = XNEW (asymbol *); *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); relocs[i]->howto = bfd_reloc_type_lookup (stdoutput, @@ -1484,14 +1484,14 @@ tc_gen_reloc (asection *section, fixS *fixp) (bfd_reloc_code_real_type) *codes[0]); relocs[0]->address = fixp->fx_frag->fr_address + fixp->fx_where; relocs[0]->addend = 0; - relocs[1]->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); + relocs[1]->sym_ptr_ptr = XNEW (asymbol *); *relocs[1]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); relocs[1]->howto = bfd_reloc_type_lookup (stdoutput, (bfd_reloc_code_real_type) *codes[1]); relocs[1]->address = fixp->fx_frag->fr_address + fixp->fx_where; relocs[1]->addend = 0; - relocs[2]->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); + relocs[2]->sym_ptr_ptr = XNEW (asymbol *); *relocs[2]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_subsy); relocs[2]->howto = bfd_reloc_type_lookup (stdoutput, @@ -1546,7 +1546,7 @@ tc_gen_reloc (asection *section, fixS *fixp) case R_N0SEL: case R_N1SEL: /* There is no symbol or addend associated with these fixups. */ - relocs[i]->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); + relocs[i]->sym_ptr_ptr = XNEW (asymbol *); *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol); relocs[i]->addend = 0; break; @@ -1555,7 +1555,7 @@ tc_gen_reloc (asection *section, fixS *fixp) case R_ENTRY: case R_EXIT: /* There is no symbol associated with these fixups. */ - relocs[i]->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); + relocs[i]->sym_ptr_ptr = XNEW (asymbol *); *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol); relocs[i]->addend = fixp->fx_offset; break; @@ -1653,7 +1653,7 @@ struct option md_longopts[] = size_t md_longopts_size = sizeof (md_longopts); int -md_parse_option (int c, char *arg ATTRIBUTE_UNUSED) +md_parse_option (int c, const char *arg ATTRIBUTE_UNUSED) { switch (c) { @@ -3167,7 +3167,7 @@ pa_parse_addb_64_cmpltr (char **s) static void pa_ip (char *str) { - char *error_message = ""; + const char *error_message = ""; char *s, c, *argstart, *name, *save_s; const char *args; int match = FALSE; @@ -5974,11 +5974,8 @@ pa_build_unwind_subspace (struct call_info *call_info) /* Replace the start symbol with a local symbol that will be reduced to a section offset. This avoids problems with weak functions with multiple definitions, etc. */ - name = xmalloc (strlen ("L$\001start_") - + strlen (S_GET_NAME (call_info->start_symbol)) - + 1); - strcpy (name, "L$\001start_"); - strcat (name, S_GET_NAME (call_info->start_symbol)); + name = concat ("L$\001start_", S_GET_NAME (call_info->start_symbol), + (char *) NULL); /* If we have a .procend preceded by a .exit, then the symbol will have already been defined. In that case, we don't want another unwind @@ -6414,6 +6411,7 @@ hppa_elf_mark_end_of_function (void) /* ELF does not have EXIT relocations. All we do is create a temporary symbol marking the end of the function. */ char *name; + symbolS *symbolP; if (last_call_info == NULL || last_call_info->start_symbol == NULL) { @@ -6422,48 +6420,37 @@ hppa_elf_mark_end_of_function (void) return; } - name = xmalloc (strlen ("L$\001end_") - + strlen (S_GET_NAME (last_call_info->start_symbol)) - + 1); - if (name) - { - symbolS *symbolP; - - strcpy (name, "L$\001end_"); - strcat (name, S_GET_NAME (last_call_info->start_symbol)); + name = concat ("L$\001end_", S_GET_NAME (last_call_info->start_symbol), + (char *) NULL); - /* If we have a .exit followed by a .procend, then the - symbol will have already been defined. */ - symbolP = symbol_find (name); - if (symbolP) - { - /* The symbol has already been defined! This can - happen if we have a .exit followed by a .procend. - - This is *not* an error. All we want to do is free - the memory we just allocated for the name and continue. */ - xfree (name); - } - else - { - /* 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); - - gas_assert (symbolP); - S_CLEAR_EXTERNAL (symbolP); - symbol_table_insert (symbolP); - } + /* If we have a .exit followed by a .procend, then the + symbol will have already been defined. */ + symbolP = symbol_find (name); + if (symbolP) + { + /* The symbol has already been defined! This can + happen if we have a .exit followed by a .procend. - if (symbolP) - last_call_info->end_symbol = symbolP; - else - as_bad (_("Symbol '%s' could not be created."), name); + This is *not* an error. All we want to do is free + the memory we just allocated for the name and continue. */ + xfree (name); + } + else + { + /* 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); + gas_assert (symbolP); + S_CLEAR_EXTERNAL (symbolP); + symbol_table_insert (symbolP); } + + if (symbolP) + last_call_info->end_symbol = symbolP; else - as_bad (_("No memory for symbol name.")); + as_bad (_("Symbol '%s' could not be created."), name); } #endif @@ -6925,7 +6912,7 @@ pa_proc (int unused ATTRIBUTE_UNUSED) within_procedure = TRUE; /* Create another call_info structure. */ - call_info = xmalloc (sizeof (struct call_info)); + call_info = XNEW (struct call_info); if (!call_info) as_fatal (_("Cannot allocate unwind descriptor\n")); @@ -7080,7 +7067,7 @@ pa_check_current_space_and_subspace (void) by the parameters to the .SPACE directive. */ static sd_chain_struct * -pa_parse_space_stmt (char *space_name, int create_flag) +pa_parse_space_stmt (const char *space_name, int create_flag) { char *name, *ptemp, c; char loadable, defined, private, sort; @@ -7300,8 +7287,7 @@ pa_space (int unused ATTRIBUTE_UNUSED) print_errors = 1; input_line_pointer = save_s; c = get_symbol_name (&name); - space_name = xmalloc (strlen (name) + 1); - strcpy (space_name, name); + space_name = xstrdup (name); (void) restore_line_pointer (c); sd_chain = pa_parse_space_stmt (space_name, 1); @@ -7365,8 +7351,7 @@ pa_subspace (int create_new) else { c = get_symbol_name (&name); - ss_name = xmalloc (strlen (name) + 1); - strcpy (ss_name, name); + ss_name = xstrdup (name); (void) restore_line_pointer (c); /* Load default values. */ @@ -7592,7 +7577,7 @@ pa_spaces_begin (void) i = 0; while (pa_def_spaces[i].name) { - char *name; + const char *name; /* Pick the right name to use for the new section. */ name = pa_def_spaces[i].name; @@ -7608,7 +7593,7 @@ pa_spaces_begin (void) i = 0; while (pa_def_subspaces[i].name) { - char *name; + const char *name; int applicable, subsegment; asection *segment = NULL; sd_chain_struct *space; @@ -7709,7 +7694,7 @@ pa_spaces_begin (void) by the given parameters. */ static sd_chain_struct * -create_new_space (char *name, +create_new_space (const char *name, int spnum, int loadable ATTRIBUTE_UNUSED, int defined, @@ -7720,13 +7705,8 @@ create_new_space (char *name, { sd_chain_struct *chain_entry; - chain_entry = xmalloc (sizeof (sd_chain_struct)); - if (!chain_entry) - as_fatal (_("Out of memory: could not allocate new space chain entry: %s\n"), - name); - - SPACE_NAME (chain_entry) = xmalloc (strlen (name) + 1); - strcpy (SPACE_NAME (chain_entry), name); + chain_entry = XNEW (sd_chain_struct); + SPACE_NAME (chain_entry) = xstrdup (name); SPACE_DEFINED (chain_entry) = defined; SPACE_USER_DEFINED (chain_entry) = user_defined; SPACE_SPNUM (chain_entry) = spnum; @@ -7792,7 +7772,7 @@ create_new_space (char *name, static ssd_chain_struct * create_new_subspace (sd_chain_struct *space, - char *name, + const char *name, int loadable ATTRIBUTE_UNUSED, int code_only ATTRIBUTE_UNUSED, int comdat, @@ -7808,12 +7788,8 @@ create_new_subspace (sd_chain_struct *space, { ssd_chain_struct *chain_entry; - chain_entry = xmalloc (sizeof (ssd_chain_struct)); - if (!chain_entry) - as_fatal (_("Out of memory: could not allocate new subspace chain entry: %s\n"), name); - - SUBSPACE_NAME (chain_entry) = xmalloc (strlen (name) + 1); - strcpy (SUBSPACE_NAME (chain_entry), name); + chain_entry = XNEW (ssd_chain_struct); + SUBSPACE_NAME (chain_entry) = xstrdup (name); /* Initialize subspace_defined. When we hit a .subspace directive we'll set it to 1 which "locks-in" the subspace attributes. */ @@ -7897,7 +7873,7 @@ update_subspace (sd_chain_struct *space, NULL if no such space exists. */ static sd_chain_struct * -is_defined_space (char *name) +is_defined_space (const char *name) { sd_chain_struct *chain_pointer; @@ -7946,7 +7922,7 @@ pa_segment_to_space (asection *seg) own subspace. */ static ssd_chain_struct * -is_defined_subspace (char *name) +is_defined_subspace (const char *name) { sd_chain_struct *space_chain; ssd_chain_struct *subspace_chain; @@ -8556,7 +8532,7 @@ pa_vtable_entry (int ignore ATTRIBUTE_UNUSED) if (new_fix) { - struct hppa_fix_struct * hppa_fix = obstack_alloc (¬es, sizeof (struct hppa_fix_struct)); + struct hppa_fix_struct * hppa_fix = XOBNEW (¬es, struct hppa_fix_struct); hppa_fix->fx_r_type = R_HPPA; hppa_fix->fx_r_field = e_fsel; @@ -8577,7 +8553,7 @@ pa_vtable_inherit (int ignore ATTRIBUTE_UNUSED) if (new_fix) { - struct hppa_fix_struct * hppa_fix = obstack_alloc (¬es, sizeof (struct hppa_fix_struct)); + struct hppa_fix_struct * hppa_fix = XOBNEW (¬es, struct hppa_fix_struct); hppa_fix->fx_r_type = R_HPPA; hppa_fix->fx_r_field = e_fsel; @@ -8694,7 +8670,7 @@ hppa_regname_to_dw2regnum (char *regname) unsigned int i; const char *p; char *q; - static struct { char *name; int dw2regnum; } regnames[] = + static struct { const char *name; int dw2regnum; } regnames[] = { { "sp", 30 }, { "rp", 2 }, };