Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP2
gdb.21950
gdb-symtab-fix-htab_find_slot-call-in-read_call...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gdb-symtab-fix-htab_find_slot-call-in-read_call_site_scope.patch of Package gdb.21950
[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> --- 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 0ce39eb9274..892d31dddf3 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -13287,7 +13287,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; @@ -13315,8 +13315,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 0cc00e74a20..f2e077c70a2 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1775,9 +1775,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. */ + /* Address of the first instruction after this call. */ CORE_ADDR pc;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor