/* Code dealing with blocks for GDB.
- Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
This file is part of GDB.
extern int contained_in (const struct block *, const struct block *);
-extern struct blockvector *blockvector_for_pc (CORE_ADDR, struct block **);
+extern const struct blockvector *blockvector_for_pc (CORE_ADDR,
+ const struct block **);
-extern struct blockvector *blockvector_for_pc_sect (CORE_ADDR,
- struct obj_section *,
- struct block **,
- struct symtab *);
+extern const struct blockvector *blockvector_for_pc_sect (CORE_ADDR,
+ struct obj_section *,
+ const struct block **,
+ struct symtab *);
+
+extern int blockvector_contains_pc (const struct blockvector *bv, CORE_ADDR pc);
extern struct call_site *call_site_for_pc (struct gdbarch *gdbarch,
CORE_ADDR pc);
-extern struct block *block_for_pc (CORE_ADDR);
+extern const struct block *block_for_pc (CORE_ADDR);
-extern struct block *block_for_pc_sect (CORE_ADDR, struct obj_section *);
+extern const struct block *block_for_pc_sect (CORE_ADDR, struct obj_section *);
extern const char *block_scope (const struct block *block);
struct block_iterator
{
+ /* If we're iterating over a single block, this holds the block.
+ Otherwise, it holds the canonical symtab. */
+
+ union
+ {
+ struct symtab *symtab;
+ const struct block *block;
+ } d;
+
+ /* If we're iterating over a single block, this is always -1.
+ Otherwise, it holds the index of the current "included" symtab in
+ the canonical symtab (that is, d.symtab->includes[idx]), with -1
+ meaning the canonical symtab itself. */
+
+ int idx;
+
+ /* Which block, either static or global, to iterate over. If this
+ is FIRST_LOCAL_BLOCK, then we are iterating over a single block.
+ This is used to select which field of 'd' is in use. */
+
+ enum block_enum which;
+
/* The underlying dictionary iterator. */
struct dict_iterator dict_iter;