]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
LoongArch: Fix disassembly option parsing stopping at the first option
authorWANG Xuerui <git@xen0n.name>
Mon, 24 Mar 2025 07:54:25 +0000 (15:54 +0800)
committercailulu <cailulu@loongson.cn>
Wed, 26 Mar 2025 07:49:58 +0000 (15:49 +0800)
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>
binutils/testsuite/binutils-all/loongarch64/dis-options-multi.d [new file with mode: 0644]
binutils/testsuite/binutils-all/loongarch64/dis-options-no-alises.d [new file with mode: 0644]
binutils/testsuite/binutils-all/loongarch64/dis-options-numeric.d [new file with mode: 0644]
binutils/testsuite/binutils-all/loongarch64/dis-options.s [new file with mode: 0644]
opcodes/loongarch-dis.c

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 (file)
index 0000000..2f34cb8
--- /dev/null
@@ -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 (file)
index 0000000..eb4ea62
--- /dev/null
@@ -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 (file)
index 0000000..e669cef
--- /dev/null
@@ -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 (file)
index 0000000..a3a4469
--- /dev/null
@@ -0,0 +1,3 @@
+.text
+    move $a0, $r21
+    ret
index cc4a48c38b8289e30924105f725808134c1cc712..2e59bf8035f2b1a420f909723dc2debc50f9619b 100644 (file)
@@ -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;
 }