This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: how to search for a global type?
On 01/02/08 08:06:30, Daniel Jacobowitz wrote:
> On Tue, Jan 01, 2008 at 09:16:26PM -0800, Gary Funck wrote:
> > The typedef appears to be in inner block. Does that make it static?
>
> Block 0 is the global symbols; block 1 is the file static symbols.
> Later blocks are the bodies of functions, et cetera.
>
> It makes sense for types to be static if you think about it from the
> right perspective, since types do not (generally) have linker
> visibility; the linker can't patch up your code to reference a type
> declared in another file.
>
> In short, try just lookup_symbol?
I did try lookup_symbol() as well, no go.
I'm currently using this approach:
static
int
lookup_type_by_name (const char *type_name)
{
const struct symbol *sym;
const struct type *type;
int type_id;
struct symbol_search *matches;
/* FIXME: add ^$ anchors to front/back of type_name, so
that the regex matches only the desired type name. */
search_symbols ((char *)type_name, TYPES_DOMAIN,
0 /* nfiles */, NULL /* files */, &matches);
if (!matches)
return 0;
/* Arbitrarily use the first match. */
sym = matches->symbol;
free_search_symbols (matches);
type_id = get_type_id (SYMBOL_TYPE (sym));
return type_id;
}
Search_symbols() finds the type definition that we're interested in.
I think one difficulty is that the current file doesn't
define the type. It is defined in the runtime files.
I haven't tried following the logic, but could you briefly
explain the raltionship between block vectors and symbol
tables?
thanks,
- Gary