This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH v2] config/tc-aarch64.c: Avoid trying to parse a vector mov as immediate.
- From: Marcus Shawcroft <marcus dot shawcroft at gmail dot com>
- To: Will Newton <will dot newton at linaro dot org>
- Cc: "binutils at sourceware dot org" <binutils at sourceware dot org>, Patch Tracking <patches at linaro dot org>
- Date: Tue, 5 Nov 2013 12:34:45 +0000
- Subject: Re: [PATCH v2] config/tc-aarch64.c: Avoid trying to parse a vector mov as immediate.
- Authentication-results: sourceware.org; auth=none
- References: <52742A15 dot 7090108 at linaro dot org>
OK thanks Will. I think this should be back ported.
/Marcus
On 1 November 2013 22:24, Will Newton <will.newton@linaro.org> wrote:
>
> Parsing a vector mov instruction currently leads to a phantom undefined
> symbol being added to the symbol table. e.g.:
>
> .text
> mov x0, v0.D[0]
>
> Produces an undefined symbol called "v0.D".
>
> gas/ChangeLog:
>
> 2013-11-01 Will Newton <will.newton@linaro.org>
>
> PR gas/16103
> * config/tc-aarch64.c (parse_operands): Avoid trying to
> parse a vector register as an immediate.
>
> gas/testsuite/ChangeLog:
>
> 2013-11-01 Will Newton <will.newton@linaro.org>
>
> * gas/aarch64/advsimd-mov-bad.d: New file.
> * gas/aarch64/advsimd-mov-bad.s: Likewise.
> ---
> gas/config/tc-aarch64.c | 3 ++-
> gas/testsuite/gas/aarch64/advsimd-mov-bad.d | 12 ++++++++++++
> gas/testsuite/gas/aarch64/advsimd-mov-bad.s | 2 ++
> 3 files changed, 16 insertions(+), 1 deletion(-)
> create mode 100644 gas/testsuite/gas/aarch64/advsimd-mov-bad.d
> create mode 100644 gas/testsuite/gas/aarch64/advsimd-mov-bad.s
>
> Changes in v2:
> - Add testcase
> - Add PR to changelog
>
> diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
> index 14ffdad..02fe4de 100644
> --- a/gas/config/tc-aarch64.c
> +++ b/gas/config/tc-aarch64.c
> @@ -4810,7 +4810,8 @@ parse_operands (char *str, const aarch64_opcode *opcode)
> case AARCH64_OPND_IMM_MOV:
> {
> char *saved = str;
> - if (reg_name_p (str, REG_TYPE_R_Z_SP))
> + if (reg_name_p (str, REG_TYPE_R_Z_SP) ||
> + reg_name_p (str, REG_TYPE_VN))
> goto failure;
> str = saved;
> po_misc_or_fail (my_get_expression (&inst.reloc.exp, &str,
> diff --git a/gas/testsuite/gas/aarch64/advsimd-mov-bad.d b/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
> new file mode 100644
> index 0000000..6ca9887
> --- /dev/null
> +++ b/gas/testsuite/gas/aarch64/advsimd-mov-bad.d
> @@ -0,0 +1,12 @@
> +#source: advsimd-mov-bad.s
> +#readelf: -s --wide
> +
> +Symbol table '.symtab' contains 6 entries:
> + +Num:.*
> + +[0-9]+:.*
> + +[0-9]+:.*
> + +[0-9]+:.*
> + +[0-9]+:.*
> + +[0-9]+:.*
> +#failif
> + +[0-9]+: +[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND v0.D
> diff --git a/gas/testsuite/gas/aarch64/advsimd-mov-bad.s b/gas/testsuite/gas/aarch64/advsimd-mov-bad.s
> new file mode 100644
> index 0000000..d7ba226
> --- /dev/null
> +++ b/gas/testsuite/gas/aarch64/advsimd-mov-bad.s
> @@ -0,0 +1,2 @@
> + .text
> + mov x0, v0.D[0]
> --
> 1.8.1.4
>