From b7adb16d69397ae6c112d60d2b22f40ec22493b7 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Tue, 22 Jun 2010 07:43:41 +0000 Subject: [PATCH] gas/ 2010-06-22 Jan Beulich PR gas/11732 * config/tc-i386-intel.c (i386_intel_parse_name): Handle pseudo symbols named "$". (i386_intel_operand): Remove bogus handling of pseudo symbols named "$". * expr.c (current_location): Remove 'static' and local declaration. * expr.h (current_location): Declare. gas/testsuite/ 2010-06-22 Jan Beulich PR gas/11732 * gas/i386/jump.d: Adjust. * gas/i386/jump.s: Add check for branch to 2+$. --- gas/ChangeLog | 11 +++++++++++ gas/config/tc-i386-intel.c | 11 ++++++----- gas/expr.c | 3 +-- gas/expr.h | 1 + gas/testsuite/ChangeLog | 6 ++++++ gas/testsuite/gas/i386/jump.d | 20 +++++++++++--------- gas/testsuite/gas/i386/jump.s | 2 ++ 7 files changed, 38 insertions(+), 16 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 818bd76..1d6f0e0 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,14 @@ +2010-06-22 Jan Beulich + + PR gas/11732 + * config/tc-i386-intel.c (i386_intel_parse_name): Handle pseudo + symbols named "$". + (i386_intel_operand): Remove bogus handling of pseudo symbols + named "$". + * expr.c (current_location): Remove 'static' and local + declaration. + * expr.h (current_location): Declare. + 2010-06-21 Sterling Augustine PR gas/11728 diff --git a/gas/config/tc-i386-intel.c b/gas/config/tc-i386-intel.c index 1636344..186acc0 100644 --- a/gas/config/tc-i386-intel.c +++ b/gas/config/tc-i386-intel.c @@ -191,6 +191,12 @@ static int i386_intel_parse_name (const char *name, expressionS *e) { unsigned int j; + if (! strcmp (name, "$")) + { + current_location (e); + return 1; + } + for (j = 0; i386_types[j].name; ++j) if (strcasecmp(i386_types[j].name, name) == 0) { @@ -505,11 +511,6 @@ i386_intel_operand (char *operand_string, int got_a_float) saved_input_line_pointer = input_line_pointer; input_line_pointer = buf = xstrdup (operand_string); - /* A '$' followed by an identifier char is an identifier. Otherwise, - it's operator '.' followed by an expression. */ - if (*buf == '$' && !is_identifier_char (buf[1])) - *buf = '.'; - intel_syntax = -1; memset (&exp, 0, sizeof(exp)); exp_seg = expression (&exp); diff --git a/gas/expr.c b/gas/expr.c index 4517bc6..a6910bf 100644 --- a/gas/expr.c +++ b/gas/expr.c @@ -45,7 +45,6 @@ static valueT generic_bignum_to_int64 (void); #endif static void integer_constant (int radix, expressionS * expressionP); static void mri_char_constant (expressionS *); -static void current_location (expressionS *); static void clean_up_expression (expressionS * expressionP); static segT operand (expressionS *, enum expr_mode); static operatorT operatorf (int *); @@ -695,7 +694,7 @@ mri_char_constant (expressionS *expressionP) /* Return an expression representing the current location. This handles the magic symbol `.'. */ -static void +void current_location (expressionS *expressionp) { if (now_seg == absolute_section) diff --git a/gas/expr.h b/gas/expr.h index 8a553a7..cce932d 100644 --- a/gas/expr.h +++ b/gas/expr.h @@ -174,6 +174,7 @@ extern segT expr (int, expressionS *, enum expr_mode); extern unsigned int get_single_number (void); extern symbolS *make_expr_symbol (expressionS * expressionP); extern int expr_symbol_where (symbolS *, char **, unsigned int *); +extern void current_location (expressionS *); extern symbolS *expr_build_uconstant (offsetT); extern symbolS *expr_build_dot (void); diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 008475b..d46c075 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-06-22 Jan Beulich + + PR gas/11732 + * gas/i386/jump.d: Adjust. + * gas/i386/jump.s: Add check for branch to 2+$. + 2010-06-18 Joseph Myers * gas/tic6x/resource-func-unit-1.d, diff --git a/gas/testsuite/gas/i386/jump.d b/gas/testsuite/gas/i386/jump.d index e53f09d..6dcecec 100644 --- a/gas/testsuite/gas/i386/jump.d +++ b/gas/testsuite/gas/i386/jump.d @@ -34,22 +34,24 @@ Disassembly of section .text: [ ]*[a-f0-9]+: ff 2b ljmp \*\(%ebx\) [ ]*[a-f0-9]+: eb 00 jmp (0x)?7b( <.text(\+0x7b)?>)? [ ]*[a-f0-9]+: 90 nop -[ ]*[a-f0-9]+: eb 00 jmp (0x)?7e( <.text(\+0x7e)?>)? +[ ]*[a-f0-9]+: e3 00 jecxz (0x)?7e( <.text(\+0x7e)?>)? +[ ]*[a-f0-9]+: 90 nop +[ ]*[a-f0-9]+: eb 00 jmp (0x)?81( <.text(\+0x81)?>)? [ ]*[a-f0-9]+: 90 nop [ ]*[a-f0-9]+: 9a 90 90 90 90 90 90 lcall \$0x9090,\$0x90909090 [ ]*[a-f0-9]+: 9a 90 90 90 90 90 90 lcall \$0x9090,\$0x90909090 -[ ]*[a-f0-9]+: 9a 00 00 00 00 90 90 lcall \$0x9090,\$0x0 8e: (R_386_)?(dir)?32 xxx -[ ]*[a-f0-9]+: 9a 00 00 00 00 90 90 lcall \$0x9090,\$0x0 95: (R_386_)?(dir)?32 xxx +[ ]*[a-f0-9]+: 9a 00 00 00 00 90 90 lcall \$0x9090,\$0x0[ ]+[a-f0-9]+: (R_386_)?(dir)?32 xxx +[ ]*[a-f0-9]+: 9a 00 00 00 00 90 90 lcall \$0x9090,\$0x0[ ]+[a-f0-9]+: (R_386_)?(dir)?32 xxx [ ]*[a-f0-9]+: 9a 90 90 90 90 90 90 lcall \$0x9090,\$0x90909090 [ ]*[a-f0-9]+: 9a 90 90 90 90 90 90 lcall \$0x9090,\$0x90909090 -[ ]*[a-f0-9]+: 9a 00 00 00 00 90 90 lcall \$0x9090,\$0x0 aa: (R_386_)?(dir)?32 xxx -[ ]*[a-f0-9]+: 9a 00 00 00 00 90 90 lcall \$0x9090,\$0x0 b1: (R_386_)?(dir)?32 xxx +[ ]*[a-f0-9]+: 9a 00 00 00 00 90 90 lcall \$0x9090,\$0x0[ ]+[a-f0-9]+: (R_386_)?(dir)?32 xxx +[ ]*[a-f0-9]+: 9a 00 00 00 00 90 90 lcall \$0x9090,\$0x0[ ]+[a-f0-9]+: (R_386_)?(dir)?32 xxx [ ]*[a-f0-9]+: ea 90 90 90 90 90 90 ljmp \$0x9090,\$0x90909090 [ ]*[a-f0-9]+: ea 90 90 90 90 90 90 ljmp \$0x9090,\$0x90909090 -[ ]*[a-f0-9]+: ea 00 00 00 00 90 90 ljmp \$0x9090,\$0x0 c6: (R_386_)?(dir)?32 xxx -[ ]*[a-f0-9]+: ea 00 00 00 00 90 90 ljmp \$0x9090,\$0x0 cd: (R_386_)?(dir)?32 xxx +[ ]*[a-f0-9]+: ea 00 00 00 00 90 90 ljmp \$0x9090,\$0x0[ ]+[a-f0-9]+: (R_386_)?(dir)?32 xxx +[ ]*[a-f0-9]+: ea 00 00 00 00 90 90 ljmp \$0x9090,\$0x0[ ]+[a-f0-9]+: (R_386_)?(dir)?32 xxx [ ]*[a-f0-9]+: ea 90 90 90 90 90 90 ljmp \$0x9090,\$0x90909090 [ ]*[a-f0-9]+: ea 90 90 90 90 90 90 ljmp \$0x9090,\$0x90909090 -[ ]*[a-f0-9]+: ea 00 00 00 00 90 90 ljmp \$0x9090,\$0x0 e2: (R_386_)?(dir)?32 xxx -[ ]*[a-f0-9]+: ea 00 00 00 00 90 90 ljmp \$0x9090,\$0x0 e9: (R_386_)?(dir)?32 xxx +[ ]*[a-f0-9]+: ea 00 00 00 00 90 90 ljmp \$0x9090,\$0x0[ ]+[a-f0-9]+: (R_386_)?(dir)?32 xxx +[ ]*[a-f0-9]+: ea 00 00 00 00 90 90 ljmp \$0x9090,\$0x0[ ]+[a-f0-9]+: (R_386_)?(dir)?32 xxx #pass diff --git a/gas/testsuite/gas/i386/jump.s b/gas/testsuite/gas/i386/jump.s index 8ce459f..eec3f0a 100644 --- a/gas/testsuite/gas/i386/jump.s +++ b/gas/testsuite/gas/i386/jump.s @@ -33,6 +33,8 @@ jmp fword ptr [ebx] jmp $+2 nop + jecxz 2+$ + nop jmp .+2 nop -- 2.7.4