* read.c (TC_START_LABEL): Add a new argument.
authorJie Zhang <jie.zhang@analog.com>
Tue, 1 Sep 2009 00:24:02 +0000 (00:24 +0000)
committerJie Zhang <jie.zhang@analog.com>
Tue, 1 Sep 2009 00:24:02 +0000 (00:24 +0000)
(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.

13 files changed:
gas/ChangeLog
gas/config/tc-arm.h
gas/config/tc-bfin.c
gas/config/tc-bfin.h
gas/config/tc-d30v.h
gas/config/tc-fr30.h
gas/config/tc-m32c.h
gas/config/tc-m32r.h
gas/config/tc-mep.h
gas/read.c
gas/testsuite/ChangeLog
gas/testsuite/gas/bfin/stack2.d
gas/testsuite/gas/bfin/stack2.s

index 9884c5de4845857df3f9cf8266f7d1489fa588a6..e6b08706b887d373d32062bacc288b7382e50383 100644 (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
index 2a85afd46b892f65feeaaee1c3508dd385f0b821..dacb342c69dd9a72e61e74825b293fab482a0f80 100644 (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 ()
 
index 1563e979e4c881f3e9a2e471f393ec0e4e83e4e0..ea8243a03d9a26ceca5d6b4f3dd8932dd10be28a 100644 (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;
 } 
index 2c9f4f3cfed5d2d85c0d64d4bdca52ad2e261327..976d39d3df728c6bc28b766ffb807ebc58ce2c44 100644 (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 *);
 
index e63ef41083214540f5cb9597e3bb7cc0e41ee407..da7326f6dd245ab0668a223c5f485f47b277618f 100644 (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 ()
 
index 54f60dbe40a4a341186c3b6b62e8eb0e8cdec863..9859c8b29136d0f33fb2fa7e81ae679ca49e36b2 100644 (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 *);
index 1b5a4835f2618bb61b18ef7461a1050ce4a1939d..4cab1d747a80237d364516daf585c73332a256a8 100644 (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 *);
 
index 8f031613517d302f554d8e43c73b4b9cfd32e092..cf5dbf4f5edfac41c72461fd051ccdc55ce2ad4e 100644 (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
index dd5118c3d3c0c4eb712f00b79e355a7a88f5e3ef..59f83b054317486b2f95fb7978187aa03564c46d 100644 (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);
index 40bb11b9d43e122a8cd36a5e886bd3f94ce04613..d3df99c78c15fafdd6e3551102b49120184c1e3b 100644 (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)
                    {
index 4a2f405bf956147903572a921fa55ae3e7663d86..708912226e790a302b08eceeacaaab57890fc0f7 100644 (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.
index d87b4ff8ae63c7203f235f0c8f9d11faef97c891..59d2d0208e0d5df5304ad74173f0f462c30a0a15 100644 (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\+\+\];
+       \.\.\.
index 0824e7bbbb7bd85bbbb69ef1bb3451d32508f8cd..adb4288e4f8ea4c23b841be6633c7f4e51bfaa7d 100755 (executable)
@@ -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 */