GCC Middle and Back End API Reference
|
#include "config.h"
#include "system.h"
#include "tree.h"
#include "fold-const.h"
#include "dwarf2ctf.h"
#include "ctf.h"
#include "btf.h"
Go to the source code of this file.
Data Structures | |
struct | ctf_string |
struct | ctf_strtable |
struct | ctf_encoding |
struct | ctf_arinfo |
struct | ctf_funcinfo |
struct | ctf_sliceinfo |
struct | ctf_itype |
struct | ctf_dmdef |
struct | ctf_func_arg |
struct | ctf_dtdef |
struct | ctf_dvdef |
struct | ctf_srcloc |
struct | ctfc_dtd_hasher |
struct | ctfc_dvd_hasher |
struct | ctf_container |
Macros | |
#define | CTF_NULL_TYPEID 0 |
#define | CTF_INIT_TYPEID 1 |
#define | ctti_size _u._size |
#define | ctti_type _u._type |
#define | CTF_FUNC_VARARG 0x1 |
#define | ctf_dmd_list_next(elem) ((ctf_dmdef_t *)((elem)->dmd_next)) |
#define | ctf_farg_list_next(elem) ((ctf_func_arg_t *)((elem)->farg_next)) |
#define | CTF_STRTAB 0 /* CTF string table. @endverbatim */ |
#define | CTF_AUX_STRTAB 1 /* CTF auxilliary string table. @endverbatim */ |
#define | CTF_ADD_NONROOT 0 /* CTF type only visible in nested scope. @endverbatim */ |
#define | CTF_ADD_ROOT 1 /* CTF type visible at top-level scope. @endverbatim */ |
Enumerations | |
enum | ctf_dtu_d_union_enum { CTF_DTU_D_MEMBERS , CTF_DTU_D_ARRAY , CTF_DTU_D_ENCODING , CTF_DTU_D_ARGUMENTS , CTF_DTU_D_SLICE } |
Variables | |
ctf_container_ref | tu_ctfc |
#define CTF_ADD_NONROOT 0 /* CTF type only visible in nested scope. @endverbatim */ |
The compiler demarcates whether types are visible at top-level scope or not. The only example so far of a type not visible at top-level scope is slices. CTF_ADD_NONROOT is used to indicate the latter.
Referenced by ctf_add_enum(), ctf_add_generic(), ctf_add_sou(), and gen_ctf_sou_type().
#define CTF_AUX_STRTAB 1 /* CTF auxilliary string table. @endverbatim */ |
Referenced by btf_datasec_push_entry(), and ctf_add_function_arg().
#define ctf_dmd_list_next | ( | elem | ) | ((ctf_dmdef_t *)((elem)->dmd_next)) |
#define ctf_farg_list_next | ( | elem | ) | ((ctf_func_arg_t *)((elem)->farg_next)) |
Referenced by ctf_calc_num_vbytes(), output_asm_btf_func_args_list(), and output_asm_func_args_list().
#define CTF_FUNC_VARARG 0x1 |
Function arguments end with varargs.
Referenced by gen_ctf_function_type().
#define CTF_INIT_TYPEID 1 |
Value to start generating the CTF type ID from.
Referenced by ctfc_is_empty_container(), and init_ctf_container().
#define CTF_NULL_TYPEID 0 |
ctfc.h - Declarations and definitions related to the CTF container. Copyright (C) 2019-2024 Free Software Foundation, Inc. This file is part of GCC. GCC 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 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
This file defines the data structures and functions used by the compiler to generate the CTF debug info. The definitions below are compiler internal representations and closely reflect the CTF format requirements in <ctf.h>. The contents of the CTF container are used eventually for emission of both CTF (ctfout.cc) and BTF debug info (btfout.cc), as the two type debug formats are close cousins.
Invalid CTF type ID definition.
Referenced by btf_init_postprocess(), ctf_add_enumerator(), ctf_do_die(), ctf_lookup_tree_type(), gen_ctf_array_type(), gen_ctf_base_type(), gen_ctf_modifier_type(), gen_ctf_pointer_type(), gen_ctf_subrange_type(), gen_ctf_type(), output_asm_ctf_sou_fields(), output_asm_ctf_type(), output_asm_ctf_vlen_bytes(), and output_ctf_vars().
#define CTF_STRTAB 0 /* CTF string table. @endverbatim */ |
Markers for which string table from the CTF container to use.
Referenced by ctf_output(), output_asm_btf_func_args_list(), and output_btf_datasec_types().
#define ctti_size _u._size |
#define ctti_type _u._type |
Array information for CTF generation.
CTF container structure. It is the context passed around when generating ctf debug info. There is one container per translation unit.
Struct/union/enum member definition for CTF generation.
Encoding information for integers, floating-point values etc. The flags field will contain values appropriate for the type defined in <ctf.h>.
Function Argument.
Function information for CTF generation.
CTF type representation internal to the compiler. It closely reflects the ctf_type_t type node in <ctf.h> except the tags.
Location information for CTF Types and CTF Variables.
CTF string table element (list node).
Internal representation of CTF string table.
typedef bool(* funcs_traverse_callback) (ctf_dtdef_ref, void *) |
Reset all state for BTF generation so that we can rerun the compiler within the same process.
References btf_id_map, btf_info_section, btf_var_ids, ctf_get_tu_ctfc(), ctfc_delete_container(), datasecs, free(), funcs, holes, i, NULL, num_types_added, num_types_created, num_vars_added, tu_ctfc, and voids.
Referenced by ctf_debug_finalize().
Postprocess the CTF debug data post initialization. During the postprocess pass: - Prepare the sorted list of BTF types. The sorted list of BTF types is, firstly, used for lookup (during the BTF generation process) of CTF/BTF types given a typeID. Secondly, in the emitted BTF section, BTF Types need to be in the sorted order of their type IDs. The BTF types section is viewed as an array, with type IDs used to index into that array. It is essential that every type be placed at the exact index corresponding to its ID, or else references to that type from other types will no longer be correct. - References to void types are converted to reference BTF_VOID_TYPEID. In CTF, a distinct type is used to encode void. - Bitfield struct/union members are converted to BTF encoding. CTF uses slices to encode bitfields, but BTF does not have slices and encodes bitfield information directly in the variable-length btf_member descriptions following the struct or union type. - Unrepresentable types are removed. We cannot have any invalid BTF types appearing in the output so they must be removed, and type ids of other types and references adjust accordingly. This also involves ensuring that BTF descriptions of struct members referring to unrepresentable types are not emitted, as they would be nonsensical. - Adjust inner- and inter-type references-by-ID to account for removed types, and construct the types list.
References btf_adjust_type_id(), btf_dtd_postprocess_cb(), BTF_VOID_TYPEID, ctf_add_reftype(), CTF_ADD_ROOT, ctf_dvd_lookup(), ctf_get_tu_ctfc(), CTF_NULL_TYPEID, ctf_container::ctfc_types, ctf_container::ctfc_types_list, symtab_node::decl, hash_table< Descriptor, Lazy, Allocator >::elements(), FOR_EACH_VARIABLE, ggc_alloc(), holes, i, init_btf_id_map(), lookup_decl_die(), NULL, num_types_added, num_types_created, set_btf_id(), hash_table< Descriptor, Lazy, Allocator >::traverse(), TREE_TYPE, tu_ctfc, TYPE_READONLY, VOID_TYPE_P, and voids.
Referenced by ctf_debug_init_postprocess().
Process and output all BTF data. Entry point of btfout.
References btf_emit_preprocess(), ctf_add_cuname(), ctf_get_tu_ctfc(), datasecs, funcs, init_btf_sections(), output_btf_datasec_types(), output_btf_func_types(), output_btf_header(), output_btf_strs(), output_btf_types(), output_btf_vars(), tu_ctfc, and vec_alloc().
Referenced by ctf_debug_finalize().
|
extern |
References ctf_add_generic(), gcc_assert, ggc_alloc(), NULL, and type().
Referenced by gen_ctf_subrange_type().
|
extern |
Add the compilation unit (CU) name string to the CTF string table. The CU name has a prepended pwd string if it is a relative path. Also set the CU name offset in the CTF container.
References CONST_CAST, ctf_add_string(), DIR_SEPARATOR, get_src_pwd(), ggc_alloc(), ggc_alloc_atomic(), ggc_strdup, and NULL.
Referenced by btf_output(), and ctf_output().
|
extern |
References ctf_add_generic(), CTF_ADD_NONROOT, ctf_dtd_lookup(), gcc_assert, ggc_alloc(), and type().
Referenced by gen_ctf_enumeration_type().
|
extern |
References btf_debuginfo_p(), ctf_add_string(), ctf_dmd_list_append(), ctf_dtd_lookup(), CTF_NULL_TYPEID, gcc_assert, ggc_alloc(), INT_MAX, INT_MIN, and NULL.
Referenced by gen_ctf_enumeration_type().
|
extern |
References ctf_add_encoded(), and ggc_alloc().
Referenced by gen_ctf_base_type().
|
extern |
References ctf_add_generic(), ggc_alloc(), and type().
Referenced by gen_ctf_enumeration_type(), and gen_ctf_sou_type().
|
extern |
References ctf_add_generic(), gcc_assert, ggc_alloc(), and type().
Referenced by gen_ctf_function_type().
|
extern |
References ctf_add_string(), CTF_AUX_STRTAB, ctf_dtd_lookup(), ctf_farg_list_append(), gcc_assert, ggc_alloc(), NULL, and type().
Referenced by gen_ctf_function_type().
|
extern |
References ctf_add_encoded(), and ggc_alloc().
Referenced by gen_ctf_base_type(), and gen_ctf_void_type().
|
extern |
References ctf_add_string(), ctf_dmd_list_append(), ctf_dtd_lookup(), gcc_assert, ggc_alloc(), NULL, and type().
Referenced by gen_ctf_sou_type().
|
extern |
References ctf_add_reftype(), and ggc_alloc().
Referenced by gen_ctf_pointer_type().
|
extern |
References ctf_add_generic(), gcc_assert, ggc_alloc(), NULL, and type().
Referenced by btf_init_postprocess(), ctf_add_pointer(), and gen_ctf_modifier_type().
|
extern |
References ceil_log2(), ctf_add_generic(), gcc_assert, ggc_alloc(), NULL, ROUND_UP, and type().
Referenced by gen_ctf_sou_type().
|
extern |
References ctf_add_generic(), CTF_ADD_NONROOT, ctf_dtd_lookup(), gcc_assert, ggc_alloc(), and type().
Referenced by gen_ctf_sou_type().
|
extern |
Add string to the appropriate string table in the CTF container.
References ctfc_get_strtab(), ctfc_strtable_add_str(), and ggc_alloc().
Referenced by btf_datasec_push_entry(), ctf_add_cuname(), ctf_add_enumerator(), ctf_add_function_arg(), ctf_add_generic(), ctf_add_member_offset(), and ctf_add_variable().
|
extern |
References ctf_add_generic(), gcc_assert, ggc_alloc(), NULL, and type().
Referenced by gen_ctf_typedef().
|
extern |
References ctf_add_encoded(), and ggc_alloc().
Referenced by gen_ctf_unknown_type().
|
extern |
References ctf_add_string(), ctf_dvd_ignore_insert(), ctf_dvd_insert(), gcc_assert, ggc_alloc(), and NULL.
Referenced by gen_ctf_variable().
|
extern |
Lookup CTF type given a DWARF die for the type.
References ctf_dtdef::dtd_key, ggc_alloc(), NULL, and type().
Referenced by btf_collect_datasec(), ctf_add_enum(), ctf_add_enumerator(), ctf_add_function_arg(), ctf_add_member_offset(), ctf_add_sou(), ctf_lookup_tree_type(), and ctf_type_exists().
enum ctf_dtu_d_union_enum ctf_dtu_d_union_selector | ( | ctf_dtdef_ref | ctftype | ) |
Return which member of the union is used in CTFTYPE. Used for garbage collection.
References CTF_DTU_D_ARGUMENTS, CTF_DTU_D_ARRAY, CTF_DTU_D_ENCODING, CTF_DTU_D_MEMBERS, CTF_DTU_D_SLICE, and ggc_alloc().
|
extern |
Lookup the dummy CTF variable given the DWARF die for the non-defining decl to be ignored.
References ctf_dvdef::dvd_key, and ggc_alloc().
Referenced by btf_dvd_emit_preprocess_cb(), ctf_dvd_preprocess_cb(), and gen_ctf_variable().
|
extern |
Lookup CTF variable given a DWARF die for the decl.
References ctf_dvdef::dvd_key, ggc_alloc(), and NULL.
Referenced by btf_collect_datasec(), btf_init_postprocess(), and gen_ctf_variable().
Reset all state for CTF generation so that we can rerun the compiler within the same process.
References ctf_get_tu_ctfc(), ctf_info_section, ctfc_delete_container(), NULL, and tu_ctfc.
Referenced by ctf_debug_finalize().
|
extern |
References tu_ctfc.
Referenced by btf_finalize(), btf_init_postprocess(), btf_output(), ctf_do_die(), ctf_finalize(), and ctf_output().
These APIs allow to initialize and finalize the CTF machinery and to add types to the CTF container associated to the current translation unit. Used in dwarf2ctf.cc.
CTF routines interfacing to the compiler.
References init_ctf_container().
Referenced by ctf_debug_init().
|
extern |
Given a TREE_TYPE node, return the CTF type ID for that type.
References ctf_dtd_lookup(), CTF_NULL_TYPEID, ggc_alloc(), lookup_type_die(), and NULL.
CTF routines interfacing to the compiler.
Prepare and output the CTF section.
References ctf_add_cuname(), ctf_get_tu_ctfc(), ctf_preprocess(), CTF_STRTAB, ctfc_get_strtab_len(), ctf_container::ctfc_strlen, CTFINFO_LEVEL_NONE, gcc_assert, ggc_alloc(), init_ctf_sections(), output_ctf_func_info(), output_ctf_funcidx(), output_ctf_header(), output_ctf_obj_info(), output_ctf_objtidx(), output_ctf_strs(), output_ctf_types(), output_ctf_vars(), and tu_ctfc.
Referenced by ctf_debug_finalize().
|
extern |
Check if CTF for TYPE has already been generated. Mainstay for de-duplication. If CTF type already exists, returns TRUE and updates the TYPE_ID for the caller.
References ctf_dtd_lookup(), ggc_alloc(), and type_id.
Referenced by gen_ctf_array_type(), gen_ctf_function(), gen_ctf_function_type(), gen_ctf_modifier_type(), gen_ctf_pointer_type(), gen_ctf_sou_type(), gen_ctf_subrange_type(), gen_ctf_type(), gen_ctf_typedef(), and gen_ctf_unknown_type().
|
extern |
Delete the CTF container's resources.
References ctfc_delete_strtab(), ggc_alloc(), ggc_free(), and NULL.
Referenced by btf_finalize(), and ctf_finalize().
|
extern |
CTF section does not emit location information; at this time, location information is needed for BTF CO-RE use-cases.
Location information for CTF Types and CTF Variables. CTF section does not emit location information; at this time, location information is needed for BTF CO-RE use-cases.
References ctf_get_die_loc_col(), ctf_get_die_loc_file(), ctf_get_die_loc_line(), ctf_srcloc::ctsloc_col, ctf_srcloc::ctsloc_file, ctf_srcloc::ctsloc_line, ggc_alloc(), and NULL.
|
extern |
|
extern |
Get the total number of CTF types in the container.
References ggc_alloc().
Referenced by output_ctf_header().
|
extern |
Get the total number of CTF variables in the container.
References ggc_alloc().
Referenced by ctf_preprocess().
|
extern |
Get the number of bytes to represent the variable length portion of all CTF types in the CTF container.
References ggc_alloc().
Referenced by output_ctf_header().
|
extern |
Get reference to the CTF string table or the CTF auxilliary string table.
References ggc_alloc().
Referenced by ctf_add_string(), and ctfc_get_strtab_len().
|
extern |
Get the length of the specified string table in the CTF container.
Get the length of the specified string table of the CTF container.
References ctfc_get_strtab(), and ggc_alloc().
Referenced by ctf_output(), output_asm_btf_func_args_list(), and output_btf_datasec_types().
|
extern |
If the next ctf type id is still set to the init value, no ctf records to report.
References CTF_INIT_TYPEID, and ggc_alloc().
Referenced by output_btf_header(), and output_ctf_header().
Return the BTF type ID of CTF type ID KEY, or BTF_INVALID_TYPEID if the CTF type with ID KEY does not map to a BTF type.
References btf_id_map.
Referenced by btf_asm_type(), and btf_asm_type_ref().
bool traverse_btf_func_types | ( | funcs_traverse_callback | callback, |
void * | data ) |
Traversal function for all BTF_KIND_FUNC type records.
References FOR_EACH_VEC_ELT, funcs, and i.
|
extern |
Generate CTF. Copyright (C) 2019-2024 Free Software Foundation, Inc. This file is part of GCC. GCC 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 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
A CTF container object - one per translation unit.
Referenced by btf_finalize(), btf_init_postprocess(), btf_output(), ctf_do_die(), ctf_finalize(), ctf_get_tu_ctfc(), ctf_output(), init_ctf_container(), and new_ctf_container().