From bb7835b8e53aaad0111d20020ab2c2c6310405e1 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 16 Apr 2010 11:20:41 +0000 Subject: [PATCH] PR gas/11395 * config/tc-hppa.c (pa_ip): Do not allow 64-bit add condition matcher to accept and unconditional 32-bit add instruction. (pa_build_unwind_subspace): Cope with error conditions not allowing the start symbol to be set. * gas/hppa/basic/add2.s: Add test of simple 32-bit instruction. * gas/hppa/basic/basic.exp (do_add2): Add grep for expected disassembly. --- gas/ChangeLog | 8 ++++++++ gas/config/tc-hppa.c | 10 ++++++++++ gas/testsuite/ChangeLog | 9 ++++++++- gas/testsuite/gas/hppa/basic/add2.s | 4 ++++ gas/testsuite/gas/hppa/basic/basic.exp | 3 ++- 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index d2551db86ea..5f5d2b12804 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2010-04-16 Nick Clifton + + PR gas/11395 + * config/tc-hppa.c (pa_ip): Do not allow 64-bit add condition + matcher to accept and unconditional 32-bit add instruction. + (pa_build_unwind_subspace): Cope with error conditions not + allowing the start symbol to be set. + 2010-04-15 Matthew Gretton-Dann * config/tc-arm.c (arm_convert_symbolic_attribute): Add support for diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c index 4b7c121b9d1..186b3478d11 100644 --- a/gas/config/tc-hppa.c +++ b/gas/config/tc-hppa.c @@ -3968,6 +3968,12 @@ pa_ip (char *str) /* Handle an add condition. */ case 'A': + /* PR gas/11395 + If we are looking for 64-bit add conditions and we + do not have the ",*" prefix, then we have no match. */ + if (*s != ',') + break; + /* Fall through. */ case 'a': cmpltr = 0; flag = 0; @@ -5969,6 +5975,10 @@ pa_build_unwind_subspace (struct call_info *call_info) != (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) return; + if (call_info->start_symbol == NULL) + /* This can happen if there were errors earlier on in the assembly. */ + return; + /* Replace the start symbol with a local symbol that will be reduced to a section offset. This avoids problems with weak functions with multiple definitions, etc. */ diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 7056cc4c383..797a2b4f78e 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2010-04-16 Nick Clifton + + PR gas/11395 + * gas/hppa/basic/add2.s: Add test of simple 32-bit instruction. + * gas/hppa/basic/basic.exp (do_add2): Add grep for expected + disassembly. + 2010-04-15 Matthew Gretton-Dann * gas/arm/attr-mcpu.d: Update for new attribute tag names. @@ -19,7 +26,7 @@ * gas/arm/attr-mfpu-vfpv4-d16.d: Likewise. * gas/arm/attr-mfpu-vfpv4.d: Likewise. * gas/arm/attr-mfpu-vfpxd.d: Likewise. - * gas/arm/attr-names.d: Add test to make sure all attribute names + * gas/arm/attr-names.d: Add test to make sure all attribute names are recognised. * gas/arm/attr-names.s: Likewise. diff --git a/gas/testsuite/gas/hppa/basic/add2.s b/gas/testsuite/gas/hppa/basic/add2.s index b50f515d701..c630a4c4c90 100644 --- a/gas/testsuite/gas/hppa/basic/add2.s +++ b/gas/testsuite/gas/hppa/basic/add2.s @@ -90,3 +90,7 @@ add,tsv,dc,*vnz %r4,%r5,%r6 add,tsv,dc,*nsv %r4,%r5,%r6 add,tsv,dc,*ev %r4,%r5,%r6 + + ;; PR gas/11395: Check for the correct assembly + ;; of an unconditional 32-bit add instruction. + add %r1,%r1,%r1 diff --git a/gas/testsuite/gas/hppa/basic/basic.exp b/gas/testsuite/gas/hppa/basic/basic.exp index b2297387ecb..f99ca7b1a6d 100644 --- a/gas/testsuite/gas/hppa/basic/basic.exp +++ b/gas/testsuite/gas/hppa/basic/basic.exp @@ -674,6 +674,7 @@ proc do_add2 {} { -re "^ +\[0-9\]+ 0134 08A4BF26\[^\n\]*\n" { set x [expr $x+1] } -re "^ +\[0-9\]+ 0138 08A4DF26\[^\n\]*\n" { set x [expr $x+1] } -re "^ +\[0-9\]+ 013c 08A4FF26\[^\n\]*\n" { set x [expr $x+1] } + -re "^ +\[0-9\]+ 0140 08210601\[^\n\]*\n" { set x [expr $x+1] } -re "\[^\n\]*\n" { } timeout { perror "timeout\n"; break } eof { break } @@ -685,7 +686,7 @@ proc do_add2 {} { gas_finish # Did we find what we were looking for? If not, flunk it. - if [expr $x==80] then { pass $testname } else { fail $testname } + if [expr $x==81] then { pass $testname } else { fail $testname } } proc do_sh1add {} { -- 2.30.2