aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWANG Xuerui <git@xen0n.name>2025-03-24 15:54:25 +0800
committercailulu <cailulu@loongson.cn>2025-03-26 15:49:58 +0800
commit6d1823dc899bb0df45a79c32ea4ef571c1414fcb (patch)
treedf99527365ca0d33b5d85d94e3b43db82636af8d
parenta393de33f2b3e8ddbf618ec84a0f9032f0efa859 (diff)
downloadbinutils-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>
-rw-r--r--binutils/testsuite/binutils-all/loongarch64/dis-options-multi.d10
-rw-r--r--binutils/testsuite/binutils-all/loongarch64/dis-options-no-alises.d10
-rw-r--r--binutils/testsuite/binutils-all/loongarch64/dis-options-numeric.d10
-rw-r--r--binutils/testsuite/binutils-all/loongarch64/dis-options.s3
-rw-r--r--opcodes/loongarch-dis.c7
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;
}