GCC Middle and Back End API Reference
ctfc.cc File Reference
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "target.h"
#include "toplev.h"
#include "ctfc.h"
#include "diagnostic-core.h"
Include dependency graph for ctfc.cc:

Functions

ctf_container_ref ctf_get_tu_ctfc (void)
 
bool ctfc_is_empty_container (ctf_container_ref ctfc)
 
unsigned int ctfc_get_num_ctf_types (ctf_container_ref ctfc)
 
unsigned int ctfc_get_num_ctf_vars (ctf_container_ref ctfc)
 
ctf_strtable_tctfc_get_strtab (ctf_container_ref ctfc, int aux)
 
size_t ctfc_get_strtab_len (ctf_container_ref ctfc, int aux)
 
size_t ctfc_get_num_vlen_bytes (ctf_container_ref ctfc)
 
enum ctf_dtu_d_union_enum ctf_dtu_d_union_selector (ctf_dtdef_ref ctftype)
 
static void ctf_dtd_insert (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
 
ctf_dtdef_ref ctf_dtd_lookup (const ctf_container_ref ctfc, const dw_die_ref type)
 
static void ctf_dvd_insert (ctf_container_ref ctfc, ctf_dvdef_ref dvd)
 
ctf_dvdef_ref ctf_dvd_lookup (const ctf_container_ref ctfc, dw_die_ref die)
 
static void ctf_dvd_ignore_insert (ctf_container_ref ctfc, ctf_dvdef_ref dvd)
 
bool ctf_dvd_ignore_lookup (const ctf_container_ref ctfc, dw_die_ref die)
 
static void ctf_dmd_list_append (ctf_dmdef_t **dmd, ctf_dmdef_t *elem)
 
static void ctf_farg_list_append (ctf_func_arg_t **farg, ctf_func_arg_t *elem)
 
static void ctfc_strtable_append_str (ctf_strtable_t *str_table, const char *str)
 
static const char * ctfc_strtable_add_str (ctf_strtable_t *str_table, const char *name, uint32_t *name_offset)
 
const char * ctf_add_string (ctf_container_ref ctfc, const char *name, uint32_t *name_offset, int aux_str=CTF_STRTAB)
 
void ctf_add_cuname (ctf_container_ref ctfc, const char *filename)
 
static ctf_dtdef_ref ctf_add_generic (ctf_container_ref ctfc, uint32_t flag, const char *name, dw_die_ref die)
 
static ctf_dtdef_ref ctf_add_encoded (ctf_container_ref ctfc, uint32_t flag, const char *name, const ctf_encoding_t *ep, uint32_t kind, dw_die_ref die)
 
ctf_dtdef_ref ctf_add_reftype (ctf_container_ref ctfc, uint32_t flag, ctf_dtdef_ref ref, uint32_t kind, dw_die_ref die)
 
ctf_dtdef_ref ctf_add_forward (ctf_container_ref ctfc, uint32_t flag, const char *name, uint32_t kind, dw_die_ref die)
 
ctf_dtdef_ref ctf_add_typedef (ctf_container_ref ctfc, uint32_t flag, const char *name, ctf_dtdef_ref ref, dw_die_ref die)
 
ctf_dtdef_ref ctf_add_slice (ctf_container_ref ctfc, uint32_t flag, ctf_dtdef_ref ref, uint32_t bit_offset, uint32_t bit_size, dw_die_ref die)
 
ctf_dtdef_ref ctf_add_float (ctf_container_ref ctfc, uint32_t flag, const char *name, const ctf_encoding_t *ep, dw_die_ref die)
 
ctf_dtdef_ref ctf_add_integer (ctf_container_ref ctfc, uint32_t flag, const char *name, const ctf_encoding_t *ep, dw_die_ref die)
 
ctf_dtdef_ref ctf_add_unknown (ctf_container_ref ctfc, uint32_t flag, const char *name, const ctf_encoding_t *ep, dw_die_ref die)
 
ctf_dtdef_ref ctf_add_pointer (ctf_container_ref ctfc, uint32_t flag, ctf_dtdef_ref ref, dw_die_ref die)
 
ctf_dtdef_ref ctf_add_array (ctf_container_ref ctfc, uint32_t flag, const ctf_arinfo_t *arp, dw_die_ref die)
 
ctf_dtdef_ref ctf_add_enum (ctf_container_ref ctfc, uint32_t flag, const char *name, HOST_WIDE_INT size, bool eunsigned, dw_die_ref die)
 
int ctf_add_enumerator (ctf_container_ref ctfc, ctf_dtdef_ref enum_dtd, const char *name, HOST_WIDE_INT value, dw_die_ref die)
 
int ctf_add_member_offset (ctf_container_ref ctfc, dw_die_ref sou, const char *name, ctf_dtdef_ref type, uint64_t bit_offset)
 
int ctf_add_variable (ctf_container_ref ctfc, const char *name, ctf_dtdef_ref ref, dw_die_ref die, unsigned int external_vis, dw_die_ref die_var_decl)
 
int ctf_add_function_arg (ctf_container_ref ctfc, dw_die_ref func, const char *name, ctf_dtdef_ref arg_dtd)
 
ctf_dtdef_ref 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)
 
ctf_dtdef_ref ctf_add_sou (ctf_container_ref ctfc, uint32_t flag, const char *name, uint32_t kind, size_t size, dw_die_ref die)
 
ctf_dtdef_ref ctf_lookup_tree_type (ctf_container_ref ctfc, const tree type)
 
bool ctf_type_exists (ctf_container_ref ctfc, dw_die_ref type, ctf_dtdef_ref *dtd)
 
int ctfc_get_dtd_srcloc (ctf_dtdef_ref dtd, ctf_srcloc_ref loc)
 
int ctfc_get_dvd_srcloc (ctf_dvdef_ref dvd, ctf_srcloc_ref loc)
 
void init_ctf_strtable (ctf_strtable_t *strtab)
 
static void init_ctf_string_table (ctf_container_ref ctfc)
 
static ctf_container_ref new_ctf_container (void)
 
static void init_ctf_container (void)
 
void ctfc_delete_strtab (ctf_strtable_t *strtab)
 
void ctfc_delete_container (ctf_container_ref ctfc)
 
void ctf_init (void)
 

Variables

ctf_container_ref tu_ctfc
 

Function Documentation

◆ ctf_add_array()

◆ ctf_add_cuname()

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(), ctf_container::ctfc_cuname_offset, ctf_container::ctfc_strlen, DIR_SEPARATOR, get_src_pwd(), ggc_alloc_atomic(), ggc_strdup, and NULL.

Referenced by ctf_output().

◆ ctf_add_encoded()

◆ ctf_add_enum()

◆ ctf_add_enumerator()

◆ ctf_add_float()

ctf_dtdef_ref 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().

Referenced by gen_ctf_base_type().

◆ ctf_add_forward()

ctf_dtdef_ref ctf_add_forward ( ctf_container_ref ctfc,
uint32_t flag,
const char * name,
uint32_t kind,
dw_die_ref die )

◆ ctf_add_function()

◆ ctf_add_function_arg()

◆ ctf_add_generic()

static ctf_dtdef_ref ctf_add_generic ( ctf_container_ref ctfc,
uint32_t flag,
const char * name,
dw_die_ref die )
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(), ctf_container::ctfc_nextid, ctf_container::ctfc_strlen, ctf_itype::ctti_name, ctf_dtdef::dtd_data, ctf_dtdef::dtd_key, ctf_dtdef::dtd_name, ctf_dtdef::dtd_type, gcc_assert, ggc_cleared_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_add_integer()

ctf_dtdef_ref ctf_add_integer ( ctf_container_ref ctfc,
uint32_t flag,
const char * name,
const ctf_encoding_t * ep,
dw_die_ref die )

◆ ctf_add_member_offset()

◆ ctf_add_pointer()

ctf_dtdef_ref ctf_add_pointer ( ctf_container_ref ctfc,
uint32_t flag,
ctf_dtdef_ref ref,
dw_die_ref die )

References ctf_add_reftype().

Referenced by gen_ctf_pointer_type().

◆ ctf_add_reftype()

◆ ctf_add_slice()

◆ ctf_add_sou()

◆ ctf_add_string()

const char * ctf_add_string ( ctf_container_ref ctfc,
const char * name,
uint32_t * name_offset,
int aux_str = CTF_STRTAB )

◆ ctf_add_typedef()

◆ ctf_add_unknown()

ctf_dtdef_ref 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().

Referenced by gen_ctf_unknown_type().

◆ ctf_add_variable()

◆ ctf_dmd_list_append()

static void ctf_dmd_list_append ( ctf_dmdef_t ** dmd,
ctf_dmdef_t * elem )
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, and NULL.

Referenced by ctf_add_enumerator(), and ctf_add_member_offset().

◆ ctf_dtd_insert()

static void ctf_dtd_insert ( ctf_container_ref ctfc,
ctf_dtdef_ref dtd )
static
Insert CTF type into the CTF container.   

References ctf_container::ctfc_types, hash_table< Descriptor, Lazy, Allocator >::find_slot(), gcc_assert, and NULL.

Referenced by ctf_add_generic().

◆ ctf_dtd_lookup()

◆ ctf_dtu_d_union_selector()

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, ctf_itype::ctti_info, and ctf_dtdef::dtd_data.

◆ ctf_dvd_ignore_insert()

static void ctf_dvd_ignore_insert ( ctf_container_ref ctfc,
ctf_dvdef_ref dvd )
static
Insert a dummy CTF variable into the list of variables to be ignored.   

References ctf_container::ctfc_ignore_vars, hash_table< Descriptor, Lazy, Allocator >::find_slot(), gcc_assert, and NULL.

Referenced by ctf_add_variable().

◆ ctf_dvd_ignore_lookup()

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_container::ctfc_ignore_vars, ctf_dvdef::dvd_key, and hash_table< Descriptor, Lazy, Allocator >::find_slot().

Referenced by btf_emit_variable_p(), ctf_dvd_preprocess_cb(), and gen_ctf_variable().

◆ ctf_dvd_insert()

static void ctf_dvd_insert ( ctf_container_ref ctfc,
ctf_dvdef_ref dvd )
static
Insert CTF variable into the CTF container.   

References ctf_container::ctfc_vars, hash_table< Descriptor, Lazy, Allocator >::find_slot(), gcc_assert, and NULL.

Referenced by ctf_add_variable().

◆ ctf_dvd_lookup()

ctf_dvdef_ref ctf_dvd_lookup ( const ctf_container_ref ctfc,
dw_die_ref die )

◆ ctf_farg_list_append()

static void ctf_farg_list_append ( ctf_func_arg_t ** farg,
ctf_func_arg_t * elem )
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, and NULL.

Referenced by ctf_add_function_arg().

◆ ctf_get_tu_ctfc()

◆ ctf_init()

void ctf_init ( void )
CTF routines interfacing to the compiler.   

References init_ctf_container().

Referenced by ctf_debug_init().

◆ ctf_lookup_tree_type()

ctf_dtdef_ref ctf_lookup_tree_type ( ctf_container_ref ctfc,
const tree type )
Given a TREE_TYPE node, return the CTF type object for that type.   

References ctf_dtd_lookup(), lookup_type_die(), and NULL.

Referenced by btf_mark_type_used().

◆ ctf_type_exists()

bool ctf_type_exists ( ctf_container_ref ctfc,
dw_die_ref type,
ctf_dtdef_ref * dtd )
Check if CTF for TYPE has already been generated.  Mainstay for
de-duplication.  If CTF type already exists, returns TRUE and updates
the CTF type object DTD for the caller.   

References ctf_dtd_lookup().

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().

◆ ctfc_delete_container()

◆ ctfc_delete_strtab()

◆ ctfc_get_dtd_srcloc()

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, ctf_dtdef::dtd_key, and NULL.

◆ ctfc_get_dvd_srcloc()

◆ ctfc_get_num_ctf_types()

unsigned int ctfc_get_num_ctf_types ( ctf_container_ref ctfc)
Get the total number of CTF types in the container.   

References ctf_container::ctfc_types, and hash_table< Descriptor, Lazy, Allocator >::elements().

Referenced by output_ctf_header().

◆ ctfc_get_num_ctf_vars()

unsigned int ctfc_get_num_ctf_vars ( ctf_container_ref ctfc)
Get the total number of CTF variables in the container.   

References ctf_container::ctfc_vars, and hash_table< Descriptor, Lazy, Allocator >::elements().

Referenced by ctf_preprocess().

◆ ctfc_get_num_vlen_bytes()

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 ctf_container::ctfc_num_vlen_bytes.

Referenced by output_ctf_header().

◆ ctfc_get_strtab()

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 ctf_container::ctfc_strtable.

Referenced by ctf_add_string(), and ctfc_get_strtab_len().

◆ 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 ctf_strtable::ctstab_len.

Referenced by btf_assign_datasec_ids(), ctf_output(), and output_asm_btf_func_args_list().

◆ ctfc_is_empty_container()

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.

Referenced by output_btf_header(), and output_ctf_header().

◆ ctfc_strtable_add_str()

static const char * ctfc_strtable_add_str ( ctf_strtable_t * str_table,
const char * name,
uint32_t * name_offset )
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(), ctf_strtable::ctstab_estr, ctf_strtable::ctstab_len, ctf_strtable::ctstab_num, gcc_assert, ggc_strdup, and NULL.

Referenced by ctf_add_string(), and init_ctf_strtable().

◆ ctfc_strtable_append_str()

static void ctfc_strtable_append_str ( ctf_strtable_t * str_table,
const char * str )
static

◆ init_ctf_container()

static void init_ctf_container ( void )
static

◆ init_ctf_string_table()

static void init_ctf_string_table ( ctf_container_ref ctfc)
static

◆ init_ctf_strtable()

void init_ctf_strtable ( ctf_strtable_t * strtab)
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(), ctf_strtable::ctstab_estr, ctf_strtable::ctstab_head, ctf_strtable::ctstab_len, ctf_strtable::ctstab_num, ctf_strtable::ctstab_tail, and NULL.

Referenced by btf_early_finish(), and init_ctf_string_table().

◆ new_ctf_container()

static ctf_container_ref new_ctf_container ( void )
inlinestatic

Variable Documentation

◆ 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_early_finish(), btf_finalize(), btf_finish(), ctf_do_die(), ctf_finalize(), ctf_get_tu_ctfc(), ctf_output(), init_ctf_container(), and new_ctf_container().