* read.c (TC_START_LABEL): Add a new argument.

(read_a_source_file): Pass the beginning of the symbol through
	the new argument of TC_START_LABEL.
	* config/tc-arm.h (TC_START_LABEL): Add a new argument.
	* config/tc-bfin.c (bfin_start_label): Only search '(' and '['
	from the beginning of the symbol.
	* config/tc-bfin.h (TC_START_LABEL): Add the new argument.
	* config/tc-d30v.h (TC_START_LABEL): Likewise.
	* config/tc-fr30.h (TC_START_LABEL): Likewise.
	* config/tc-m32c.h (TC_START_LABEL): Likewise.
	* config/tc-m32r.h (TC_START_LABEL): Likewise.
	* config/tc-mep.h (TC_START_LABEL): Likewise.

	testsuite/
	* gas/bfin/stack2.s: Add pop multiple instruction with a label
	on the same line.
	* gas/bfin/stack2.d: Adjust accordingly.
This commit is contained in:
Jie Zhang 2009-09-01 00:24:02 +00:00
parent 194ca99d08
commit 5e8c8f8f89
13 changed files with 44 additions and 28 deletions

View File

@ -1,3 +1,18 @@
2009-09-01 Jie Zhang <jie.zhang@analog.com>
* read.c (TC_START_LABEL): Add a new argument.
(read_a_source_file): Pass the beginning of the symbol through
the new argument of TC_START_LABEL.
* config/tc-arm.h (TC_START_LABEL): Add a new argument.
* config/tc-bfin.c (bfin_start_label): Only search '(' and '['
from the beginning of the symbol.
* config/tc-bfin.h (TC_START_LABEL): Add the new argument.
* config/tc-d30v.h (TC_START_LABEL): Likewise.
* config/tc-fr30.h (TC_START_LABEL): Likewise.
* config/tc-m32c.h (TC_START_LABEL): Likewise.
* config/tc-m32r.h (TC_START_LABEL): Likewise.
* config/tc-mep.h (TC_START_LABEL): Likewise.
2009-08-31 H.J. Lu <hongjiu.lu@intel.com>
PR gas/10570

View File

@ -161,7 +161,7 @@ void arm_copy_symbol_attributes (symbolS *, symbolS *);
(arm_copy_symbol_attributes (DEST, SRC))
#endif
#define TC_START_LABEL(C,STR) (c == ':' || (c == '/' && arm_data_in_code ()))
#define TC_START_LABEL(C,S,STR) (C == ':' || (C == '/' && arm_data_in_code ()))
#define tc_canonicalize_symbol_name(str) arm_canonicalize_symbol_name (str);
#define obj_adjust_symtab() arm_adjust_symtab ()

View File

@ -2175,15 +2175,14 @@ bfin_eol_in_insn (char *line)
}
bfd_boolean
bfin_start_label (char *ptr)
bfin_start_label (char *s, char *ptr)
{
ptr--;
while (!ISSPACE (*ptr) && !is_end_of_line[(unsigned char) *ptr])
ptr--;
ptr++;
if (*ptr == '(' || *ptr == '[')
return FALSE;
while (s != ptr)
{
if (*s == '(' || *s == '[')
return FALSE;
s++;
}
return TRUE;
}

View File

@ -40,7 +40,7 @@
#define WORKING_DOT_WORD
extern void bfin_start_line_hook (void);
extern bfd_boolean bfin_start_label (char *);
extern bfd_boolean bfin_start_label (char *, char *);
#define md_start_line_hook() bfin_start_line_hook()
#define md_number_to_chars number_to_chars_littleendian
@ -61,7 +61,7 @@ extern bfd_boolean bfin_eol_in_insn (char *);
#define DOUBLESLASH_LINE_COMMENTS
#define TC_START_LABEL(ch ,ptr) (ch == ':' && bfin_start_label (ptr))
#define TC_START_LABEL(c, s, ptr) (c == ':' && bfin_start_label (s, ptr))
#define tc_fix_adjustable(FIX) bfin_fix_adjustable (FIX)
extern bfd_boolean bfin_fix_adjustable (struct fix *);

View File

@ -48,7 +48,7 @@ extern long md_pcrel_from_section (struct fix *, segT);
int d30v_cleanup (int);
#define md_after_pass_hook() d30v_cleanup (FALSE)
#define md_cleanup() d30v_cleanup (FALSE)
#define TC_START_LABEL(ch, ptr) (ch == ':' && d30v_cleanup (FALSE))
#define TC_START_LABEL(ch, s, ptr) (ch == ':' && d30v_cleanup (FALSE))
void d30v_start_line (void);
#define md_start_line_hook() d30v_start_line ()

View File

@ -59,12 +59,8 @@ extern const struct relax_type md_relax_table[];
/* We need a special version of the TC_START_LABEL macro so that we
allow the LDI:8, LDI:20, LDI:32 and delay slot instructions to be
parsed as such. Note - in a HORRIBLE HACK, we make use of the
knowledge that this marco is only ever evaluated in one place
(read_a_source_file in read.c) where we can access the local
variable 's' - the start of the symbol that was terminated by
'character'. Also we need to be able to change the contents of
parsed as such. We need to be able to change the contents of
the local variable 'c' which is passed to this macro as 'character'. */
#define TC_START_LABEL(character, i_l_p) \
#define TC_START_LABEL(character, s, i_l_p) \
((character) != ':' ? 0 : (character = fr30_is_colon_insn (s)) ? 0 : ((character = ':'), 1))
extern char fr30_is_colon_insn (char *);

View File

@ -77,13 +77,9 @@ extern long md_pcrel_from_section (struct fix *, segT);
/* We need a special version of the TC_START_LABEL macro so that we
allow the :Z, :S, :Q and :G suffixes to be
parsed as such. Note - in a HORRIBLE HACK, we make use of the
knowledge that this marco is only ever evaluated in one place
(read_a_source_file in read.c) where we can access the local
variable 's' - the start of the symbol that was terminated by
'character'. Also we need to be able to change the contents of
parsed as such. We need to be able to change the contents of
the local variable 'c' which is passed to this macro as 'character'. */
#define TC_START_LABEL(character, i_l_p) \
#define TC_START_LABEL(character, s, i_l_p) \
((character) != ':' ? 0 : (character = m32c_is_colon_insn (s)) ? 0 : ((character = ':'), 1))
extern char m32c_is_colon_insn (char *);

View File

@ -102,7 +102,7 @@ extern int m32r_force_relocation (struct fix *);
/* Ensure insns at labels are aligned to 32 bit boundaries. */
int m32r_fill_insn (int);
#define md_after_pass_hook() m32r_fill_insn (1)
#define TC_START_LABEL(ch, ptr) (ch == ':' && m32r_fill_insn (0))
#define TC_START_LABEL(ch, s, ptr) (ch == ':' && m32r_fill_insn (0))
#define md_cleanup m32r_elf_section_change_hook
#define md_elf_section_change_hook m32r_elf_section_change_hook

View File

@ -97,7 +97,7 @@ extern void mep_prepare_relax_scan (fragS *, offsetT *, relax_substateT);
#define VTEXT_SECTION_NAME ".vtext"
/* Needed to process pending instructions when a label is encountered. */
#define TC_START_LABEL(ch, ptr) ((ch == ':') && mep_flush_pending_output ())
#define TC_START_LABEL(ch, s, ptr) ((ch == ':') && mep_flush_pending_output ())
#define tc_unrecognized_line(c) mep_unrecognized_line (c)
extern int mep_unrecognized_line (int);

View File

@ -42,7 +42,7 @@
#include "dw2gencfi.h"
#ifndef TC_START_LABEL
#define TC_START_LABEL(x,y) (x == ':')
#define TC_START_LABEL(x,y,z) (x == ':')
#endif
/* Set by the object-format or the target. */
@ -760,7 +760,7 @@ read_a_source_file (char *name)
S points to the beginning of the symbol.
[In case of pseudo-op, s->'.'.]
Input_line_pointer->'\0' where c was. */
if (TC_START_LABEL (c, input_line_pointer))
if (TC_START_LABEL (c, s, input_line_pointer))
{
if (flag_m68k_mri)
{

View File

@ -1,3 +1,9 @@
2009-09-01 Jie Zhang <jie.zhang@analog.com>
* gas/bfin/stack2.s: Add pop multiple instruction with a label
on the same line.
* gas/bfin/stack2.d: Adjust accordingly.
2009-08-31 Jan Beulich <jbeulich@novell.com>
* gas/elf/section5.l: Remove no longer issued warning pattern.

View File

@ -81,3 +81,5 @@ Disassembly of section .text:
94: 00 e8 02 00 LINK 0x8;.*
98: 00 e8 ff ff LINK 0x3fffc;.*
9c: 01 e8 00 00 UNLINK;
a0: b3 05 \(R7:6, P5:3\) = \[SP\+\+\];
\.\.\.

View File

@ -123,3 +123,5 @@ LINK 0X8;
LINK 0x3FFFC;
UNLINK ; /* de-allocate the stack frame (b)*/
L$L$foo: (R7:6,P5:3) = [SP++]; /* Pop multiple on the same line with a label */