From 4edd9103e2bb44b8d94f6f2f89aa373fc1ebc392 Mon Sep 17 00:00:00 2001 From: Petr Machata Date: Wed, 28 Jan 2009 17:09:01 +0100 Subject: [PATCH] Check that each rangelistptr is aligned to CU's address_size --- src/dwarflint.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/dwarflint.c b/src/dwarflint.c index 42fe1cd2b..68f9a2a71 100644 --- a/src/dwarflint.c +++ b/src/dwarflint.c @@ -2118,7 +2118,7 @@ check_loc_or_range_ref (struct read_ctx *ctx, uint64_t addr, bool addr_64, struct where *wh, - unsigned cat, + enum message_category cat, enum section_id sec) { assert (sec == sec_loc || sec == sec_ranges); @@ -2594,13 +2594,22 @@ read_die_chain (struct read_ctx *ctx, = check_locptr ? loc_coverage : ranges_coverage; struct addr_record *rec = check_locptr ? loc_addrs : ranges_addrs; + enum message_category cat + = check_locptr ? mc_loc : mc_ranges; + enum section_id sec_id + = check_locptr ? sec_loc : sec_ranges; + + if (check_rangeptr && (value % cu->address_size != 0)) + wr_message (mc_ranges | mc_impact_4, &where, + ": rangeptr value %#" PRIx32 + " not aligned to CU address size.\n", + value); struct read_ctx sub_ctx; read_ctx_init (&sub_ctx, ctx->dbg, d); check_loc_or_range_ref (&sub_ctx, cu, cov, rec, value, addr_64, &where, - check_locptr ? mc_loc : mc_ranges, - check_locptr ? sec_loc : sec_ranges); + cat, sec_id); } else if (it->form == DW_FORM_ref4) record_ref (value, &where, true); @@ -2623,13 +2632,22 @@ read_die_chain (struct read_ctx *ctx, = check_locptr ? loc_coverage : ranges_coverage; struct addr_record *rec = check_locptr ? loc_addrs : ranges_addrs; + enum message_category cat + = check_locptr ? mc_loc : mc_ranges; + enum section_id sec_id + = check_locptr ? sec_loc : sec_ranges; + + if (check_rangeptr && (value % cu->address_size != 0)) + wr_message (mc_ranges | mc_impact_4, &where, + ": rangeptr value %#" PRIx64 + " not aligned to CU address size.\n", + value); struct read_ctx sub_ctx; read_ctx_init (&sub_ctx, ctx->dbg, d); check_loc_or_range_ref (&sub_ctx, cu, cov, rec, value, addr_64, &where, - check_locptr ? mc_loc : mc_ranges, - check_locptr ? sec_loc : sec_ranges); + cat, sec_id); } else if (it->form == DW_FORM_ref8) record_ref (value, &where, true); -- 2.47.3