/* tc-tic4x.c -- Assemble for the Texas Instruments TMS320C[34]x.
- Copyright (C) 1997,1998, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010,
- 2012 Free Software Foundation. Inc.
+ Copyright (C) 1997-2015 Free Software Foundation, Inc.
Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz)
o .align cannot handle fill-data-width larger than 0xFF/8-bits. It
should be possible to define a 32-bits pattern.
- o .align fills all section with NOP's when used regardless if has
- been used in .text or .data. (However the .align is primarily
- intended used in .text sections. If you require something else,
- use .align <size>,0x00)
-
o .align: Implement a 'bu' insn if the number of nop's exceeds 4
within the align frag. if(fragsize>4words) insert bu fragend+1
first.
#include "safe-ctype.h"
#include "opcode/tic4x.h"
#include "subsegs.h"
-#include "obstack.h"
/* OK, we accept a syntax similar to the other well known C30
assembly tools. With TIC4X_ALT_SYNTAX defined we are more
#define OPTION_ENHANCED (OPTION_MD_BASE + 7)
#define OPTION_REV (OPTION_MD_BASE + 8)
-CONST char *md_shortopts = "bm:prs";
+const char *md_shortopts = "bm:prs";
struct option md_longopts[] =
{
{ "mcpu", required_argument, NULL, OPTION_CPU },
static void
tic4x_cons (int bytes)
{
- register unsigned int c;
+ unsigned int c;
do
{
SKIP_WHITESPACE ();
tic4x_stringer (int append_zero)
{
int bytes;
- register unsigned int c;
+ unsigned int c;
bytes = 0;
do
char *s;
int i;
int parsed = 0;
+ size_t len;
tic4x_inst_t *inst; /* Instruction template. */
tic4x_inst_t *first_inst;
s++;
if (*s) /* Null terminate for hash_find. */
*s++ = '\0'; /* and skip past null. */
- strcat (insn->name, "_");
- strncat (insn->name, str, TIC4X_NAME_MAX - strlen (insn->name));
+ len = strlen (insn->name);
+ snprintf (insn->name + len, TIC4X_NAME_MAX - len, "_%s", str);
insn->operands[insn->num_operands++].mode = M_PARALLEL;
s++;
if (*s) /* Null terminate for hash_find. */
*s++ = '\0'; /* and skip past null. */
- strncpy (insn->name, str, TIC4X_NAME_MAX - 3);
+ strncpy (insn->name, str, TIC4X_NAME_MAX - 1);
+ insn->name[TIC4X_NAME_MAX - 1] = '\0';
if ((i = tic4x_operands_parse (s, insn->operands, 0)) < 0)
{
{
if (fill == NULL)
{
- /* FIXME: subseg_text_p tests SEC_CODE which isn't in allowed
- section flags. See bfd/coff-tic4x.c target vecs. */
- if (1 || subseg_text_p (now_seg))
+ if (subseg_text_p (now_seg))
{
char nop[4];