From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9063 invoked by alias); 31 Aug 2009 14:14:17 -0000 Received: (qmail 9042 invoked by uid 22791); 31 Aug 2009 14:14:14 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from nwd2mail10.analog.com (HELO nwd2mail10.analog.com) (137.71.25.55) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 31 Aug 2009 14:14:06 +0000 Received: from nwd2hubcas1.ad.analog.com ([10.64.73.29]) by nwd2mail10.analog.com with ESMTP; 31 Aug 2009 10:14:04 -0400 Received: from nwd2exm5.ad.analog.com (10.64.51.20) by NWD2HUBCAS1.ad.analog.com (10.64.73.29) with Microsoft SMTP Server id 8.1.358.0; Mon, 31 Aug 2009 10:14:04 -0400 Received: from nwd2exm20.ad.analog.com ([10.64.73.20]) by nwd2exm5.ad.analog.com with Microsoft SMTPSVC(6.0.3790.3959); Mon, 31 Aug 2009 10:14:02 -0400 Received: from chinexm1.ad.analog.com ([10.99.27.42]) by nwd2exm20.ad.analog.com with Microsoft SMTPSVC(6.0.3790.3959); Mon, 31 Aug 2009 10:14:02 -0400 Received: from [192.168.2.125] ([10.99.29.116]) by chinexm1.ad.analog.com with Microsoft SMTPSVC(6.0.3790.1830); Mon, 31 Aug 2009 22:13:53 +0800 Message-ID: <4A9BDA89.1040001@analog.com> Date: Mon, 31 Aug 2009 15:17:00 -0000 From: Jie Zhang User-Agent: Mozilla-Thunderbird 2.0.0.22 (X11/20090701) MIME-Version: 1.0 To: binutils@sourceware.org Subject: [PATCH] Add an argument to TC_START_LABEL Content-Type: multipart/mixed; boundary="------------040800020205050504070707" X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2009-08/txt/msg00579.txt.bz2 --------------040800020205050504070707 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Content-length: 388 Hi, I sent this patch one year ago, but there was no response at that time. http://sourceware.org/ml/binutils/2008-07/msg00186.html Without adding an argument to TC_START_LABEL, we would have to use a HORRIBLE HACK for bfin as fr30 and m32c do now. I have updated that patch to latest CVS HEAD and attached it in this email. I tested with bfin-elf, no regressions. Is it OK? Jie --------------040800020205050504070707 Content-Type: text/x-patch; name="binutils-gas-tc-start-label-2.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="binutils-gas-tc-start-label-2.diff" Content-length: 9536 * 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. Index: read.c =================================================================== RCS file: /cvs/src/src/gas/read.c,v retrieving revision 1.151 diff -u -p -r1.151 read.c --- read.c 22 Jun 2009 17:56:00 -0000 1.151 +++ read.c 31 Aug 2009 14:01:21 -0000 @@ -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: config/tc-arm.h =================================================================== RCS file: /cvs/src/src/gas/config/tc-arm.h,v retrieving revision 1.55 diff -u -p -r1.55 tc-arm.h --- config/tc-arm.h 7 Aug 2009 19:30:30 -0000 1.55 +++ config/tc-arm.h 31 Aug 2009 14:01:21 -0000 @@ -161,7 +161,7 @@ void arm_copy_symbol_attributes (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: config/tc-bfin.c =================================================================== RCS file: /cvs/src/src/gas/config/tc-bfin.c,v retrieving revision 1.23 diff -u -p -r1.23 tc-bfin.c --- config/tc-bfin.c 11 Aug 2009 18:44:12 -0000 1.23 +++ config/tc-bfin.c 31 Aug 2009 14:01:21 -0000 @@ -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: config/tc-bfin.h =================================================================== RCS file: /cvs/src/src/gas/config/tc-bfin.h,v retrieving revision 1.7 diff -u -p -r1.7 tc-bfin.h --- config/tc-bfin.h 11 Aug 2009 18:44:12 -0000 1.7 +++ config/tc-bfin.h 31 Aug 2009 14:01:21 -0000 @@ -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 (cha #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: config/tc-d30v.h =================================================================== RCS file: /cvs/src/src/gas/config/tc-d30v.h,v retrieving revision 1.13 diff -u -p -r1.13 tc-d30v.h --- config/tc-d30v.h 3 Jul 2007 11:01:04 -0000 1.13 +++ config/tc-d30v.h 31 Aug 2009 14:01:21 -0000 @@ -48,7 +48,7 @@ extern long md_pcrel_from_section (struc 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: config/tc-fr30.h =================================================================== RCS file: /cvs/src/src/gas/config/tc-fr30.h,v retrieving revision 1.13 diff -u -p -r1.13 tc-fr30.h --- config/tc-fr30.h 3 Jul 2007 11:01:04 -0000 1.13 +++ config/tc-fr30.h 31 Aug 2009 14:01:21 -0000 @@ -59,12 +59,8 @@ extern const struct relax_type md_relax_ /* 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: config/tc-m32c.h =================================================================== RCS file: /cvs/src/src/gas/config/tc-m32c.h,v retrieving revision 1.7 diff -u -p -r1.7 tc-m32c.h --- config/tc-m32c.h 12 Aug 2008 23:39:30 -0000 1.7 +++ config/tc-m32c.h 31 Aug 2009 14:01:21 -0000 @@ -77,13 +77,9 @@ extern long md_pcrel_from_section (struc /* 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: config/tc-m32r.h =================================================================== RCS file: /cvs/src/src/gas/config/tc-m32r.h,v retrieving revision 1.21 diff -u -p -r1.21 tc-m32r.h --- config/tc-m32r.h 3 Jul 2007 11:01:04 -0000 1.21 +++ config/tc-m32r.h 31 Aug 2009 14:01:21 -0000 @@ -102,7 +102,7 @@ extern int m32r_force_relocation (struct /* 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: config/tc-mep.h =================================================================== RCS file: /cvs/src/src/gas/config/tc-mep.h,v retrieving revision 1.7 diff -u -p -r1.7 tc-mep.h --- config/tc-mep.h 24 Jun 2009 00:51:09 -0000 1.7 +++ config/tc-mep.h 31 Aug 2009 14:01:21 -0000 @@ -97,7 +97,7 @@ extern void mep_prepare_relax_scan (frag #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: testsuite/gas/bfin/stack2.d =================================================================== RCS file: /cvs/src/src/gas/testsuite/gas/bfin/stack2.d,v retrieving revision 1.2 diff -u -p -r1.2 stack2.d --- testsuite/gas/bfin/stack2.d 26 Mar 2008 16:48:32 -0000 1.2 +++ testsuite/gas/bfin/stack2.d 31 Aug 2009 14:01:21 -0000 @@ -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: testsuite/gas/bfin/stack2.s =================================================================== RCS file: /cvs/src/src/gas/testsuite/gas/bfin/stack2.s,v retrieving revision 1.2 diff -u -p -r1.2 stack2.s --- testsuite/gas/bfin/stack2.s 14 Jul 2008 03:54:27 -0000 1.2 +++ testsuite/gas/bfin/stack2.s 31 Aug 2009 14:01:21 -0000 @@ -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 */ --------------040800020205050504070707--