Skip to content
Snippets Groups Projects
  • Weimin Pan's avatar
    30d1f018
    gdb: CTF support · 30d1f018
    Weimin Pan authored
    This patch adds the CTF (Compact Ansi-C Type Format) support in gdb.
    Two submissions on which this gdb work depends were posted earlier
    in May:
    
     * On the binutils mailing list - adding libctf which creates, updates,
       reads, and manipulates the CTF data.
     * On the gcc mailing list - expanding gcc to directly emit the CFT data
       with a new command line option -gt.
    
    CTF is a reduced form of debugging information whose main purpose is to
    describe the type of C entities such as structures, unions, typedefs and
    function arguments at the global scope only. It does not contain debug
    information about source lines, location expressions, or local variables.
    For more information on CTF, see the documentation in the libdtrace-ctf
    source tree, available here:
    
    <https://raw.githubusercontent.com/oracle/libdtrace-ctf/master/doc/ctf-format>.
    
    This patch expands struct elfinfo by adding the .ctf section, which
    contains CTF debugging info, and modifies elf_symfile_read() to read it.
    If both DWARF and CTF exist in a program, only DWARF will be read. CTF data
    will be read only when there is no DWARF. The two-stage symbolic reading
    and setting strategy, partial and full, was used.
    
    File ctfread.c contains functions to transform CTF data into gdb's internal
    symbol table structures by iterately reading entries from CTF sections
    of "data objects", "function info", "variable info", and "data types"
    when setting up either partial or full symbol table. If the ELF symbol table
    is available, e.g. not stripped, the CTF reader will associate the found
    type information with these symbol entries. Due to the proximity between DWARF
    and CTF (CTF being a much simplified subset of DWARF), some DWARF implementation
    was reused to support CTF.
    
    Test cases ctf-constvars.exp, ctf-cvexpr.exp, ctf-ptype.exp, and ctf-whatis.exp
    have been added to verify the correctness of this support.
    
    This patch has missing features and limitations which we will add and
    address in the future patches.
    
    gdb/ChangeLog
    +2019-10-07  Weimin Pan  <weimin.pan@oracle.com>
    +
    +       * gdb/ctfread.c: New file.
    +       * gdb/ctfread.h: New file.
    +       * gdb/elfread.c: Include ctfread.h.
    +       (struct elfinfo text_p): New member ctfsect.
    +       (elf_locate_sections): Mark CTF section.
    +       (elf_symfile_read): Call elfctf_build_psymtabs.
    +       * gdb/Makefile.in (LIBCTF): Add.
    +       (CLIBS): Use it.
    +       (CDEPS): Likewise.
    +       (DIST): Add ctfread.c.
    +       * Makefile.def (dependencies): Add all-libctf to all-gdb
    +       * Makefile.in: Add "all-gdb: maybe-all-libctf"
    +
    gdb/testsuite/ChangeLog
    +2019-10-07  Weimin Pan  <weimin.pan@oracle.com>
    +
    +       * gdb.base/ctf-whatis.exp: New file.
    +       * gdb.base/ctf-whatis.c: New file.
    +       * gdb.base/ctf-ptype.exp: New file.
    +       * gdb.base/ctf-ptype.c: New file.
    +       * gdb.base/ctf-constvars.exp: New file.
    +       * gdb.base/ctf-constvars.c: New file.
    +       * gdb.base/ctf-cvexpr.exp: New file.
    +
    30d1f018
    History
    gdb: CTF support
    Weimin Pan authored
    This patch adds the CTF (Compact Ansi-C Type Format) support in gdb.
    Two submissions on which this gdb work depends were posted earlier
    in May:
    
     * On the binutils mailing list - adding libctf which creates, updates,
       reads, and manipulates the CTF data.
     * On the gcc mailing list - expanding gcc to directly emit the CFT data
       with a new command line option -gt.
    
    CTF is a reduced form of debugging information whose main purpose is to
    describe the type of C entities such as structures, unions, typedefs and
    function arguments at the global scope only. It does not contain debug
    information about source lines, location expressions, or local variables.
    For more information on CTF, see the documentation in the libdtrace-ctf
    source tree, available here:
    
    <https://raw.githubusercontent.com/oracle/libdtrace-ctf/master/doc/ctf-format>.
    
    This patch expands struct elfinfo by adding the .ctf section, which
    contains CTF debugging info, and modifies elf_symfile_read() to read it.
    If both DWARF and CTF exist in a program, only DWARF will be read. CTF data
    will be read only when there is no DWARF. The two-stage symbolic reading
    and setting strategy, partial and full, was used.
    
    File ctfread.c contains functions to transform CTF data into gdb's internal
    symbol table structures by iterately reading entries from CTF sections
    of "data objects", "function info", "variable info", and "data types"
    when setting up either partial or full symbol table. If the ELF symbol table
    is available, e.g. not stripped, the CTF reader will associate the found
    type information with these symbol entries. Due to the proximity between DWARF
    and CTF (CTF being a much simplified subset of DWARF), some DWARF implementation
    was reused to support CTF.
    
    Test cases ctf-constvars.exp, ctf-cvexpr.exp, ctf-ptype.exp, and ctf-whatis.exp
    have been added to verify the correctness of this support.
    
    This patch has missing features and limitations which we will add and
    address in the future patches.
    
    gdb/ChangeLog
    +2019-10-07  Weimin Pan  <weimin.pan@oracle.com>
    +
    +       * gdb/ctfread.c: New file.
    +       * gdb/ctfread.h: New file.
    +       * gdb/elfread.c: Include ctfread.h.
    +       (struct elfinfo text_p): New member ctfsect.
    +       (elf_locate_sections): Mark CTF section.
    +       (elf_symfile_read): Call elfctf_build_psymtabs.
    +       * gdb/Makefile.in (LIBCTF): Add.
    +       (CLIBS): Use it.
    +       (CDEPS): Likewise.
    +       (DIST): Add ctfread.c.
    +       * Makefile.def (dependencies): Add all-libctf to all-gdb
    +       * Makefile.in: Add "all-gdb: maybe-all-libctf"
    +
    gdb/testsuite/ChangeLog
    +2019-10-07  Weimin Pan  <weimin.pan@oracle.com>
    +
    +       * gdb.base/ctf-whatis.exp: New file.
    +       * gdb.base/ctf-whatis.c: New file.
    +       * gdb.base/ctf-ptype.exp: New file.
    +       * gdb.base/ctf-ptype.c: New file.
    +       * gdb.base/ctf-constvars.exp: New file.
    +       * gdb.base/ctf-constvars.c: New file.
    +       * gdb.base/ctf-cvexpr.exp: New file.
    +