mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
middle-end/114599 - fix bitmap allocation for check_ifunc_callee_symtab_nodes
There's no default bitmap obstack during global CTORs, so allocate the bitmap locally. PR middle-end/114599 PR gcov-profile/114115 * symtab.cc (ifunc_ref_map): Do not use auto_bitmap. (is_caller_ifunc_resolver): Optimize bitmap_bit_p/bitmap_set_bit pair. (symtab_node::check_ifunc_callee_symtab_nodes): Properly allocate ifunc_ref_map here.
This commit is contained in:
parent
effd947fcc
commit
9ab8fdfeef
@ -1383,7 +1383,7 @@ check_ifunc_resolver (cgraph_node *node, void *data)
|
||||
return false;
|
||||
}
|
||||
|
||||
static auto_bitmap ifunc_ref_map;
|
||||
static bitmap ifunc_ref_map;
|
||||
|
||||
/* Return true if any caller of NODE is an ifunc resolver. */
|
||||
|
||||
@ -1404,9 +1404,8 @@ is_caller_ifunc_resolver (cgraph_node *node)
|
||||
|
||||
/* Skip if it has been visited. */
|
||||
unsigned int uid = e->caller->get_uid ();
|
||||
if (bitmap_bit_p (ifunc_ref_map, uid))
|
||||
if (!bitmap_set_bit (ifunc_ref_map, uid))
|
||||
continue;
|
||||
bitmap_set_bit (ifunc_ref_map, uid);
|
||||
|
||||
if (is_caller_ifunc_resolver (e->caller))
|
||||
{
|
||||
@ -1437,6 +1436,9 @@ symtab_node::check_ifunc_callee_symtab_nodes (void)
|
||||
{
|
||||
symtab_node *node;
|
||||
|
||||
bitmap_obstack_initialize (NULL);
|
||||
ifunc_ref_map = BITMAP_ALLOC (NULL);
|
||||
|
||||
FOR_EACH_SYMBOL (node)
|
||||
{
|
||||
cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
|
||||
@ -1455,7 +1457,8 @@ symtab_node::check_ifunc_callee_symtab_nodes (void)
|
||||
cnode->called_by_ifunc_resolver = true;
|
||||
}
|
||||
|
||||
bitmap_clear (ifunc_ref_map);
|
||||
BITMAP_FREE (ifunc_ref_map);
|
||||
bitmap_obstack_release (NULL);
|
||||
}
|
||||
|
||||
/* Verify symbol table for internal consistency. */
|
||||
|
Loading…
Reference in New Issue
Block a user