From 65a29626e327b0173174cb25f390426e7808d272 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 7 Sep 2019 21:45:26 +0200 Subject: [PATCH] libcpu: Make sure left shifts are done in unsigned context. Use UINT64_C (0) instead of INT64_C (0) to make sure the calculation is done on unsigned values. Otherwise the gcc undefined sanitizer will warn: libcpu/riscv_disasm.c:457:57: runtime error: left shift of negative value -1 Signed-off-by: Mark Wielaard --- libcpu/ChangeLog | 5 +++++ libcpu/riscv_disasm.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog index 883896a2..e23097bd 100644 --- a/libcpu/ChangeLog +++ b/libcpu/ChangeLog @@ -1,3 +1,8 @@ +2019-09-07 Mark Wielaard + + * riscv_disasm.c (riscv_disasm): Use UINT64_C to make calculation + unsigned. + 2019-07-05 Omar Sandoval * Makefile.am: Combine libcpu_{i386,x86_64,bpf}.a into libcpu.a. diff --git a/libcpu/riscv_disasm.c b/libcpu/riscv_disasm.c index bc4e02e5..bc0d8f37 100644 --- a/libcpu/riscv_disasm.c +++ b/libcpu/riscv_disasm.c @@ -453,7 +453,7 @@ riscv_disasm (Ebl *ebl, mne = "fsd"; break; case 16: - opaddr = (((INT64_C (0) - ((first >> 12) & 0x1)) << 11) + opaddr = (((UINT64_C (0) - ((first >> 12) & 0x1)) << 11) | ((first << 2) & 0x400) | ((first >> 1) & 0x300) | ((first << 1) & 0x80) -- 2.20.1