On 10/1/21 3:09 PM, Simon Marchi wrote: > > > On 2021-10-01 08:33, Tom de Vries via Gdb-patches wrote: >> From: Simon Marchi >> >> In read_call_site_scope we have: >> ... >> call_site_local.pc = pc; >> slot = htab_find_slot (cu->call_site_htab, &call_site_local, INSERT); >> ... >> >> The call passes a call_site pointer as element. OTOH, the hashtab is created >> using hash_f == core_addr_hash and eq_f == core_addr_eq, so the element >> will be accessed through a CORE_ADDR pointer. >> >> This is not wrong (at least in C), given that pc is the first field in >> call_site. >> >> Nevertheless, as in call_site_for_pc, make the htab_find_slot call match the >> used hash_f and eq_f by using &pc instead: >> ... >> slot = htab_find_slot (cu->call_site_htab, &pc, INSERT); >> ... >> >> Tested on x86_64-linux. >> >> Co-Authored-By: Tom de Vries >> --- >> gdb/dwarf2/read.c | 5 ++--- >> gdb/gdbtypes.h | 4 +--- >> 2 files changed, 3 insertions(+), 6 deletions(-) >> >> diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c >> index 00aa64dd0ab..23870c04e74 100644 >> --- a/gdb/dwarf2/read.c >> +++ b/gdb/dwarf2/read.c >> @@ -13341,7 +13341,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) >> struct gdbarch *gdbarch = objfile->arch (); >> CORE_ADDR pc, baseaddr; >> struct attribute *attr; >> - struct call_site *call_site, call_site_local; >> + struct call_site *call_site; >> void **slot; >> int nparams; >> struct die_info *child_die; >> @@ -13369,8 +13369,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) >> cu->call_site_htab = htab_create_alloc_ex (16, core_addr_hash, core_addr_eq, >> NULL, &objfile->objfile_obstack, >> hashtab_obstack_allocate, NULL); >> - call_site_local.pc = pc; >> - slot = htab_find_slot (cu->call_site_htab, &call_site_local, INSERT); >> + slot = htab_find_slot (cu->call_site_htab, &pc, INSERT); >> if (*slot != NULL) >> { >> complaint (_("Duplicate PC %s for DW_TAG_call_site " >> diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h >> index 2a641122aec..84b751e82e3 100644 >> --- a/gdb/gdbtypes.h >> +++ b/gdb/gdbtypes.h >> @@ -1783,9 +1783,7 @@ struct call_site_parameter >> >> struct call_site >> { >> - /* * Address of the first instruction after this call. It must be >> - the first field as we overload core_addr_hash and core_addr_eq >> - for it. */ > > Ah, I had not seen this comment. So it was on purpose. Still, I think > that it makes it more confusing than anything. The patch LGTM. And, this follow-up commit reverts everything except the comment. Any comments? Thanks, - Tom