GCC Middle and Back End API Reference
|
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "target.h"
#include "toplev.h"
#include "ctfc.h"
#include "diagnostic-core.h"
Variables | |
ctf_container_ref | tu_ctfc |
ctf_id_t ctf_add_array | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
const ctf_arinfo_t * | arp, | ||
dw_die_ref | die ) |
References ctf_add_generic(), gcc_assert, ggc_alloc(), NULL, and type().
Referenced by gen_ctf_subrange_type().
void ctf_add_cuname | ( | ctf_container_ref | ctfc, |
const char * | filename ) |
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().
|
static |
References ceil_log2(), ctf_add_generic(), ggc_alloc(), ROUND_UP, and type().
Referenced by ctf_add_float(), ctf_add_integer(), and ctf_add_unknown().
ctf_id_t ctf_add_enum | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
const char * | name, | ||
HOST_WIDE_INT | size, | ||
bool | eunsigned, | ||
dw_die_ref | die ) |
References ctf_add_generic(), CTF_ADD_NONROOT, ctf_dtd_lookup(), gcc_assert, ggc_alloc(), and type().
Referenced by gen_ctf_enumeration_type().
int ctf_add_enumerator | ( | ctf_container_ref | ctfc, |
ctf_id_t | enid, | ||
const char * | name, | ||
HOST_WIDE_INT | value, | ||
dw_die_ref | die ) |
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().
ctf_id_t ctf_add_float | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
const char * | name, | ||
const ctf_encoding_t * | ep, | ||
dw_die_ref | die ) |
References ctf_add_encoded(), and ggc_alloc().
Referenced by gen_ctf_base_type().
ctf_id_t ctf_add_forward | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
const char * | name, | ||
uint32_t | kind, | ||
dw_die_ref | die ) |
References ctf_add_generic(), ggc_alloc(), and type().
Referenced by gen_ctf_enumeration_type(), and gen_ctf_sou_type().
ctf_id_t ctf_add_function | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
const char * | name, | ||
const ctf_funcinfo_t * | ctc, | ||
dw_die_ref | die, | ||
bool | from_global_func, | ||
int | linkage ) |
References ctf_add_generic(), gcc_assert, ggc_alloc(), and type().
Referenced by gen_ctf_function_type().
int ctf_add_function_arg | ( | ctf_container_ref | ctfc, |
dw_die_ref | func, | ||
const char * | name, | ||
ctf_id_t | type ) |
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().
|
static |
Functions to create CTF types. These functions perform the task of adding CTF types to the CTF container. No de-duplication is done by them; the onus is on the calling function to do so. The caller must first do a lookup via ctf_dtd_lookup or ctf_dvd_lookup, as applicable, to ascertain that the CTF type or the CTF variable respectively does not already exist, and then add it.
References CTF_ADD_NONROOT, CTF_ADD_ROOT, ctf_add_string(), ctf_dtd_insert(), gcc_assert, ggc_alloc(), NULL, and type().
Referenced by ctf_add_array(), ctf_add_encoded(), ctf_add_enum(), ctf_add_forward(), ctf_add_function(), ctf_add_reftype(), ctf_add_slice(), ctf_add_sou(), and ctf_add_typedef().
ctf_id_t ctf_add_integer | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
const char * | name, | ||
const ctf_encoding_t * | ep, | ||
dw_die_ref | die ) |
References ctf_add_encoded(), and ggc_alloc().
Referenced by gen_ctf_base_type(), and gen_ctf_void_type().
int ctf_add_member_offset | ( | ctf_container_ref | ctfc, |
dw_die_ref | sou, | ||
const char * | name, | ||
ctf_id_t | type, | ||
uint64_t | bit_offset ) |
References ctf_add_string(), ctf_dmd_list_append(), ctf_dtd_lookup(), gcc_assert, ggc_alloc(), NULL, and type().
Referenced by gen_ctf_sou_type().
ctf_id_t ctf_add_pointer | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
ctf_id_t | ref, | ||
dw_die_ref | die ) |
References ctf_add_reftype(), and ggc_alloc().
Referenced by gen_ctf_pointer_type().
ctf_id_t ctf_add_reftype | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
ctf_id_t | ref, | ||
uint32_t | kind, | ||
dw_die_ref | die ) |
References ctf_add_generic(), gcc_assert, ggc_alloc(), NULL, and type().
Referenced by btf_init_postprocess(), ctf_add_pointer(), and gen_ctf_modifier_type().
ctf_id_t ctf_add_slice | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
ctf_id_t | ref, | ||
uint32_t | bit_offset, | ||
uint32_t | bit_size, | ||
dw_die_ref | die ) |
References ceil_log2(), ctf_add_generic(), gcc_assert, ggc_alloc(), NULL, ROUND_UP, and type().
Referenced by gen_ctf_sou_type().
ctf_id_t ctf_add_sou | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
const char * | name, | ||
uint32_t | kind, | ||
size_t | size, | ||
dw_die_ref | die ) |
References ctf_add_generic(), CTF_ADD_NONROOT, ctf_dtd_lookup(), gcc_assert, ggc_alloc(), and type().
Referenced by gen_ctf_sou_type().
const char * ctf_add_string | ( | ctf_container_ref | ctfc, |
const char * | name, | ||
uint32_t * | name_offset, | ||
int | aux_str = CTF_STRTAB ) |
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().
ctf_id_t ctf_add_typedef | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
const char * | name, | ||
ctf_id_t | ref, | ||
dw_die_ref | die ) |
References ctf_add_generic(), gcc_assert, ggc_alloc(), NULL, and type().
Referenced by gen_ctf_typedef().
ctf_id_t ctf_add_unknown | ( | ctf_container_ref | ctfc, |
uint32_t | flag, | ||
const char * | name, | ||
const ctf_encoding_t * | ep, | ||
dw_die_ref | die ) |
References ctf_add_encoded(), and ggc_alloc().
Referenced by gen_ctf_unknown_type().
int ctf_add_variable | ( | ctf_container_ref | ctfc, |
const char * | name, | ||
ctf_id_t | ref, | ||
dw_die_ref | die, | ||
unsigned int | external_vis, | ||
dw_die_ref | die_var_decl ) |
References ctf_add_string(), ctf_dvd_ignore_insert(), ctf_dvd_insert(), gcc_assert, ggc_alloc(), and NULL.
Referenced by gen_ctf_variable().
|
static |
Append member definition to the list. Member list is a singly-linked list with list start pointing to the head.
References ctf_dmdef::dmd_next, ggc_alloc(), and NULL.
Referenced by ctf_add_enumerator(), and ctf_add_member_offset().
|
static |
Insert CTF type into the CTF container.
References gcc_assert, ggc_alloc(), and NULL.
Referenced by ctf_add_generic().
ctf_dtdef_ref ctf_dtd_lookup | ( | const ctf_container_ref | ctfc, |
const dw_die_ref | type ) |
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().
|
static |
Insert a dummy CTF variable into the list of variables to be ignored.
References gcc_assert, ggc_alloc(), and NULL.
Referenced by ctf_add_variable().
bool ctf_dvd_ignore_lookup | ( | const ctf_container_ref | ctfc, |
dw_die_ref | die ) |
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().
|
static |
Insert CTF variable into the CTF container.
References gcc_assert, ggc_alloc(), and NULL.
Referenced by ctf_add_variable().
ctf_dvdef_ref ctf_dvd_lookup | ( | const ctf_container_ref | ctfc, |
dw_die_ref | die ) |
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().
|
static |
Append function argument to the list. Member list is a singly-linked list with list start pointing to the head.
References ctf_func_arg::farg_next, ggc_alloc(), and NULL.
Referenced by ctf_add_function_arg().
ctf_container_ref ctf_get_tu_ctfc | ( | void | ) |
References tu_ctfc.
Referenced by btf_finalize(), btf_init_postprocess(), btf_output(), ctf_do_die(), ctf_finalize(), and ctf_output().
CTF routines interfacing to the compiler.
References init_ctf_container().
Referenced by ctf_debug_init().
ctf_id_t ctf_lookup_tree_type | ( | ctf_container_ref | ctfc, |
const tree | type ) |
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.
bool ctf_type_exists | ( | ctf_container_ref | ctfc, |
dw_die_ref | type, | ||
ctf_id_t * | type_id ) |
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().
void ctfc_delete_container | ( | ctf_container_ref | ctfc | ) |
Delete the CTF container's resources.
References ctfc_delete_strtab(), ggc_alloc(), ggc_free(), and NULL.
Referenced by btf_finalize(), and ctf_finalize().
void ctfc_delete_strtab | ( | ctf_strtable_t * | strtab | ) |
References ctf_string::cts_next, ggc_alloc(), ggc_free(), and NULL.
Referenced by ctfc_delete_container().
int ctfc_get_dtd_srcloc | ( | ctf_dtdef_ref | dtd, |
ctf_srcloc_ref | loc ) |
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.
int ctfc_get_dvd_srcloc | ( | ctf_dvdef_ref | dvd, |
ctf_srcloc_ref | loc ) |
unsigned int ctfc_get_num_ctf_types | ( | ctf_container_ref | ctfc | ) |
Get the total number of CTF types in the container.
References ggc_alloc().
Referenced by output_ctf_header().
unsigned int ctfc_get_num_ctf_vars | ( | ctf_container_ref | ctfc | ) |
Get the total number of CTF variables in the container.
References ggc_alloc().
Referenced by ctf_preprocess().
size_t ctfc_get_num_vlen_bytes | ( | ctf_container_ref | ctfc | ) |
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().
ctf_strtable_t * ctfc_get_strtab | ( | ctf_container_ref | ctfc, |
int | aux ) |
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().
size_t ctfc_get_strtab_len | ( | ctf_container_ref | ctfc, |
int | aux ) |
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().
bool ctfc_is_empty_container | ( | ctf_container_ref | ctfc | ) |
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().
|
static |
Wrapper function to add str to the CTF string table. No de-duplication of CTF strings is done by the compiler.
References CONST_CAST, ctfc_strtable_append_str(), gcc_assert, ggc_alloc(), ggc_strdup, and NULL.
Referenced by ctf_add_string(), and init_ctf_strtable().
|
static |
Append str to the CTF string table.
References ctf_string::cts_next, ctf_string::cts_str, ggc_alloc(), and NULL.
Referenced by ctfc_strtable_add_str().
Initialize a CTF container per translation unit.
References CTF_INIT_TYPEID, ctf_container::ctfc_flags, ctf_container::ctfc_magic, ctf_container::ctfc_nextid, ctf_container::ctfc_version, ggc_alloc(), init_ctf_string_table(), new_ctf_container(), and tu_ctfc.
Referenced by ctf_init().
|
static |
Initialize the string tables in the CTF container.
References ggc_alloc(), and init_ctf_strtable().
Referenced by init_ctf_container().
|
static |
CTF container setup and teardown routines.
Initialize the CTF string table. The first entry in the CTF string table (empty string) is added.
References ctfc_strtable_add_str(), ggc_alloc(), and NULL.
Referenced by init_ctf_string_table().
|
inlinestatic |
Allocate a new CTF container with the desired flags.
References hash_table< Descriptor, Lazy, Allocator >::create_ggc(), ctf_container::ctfc_ignore_vars, ctf_container::ctfc_types, ctf_container::ctfc_vars, ggc_alloc(), and tu_ctfc.
Referenced by init_ctf_container().
ctf_container_ref tu_ctfc |
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().