commit 30d073ff050eef65c2e052e4249e187a8f703025 Author: Kyrylo Tkachov Date: Mon Nov 24 17:11:36 2014 +0000 [ARM] Add warnings about deprecated APCS epilogues diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 5077f87..9968eaa 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -8534,6 +8534,15 @@ encode_ldmstm(int from_push_pop_mnem) } } + if (inst.instruction & LOAD_BIT + && ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v7a)) + { + if (range & (1 << REG_SP)) + as_tsktsk (_("usage of SP in register list is deprecated")); + else if (range & (1 << REG_PC) && range & (1 << REG_LR)) + as_tsktsk (_("usage of both LR and PC in register list is deprecated")); + } + /* If PUSH/POP has only one register, then use the A2 encoding. */ one_reg = only_one_reg_in_list (range); if (from_push_pop_mnem && one_reg >= 0) diff --git a/gas/testsuite/gas/arm/arm-ldm-bad.d b/gas/testsuite/gas/arm/arm-ldm-bad.d new file mode 100644 index 0000000..8ce6a54 --- /dev/null +++ b/gas/testsuite/gas/arm/arm-ldm-bad.d @@ -0,0 +1,3 @@ +#name: ARM ldm/stm warnings +#as: -march=armv7-a +#error-output: arm-ldm-bad.l diff --git a/gas/testsuite/gas/arm/arm-ldm-bad.l b/gas/testsuite/gas/arm/arm-ldm-bad.l new file mode 100644 index 0000000..a21bf84 --- /dev/null +++ b/gas/testsuite/gas/arm/arm-ldm-bad.l @@ -0,0 +1,5 @@ +[^:]*: Assembler messages: +[^:]*:4: usage of both LR and PC in register list is deprecated +[^:]*:5: usage of both LR and PC in register list is deprecated +[^:]*:6: usage of SP in register list is deprecated +[^:]*:7: usage of SP in register list is deprecated diff --git a/gas/testsuite/gas/arm/arm-ldm-bad.s b/gas/testsuite/gas/arm/arm-ldm-bad.s new file mode 100644 index 0000000..d16cf5d --- /dev/null +++ b/gas/testsuite/gas/arm/arm-ldm-bad.s @@ -0,0 +1,7 @@ + .global entry + .text +entry: + ldm sp, {r4-r7,r11,lr,pc} + ldm sp!, {r4-r7,r11,lr,pc} + ldm r1, {r4-r7,sp} + ldm r1!, {r4-r7,sp} diff --git a/gas/testsuite/gas/cfi/cfi-arm-1.s b/gas/testsuite/gas/cfi/cfi-arm-1.s index d962442..481f4f2 100644 --- a/gas/testsuite/gas/cfi/cfi-arm-1.s +++ b/gas/testsuite/gas/cfi/cfi-arm-1.s @@ -23,7 +23,7 @@ foo: .cfi_offset r1, -16 .cfi_offset s1, -20 .cfi_offset d11, -48 - - ldmea fp, {fp, sp, pc} + + ldmea fp, {fp, ip, pc} .cfi_endproc .size foo, .-foo