From: Paul Floyd Date: Mon, 9 Oct 2023 06:10:01 +0000 (+0200) Subject: coverity: last of the unsigned >= 0 warnings X-Git-Tag: VALGRIND_3_22_0~30 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=97508f5561756a43f054c1d8e06c3e318124c9c3;p=thirdparty%2Fvalgrind.git coverity: last of the unsigned >= 0 warnings Also a bit of struct space saving thanks to pahole --- diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c index 5777514379..97b0941756 100644 --- a/VEX/priv/guest_arm64_toIR.c +++ b/VEX/priv/guest_arm64_toIR.c @@ -10382,7 +10382,7 @@ Bool dis_AdvSIMD_scalar_shift_by_imm(/*MB_OUT*/DisResult* dres, UInt insn) Adjust shift to compensate. */ UInt lanebits = 8 << size; shift = lanebits - shift; - vassert(shift >= 0 && shift < lanebits); + vassert(shift < lanebits); const HChar* nm = NULL; /**/ if (bitU == 0 && opcode == BITS5(0,1,1,1,0)) nm = "sqshl"; else if (bitU == 1 && opcode == BITS5(0,1,1,1,0)) nm = "uqshl"; @@ -11816,7 +11816,7 @@ Bool dis_AdvSIMD_shift_by_immediate(/*MB_OUT*/DisResult* dres, UInt insn) Bool isQ = bitQ == 1; Bool ok = getLaneInfo_IMMH_IMMB(&shift, &size, immh, immb); if (!ok || (bitQ == 0 && size == X11)) return False; - vassert(size >= 0 && size <= 3); + vassert(size <= 3); /* The shift encoding has opposite sign for the leftwards case. Adjust shift to compensate. */ UInt lanebits = 8 << size; diff --git a/VEX/priv/guest_arm_toIR.c b/VEX/priv/guest_arm_toIR.c index 12acfbc865..2bedccd14d 100644 --- a/VEX/priv/guest_arm_toIR.c +++ b/VEX/priv/guest_arm_toIR.c @@ -12874,7 +12874,7 @@ static Bool decode_V8_instruction ( gate = False; if (gate) { - vassert(ix >= 0 && ix < 7); + vassert(ix < 7); const HChar* inames[7] = { "sha1c", "sha1p", "sha1m", "sha1su0", "sha256h", "sha256h2", "sha256su1" }; diff --git a/VEX/priv/guest_generic_bb_to_IR.c b/VEX/priv/guest_generic_bb_to_IR.c index 1e72ddacd6..1b9821a7cf 100644 --- a/VEX/priv/guest_generic_bb_to_IR.c +++ b/VEX/priv/guest_generic_bb_to_IR.c @@ -176,7 +176,7 @@ static void create_self_checks_as_needed( len2check = vge->len[i]; /* stay sane */ - vassert(len2check >= 0 && len2check < 2000/*arbitrary*/); + vassert(len2check < 2000/*arbitrary*/); /* Skip the check if the translation involved zero bytes */ if (len2check == 0) @@ -960,7 +960,7 @@ static IRSB* disassemble_basic_block_till_stop( /* stay sane ... */ vassert(dres.whatNext == Dis_StopHere || dres.whatNext == Dis_Continue); /* ... disassembled insn length is sane ... */ - vassert(dres.len >= 0 && dres.len <= 24); + vassert(dres.len <= 24); /* If the disassembly function passed us a hint, take note of it. */ if (LIKELY(dres.hint == Dis_HintNone)) { diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c index 0ffab17922..eed134be85 100644 --- a/coregrind/m_debuginfo/debuginfo.c +++ b/coregrind/m_debuginfo/debuginfo.c @@ -4480,7 +4480,7 @@ Bool VG_(get_data_description)( n_frames = VG_(get_StackTrace)( tid, ips, N_FRAMES, sps, fps, 0/*first_ip_delta*/ ); - vg_assert(n_frames >= 0 && n_frames <= N_FRAMES); + vg_assert(n_frames <= N_FRAMES); for (j = 0; j < n_frames; j++) { if (consider_vars_in_frame( dname1, dname2, ep, data_addr, diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c index b1a709e6a0..a3f100d348 100644 --- a/coregrind/m_debuginfo/readdwarf3.c +++ b/coregrind/m_debuginfo/readdwarf3.c @@ -2594,8 +2594,7 @@ void read_filename_table( /*MOD*/XArray* /* of UInt* */ fndn_ix_Table, DiCursor cur = get_AsciiZ(&c); str = ML_(addStrFromCursor)( cc->di, cur ); dir_xa_ix = get_ULEB128( &c ); - if (dirname_xa != NULL - && dir_xa_ix >= 0 && dir_xa_ix < VG_(sizeXA) (dirname_xa)) + if (dirname_xa != NULL && dir_xa_ix < VG_(sizeXA) (dirname_xa)) dirname = *(HChar**)VG_(indexXA) ( dirname_xa, dir_xa_ix ); else dirname = NULL; diff --git a/coregrind/m_debuginfo/storage.c b/coregrind/m_debuginfo/storage.c index ace485c157..961d767b8a 100644 --- a/coregrind/m_debuginfo/storage.c +++ b/coregrind/m_debuginfo/storage.c @@ -2066,7 +2066,6 @@ static void canonicaliseLoctab ( struct _DebugInfo* di ) sort_loctab_and_loctab_fndn_ix (di); for (i = 0; i < ((Word)di->loctab_used)-1; i++) { - vg_assert(di->loctab[i].size < 10000); /* If two adjacent entries overlap, truncate the first. */ if (di->loctab[i].addr + di->loctab[i].size > di->loctab[i+1].addr) { /* Do this in signed int32 because the actual .size fields diff --git a/coregrind/m_errormgr.c b/coregrind/m_errormgr.c index 63c0e4eaa7..8f2fc0a965 100644 --- a/coregrind/m_errormgr.c +++ b/coregrind/m_errormgr.c @@ -136,8 +136,8 @@ struct _Error { // The tool-specific part ThreadId tid; // Initialised by core - ExeContext* where; // Initialised by core ErrorKind ekind; // Used by ALL. Must be in the range (0..) + ExeContext* where; // Initialised by core Addr addr; // Used frequently const HChar* string; // Used frequently void* extra; // For any tool-specific extras diff --git a/coregrind/m_gdbserver/valgrind-low-amd64.c b/coregrind/m_gdbserver/valgrind-low-amd64.c index 0f83de1e1e..1808609a5e 100644 --- a/coregrind/m_gdbserver/valgrind-low-amd64.c +++ b/coregrind/m_gdbserver/valgrind-low-amd64.c @@ -348,8 +348,8 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) static struct valgrind_target_ops low_target = { -1, // Must be computed at init time. - regs, 7, //RSP + regs, transfer_register, get_pc, set_pc, diff --git a/coregrind/m_gdbserver/valgrind-low-arm.c b/coregrind/m_gdbserver/valgrind-low-arm.c index 5a2348732b..79050f15b6 100644 --- a/coregrind/m_gdbserver/valgrind-low-arm.c +++ b/coregrind/m_gdbserver/valgrind-low-arm.c @@ -294,8 +294,8 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) static struct valgrind_target_ops low_target = { num_regs, - regs, 13, //SP + regs, transfer_register, get_pc, set_pc, diff --git a/coregrind/m_gdbserver/valgrind-low-arm64.c b/coregrind/m_gdbserver/valgrind-low-arm64.c index 292650dc1a..03239b28e8 100644 --- a/coregrind/m_gdbserver/valgrind-low-arm64.c +++ b/coregrind/m_gdbserver/valgrind-low-arm64.c @@ -264,8 +264,8 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) static struct valgrind_target_ops low_target = { num_regs, - regs, 31, //SP + regs, transfer_register, get_pc, set_pc, diff --git a/coregrind/m_gdbserver/valgrind-low-mips32.c b/coregrind/m_gdbserver/valgrind-low-mips32.c index a132a43505..62eeb01f9d 100644 --- a/coregrind/m_gdbserver/valgrind-low-mips32.c +++ b/coregrind/m_gdbserver/valgrind-low-mips32.c @@ -364,8 +364,8 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) static struct valgrind_target_ops low_target = { num_regs, - regs, 29, //sp = r29, which is register offset 29 in regs + regs, transfer_register, get_pc, set_pc, diff --git a/coregrind/m_gdbserver/valgrind-low-mips64.c b/coregrind/m_gdbserver/valgrind-low-mips64.c index 026dbe7638..9b96d9e5bc 100644 --- a/coregrind/m_gdbserver/valgrind-low-mips64.c +++ b/coregrind/m_gdbserver/valgrind-low-mips64.c @@ -365,8 +365,8 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) static struct valgrind_target_ops low_target = { num_regs, - regs, 29, //sp = r29, which is register offset 29 in regs + regs, transfer_register, get_pc, set_pc, diff --git a/coregrind/m_gdbserver/valgrind-low-nanomips.c b/coregrind/m_gdbserver/valgrind-low-nanomips.c index d2c4f0332f..dea345c29e 100644 --- a/coregrind/m_gdbserver/valgrind-low-nanomips.c +++ b/coregrind/m_gdbserver/valgrind-low-nanomips.c @@ -200,8 +200,8 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) static struct valgrind_target_ops low_target = { num_regs, - regs, 29, //sp = r29, which is register offset 29 in regs + regs, transfer_register, get_pc, set_pc, diff --git a/coregrind/m_gdbserver/valgrind-low-ppc32.c b/coregrind/m_gdbserver/valgrind-low-ppc32.c index bdb0896b9b..be5fb97678 100644 --- a/coregrind/m_gdbserver/valgrind-low-ppc32.c +++ b/coregrind/m_gdbserver/valgrind-low-ppc32.c @@ -337,8 +337,8 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) static struct valgrind_target_ops low_target = { num_regs, - regs, 1, //r1 + regs, transfer_register, get_pc, set_pc, diff --git a/coregrind/m_gdbserver/valgrind-low-ppc64.c b/coregrind/m_gdbserver/valgrind-low-ppc64.c index 1e2a159442..01488bbef7 100644 --- a/coregrind/m_gdbserver/valgrind-low-ppc64.c +++ b/coregrind/m_gdbserver/valgrind-low-ppc64.c @@ -492,8 +492,8 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) static struct valgrind_target_ops low_target = { num_regs, - regs, 1, //r1 + regs, transfer_register, get_pc, set_pc, diff --git a/coregrind/m_gdbserver/valgrind-low-s390x.c b/coregrind/m_gdbserver/valgrind-low-s390x.c index 74898e471a..bdb767f204 100644 --- a/coregrind/m_gdbserver/valgrind-low-s390x.c +++ b/coregrind/m_gdbserver/valgrind-low-s390x.c @@ -282,8 +282,8 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) static struct valgrind_target_ops low_target = { -1, // Override at init time. - regs, 17, //sp = r15, which is register offset 17 in regs + regs, transfer_register, get_pc, set_pc, diff --git a/coregrind/m_gdbserver/valgrind-low-x86.c b/coregrind/m_gdbserver/valgrind-low-x86.c index e7adac700c..4acccef2a8 100644 --- a/coregrind/m_gdbserver/valgrind-low-x86.c +++ b/coregrind/m_gdbserver/valgrind-low-x86.c @@ -273,8 +273,8 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) static struct valgrind_target_ops low_target = { num_regs, - regs, 4, //ESP + regs, transfer_register, get_pc, set_pc, diff --git a/coregrind/m_gdbserver/valgrind_low.h b/coregrind/m_gdbserver/valgrind_low.h index c6c0bb63b5..d8ae3c9086 100644 --- a/coregrind/m_gdbserver/valgrind_low.h +++ b/coregrind/m_gdbserver/valgrind_low.h @@ -36,11 +36,12 @@ struct valgrind_target_ops { int num_regs; - struct reg *reg_defs; int stack_pointer_regno; /* register number of the stack pointer register */ - + + struct reg *reg_defs; + /* transfer the register regno from/to valgrind (guest state) to/from buf according to transfer_direction. diff --git a/coregrind/m_main.c b/coregrind/m_main.c index 1cedaaf2e3..bb4a0ca96e 100644 --- a/coregrind/m_main.c +++ b/coregrind/m_main.c @@ -679,8 +679,8 @@ else if VG_INT_CLOM(cloPD, arg, "--scheduling-quantum", } else if VG_BOOL_CLOM(cloPD, arg, "--sym-offsets", VG_(clo_sym_offsets)) {} - else if VG_BINT_CLOM(cloPD, arg, "--progress-interval", - VG_(clo_progress_interval), 0, 3600) {} + else if VG_BUINT_CLOM(cloPD, arg, "--progress-interval", + VG_(clo_progress_interval), 3600) {} else if VG_BOOL_CLO(arg, "--read-inline-info", VG_(clo_read_inline_info)) {} else if VG_BOOL_CLO(arg, "--read-var-info", VG_(clo_read_var_info)) {} diff --git a/coregrind/m_transtab.c b/coregrind/m_transtab.c index ce54ce7108..3c45ef43b3 100644 --- a/coregrind/m_transtab.c +++ b/coregrind/m_transtab.c @@ -2046,7 +2046,7 @@ static void delete_tte ( /*OUT*/Addr* ga_deleted, for (i = 0; i < tteC->n_tte2ec; i++) { ec_num = tteC->tte2ec_ec[i]; ec_idx = tteC->tte2ec_ix[i]; - vg_assert(ec_num >= 0 && ec_num < ECLASS_N); + vg_assert(ec_num < ECLASS_N); vg_assert(ec_idx >= 0); vg_assert(ec_idx < sec->ec2tte_used[ec_num]); /* Assert that the two links point at each other. */ diff --git a/coregrind/m_ume/main.c b/coregrind/m_ume/main.c index 49e48d242b..229867e268 100644 --- a/coregrind/m_ume/main.c +++ b/coregrind/m_ume/main.c @@ -142,7 +142,7 @@ Int VG_(do_exec_inner)(const HChar* exe, ExeInfo* info) if (sr_isError(res)) return sr_Err(res); - vg_assert2(sr_Res(res) >= 0 && sr_Res(res) < EXE_HANDLER_COUNT, + vg_assert2(sr_Res(res) < EXE_HANDLER_COUNT, "invalid VG_(pre_exec_check) result"); ret = (*exe_handlers[sr_Res(res)].load_fn)(fd, exe, info); diff --git a/include/pub_tool_options.h b/include/pub_tool_options.h index 0f7c11bafb..972e7546ae 100644 --- a/include/pub_tool_options.h +++ b/include/pub_tool_options.h @@ -255,11 +255,36 @@ Bool VG_(bool_clom)(Clo_Mode qq_mode, const HChar* qq_arg, const HChar* qq_optio } \ res;})) +// As above, but for unsigned int arguments with a lower bound of 0 +#define VG_BUINTN_CLOM(qq_mode, qq_base, qq_arg, qq_option, qq_var, qq_hi) \ +(VG_(check_clom) \ + (qq_mode, qq_arg, qq_option, \ + VG_STREQN(VG_(strlen)(qq_option)+1, qq_arg, qq_option"=")) && \ + ({Bool res = True; \ + const HChar* val = &(qq_arg)[ VG_(strlen)(qq_option)+1 ]; \ + HChar* s; \ + Long n = VG_(strtoll##qq_base)( val, &s ); \ + (qq_var) = n; \ + if ('\0' != s[0] || (qq_var) != n) { \ + VG_(fmsg_bad_option)(qq_arg, \ + "Invalid integer value '%s'\n", val); \ + res = False; } \ + /* Check bounds. */ \ + if ((qq_var) > (qq_hi)) { \ + VG_(fmsg_bad_option)(qq_arg, \ + "'%s' argument must be <= %lld\n", \ + (qq_option), (Long)(qq_hi)); \ + res = False; \ + } \ + res;})) + // Bounded decimal integer arg, eg. --foo=100 #define VG_BINT_CLO(qq_arg, qq_option, qq_var, qq_lo, qq_hi) \ VG_BINTN_CLOM(cloP, 10, (qq_arg), qq_option, (qq_var), (qq_lo), (qq_hi)) #define VG_BINT_CLOM(qq_mode, qq_arg, qq_option, qq_var, qq_lo, qq_hi) \ VG_BINTN_CLOM(qq_mode, 10, (qq_arg), qq_option, (qq_var), (qq_lo), (qq_hi)) +#define VG_BUINT_CLOM(qq_mode, qq_arg, qq_option, qq_var, qq_hi) \ + VG_BUINTN_CLOM(qq_mode, 10, (qq_arg), qq_option, (qq_var), (qq_hi)) // Bounded hexadecimal integer arg, eg. --foo=0x1fa8 #define VG_BHEX_CLO(qq_arg, qq_option, qq_var, qq_lo, qq_hi) \ diff --git a/memcheck/mc_errors.c b/memcheck/mc_errors.c index 2a4cce7a11..2195cfbe53 100644 --- a/memcheck/mc_errors.c +++ b/memcheck/mc_errors.c @@ -1613,6 +1613,7 @@ typedef struct _MC_LeakSuppExtra MC_LeakSuppExtra; struct _MC_LeakSuppExtra { UInt match_leak_kinds; + UInt leak_search_gen; /* Maintains nr of blocks and bytes suppressed with this suppression during the leak search identified by leak_search_gen. @@ -1620,7 +1621,6 @@ struct _MC_LeakSuppExtra { used the first time during a leak search. */ SizeT blocks_suppressed; SizeT bytes_suppressed; - UInt leak_search_gen; }; typedef struct {