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 charctfc_strtable_add_str (ctf_strtable_t *str_table, const char *name, uint32_t *name_offset)
 
const charctf_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_id_t ctf_add_generic (ctf_container_ref ctfc, uint32_t flag, const char *name, ctf_dtdef_ref *rp, dw_die_ref die)
 
static ctf_id_t 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_id_t ctf_add_reftype (ctf_container_ref ctfc, uint32_t flag, ctf_id_t ref, uint32_t kind, dw_die_ref die)
 
ctf_id_t ctf_add_forward (ctf_container_ref ctfc, uint32_t flag, const char *name, uint32_t kind, dw_die_ref die)
 
ctf_id_t ctf_add_typedef (ctf_container_ref ctfc, uint32_t flag, const char *name, ctf_id_t ref, dw_die_ref die)
 
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)
 
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)
 
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)
 
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)
 
ctf_id_t ctf_add_pointer (ctf_container_ref ctfc, uint32_t flag, ctf_id_t ref, dw_die_ref die)
 
ctf_id_t ctf_add_array (ctf_container_ref ctfc, uint32_t flag, const ctf_arinfo_t *arp, dw_die_ref die)
 
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)
 
int ctf_add_enumerator (ctf_container_ref ctfc, ctf_id_t enid, 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_id_t type, uint64_t bit_offset)
 
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)
 
int ctf_add_function_arg (ctf_container_ref ctfc, dw_die_ref func, const char *name, ctf_id_t 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)
 
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)
 
ctf_id_t ctf_lookup_tree_type (ctf_container_ref ctfc, const tree type)
 
bool ctf_type_exists (ctf_container_ref ctfc, dw_die_ref type, ctf_id_t *type_id)
 
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)
 
static 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_id_t ctf_add_array ( ctf_container_ref ctfc,
uint32_t flag,
const ctf_arinfo_t * arp,
dw_die_ref die )

◆ 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(), DIR_SEPARATOR, get_src_pwd(), ggc_alloc(), ggc_alloc_atomic(), ggc_strdup, and NULL.

Referenced by btf_output(), and ctf_output().

◆ ctf_add_encoded()

◆ ctf_add_enum()

◆ ctf_add_enumerator()

◆ ctf_add_float()

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

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

◆ ctf_add_function()

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 )

◆ ctf_add_function_arg()

◆ ctf_add_generic()

static ctf_id_t ctf_add_generic ( ctf_container_ref ctfc,
uint32_t flag,
const char * name,
ctf_dtdef_ref * rp,
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(), 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_add_integer()

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 )

◆ ctf_add_member_offset()

int ctf_add_member_offset ( ctf_container_ref ctfc,
dw_die_ref sou,
const char * name,
ctf_id_t type,
uint64_t bit_offset )

◆ ctf_add_pointer()

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

◆ ctf_add_slice()

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 )

◆ 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_id_t ctf_add_typedef ( ctf_container_ref ctfc,
uint32_t flag,
const char * name,
ctf_id_t ref,
dw_die_ref die )

◆ ctf_add_unknown()

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

◆ ctf_add_variable()

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 )

◆ 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, ggc_alloc(), 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 gcc_assert, ggc_alloc(), 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, and ggc_alloc().

◆ 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 gcc_assert, ggc_alloc(), 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_dvdef::dvd_key, and ggc_alloc().

Referenced by btf_dvd_emit_preprocess_cb(), 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 gcc_assert, ggc_alloc(), 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 )
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().

◆ 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, ggc_alloc(), 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_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.

◆ ctf_type_exists()

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

◆ ctfc_delete_container()

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

◆ ctfc_delete_strtab()

void ctfc_delete_strtab ( ctf_strtable_t * 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, ggc_alloc(), 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 ggc_alloc().

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

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

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

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

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

◆ 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, and ggc_alloc().

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(), gcc_assert, ggc_alloc(), 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
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().

◆ init_ctf_container()

◆ init_ctf_string_table()

static void init_ctf_string_table ( ctf_container_ref ctfc)
static
Initialize the string tables in the CTF container.   

References ggc_alloc(), and init_ctf_strtable().

Referenced by init_ctf_container().

◆ init_ctf_strtable()

static void init_ctf_strtable ( ctf_strtable_t * strtab)
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().

◆ 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_finalize(), btf_init_postprocess(), btf_output(), ctf_do_die(), ctf_finalize(), ctf_get_tu_ctfc(), ctf_output(), init_ctf_container(), and new_ctf_container().