From 5e0d7f77b20d74d2866e41b72697581c39f3197b Mon Sep 17 00:00:00 2001 From: Michael Perkins Date: Tue, 10 Mar 2015 11:47:46 +0000 Subject: [PATCH] Fixes a bug in the ARM port of GAS when parsing inverted register lists. * config/tc-arm.c (parse_operands): Fix bug setting writeback values for '^' on OP_REGLSTs. (do_push_pop): Add new writeback constraint. --- gas/ChangeLog | 6 ++++++ gas/config/tc-arm.c | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 992eee5..0a6a4b9 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2015-03-10 Michael Perkins + + * config/tc-arm.c (parse_operands): Fix bug setting writeback + values for '^' on OP_REGLSTs. + (do_push_pop): Add new writeback constraint. + 2015-03-10 Renlin Li * config/tc-arm.c (mapping_state): Remove first MAP_DATA emitting code. diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index ded989a..1f15116 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -7038,7 +7038,7 @@ parse_operands (char *str, const unsigned int *pattern, bfd_boolean thumb) val = parse_reg_list (&str); if (*str == '^') { - inst.operands[1].writeback = 1; + inst.operands[i].writeback = 1; str++; } break; @@ -9036,6 +9036,8 @@ do_pli (void) static void do_push_pop (void) { + constraint (inst.operands[0].writeback, + _("push/pop do not support {reglist}^")); inst.operands[1] = inst.operands[0]; memset (&inst.operands[0], 0, sizeof inst.operands[0]); inst.operands[0].isreg = 1; -- 2.7.4