X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gas%2Fconfig%2Ftc-tic30.c;h=f1954d0d935b63b22bc095c7d594f123eb991694;hb=b3adc24a0713411ab38a21dc894dd40dbc5c8f4f;hp=7439693832824f0f4328fee4e3a6fdf6264f4529;hpb=6f2750feaf2827ef8a1a0a5b2f90c1e9a6cabbd1;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/tc-tic30.c b/gas/config/tc-tic30.c index 7439693832..f1954d0d93 100644 --- a/gas/config/tc-tic30.c +++ b/gas/config/tc-tic30.c @@ -1,5 +1,5 @@ /* tc-c30.c -- Assembly code for the Texas Instruments TMS320C30 - Copyright (C) 1998-2016 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) This file is part of GAS, the GNU Assembler. @@ -31,7 +31,7 @@ /* Put here all non-digit non-letter characters that may occur in an operand. */ static char operand_special_chars[] = "%$-+(,)*._~/<>&^!:[@]"; -static char *ordinal_names[] = +static const char *ordinal_names[] = { N_("first"), N_("second"), N_("third"), N_("fourth"), N_("fifth") }; @@ -380,11 +380,10 @@ tic30_find_parallel_insn (char *current_line, char *next_line) } } } - parallel_insn = malloc (strlen (first_opcode) + strlen (first_operands) - + strlen (second_opcode) + strlen (second_operands) + 8); - sprintf (parallel_insn, "q_%s_%s %s | %s", - first_opcode, second_opcode, - first_operands, second_operands); + + parallel_insn = concat ("q_", first_opcode, "_", second_opcode, " ", + first_operands, " | ", second_operands, + (char *) NULL); debug ("parallel insn = %s\n", parallel_insn); return parallel_insn; } @@ -399,12 +398,10 @@ static operand * tic30_operand (char *token) { unsigned int count; - char ind_buffer[strlen (token)]; operand *current_op; debug ("In tic30_operand with %s\n", token); - current_op = malloc (sizeof (* current_op)); - memset (current_op, '\0', sizeof (operand)); + current_op = XCNEW (operand); if (*token == DIRECT_REFERENCE) { @@ -463,6 +460,9 @@ tic30_operand (char *token) int disp_number = 0; int buffer_posn = 1; ind_addr_type *ind_addr_op; + char * ind_buffer; + + ind_buffer = XNEWVEC (char, strlen (token)); debug ("Found indirect reference\n"); ind_buffer[0] = *token; @@ -480,11 +480,13 @@ tic30_operand (char *token) if (found_ar) { as_bad (_("More than one AR register found in indirect reference")); + free (ind_buffer); return NULL; } if (*(token + count + 1) < '0' || *(token + count + 1) > '7') { as_bad (_("Illegal AR register in indirect reference")); + free (ind_buffer); return NULL; } ar_number = *(token + count + 1) - '0'; @@ -505,6 +507,7 @@ tic30_operand (char *token) if (found_disp) { as_bad (_("More than one displacement found in indirect reference")); + free (ind_buffer); return NULL; } count++; @@ -513,6 +516,7 @@ tic30_operand (char *token) if (!is_digit_char (*(token + count))) { as_bad (_("Invalid displacement in indirect reference")); + free (ind_buffer); return NULL; } disp[disp_posn++] = *(token + (count++)); @@ -530,6 +534,7 @@ tic30_operand (char *token) if (!found_ar) { as_bad (_("AR register not found in indirect reference")); + free (ind_buffer); return NULL; } @@ -546,18 +551,21 @@ tic30_operand (char *token) { /* Maybe an implied displacement of 1 again. */ as_bad (_("required displacement wasn't given in indirect reference")); - return 0; + free (ind_buffer); + return NULL; } } else { as_bad (_("illegal indirect reference")); + free (ind_buffer); return NULL; } if (found_disp && (disp_number < 0 || disp_number > 255)) { as_bad (_("displacement must be an unsigned 8-bit number")); + free (ind_buffer); return NULL; } @@ -565,6 +573,7 @@ tic30_operand (char *token) current_op->indirect.disp = disp_number; current_op->indirect.ARnum = ar_number; current_op->op_type = Indirect; + free (ind_buffer); } else { @@ -593,9 +602,7 @@ tic30_operand (char *token) segT retval; debug ("Probably a label: %s\n", token); - current_op->immediate.label = malloc (strlen (token) + 1); - strcpy (current_op->immediate.label, token); - current_op->immediate.label[strlen (token)] = '\0'; + current_op->immediate.label = xstrdup (token); save_input_line_pointer = input_line_pointer; input_line_pointer = token; @@ -623,9 +630,7 @@ tic30_operand (char *token) for (count = 0; count < strlen (token); count++) if (*(token + count) == '.') current_op->immediate.decimal_found = 1; - current_op->immediate.label = malloc (strlen (token) + 1); - strcpy (current_op->immediate.label, token); - current_op->immediate.label[strlen (token)] = '\0'; + current_op->immediate.label = xstrdup (token); current_op->immediate.f_number = (float) atof (token); current_op->immediate.s_number = (int) atoi (token); current_op->immediate.u_number = (unsigned int) atoi (token); @@ -1152,7 +1157,7 @@ md_apply_fix (fixS *fixP, int md_parse_option (int c ATTRIBUTE_UNUSED, - char *arg ATTRIBUTE_UNUSED) + const char *arg ATTRIBUTE_UNUSED) { debug ("In md_parse_option()\n"); return 0; @@ -1207,7 +1212,7 @@ md_pcrel_from (fixS *fixP) return fixP->fx_where - fixP->fx_size + (INSN_SIZE * offset); } -char * +const char * md_atof (int what_statement_type, char *literalP, int *sizeP) @@ -1384,9 +1389,9 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixP) #undef MAP #undef F - rel = xmalloc (sizeof (* rel)); + rel = XNEW (arelent); gas_assert (rel != 0); - rel->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); + rel->sym_ptr_ptr = XNEW (asymbol *); *rel->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy); rel->address = fixP->fx_frag->fr_address + fixP->fx_where; rel->addend = 0;