aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Bambrough <scottb@netwinder.org>2000-06-01 19:15:39 +0000
committerScott Bambrough <scottb@netwinder.org>2000-06-01 19:15:39 +0000
commit9fa3abac636abada18d487527408bfe341f8f84a (patch)
treee51c1e1c7f8bf6bb6351a3f49cb0f913df72c502
parent697fa7e0135defaf5ec7a3bbe4a3236adb70bd92 (diff)
downloadgdb-9fa3abac636abada18d487527408bfe341f8f84a.zip
gdb-9fa3abac636abada18d487527408bfe341f8f84a.tar.gz
gdb-9fa3abac636abada18d487527408bfe341f8f84a.tar.bz2
The ARM assembler is not assembling the following instruction
correctly. mrs lr, spsr The string pointer is advanced to far before the check to set the SPSR bit. 2000-06-01 Scott Bambrough <scottb@netwinder.org> * config/tc-arm.c (do_mrs): Allow SPSR_BIT to be set correctly.
-rw-r--r--gas/ChangeLog4
-rw-r--r--gas/config/tc-arm.c7
2 files changed, 9 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 0136e9c..2dd6941 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,7 @@
+2000-06-01 Scott Bambrough <scottb@netwinder.org>
+
+ * config/tc-arm.c (do_mrs): Allow SPSR_BIT to be set correctly.
+
2000-05-22 David O'Brien <obrien@FreeBSD.org>
* configure.in: Recognize alpha-*-freebsd*.
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 44c05b3..aadea26 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -1915,6 +1915,8 @@ do_mrs (str, flags)
char *str;
unsigned long flags;
{
+ int skip = 0;
+
/* Only one syntax. */
skip_whitespace (str);
@@ -1937,11 +1939,11 @@ do_mrs (str, flags)
/* Lower case versions for backwards compatability. */
|| strcmp (str, "cpsr") == 0
|| strcmp (str, "spsr") == 0)
- str += 4;
+ skip = 4;
/* This is for backwards compatability with older toolchains. */
else if (strcmp (str, "cpsr_all") == 0
|| strcmp (str, "spsr_all") == 0)
- str += 7;
+ skip = 7;
else
{
inst.error = _("{C|S}PSR expected");
@@ -1950,6 +1952,7 @@ do_mrs (str, flags)
if (* str == 's' || * str == 'S')
inst.instruction |= SPSR_BIT;
+ str += skip;
inst.instruction |= flags;
end_of_line (str);