From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id CAD75388A438; Thu, 11 Mar 2021 14:07:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CAD75388A438 From: "vries at gcc dot gnu.org" To: dwz@sourceware.org Subject: [Bug default/27562] New: [dwz] Verify that conditional fields of struct dw_die are only accessed when available Date: Thu, 11 Mar 2021 14:07:06 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: dwz X-Bugzilla-Component: default X-Bugzilla-Version: unspecified X-Bugzilla-Keywords: X-Bugzilla-Severity: enhancement X-Bugzilla-Who: vries at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: nobody at sourceware dot org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter cc target_milestone Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://sourceware.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: dwz@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Dwz mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Mar 2021 14:07:06 -0000 https://sourceware.org/bugzilla/show_bug.cgi?id=3D27562 Bug ID: 27562 Summary: [dwz] Verify that conditional fields of struct dw_die are only accessed when available Product: dwz Version: unspecified Status: NEW Severity: enhancement Priority: P2 Component: default Assignee: nobody at sourceware dot org Reporter: vries at gcc dot gnu.org CC: dwz at sourceware dot org Target Milestone: --- The fields until die_parent in struct dw_die are available unconditionally. But after die_parent, some are only available if die_collapsed_child =3D=3D= 0, and others only if die_toplevel =3D=3D 1. We need to be able to instrument accesses to the conditionally available fields, such that it's checked whether the field is indeed available. F.i. something like this: ... diff --git a/dwz.c b/dwz.c index 5975cc7..5f8db49 100644 --- a/dwz.c +++ b/dwz.c @@ -1175,6 +1175,22 @@ struct dw_die dw_die_ref die_nextdup; }; +static inline dw_die_ref FORCE_INLINE +get_die_nextdup (dw_die_ref die) +{ + assert (die->die_toplevel); + return die->die_nextdup; +} + +static inline void FORCE_INLINE +set_die_nextdup (dw_die_ref die, dw_die_ref val) +{ + assert (die->die_toplevel); + die->die_nextdup =3D val; +} + +#define die_nextdup poisoned_die_nextdup + #include "iterators.h" /* Return CU structure pointer for a DIE. In order to save memory, @@ -4771,7 +4787,7 @@ die_eq_1 (dw_cu_ref cu1, dw_cu_ref cu2, if (!die2->die_op_type_referenced) die2->die_remove =3D 1; obstack_ptr_grow (&ob, die2); - if (likely (die2->die_nextdup =3D=3D NULL)) + if (likely (get_die_nextdup (die2) =3D=3D NULL)) { die2->die_dup =3D die1; die2->die_nextdup =3D die1->die_nextdup; ... --=20 You are receiving this mail because: You are on the CC list for the bug.=