aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2021-10-01 17:15:20 +0200
committerTom de Vries <tdevries@suse.de>2021-10-01 17:15:20 +0200
commitb4c919f75256a8f2263950ce2f970ba40d279b57 (patch)
treeef15543e80a88c36798131be2e055ccc9db841e1 /gdb/dwarf2
parent242fe37867ce33d8f8158bc2ee154d1e2e026a49 (diff)
downloadgdb-b4c919f75256a8f2263950ce2f970ba40d279b57.zip
gdb-b4c919f75256a8f2263950ce2f970ba40d279b57.tar.gz
gdb-b4c919f75256a8f2263950ce2f970ba40d279b57.tar.bz2
[gdb/symtab] Fix htab_find_slot call in read_call_site_scope
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 <tdevries@suse.de>
Diffstat (limited to 'gdb/dwarf2')
-rw-r--r--gdb/dwarf2/read.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index f4967a0..b9b62b4 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 "