X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fblock.h;h=7eedb6c8fe83e7f7429622468dbd1fe83f75bf0e;hb=ad3bbd48b65047845b258564db3fd2e64e00c7bc;hp=aa69a896f6ab539750c44575e179a85b25b6f81d;hpb=de4f826b0f698dc2858f6eda71f2613a89579c50;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/block.h b/gdb/block.h index aa69a896f6..7eedb6c8fe 100644 --- a/gdb/block.h +++ b/gdb/block.h @@ -1,12 +1,12 @@ /* Code dealing with blocks for GDB. - Copyright 2003 Free Software Foundation, Inc. + Copyright (C) 2003, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -15,9 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ #ifndef BLOCK_H #define BLOCK_H @@ -30,6 +28,7 @@ struct block_namespace_info; struct using_direct; struct obstack; struct dictionary; +struct addrmap; /* All of the name-scope contours of the program are represented by `struct block' objects. @@ -66,7 +65,7 @@ struct block CORE_ADDR endaddr; /* The symbol that names this block, if the block is the body of a - function; otherwise, zero. */ + function (real or inlined); otherwise, zero. */ struct symbol *function; @@ -97,25 +96,12 @@ struct block cplus_specific; } language_specific; - - /* Version of GCC used to compile the function corresponding - to this block, or 0 if not compiled with GCC. When possible, - GCC should be compatible with the native compiler, or if that - is not feasible, the differences should be fixed during symbol - reading. As of 16 Apr 93, this flag is never used to distinguish - between gcc2 and the native compiler. - - If there is no function corresponding to this block, this meaning - of this flag is undefined. */ - - unsigned char gcc_compile_flag; }; #define BLOCK_START(bl) (bl)->startaddr #define BLOCK_END(bl) (bl)->endaddr #define BLOCK_FUNCTION(bl) (bl)->function #define BLOCK_SUPERBLOCK(bl) (bl)->superblock -#define BLOCK_GCC_COMPILED(bl) (bl)->gcc_compile_flag #define BLOCK_DICT(bl) (bl)->dict #define BLOCK_NAMESPACE(bl) (bl)->language_specific.cplus_specific.namespace @@ -130,31 +116,38 @@ struct blockvector { /* Number of blocks in the list. */ int nblocks; + /* An address map mapping addresses to blocks in this blockvector. + This pointer is zero if the blocks' start and end addresses are + enough. */ + struct addrmap *map; /* The blocks themselves. */ struct block *block[1]; }; #define BLOCKVECTOR_NBLOCKS(blocklist) (blocklist)->nblocks #define BLOCKVECTOR_BLOCK(blocklist,n) (blocklist)->block[n] +#define BLOCKVECTOR_MAP(blocklist) ((blocklist)->map) /* Special block numbers */ -#define GLOBAL_BLOCK 0 -#define STATIC_BLOCK 1 -#define FIRST_LOCAL_BLOCK 2 +enum { GLOBAL_BLOCK = 0, STATIC_BLOCK = 1, FIRST_LOCAL_BLOCK = 2 }; -extern struct symbol *block_function (const struct block *); +extern struct symbol *block_linkage_function (const struct block *); + +extern int block_inlined_p (const struct block *block); extern int contained_in (const struct block *, const struct block *); -extern struct blockvector *blockvector_for_pc (CORE_ADDR, int *); +extern struct blockvector *blockvector_for_pc (CORE_ADDR, struct block **); -extern struct blockvector *blockvector_for_pc_sect (CORE_ADDR, asection *, - int *, struct symtab *); +extern struct blockvector *blockvector_for_pc_sect (CORE_ADDR, + struct obj_section *, + struct block **, + struct symtab *); extern struct block *block_for_pc (CORE_ADDR); -extern struct block *block_for_pc_sect (CORE_ADDR, asection *); +extern struct block *block_for_pc_sect (CORE_ADDR, struct obj_section *); extern const char *block_scope (const struct block *block); @@ -171,4 +164,6 @@ extern const struct block *block_static_block (const struct block *block); extern const struct block *block_global_block (const struct block *block); +extern struct block *allocate_block (struct obstack *obstack); + #endif /* BLOCK_H */