[PATCH] LoongArch: Fix disassembly option parsing stopping at the first option

Lulu Cai cailulu@loongson.cn
Wed Mar 26 08:02:21 GMT 2025


On 3/24/25 3:54 PM, WANG Xuerui wrote:
> From: WANG Xuerui <git@xen0n.name>
>
> Turns out the return value of parse_loongarch_dis_option acts as an
> error code, and previously the function always signified failure with
> a non-zero return value, making only the first disassembly option get
> to take effect.
>
> Fix by adding the missing `return 0`'s to the two success code paths.

Thanks, it has been pushed to the trunk.

> Signed-off-by: WANG Xuerui <git@xen0n.name>
> ---
>   .../binutils-all/loongarch64/dis-options-multi.d       | 10 ++++++++++
>   .../binutils-all/loongarch64/dis-options-no-alises.d   | 10 ++++++++++
>   .../binutils-all/loongarch64/dis-options-numeric.d     | 10 ++++++++++
>   .../testsuite/binutils-all/loongarch64/dis-options.s   |  3 +++
>   opcodes/loongarch-dis.c                                |  7 ++++++-
>   5 files changed, 39 insertions(+), 1 deletion(-)
>   create mode 100644 binutils/testsuite/binutils-all/loongarch64/dis-options-multi.d
>   create mode 100644 binutils/testsuite/binutils-all/loongarch64/dis-options-no-alises.d
>   create mode 100644 binutils/testsuite/binutils-all/loongarch64/dis-options-numeric.d
>   create mode 100644 binutils/testsuite/binutils-all/loongarch64/dis-options.s
>
> diff --git a/binutils/testsuite/binutils-all/loongarch64/dis-options-multi.d b/binutils/testsuite/binutils-all/loongarch64/dis-options-multi.d
> new file mode 100644
> index 00000000000..2f34cb866d1
> --- /dev/null
> +++ b/binutils/testsuite/binutils-all/loongarch64/dis-options-multi.d
> @@ -0,0 +1,10 @@
> +#name: LoongArch disassembler options: multiple
> +#source: dis-options.s
> +#objdump: -d --no-show-raw-insn -M no-aliases,numeric
> +
> +#...
> +Disassembly of section \.text:
> +
> +[0-9a-f]+ <\.text>:
> +   [0-9a-f]+:[ 	]+or[ 	]+\$r4, \$r21, \$r0
> +   [0-9a-f]+:[ 	]+jirl[ 	]+\$r0, \$r1, 0
> diff --git a/binutils/testsuite/binutils-all/loongarch64/dis-options-no-alises.d b/binutils/testsuite/binutils-all/loongarch64/dis-options-no-alises.d
> new file mode 100644
> index 00000000000..eb4ea62afc9
> --- /dev/null
> +++ b/binutils/testsuite/binutils-all/loongarch64/dis-options-no-alises.d
> @@ -0,0 +1,10 @@
> +#name: LoongArch disassembler options: no-aliases
> +#source: dis-options.s
> +#objdump: -d --no-show-raw-insn -M no-aliases
> +
> +#...
> +Disassembly of section \.text:
> +
> +[0-9a-f]+ <\.text>:
> +   [0-9a-f]+:[ 	]+or[ 	]+\$a0, \$r21, \$zero
> +   [0-9a-f]+:[ 	]+jirl[ 	]+\$zero, \$ra, 0
> diff --git a/binutils/testsuite/binutils-all/loongarch64/dis-options-numeric.d b/binutils/testsuite/binutils-all/loongarch64/dis-options-numeric.d
> new file mode 100644
> index 00000000000..e669cef30bf
> --- /dev/null
> +++ b/binutils/testsuite/binutils-all/loongarch64/dis-options-numeric.d
> @@ -0,0 +1,10 @@
> +#name: LoongArch disassembler options: numeric
> +#source: dis-options.s
> +#objdump: -d --no-show-raw-insn -M numeric
> +
> +#...
> +Disassembly of section \.text:
> +
> +[0-9a-f]+ <\.text>:
> +   [0-9a-f]+:[ 	]+move[ 	]+\$r4, \$r21
> +   [0-9a-f]+:[ 	]+ret
> diff --git a/binutils/testsuite/binutils-all/loongarch64/dis-options.s b/binutils/testsuite/binutils-all/loongarch64/dis-options.s
> new file mode 100644
> index 00000000000..a3a4469eac3
> --- /dev/null
> +++ b/binutils/testsuite/binutils-all/loongarch64/dis-options.s
> @@ -0,0 +1,3 @@
> +.text
> +    move $a0, $r21
> +    ret
> diff --git a/opcodes/loongarch-dis.c b/opcodes/loongarch-dis.c
> index cc4a48c38b8..2e59bf8035f 100644
> --- a/opcodes/loongarch-dis.c
> +++ b/opcodes/loongarch-dis.c
> @@ -95,13 +95,18 @@ static int
>   parse_loongarch_dis_option (const char *option)
>   {
>     if (strcmp (option, "no-aliases") == 0)
> -    loongarch_dis_show_aliases = false;
> +    {
> +      loongarch_dis_show_aliases = false;
> +      return 0;
> +    }
>   
>     if (strcmp (option, "numeric") == 0)
>       {
>         loongarch_r_disname = loongarch_r_normal_name;
>         loongarch_f_disname = loongarch_f_normal_name;
> +      return 0;
>       }
> +
>     return -1;
>   }
>   




More information about the Binutils mailing list