aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog11
-rw-r--r--gas/config/tc-i386-intel.c11
-rw-r--r--gas/expr.c3
-rw-r--r--gas/expr.h1
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/i386/jump.d20
-rw-r--r--gas/testsuite/gas/i386/jump.s2
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 <jbeulich@novell.com>
+
+ 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 <sterling@tensilica.com>
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 <jbeulich@novell.com>
+
+ PR gas/11732
+ * gas/i386/jump.d: Adjust.
+ * gas/i386/jump.s: Add check for branch to 2+$.
+
2010-06-18 Joseph Myers <joseph@codesourcery.com>
* 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