From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7824) id 5483F3857B87; Fri, 7 Oct 2022 18:34:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5483F3857B87 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1665167681; bh=+nVcUCKU3iFyr5O0fybHfPSNts3qdOi848ZzPpmat1c=; h=From:To:Subject:Date:From; b=yv+AMXm65ZTKBcGrk5w0EVSP6sSWfwSrvyIzxABssrDsJSaTLW6DiUZvNU79IcxxV obQERVXCfE/MZ05vDgmrYP/7Z55JwRyrkzl7gBkFNq/QgVvth/m6uf5fEAwDnOrVdo PAfTc+sIL93zDgGFqdWLlUH7VsaqpEEcCWJ/FotA= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: David Faust To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/dfaust/heads/btf-type-tag-new-rebase)] ctfc: Add support to pass through BTF annotations X-Act-Checkin: gcc X-Git-Author: David Faust X-Git-Refname: refs/users/dfaust/heads/btf-type-tag-new-rebase X-Git-Oldrev: c71525e7f0d10fcc20892e8986d9a43c1c8f4d64 X-Git-Newrev: 6f56fc2d6bb234a5264f39874de61d275ae983ce Message-Id: <20221007183441.5483F3857B87@sourceware.org> Date: Fri, 7 Oct 2022 18:34:41 +0000 (GMT) List-Id: https://gcc.gnu.org/g:6f56fc2d6bb234a5264f39874de61d275ae983ce commit 6f56fc2d6bb234a5264f39874de61d275ae983ce Author: David Faust Date: Wed Mar 2 15:06:01 2022 -0800 ctfc: Add support to pass through BTF annotations BTF generation currently relies on the internal CTF representation to convert debug info from DWARF dies. This patch adds a new internal header, "ctf-int.h", which defines CTF kinds to be used internally to represent BTF tags which must pass through the CTF container. It also adds a new type for representing information specific to those tags, and a member for that type in ctf_dtdef. This patch also updates ctf_add_reftype to accept a const char * name, and add it for the newly added type. gcc/ * ctf-int.h: New file. * ctfc.cc (ctf_add_reftype): Add NAME parameter. Pass it to ctf_add_generic call. (ctf_add_pointer): Update ctf_add_reftype call accordingly. * ctfc.h (ctf_add_reftype): Analogous change. (ctf_btf_annotation): New. (ctf_dtdef): Add member for it. (enum ctf_dtu_d_union_enum): Likewise. * dwarf2ctf.cc (gen_ctf_modifier_type): Update call to ctf_add_reftype accordingly. Diff: --- gcc/ctf-int.h | 29 +++++++++++++++++++++++++++++ gcc/ctfc.cc | 11 +++++++---- gcc/ctfc.h | 17 ++++++++++++++--- gcc/dwarf2ctf.cc | 2 +- 4 files changed, 51 insertions(+), 8 deletions(-) diff --git a/gcc/ctf-int.h b/gcc/ctf-int.h new file mode 100644 index 00000000000..fb5f4aacad6 --- /dev/null +++ b/gcc/ctf-int.h @@ -0,0 +1,29 @@ +/* ctf-int.h - GCC internal definitions used for CTF debug info. + Copyright (C) 2022 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 +. */ + +#ifndef GCC_CTF_INT_H +#define GCC_CTF_INT_H 1 + +/* These CTF kinds only exist as a bridge to generating BTF types for + BTF_KIND_DECL_TAG and BTF_KIND_TYPE_TAG. They do not correspond to any + representable type kind in CTF. */ +#define CTF_K_DECL_TAG 62 +#define CTF_K_TYPE_TAG 63 + +#endif /* GCC_CTF_INT_H */ diff --git a/gcc/ctfc.cc b/gcc/ctfc.cc index 09645436fdd..9670e83658c 100644 --- a/gcc/ctfc.cc +++ b/gcc/ctfc.cc @@ -107,6 +107,9 @@ ctf_dtu_d_union_selector (ctf_dtdef_ref ctftype) return CTF_DTU_D_ARGUMENTS; case CTF_K_SLICE: return CTF_DTU_D_SLICE; + case CTF_K_DECL_TAG: + case CTF_K_TYPE_TAG: + return CTF_DTU_D_BTFNOTE; default: /* The largest member as default. */ return CTF_DTU_D_ARRAY; @@ -428,15 +431,15 @@ ctf_add_encoded (ctf_container_ref ctfc, uint32_t flag, const char * name, } 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_add_reftype (ctf_container_ref ctfc, uint32_t flag, const char * name, + ctf_id_t ref, uint32_t kind, dw_die_ref die) { ctf_dtdef_ref dtd; ctf_id_t type; gcc_assert (ref <= CTF_MAX_TYPE); - type = ctf_add_generic (ctfc, flag, NULL, &dtd, die); + type = ctf_add_generic (ctfc, flag, name, &dtd, die); dtd->dtd_data.ctti_info = CTF_TYPE_INFO (kind, flag, 0); /* Caller of this API must guarantee that a CTF type with id = ref already exists. This will also be validated for us at link-time. */ @@ -548,7 +551,7 @@ ctf_id_t ctf_add_pointer (ctf_container_ref ctfc, uint32_t flag, ctf_id_t ref, dw_die_ref die) { - return (ctf_add_reftype (ctfc, flag, ref, CTF_K_POINTER, die)); + return (ctf_add_reftype (ctfc, flag, NULL, ref, CTF_K_POINTER, die)); } ctf_id_t diff --git a/gcc/ctfc.h b/gcc/ctfc.h index bcf3a43ae1b..eb224c1bee3 100644 --- a/gcc/ctfc.h +++ b/gcc/ctfc.h @@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see #include "dwarf2ctf.h" #include "ctf.h" #include "btf.h" +#include "ctf-int.h" /* Invalid CTF type ID definition. */ @@ -151,6 +152,13 @@ typedef struct GTY (()) ctf_func_arg #define ctf_farg_list_next(elem) ((ctf_func_arg_t *)((elem)->farg_next)) +/* BTF support: a BTF type tag or decl tag. */ + +typedef struct GTY (()) ctf_btf_annotation +{ + uint32_t component_idx; +} ctf_btf_annotation_t; + /* Type definition for CTF generation. */ struct GTY ((for_user)) ctf_dtdef @@ -174,6 +182,8 @@ struct GTY ((for_user)) ctf_dtdef ctf_func_arg_t * GTY ((tag ("CTF_DTU_D_ARGUMENTS"))) dtu_argv; /* slice. */ ctf_sliceinfo_t GTY ((tag ("CTF_DTU_D_SLICE"))) dtu_slice; + /* btf annotation. */ + ctf_btf_annotation_t GTY ((tag ("CTF_DTU_D_BTFNOTE"))) dtu_btfnote; } dtd_u; }; @@ -213,7 +223,8 @@ enum ctf_dtu_d_union_enum { CTF_DTU_D_ARRAY, CTF_DTU_D_ENCODING, CTF_DTU_D_ARGUMENTS, - CTF_DTU_D_SLICE + CTF_DTU_D_SLICE, + CTF_DTU_D_BTFNOTE }; enum ctf_dtu_d_union_enum @@ -403,8 +414,8 @@ extern bool ctf_dvd_ignore_lookup (const ctf_container_ref ctfc, extern const char * ctf_add_string (ctf_container_ref, const char *, uint32_t *, int); -extern ctf_id_t ctf_add_reftype (ctf_container_ref, uint32_t, ctf_id_t, - uint32_t, dw_die_ref); +extern ctf_id_t ctf_add_reftype (ctf_container_ref, uint32_t, const char *, + ctf_id_t, uint32_t, dw_die_ref); extern ctf_id_t ctf_add_enum (ctf_container_ref, uint32_t, const char *, HOST_WIDE_INT, dw_die_ref); extern ctf_id_t ctf_add_slice (ctf_container_ref, uint32_t, ctf_id_t, diff --git a/gcc/dwarf2ctf.cc b/gcc/dwarf2ctf.cc index 397100004c2..83fc19185b5 100644 --- a/gcc/dwarf2ctf.cc +++ b/gcc/dwarf2ctf.cc @@ -511,7 +511,7 @@ gen_ctf_modifier_type (ctf_container_ref ctfc, dw_die_ref modifier) gcc_assert (kind != CTF_K_MAX); /* Now register the modifier itself. */ if (!ctf_type_exists (ctfc, modifier, &modifier_type_id)) - modifier_type_id = ctf_add_reftype (ctfc, CTF_ADD_ROOT, + modifier_type_id = ctf_add_reftype (ctfc, CTF_ADD_ROOT, NULL, qual_type_id, kind, modifier);