mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 02:24:17 +08:00
* config/tc-m68k.c (struct label_line): Define.
(labels, current_label): New static variables. (md_assemble): Mark current_label as text, and clear it. (m68k_frob_label): New function. (m68k_flush_pending_output): New function. (m68k_frob_symbol): New function. * config/tc-m68k.h (tc_frob_label): Define. (md_flush_pending_output): Define. (tc_frob_symbol): Don't warn, just call m68k_frob_symbol. (tc_frob_coff_symbol): Likewise. PR 11417.
This commit is contained in:
@ -1,5 +1,16 @@
|
|||||||
Thu Jan 9 09:08:43 1997 Ian Lance Taylor <ian@cygnus.com>
|
Thu Jan 9 09:08:43 1997 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
|
* config/tc-m68k.c (struct label_line): Define.
|
||||||
|
(labels, current_label): New static variables.
|
||||||
|
(md_assemble): Mark current_label as text, and clear it.
|
||||||
|
(m68k_frob_label): New function.
|
||||||
|
(m68k_flush_pending_output): New function.
|
||||||
|
(m68k_frob_symbol): New function.
|
||||||
|
* config/tc-m68k.h (tc_frob_label): Define.
|
||||||
|
(md_flush_pending_output): Define.
|
||||||
|
(tc_frob_symbol): Don't warn, just call m68k_frob_symbol.
|
||||||
|
(tc_frob_coff_symbol): Likewise.
|
||||||
|
|
||||||
* read.c (read_a_source_file): When defining a macro in MRI mode,
|
* read.c (read_a_source_file): When defining a macro in MRI mode,
|
||||||
don't add the symbol to the symbol table.
|
don't add the symbol to the symbol table.
|
||||||
|
|
||||||
|
@ -103,6 +103,27 @@ static int m68k_rel32_from_cmdline;
|
|||||||
displacement. */
|
displacement. */
|
||||||
static enum m68k_size m68k_index_width_default = SIZE_LONG;
|
static enum m68k_size m68k_index_width_default = SIZE_LONG;
|
||||||
|
|
||||||
|
/* We want to warn if any text labels are misaligned. In order to get
|
||||||
|
the right line number, we need to record the line number for each
|
||||||
|
label. */
|
||||||
|
|
||||||
|
struct label_line
|
||||||
|
{
|
||||||
|
struct label_line *next;
|
||||||
|
symbolS *label;
|
||||||
|
char *file;
|
||||||
|
unsigned int line;
|
||||||
|
int text;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The list of labels. */
|
||||||
|
|
||||||
|
static struct label_line *labels;
|
||||||
|
|
||||||
|
/* The current label. */
|
||||||
|
|
||||||
|
static struct label_line *current_label;
|
||||||
|
|
||||||
/* Its an arbitrary name: This means I don't approve of it */
|
/* Its an arbitrary name: This means I don't approve of it */
|
||||||
/* See flames below */
|
/* See flames below */
|
||||||
static struct obstack robyn;
|
static struct obstack robyn;
|
||||||
@ -3310,6 +3331,13 @@ md_assemble (str)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If there is a current label, record that it marks an instruction. */
|
||||||
|
if (current_label != NULL)
|
||||||
|
{
|
||||||
|
current_label->text = 1;
|
||||||
|
current_label = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (the_ins.nfrag == 0)
|
if (the_ins.nfrag == 0)
|
||||||
{
|
{
|
||||||
/* No frag hacking involved; just put it out */
|
/* No frag hacking involved; just put it out */
|
||||||
@ -3729,7 +3757,57 @@ m68k_init_after_args ()
|
|||||||
if (cpu_of_arch (current_architecture) < m68020)
|
if (cpu_of_arch (current_architecture) < m68020)
|
||||||
md_relax_table[TAB (PCINDEX, BYTE)].rlx_more = 0;
|
md_relax_table[TAB (PCINDEX, BYTE)].rlx_more = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This is called when a label is defined. */
|
||||||
|
|
||||||
|
void
|
||||||
|
m68k_frob_label (sym)
|
||||||
|
symbolS *sym;
|
||||||
|
{
|
||||||
|
struct label_line *n;
|
||||||
|
|
||||||
|
n = (struct label_line *) xmalloc (sizeof *n);
|
||||||
|
n->next = labels;
|
||||||
|
n->label = sym;
|
||||||
|
as_where (&n->file, &n->line);
|
||||||
|
labels = n;
|
||||||
|
current_label = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is called when a value that is not an instruction is emitted. */
|
||||||
|
|
||||||
|
void
|
||||||
|
m68k_flush_pending_output ()
|
||||||
|
{
|
||||||
|
current_label = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is called at the end of the assembly, when the final value of
|
||||||
|
the label is known. We warn if this is a text symbol aligned at an
|
||||||
|
odd location. */
|
||||||
|
|
||||||
|
void
|
||||||
|
m68k_frob_symbol (sym)
|
||||||
|
symbolS *sym;
|
||||||
|
{
|
||||||
|
if ((S_GET_VALUE (sym) & 1) != 0)
|
||||||
|
{
|
||||||
|
struct label_line *l;
|
||||||
|
|
||||||
|
for (l = labels; l != NULL; l = l->next)
|
||||||
|
{
|
||||||
|
if (l->label == sym)
|
||||||
|
{
|
||||||
|
if (l->text)
|
||||||
|
as_warn_where (l->file, l->line,
|
||||||
|
"text label `%s' aligned to odd boundary",
|
||||||
|
S_GET_NAME (sym));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* This is called if we go in or out of MRI mode because of the .mri
|
/* This is called if we go in or out of MRI mode because of the .mri
|
||||||
pseudo-op. */
|
pseudo-op. */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user