gdb incremental read missing header files

David Taylor <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <9190.1421873306@usendtaylorx2l>
When using DWARF debug information, and incremental (the default)
reading of debug information, GDB will oftentimes miss header files
until the user visits a file that includes, directly or indirectly, the
header file.

Example (the following is a constructed example; the actual problem is
seen when building our embedded kernel that does not include system
header files):

main.c:
-------
extern void print_hello (void);

int
main (int argc, char *argv[])
{
  print_hello ();
  return (0);
}

hello.c:
--------
#include <stdio.h>

void
print_hello (void)
{
  printf ("Hello, world\n");
}

build thusly:
-------------
gcc -c -g3 -O3 main.c
gcc -c -g3 -O3 hello.c
gcc -o missing-headers main.o hello.o

Run gdb:
--------

    gdb missing-headers

At prompt, type:
----------------
    (gdb) info sources
    Source files for which symbols have been read in:

    /emc/dtaylor/bugs/missing-headers/main.c

    Source files for which symbols will be read in on demand:

    /usr/include/bits/stdio2.h, /emc/dtaylor/bugs/missing-headers/hello.c
    (gdb) list features.h:1
    No source file named features.h.
    (gdb) list hello.c:1
    1	#include <stdio.h>
    2	
    3	void
    4	print_hello (void)
    5	{
    6	  printf ("Hello, world\n");
    7	}
    (gdb) info sources
    Source files for which symbols have been read in:

    /emc/dtaylor/bugs/missing-headers/hello.c, /usr/include/stdio.h, 
    /usr/include/features.h, /usr/include/bits/predefs.h, 
    /usr/include/sys/cdefs.h, /usr/include/bits/wordsize.h, 
    /usr/include/gnu/stubs.h, /usr/include/gnu/stubs-64.h, 
    /usr/lib/gcc/x86_64-linux-gnu/4.4/include/stddef.h, /usr/include/bits/types.h, 
    /usr/include/bits/typesizes.h, /usr/include/libio.h, /usr/include/_G_config.h, 
    /usr/include/wchar.h, /usr/lib/gcc/x86_64-linux-gnu/4.4/include/stdarg.h, 
    /usr/include/bits/stdio_lim.h, /usr/include/bits/sys_errlist.h, 
    /usr/include/bits/stdio.h, /usr/include/bits/stdio2.h, 
    /emc/dtaylor/bugs/missing-headers/main.c

    Source files for which symbols will be read in on demand:

    /usr/include/bits/stdio2.h
    (gdb) list features.h:1
    1	/* Copyright (C) 1991-1993,1995-2007,2009,2010 Free Software Foundation, Inc.
    2	   This file is part of the GNU C Library.
    3	
    4	   The GNU C Library is free software; you can redistribute it and/or
    5	   modify it under the terms of the GNU Lesser General Public
    6	   License as published by the Free Software Foundation; either
    7	   version 2.1 of the License, or (at your option) any later version.
    8	
    9	   The GNU C Library is distributed in the hope that it will be useful,
    10	   but WITHOUT ANY WARRANTY; without even the implied warranty of
    (gdb) 

I did this with the 7.9 pre-release (to make sure that there wasn't a
bug fix that I missed), but the same problem occurs in 7.8 and earlier
versions.

By contrast, with STABS most (all?) headers are found without the need
to first 'visit' a file thst includes them.

The above was done on an x86-64 GNU/Linux system, though I doubt that
that matters much to duplicating the problem.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.