diff options
author | WANG Xuerui <git@xen0n.name> | 2025-03-24 15:54:25 +0800 |
---|---|---|
committer | cailulu <cailulu@loongson.cn> | 2025-03-26 15:49:58 +0800 |
commit | 6d1823dc899bb0df45a79c32ea4ef571c1414fcb (patch) | |
tree | df99527365ca0d33b5d85d94e3b43db82636af8d | |
parent | a393de33f2b3e8ddbf618ec84a0f9032f0efa859 (diff) | |
download | binutils-6d1823dc899bb0df45a79c32ea4ef571c1414fcb.zip binutils-6d1823dc899bb0df45a79c32ea4ef571c1414fcb.tar.gz binutils-6d1823dc899bb0df45a79c32ea4ef571c1414fcb.tar.bz2 |
LoongArch: Fix disassembly option parsing stopping at the first option
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.
Signed-off-by: WANG Xuerui <git@xen0n.name>
5 files changed, 39 insertions, 1 deletions
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 0000000..2f34cb8 --- /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 0000000..eb4ea62 --- /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 0000000..e669cef --- /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 0000000..a3a4469 --- /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 cc4a48c..2e59bf8 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; } |