On Tue, Mar 9, 2021 at 11:15 AM Richard Biener <richard.guent...@gmail.com> wrote: > > On Mon, Mar 1, 2021 at 12:18 PM Jose E. Marchesi via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > > > [Changes from V2: > > - Rebased to latest master. > > - Several bug fixes in the CTF support. > > - Several bug fixes in the BTF support. > > - New tests for BTF. > > - Fix a couple of tests in the CTF testsuite. > > - More testing: we are building Gentoo with -gctf activated by > > default and fixing problems as we find them. More than 160 packages > > built so far.] > > > > Hi people! > > > > Last year we submitted a first patch series introducing support for > > the CTF debugging format in GCC [1]. We got a lot of feedback that > > prompted us to change the approach used to generate the debug info, > > and this patch series is the result of that. > > > > This series also add support for the BTF debug format, which is needed > > by the BPF backend (more on this below.) > > > > This implementation works, but there are several points that need > > discussion and agreement with the upstream community, as they impact > > the way debugging options work. We are also proposing a way to add > > additional debugging formats in the future. See below for more > > details. > > > > Finally, a patch makes the BPF GCC backend to use the DWARF debug > > hooks in order to make -gbtf available to it. > > > > [1] https://gcc.gnu.org/legacy-ml/gcc-patches/2019-05/msg01297.html > > > > About CTF > > ========= > > > > CTF is a debugging format designed in order to express C types in a > > very compact way. The key is compactness and simplicity. For more > > information see: > > > > - CTF specification > > http://www.esperi.org.uk/~oranix/ctf/ctf-spec.pdf > > > > - Compact C-Type support in the GNU toolchain (talk + slides) > > https://linuxplumbersconf.org/event/4/contributions/396/ > > > > - On type de-duplication in CTF (talk + slides) > > https://linuxplumbersconf.org/event/7/contributions/725/ > > > > About BTF > > ========= > > > > BTF is a debugging format, similar to CTF, that is used in the Linux > > kernel as the debugging format for BPF programs. From the kernel > > documentation: > > > > "BTF (BPF Type Format) is the metadata format which encodes the debug > > info related to BPF program/map. The name BTF was used initially to > > describe data types. The BTF was later extended to include function > > info for defined subroutines, and line info for source/line > > information." > > > > Supporting BTF in GCC is important because compiled BPF programs > > (which GCC supports as a target) require the type information in order > > to be loaded and run in diverse kernel versions. This mechanism is > > known as CO-RE (compile-once, run-everywhere) and is described in the > > "Update of the BPF support in the GNU Toolchain" talk mentioned below. > > > > The BTF is documented in the Linux kernel documentation tree: > > - linux/Documentation/bpf/btf.rst > > > > CTF in the GNU Toolchain > > ======================== > > > > During the last year we have been working in adding support for CTF to > > several components of the GNU toolchain: > > > > - binutils support is already upstream. It supports linking objects > > with CTF information with full type de-duplication. > > > > - GDB support is to be sent upstream very shortly. It makes the > > debugger capable to use the CTF information whenever available. > > This is useful in cases where DWARF has been stripped out but CTF is > > kept. > > > > - GCC support is being discussed and submitted in this series. > > > > Overview of the Implementation > > ============================== > > > > dwarf2out.c > > > > The enabled debug formats are hooked in dwarf2out_early_finish. > > > > dwarf2ctf.c > > > > Code that tranform the internal GCC DWARF DIEs into CTF container > > structures. This file is included in dwarf2out.c. > > > > ctfc.c > > ctfc.h > > > > These two files implement the "CTF container", which is shared > > among CTF and BTF, due to the many similarities between both > > formats. > > > > ctfout.c > > > > Code that emits assembler with the .ctf section data, from the CTF > > container. > > > > btfout.c > > > > Code that emits assembler with the .BTF section data, from the CTF > > container. > > > > From debug hooks to debug formats > > ================================= > > > > Our first attempt in adding CTF to GCC used the obvious approach of > > adding a new set of debug hooks as defined in gcc/debug.h. > > > > During our first interaction with the upstream community we were told > > to _not_ use debug hooks, because these are to be obsoleted at some > > point. We were suggested to instead hook our handlers (which > > processed type TREE nodes producing CTF types from them) somewhere > > else. So we did. > > > > However at the time we were also facing the need to support BTF, which > > is another type-related debug format needed by the BPF GCC backend. > > Hooking here and there doesn't sound like such a good idea when it > > comes to support several debug formats. > > > > Therefore we thought about how to make GCC support diverse debugging > > formats in a better way. This led to a proposal we tried to discuss > > at the GNU Tools Track in LPC2020: > > > > - Update of the BPF support in the GNU Toolchain > > https://linuxplumbersconf.org/event/7/contributions/724/ > > > > Basically, the current situation in terms of diversity of debugging > > formats in GCC can be summarized in the following like: > > > > tree --+ +--> dwarf2out > > rtl --+ +--> dbxout > > +--> debug_hooks --+--> vmsdbgout > > backends --+ +--> xcoffout > > lto --+ +--> godump > > > > i.e. each debug format materializes in a set of debug hooks, as in > > gcc/debug.h. The installed hooks are then invoked from many different > > areas of the compiler including front-end, middle-end, back-end and > > also lto. Most of the hooks get TREE objects, from which they are > > supposed to extract/infer whatever information they need to express. > > > > This approach has several problems, some of which were raised by you > > people when we initially submitted the CTF support: > > > > - The handlers depend on the TREE nodes, so if new TREE nodes are > > added to cover new languages, or functionality in existing > > languages, all the debug hooks may need to be updated to reflect it. > > > > - This also happens when the contents of existing TREE node types > > change or get expanded. > > > > - The semantics encoded in TREE nodes usually are not in the best form > > to be used by debug formats. This implies that the several sets of > > debug hooks need to do very similar transformations, which again > > will have to be adjusted/corrected if the TREE nodes change. > > > > - And more... > > > > In contrast, this is how LLVM supports several debug formats: > > > > +--> DWARF > > IR --> class DebugHandlerBase --+--> CodeView > > +--> BTF > > > > i.e. LLVM gets debugging information as part of the IR, and then has > > debug info backends in the form of instances of DebugHandlerBase, > > which process that subset of the IR to produce whatever debug output. > > > > To overcome the problems above, we thought about introducing a new set > > of debug hooks, resulting in something like this: > > > > +--> godump > > +--> xcoffout > > debug_hooks -+--> vmsdbgout > > +--> dbxout +--> DWARF > > +--> dwarf2out --> n_debug_hooks --+--> BTF > > (walk) +--> CTF > > ... more ... > > > > See how these "new debug hooks" are intended to be called by the DWARF > > old debug hooks. In this way: > > > > - The internal DWARF representation becomes the canonical (and only) > > IR for debugging information in the compiler. This is similar to > > what LLVM uses to implement support for DWARF, BTF and the Microsoft > > debug format. > > > > - Debug formats (like CTF, BTF, stabs, etc) are implemented to provide > > a very simple API that traverses the DWARF DIE trees available in > > dwarf2out. > > > > - The semantics expressed in the DWARF DIEs, which have been already > > extracted from the TREE nodes, are free of many internal details and > > more suitable to be easily translated into whatever abstractions the > > debug formats require. > > > > To avoid misunderstandings, we got to refer to these "new debug hooks" > > simply as "debug formats". > > > > In this patch series we are using this later approach in order to > > support both CTF and BTF, and we can say we are happy about using the > > internal DWARF DIEs as a source instead of TREE nodes: it led to a > > more natural implementation, much easier to understand. This sort of > > confirms in practice that the approach is sound. > > > > The debug format API > > ==================== > > > > As you can see in the patch series, we hooked CTF in dwarf2out_early_finish > > like this: > > > > /* Emit CTF debug info. */ > > if (ctf_debug_info_level > CTFINFO_LEVEL_NONE && lang_GNU_C ()) > > { > > ctf_debug_init (); > > debug_format_do_cu (comp_unit_die ()); > > for (limbo_die_node *node = limbo_die_list; node; node = node->next) > > debug_format_do_cu (node->die); > > ctf_debug_finalize (filename); > > } > > > > In turn, debug_format_do_cu traverses the tree of DIEs passed to it calling > > ctf_do_die on them. > > > > This conforms the debug format API: > > > > FOO_debug_init () > > Initialize the debug format FOO. > > > > FOO_debug_finalize (FILENAME) > > Possibly write out, cleanup and finalization for debug format FOO. > > > > FOO_do_die (DIE) > > Process the given DIE. > > > > Note how the emission of DWARF is interrupted after that point, if no > > DWARF was requested by the user. > > I suppose since we're now supposed to write C++ the above fits > a RAII style > > if (ctf_debug_info_level > ...) > { > ctf_debug ctf (filename); > ctf.do_cu (comp_unit_die ()); > for (...) > ctf.do_cu (node->die); > } > > but then I have no strong feelings about this. > > > dwarf2out - dwarf2ctf > > ===================== > > > > The functions ctf_debug_init, ctf_do_die and ctf_debug_finalize, that > > implement the API described above, are all in gcc/dwarf2ctf.c. > > > > Obviously, these routines need access to the dwarf DIE data > > structures, and several functions which are defined in dwarf2out.[ch], > > many (most?) of which are private to that file: dw_die_ref, get_AT, > > etc. > > > > Therefore, in this implementation we opted by writing dwarf2ctf.c in a > > way it can just be #included in dwarf2ctf.c. > > > > A question remains: would it be better to abstract these types and > > functions in an API in dwarf2out.h? > > I think that refactoring the big dwarf2out.c would be indeed interesting. > Not only exposing more details from dwarf2out.h (though we could start > there). One of the reason it's all private to dwarf2out.c is likely > optimization (somewhat moot when you LTO GCC nowadays). > > So one interesting question is what's the API details CTF/BTF need? > > We might move data structures and basic accessors to > dwarf2impl.{c,h} (as opposed to the already existing dwarf2.h). > Or some better name (or as said, simply keep it in dwarf2out.c for now). > > Including dwarf2ctf.c is a bit ugly. > > > Command line options for debug formats > > ====================================== > > > > This implementation adds the following command-line options to select the > > emission of CTF and BTF: > > > > -gctf[123] > > -gbtf[123] > > > > These options mimic the -g[123...] options for DWARF. > > Do -gcft and -gdwarf mix? That is, can I have both in the same ELF > file? Since that doesn't work for -gdwarf -gstabs for example I wonder > if we need to make this somehow different? > > > This involved adding new entries for debug_info_type: > > > > CTF_DEBUG - Write CTF debug info. > > BTF_DEBUG - Write BTF debug info. > > CTF_AND_DWARF2_DEBUG - Write both CTF and DWARF info. > > > > Doing this, we just followed the trend initiated by vmsdbgout.c, which > > added VMS_DEBUG and VMS_AND_DWARF2_DEBUG. > > > > This approach is not very good, because debug_info_type was designed > > to cover different debug hook implementations; debug formats, in > > contrast, are a different thing. > > > > This translates to problems and fragile behavior: > > > > - Everywhere write_symbols is checked we have to expand the logic to > > take the CTF values into account. You can see that is the case in > > this patch series. This is very fragile and doesn't scale well: we > > are most probably missing some checks. > > Would be nice to abstract most of the checks. Like if the check > is for "do I need to generate DWARF DIEs" then use > need_dwarf_dies (), if it is for "do I want to output DWARF2 debug" then > check output_dwarf (). I see 64 places that check write_symbols, > most in vmsdbgout.c ... > > Inventing predicates for the existing uses with your new uses in mind > could make future changes easier at least. > > > - The CTF debug format needs certain DWARF debug level (2) in order to > > work, since otherwise not enough type DIEs get generated. This will > > probably happen with some other formats as well. > > > > - Therefore, -gctf implicitly sets the DWARF debug level to 2. But if > > the user uses -gctf -g1, the CTF information will be incomplete > > because -g1 resets the DWARF debug level to 1. -gtoggle also > > presents difficulties. > > I think long-term -g1 should be implemented by not outputting parts > of the DIE tree that -g1 doesn't want. Generating the DIEs can of > course still be suppressed if there's no need for them (like macros with -g3). > > > - Backends select what debug hooks to use by defining constants like > > DWARF2_DEBUGGING_INFO. Since the new debug formats are based on the > > DWARF debug hooks, that is the constant to define by the backends > > wanting to support DWARF + debug infos. > > > > However, some backends may want to use one of the debug formats by > > default, i.e. for -g. This is the case of the BPF backend, that > > needs to generate BTF instead of DWARF. Currently, there is no way > > to specify this. > > It probably should define BTF_DEBUGGING_INFO and that should > enable parts guarded with DWARF2_DEBUGGING_INFO as well.
BTW, is there a git branch one can more easily browse the new code? > > We could add a new optional backend hook/constant to select the > > desired default debug format, like: > > > > #define DWARF2_DEBUGGING_INFO /* Selects the dwarf debug hooks */ > > > > /* Selects the default debug format to emit with -g. */ > > #define CTF_DEBUGGING_FORMAT > > #define BTF_DEBUGGING_FORMAT > > #define DWARF_DEBUGGING_FORMAT /* The default */ > > > > Regardless of what debug format is defined as the default, the other > > formats are also available with -gdwarf, -gctf, -gbtf, etc. > > > > David Faust (1): > > Enable BTF generation in the BPF backend > > > > Indu Bhagat (1): > > CTF/BTF documentation > > > > Jose E. Marchesi (3): > > Add new function lang_GNU_GIMPLE > > CTF/BTF debug formats > > CTF/BTF testsuites > > > > gcc/Makefile.in | 6 + > > gcc/btfout.c | 788 +++++++++++++++++ > > gcc/common.opt | 20 + > > gcc/config/bpf/bpf.c | 4 - > > gcc/config/bpf/bpf.h | 12 +- > > gcc/ctfc.c | 831 +++++++++++++++++ > > gcc/ctfc.h | 351 ++++++++ > > gcc/ctfout.c | 774 ++++++++++++++++ > > gcc/doc/invoke.texi | 20 + > > gcc/dwarf2cfi.c | 4 +- > > gcc/dwarf2ctf.c | 832 ++++++++++++++++++ > > gcc/dwarf2out.c | 35 +- > > gcc/final.c | 6 +- > > gcc/flag-types.h | 28 +- > > gcc/gengtype.c | 2 +- > > gcc/langhooks.c | 9 + > > gcc/langhooks.h | 1 + > > gcc/opts.c | 108 ++- > > gcc/targhooks.c | 3 +- > > gcc/testsuite/gcc.dg/debug/btf/btf-1.c | 6 + > > gcc/testsuite/gcc.dg/debug/btf/btf-2.c | 10 + > > .../gcc.dg/debug/btf/btf-anonymous-struct-1.c | 23 + > > .../gcc.dg/debug/btf/btf-anonymous-union-1.c | 23 + > > gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c | 31 + > > .../gcc.dg/debug/btf/btf-bitfields-1.c | 34 + > > .../gcc.dg/debug/btf/btf-bitfields-2.c | 26 + > > .../gcc.dg/debug/btf/btf-bitfields-3.c | 43 + > > .../gcc.dg/debug/btf/btf-cvr-quals-1.c | 52 ++ > > gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c | 30 + > > .../gcc.dg/debug/btf/btf-forward-1.c | 24 + > > .../gcc.dg/debug/btf/btf-function-1.c | 18 + > > .../gcc.dg/debug/btf/btf-function-2.c | 18 + > > gcc/testsuite/gcc.dg/debug/btf/btf-int-1.c | 44 + > > .../gcc.dg/debug/btf/btf-pointers-1.c | 25 + > > .../gcc.dg/debug/btf/btf-pointers-2.c | 14 + > > gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c | 22 + > > .../gcc.dg/debug/btf/btf-typedef-1.c | 82 ++ > > gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c | 16 + > > .../gcc.dg/debug/btf/btf-variables-1.c | 33 + > > gcc/testsuite/gcc.dg/debug/btf/btf.exp | 41 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-1.c | 6 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-2.c | 10 + > > .../gcc.dg/debug/ctf/ctf-anonymous-struct-1.c | 23 + > > .../gcc.dg/debug/ctf/ctf-anonymous-union-1.c | 26 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-array-1.c | 31 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-array-2.c | 38 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-array-3.c | 17 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-array-4.c | 13 + > > .../gcc.dg/debug/ctf/ctf-attr-mode-1.c | 22 + > > .../gcc.dg/debug/ctf/ctf-attr-used-1.c | 22 + > > .../gcc.dg/debug/ctf/ctf-bitfields-1.c | 30 + > > .../gcc.dg/debug/ctf/ctf-bitfields-2.c | 39 + > > .../gcc.dg/debug/ctf/ctf-bitfields-3.c | 16 + > > .../gcc.dg/debug/ctf/ctf-bitfields-4.c | 19 + > > .../gcc.dg/debug/ctf/ctf-complex-1.c | 22 + > > .../gcc.dg/debug/ctf/ctf-cvr-quals-1.c | 65 ++ > > .../gcc.dg/debug/ctf/ctf-cvr-quals-2.c | 30 + > > .../gcc.dg/debug/ctf/ctf-cvr-quals-3.c | 25 + > > .../gcc.dg/debug/ctf/ctf-cvr-quals-4.c | 23 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-1.c | 21 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-2.c | 27 + > > .../gcc.dg/debug/ctf/ctf-file-scope-1.c | 25 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-float-1.c | 16 + > > .../gcc.dg/debug/ctf/ctf-forward-1.c | 40 + > > .../gcc.dg/debug/ctf/ctf-forward-2.c | 16 + > > .../gcc.dg/debug/ctf/ctf-func-index-1.c | 25 + > > .../debug/ctf/ctf-function-pointers-1.c | 24 + > > .../debug/ctf/ctf-function-pointers-2.c | 22 + > > .../debug/ctf/ctf-function-pointers-3.c | 21 + > > .../debug/ctf/ctf-function-pointers-4.c | 18 + > > .../gcc.dg/debug/ctf/ctf-functions-1.c | 34 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-int-1.c | 17 + > > .../gcc.dg/debug/ctf/ctf-objt-index-1.c | 30 + > > .../gcc.dg/debug/ctf/ctf-pointers-1.c | 26 + > > .../gcc.dg/debug/ctf/ctf-pointers-2.c | 25 + > > .../gcc.dg/debug/ctf/ctf-preamble-1.c | 11 + > > .../gcc.dg/debug/ctf/ctf-skip-types-1.c | 33 + > > .../gcc.dg/debug/ctf/ctf-skip-types-2.c | 17 + > > .../gcc.dg/debug/ctf/ctf-skip-types-3.c | 20 + > > .../gcc.dg/debug/ctf/ctf-skip-types-4.c | 19 + > > .../gcc.dg/debug/ctf/ctf-skip-types-5.c | 19 + > > .../gcc.dg/debug/ctf/ctf-skip-types-6.c | 18 + > > .../gcc.dg/debug/ctf/ctf-skip-types-7.c | 18 + > > .../gcc.dg/debug/ctf/ctf-str-table-1.c | 26 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-1.c | 25 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-2.c | 32 + > > .../gcc.dg/debug/ctf/ctf-struct-array-1.c | 65 ++ > > .../gcc.dg/debug/ctf/ctf-struct-pointer-1.c | 21 + > > .../gcc.dg/debug/ctf/ctf-struct-pointer-2.c | 22 + > > .../gcc.dg/debug/ctf/ctf-typedef-1.c | 68 ++ > > .../gcc.dg/debug/ctf/ctf-typedef-2.c | 20 + > > .../gcc.dg/debug/ctf/ctf-typedef-3.c | 24 + > > .../gcc.dg/debug/ctf/ctf-typedef-struct-1.c | 14 + > > .../gcc.dg/debug/ctf/ctf-typedef-struct-2.c | 17 + > > .../gcc.dg/debug/ctf/ctf-typedef-struct-3.c | 32 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf-union-1.c | 14 + > > .../gcc.dg/debug/ctf/ctf-variables-1.c | 25 + > > .../gcc.dg/debug/ctf/ctf-variables-2.c | 16 + > > gcc/testsuite/gcc.dg/debug/ctf/ctf.exp | 41 + > > gcc/testsuite/gcc.dg/debug/dwarf2-ctf-1.c | 7 + > > gcc/toplev.c | 25 +- > > include/btf.h | 196 +++++ > > include/ctf.h | 513 +++++++++++ > > libiberty/simple-object.c | 3 + > > 104 files changed, 6649 insertions(+), 25 deletions(-) > > create mode 100644 gcc/btfout.c > > create mode 100644 gcc/ctfc.c > > create mode 100644 gcc/ctfc.h > > create mode 100644 gcc/ctfout.c > > create mode 100644 gcc/dwarf2ctf.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-struct-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-union-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-forward-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-function-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-function-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-int-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-pointers-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-variables-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf.exp > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-struct-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-union-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-array-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-array-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-array-3.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-array-4.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-mode-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-used-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-4.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-complex-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-3.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-4.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-file-scope-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-float-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-func-index-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-3.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-4.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-functions-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-int-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-objt-index-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-preamble-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-3.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-4.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-5.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-6.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-7.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-str-table-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-3.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-3.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-union-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-1.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-2.c > > create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf.exp > > create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2-ctf-1.c > > create mode 100644 include/btf.h > > create mode 100644 include/ctf.h > > > > -- > > 2.25.0.2.g232378479e > >