428648 s390_emit_load_mem panics due to 20-bit offset for vector load
428716 cppcheck detects potential leak in VEX/useful/smchash.c
428909 helgrind: need to intercept duplicate libc definitions for Fedora 33
+429352 PPC ISA 3.1 support is missing, part 7
429692 unhandled ppc64le-linux syscall: 147 (getsid)
429864 s390x: C++ atomic test_and_set yields false-positive memcheck
diagnostics
432809 VEX should support REX.W + POPF
432861 PPC modsw and modsd give incorrect results for 1 mod 12
432215 Add debuginfod functionality
+433500 DRD regtest faulures when libstdc++ and libgcc debuginfo are installed
n-i-bz helgrind: If hg_cli__realloc fails, return NULL.
-429352 PPC ISA 3.1 support is missing, part 7
Release 3.16.1 (22 June 2020)
static Bool subrange_type_denotes_array_bounds ( const D3TypeParser* parser,
DW_TAG dtag ) {
vg_assert(dtag == DW_TAG_subrange_type);
+ /* If we don't know the language, assume false. */
+ if (parser->language == '?')
+ return False;
/* For most languages, a subrange_type dtag always gives the
bounds of an array.
For Ada, there are additional conditions as a subrange_type
members must have a DW_AT_data_member_location expression
whereas union members must not. */
Bool parent_is_struct;
+ Bool is_artificial = False;
VG_(memset)( &fieldE, 0, sizeof(fieldE) );
fieldE.cuOff = posn;
fieldE.tag = Te_Field;
(SizeT)fieldE.Te.Field.nLoc,
"di.readdwarf3.ptD.member.2" );
}
+ if (attr == DW_AT_artificial && cts.u.val == 1)
+ is_artificial = True;
}
+ /* Skip artificial members, they might not behave as expected. */
+ if (is_artificial)
+ goto no_location;
/* Do we have a plausible parent? */
if (typestack_is_empty(parser)) goto_bad_DIE;
vg_assert(ML_(TyEnt__is_type)(&parser->qparentE[parser->sp]));
const members in C++ code which are compile time constants
that do no exist in the class. They're not of any interest
to us so we ignore them. */
+ no_location:
ML_(TyEnt__make_EMPTY)(&fieldE);
}
}
|| (dtag == DW_TAG_subrange_type
&& !subrange_type_denotes_array_bounds(parser, dtag))) {
/* subrange_type other than array bound is only for Ada. */
- vg_assert (dtag == DW_TAG_typedef || parser->language == 'A');
+ vg_assert (dtag == DW_TAG_typedef || (parser->language == 'A'
+ || parser->language == '?'));
/* We can pick up a new typedef/subrange_type any time. */
VG_(memset)(&typeE, 0, sizeof(typeE));
typeE.cuOff = D3_INVALID_CUOFF;
ent = ML_(TyEnts__index_by_cuOff)( ents, ents_cache, cuOff );
if (!ent) {
- VG_(printf)("chase_cuOff: no entry for 0x%05lx\n", cuOff);
+ if (VG_(clo_verbosity) > 1)
+ VG_(printf)("chase_cuOff: no entry for 0x%05lx\n", cuOff);
*changed = False;
return cuOff;
}
ML_(read_elf_debug_info). */
vg_assert(di->fsm.have_rx_map && di->fsm.have_rw_map);
if (level > 0 && ML_(find_rx_mapping)(di, aMin, aMax) == NULL) {
- if (VG_(clo_verbosity) >= 0) {
+ if (VG_(clo_verbosity) > 1) {
VG_(message)(Vg_DebugMsg,
"warning: addVar: in range %#lx .. %#lx outside "
"all rx mapped areas (%s)\n",