[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 10/14] disas/nanomips: Move setjmp into nanomips_dis
|
From: |
Philippe Mathieu-Daudé |
|
Subject: |
[PULL 10/14] disas/nanomips: Move setjmp into nanomips_dis |
|
Date: |
Tue, 8 Nov 2022 00:58:18 +0100 |
From: Richard Henderson <richard.henderson@linaro.org>
Reduce the number of local variables within the scope of the
setjmp by moving it to the existing helper. The actual length
returned from Disassemble is not used, because we have already
determined the length while reading bytes. Fixes:
nanomips.c: In function ‘print_insn_nanomips’:
nanomips.c:21925:14: error: variable ‘insn1’ might be clobbered by ‘longjmp’ or
‘vfork’ [-Werror=clobbered]
nanomips.c:21925:25: error: variable ‘insn2’ might be clobbered by ‘longjmp’ or
‘vfork’ [-Werror=clobbered]
nanomips.c:21925:36: error: variable ‘insn3’ might be clobbered by ‘longjmp’ or
‘vfork’ [-Werror=clobbered]
nanomips.c:21926:22: error: variable ‘buf’ might be clobbered by ‘longjmp’ or
‘vfork’ [-Werror=clobbered]
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20221106212852.152384-2-richard.henderson@linaro.org>
---
disas/nanomips.c | 42 +++++++++++++++++-------------------------
1 file changed, 17 insertions(+), 25 deletions(-)
diff --git a/disas/nanomips.c b/disas/nanomips.c
index 821d4f8832..83a39a878c 100644
--- a/disas/nanomips.c
+++ b/disas/nanomips.c
@@ -21907,22 +21907,24 @@ static const Pool MAJOR[2] = {
0x0 }, /* P16 */
};
-static int nanomips_dis(char **buf,
- Dis_info *info,
- unsigned short one,
- unsigned short two,
- unsigned short three)
+static bool nanomips_dis(char **buf, Dis_info *info,
+ unsigned short one,
+ unsigned short two,
+ unsigned short three)
{
uint16 bits[3] = {one, two, three};
-
TABLE_ENTRY_TYPE type;
- int size = Disassemble(bits, buf, &type, MAJOR, 2, info);
- return size;
+
+ /* Handle runtime errors. */
+ if (unlikely(sigsetjmp(info->buf, 0) != 0)) {
+ return false;
+ }
+ return Disassemble(bits, buf, &type, MAJOR, ARRAY_SIZE(MAJOR), info) >= 0;
}
int print_insn_nanomips(bfd_vma memaddr, struct disassemble_info *info)
{
- int status;
+ int status, length;
bfd_byte buffer[2];
uint16_t insn1 = 0, insn2 = 0, insn3 = 0;
g_autofree char *buf = NULL;
@@ -21952,6 +21954,7 @@ int print_insn_nanomips(bfd_vma memaddr, struct
disassemble_info *info)
} else {
insn1 = bfd_getl16(buffer);
}
+ length = 2;
(*info->fprintf_func)(info->stream, "%04x ", insn1);
/* Handle 32-bit opcodes. */
@@ -21967,6 +21970,7 @@ int print_insn_nanomips(bfd_vma memaddr, struct
disassemble_info *info)
} else {
insn2 = bfd_getl16(buffer);
}
+ length = 4;
(*info->fprintf_func)(info->stream, "%04x ", insn2);
} else {
(*info->fprintf_func)(info->stream, " ");
@@ -21984,27 +21988,15 @@ int print_insn_nanomips(bfd_vma memaddr, struct
disassemble_info *info)
} else {
insn3 = bfd_getl16(buffer);
}
+ length = 6;
(*info->fprintf_func)(info->stream, "%04x ", insn3);
} else {
(*info->fprintf_func)(info->stream, " ");
}
- /* Handle runtime errors. */
- if (sigsetjmp(disassm_info.buf, 0) != 0) {
- info->insn_type = dis_noninsn;
- return insn3 ? 6 : insn2 ? 4 : 2;
+ if (nanomips_dis(&buf, &disassm_info, insn1, insn2, insn3)) {
+ (*info->fprintf_func) (info->stream, "%s", buf);
}
- int length = nanomips_dis(&buf, &disassm_info, insn1, insn2, insn3);
-
- /* FIXME: Should probably use a hash table on the major opcode here. */
-
- (*info->fprintf_func) (info->stream, "%s", buf);
- if (length > 0) {
- return length / 8;
- }
-
- info->insn_type = dis_noninsn;
-
- return insn3 ? 6 : insn2 ? 4 : 2;
+ return length;
}
--
2.38.1
- [PULL 00/14] MIPS patches for 2022-11-08, Philippe Mathieu-Daudé, 2022/11/07
- [PULL 02/14] target/mips: Cast offset field of Octeon BBIT to int16_t, Philippe Mathieu-Daudé, 2022/11/07
- [PULL 01/14] target/mips: Set CP0St_{KX, SX, UX} for Loongson-2F, Philippe Mathieu-Daudé, 2022/11/07
- [PULL 03/14] target/mips: Enable LBX/LWX/* instructions for Octeon, Philippe Mathieu-Daudé, 2022/11/07
- [PULL 04/14] target/mips: Disable DSP ASE for Octeon68XX, Philippe Mathieu-Daudé, 2022/11/07
- [PULL 05/14] target/mips: Don't check COP1X for 64 bit FP mode, Philippe Mathieu-Daudé, 2022/11/07
- [PULL 06/14] disas/nanomips: Fix invalid PRId64 format calling img_format(), Philippe Mathieu-Daudé, 2022/11/07
- [PULL 07/14] disas/nanomips: Fix invalid PRIx64 format calling img_format(), Philippe Mathieu-Daudé, 2022/11/07
- [PULL 08/14] disas/nanomips: Use G_GNUC_PRINTF to avoid invalid string formats, Philippe Mathieu-Daudé, 2022/11/07
- [PULL 09/14] disas/nanomips: Remove headers already included by "qemu/osdep.h", Philippe Mathieu-Daudé, 2022/11/07
- [PULL 10/14] disas/nanomips: Move setjmp into nanomips_dis,
Philippe Mathieu-Daudé <=
- [PULL 11/14] disas/nanomips: Merge insn{1,2,3} into words[3], Philippe Mathieu-Daudé, 2022/11/07
- [PULL 12/14] disas/nanomips: Split out read_u16, Philippe Mathieu-Daudé, 2022/11/07
- [PULL 13/14] disas/nanomips: Tidy read for 48-bit opcodes, Philippe Mathieu-Daudé, 2022/11/07
- [PULL 14/14] MAINTAINERS: Inherit from nanoMIPS, Philippe Mathieu-Daudé, 2022/11/07
- Re: [PULL 00/14] MIPS patches for 2022-11-08, Stefan Hajnoczi, 2022/11/08