public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Indu Bhagat <indu.bhagat@oracle.com>
To: David Faust <david.faust@oracle.com>, gcc-patches@gcc.gnu.org
Subject: Re: [PATCH 2/2] btf: improve -dA comments for testsuite
Date: Tue, 30 May 2023 23:13:12 -0700	[thread overview]
Message-ID: <16c13d09-eff0-8722-52c1-fe2eec165f11@oracle.com> (raw)
In-Reply-To: <20230530182702.8020-2-david.faust@oracle.com>

On 5/30/23 11:27, David Faust wrote:
> [Changes from v1:
>   - Fix typos.
>   - Split unrelated change into separate commit.
>   - Improve asm comment for enum constants, update btf-enum-1 test.
>   - Improve asm comment for DATASEC records, update btf-datasec-2 test.]
> 
> Many BTF type kinds refer to other types via index to the final types
> list. However, the order of the final types list is not guaranteed to
> remain the same for the same source program between different runs of
> the compiler, making it difficult to test inter-type references.
> 
> This patch updates the assembler comments output when writing a
> given BTF record to include minimal information about the referenced
> type, if any. This allows for the regular expressions used in the gcc
> testsuite to do some basic integrity checks on inter-type references.
> 
> For example, for the type
> 
> 	unsigned int *
> 
> Assembly comments like the following are written with -dA:
> 
> 	.4byte	0	; TYPE 2 BTF_KIND_PTR ''
> 	.4byte	0x2000000	; btt_info: kind=2, kflag=0, vlen=0
> 	.4byte	0x1	; btt_type: (BTF_KIND_INT 'unsigned int')
> 
> Several BTF tests which can immediately be made more robust with this
> change are updated. It will also be useful in new tests for the upcoming
> btf_type_tag support.
> 
> Re-tested on BPF and x86_64, no known regressions.
> Thanks.
> 

LGTM.

Thanks

> gcc/
> 
> 	* btfout.cc (btf_kind_names): New.
> 	(btf_kind_name): New.
> 	(btf_absolute_var_id): New utility function.
> 	(btf_relative_var_id): Likewise.
> 	(btf_relative_func_id): Likewise.
> 	(btf_absolute_datasec_id): Likewise.
> 	(btf_asm_type_ref): New.
> 	(btf_asm_type): Update asm comments and use btf_asm_type_ref ().
> 	(btf_asm_array): Likewise. Accept ctf_container_ref parameter.
> 	(btf_asm_varent): Likewise.
> 	(btf_asm_func_arg): Likewise.
> 	(btf_asm_datasec_entry): Likewise.
> 	(btf_asm_datasec_type): Likewise.
> 	(btf_asm_func_type): Likewise. Add index parameter.
> 	(btf_asm_enum_const): Likewise.
> 	(btf_asm_sou_member): Likewise.
> 	(output_btf_vars): Update btf_asm_* call accordingly.
> 	(output_asm_btf_sou_fields): Likewise.
> 	(output_asm_btf_enum_list): Likewise.
> 	(output_asm_btf_func_args_list): Likewise.
> 	(output_asm_btf_vlen_bytes): Likewise.
> 	(output_btf_func_types): Add ctf_container_ref parameter.
> 	Pass it to btf_asm_func_type.
> 	(output_btf_datasec_types): Update btf_asm_datsec_type call similarly.
> 	(btf_output): Update output_btf_func_types call similarly.
> 
> gcc/testsuite/
> 
> 	* gcc.dg/debug/btf/btf-array-1.c: Use new BTF asm comments
> 	in scan-assembler expressions where useful.
> 	* gcc.dg/debug/btf/btf-anonymous-struct-1.c: Likewise.
> 	* gcc.dg/debug/btf/btf-anonymous-union-1.c: Likewise.
> 	* gcc.dg/debug/btf/btf-bitfields-2.c: Likewise.
> 	* gcc.dg/debug/btf/btf-bitfields-3.c: Likewise.
> 	* gcc.dg/debug/btf/btf-datasec-2.c: Likewise.
> 	* gcc.dg/debug/btf/btf-enum-1.c: Likewise.
> 	* gcc.dg/debug/btf/btf-function-6.c: Likewise.
> 	* gcc.dg/debug/btf/btf-pointers-1.c: Likewise.
> 	* gcc.dg/debug/btf/btf-struct-1.c: Likewise.
> 	* gcc.dg/debug/btf/btf-struct-2.c: Likewise.
> 	* gcc.dg/debug/btf/btf-typedef-1.c: Likewise.
> 	* gcc.dg/debug/btf/btf-union-1.c: Likewise.
> 	* gcc.dg/debug/btf/btf-variables-1.c: Likewise.
> 	* gcc.dg/debug/btf/btf-variables-2.c: Likewise. Update outdated comment.
> 	* gcc.dg/debug/btf/btf-function-3.c: Update outdated comment.
> ---
>   gcc/btfout.cc                                 | 227 ++++++++++++++----
>   .../gcc.dg/debug/btf/btf-anonymous-struct-1.c |   3 +-
>   .../gcc.dg/debug/btf/btf-anonymous-union-1.c  |   4 +-
>   gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c  |   3 +
>   .../gcc.dg/debug/btf/btf-bitfields-2.c        |   2 +-
>   .../gcc.dg/debug/btf/btf-bitfields-3.c        |   2 +-
>   .../gcc.dg/debug/btf/btf-datasec-2.c          |   4 +-
>   gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c   |   4 +
>   .../gcc.dg/debug/btf/btf-function-3.c         |   2 +-
>   .../gcc.dg/debug/btf/btf-function-6.c         |   4 +-
>   .../gcc.dg/debug/btf/btf-pointers-1.c         |   3 +
>   gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c |   4 +-
>   gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c |   2 +-
>   .../gcc.dg/debug/btf/btf-typedef-1.c          |  14 +-
>   gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c  |   2 +-
>   .../gcc.dg/debug/btf/btf-variables-1.c        |   6 +
>   .../gcc.dg/debug/btf/btf-variables-2.c        |   7 +-
>   17 files changed, 224 insertions(+), 69 deletions(-)
> 
> diff --git a/gcc/btfout.cc b/gcc/btfout.cc
> index ae9855716eb..f51ccf73242 100644
> --- a/gcc/btfout.cc
> +++ b/gcc/btfout.cc
> @@ -114,6 +114,23 @@ static unsigned int num_types_added = 0;
>      CTF types.  */
>   static unsigned int num_types_created = 0;
>   
> +/* Name strings for BTF kinds.
> +   Note: the indices here must match the type defines in btf.h.  */
> +static const char *const btf_kind_names[] =
> +  {
> +    "UNKN", "INT", "PTR", "ARRAY", "STRUCT", "UNION", "ENUM", "FWD",
> +    "TYPEDEF", "VOLATILE", "CONST", "RESTRICT", "FUNC", "FUNC_PROTO",
> +    "VAR", "DATASEC", "FLOAT", "DECL_TAG", "TYPE_TAG", "ENUM64"
> +  };
> +
> +/* Return a name string for the given BTF_KIND.  */
> +
> +static const char *
> +btf_kind_name (uint32_t btf_kind)
> +{
> +  return btf_kind_names[btf_kind];
> +}
> +
>   /* Map a CTF type kind to the corresponding BTF type kind.  */
>   
>   static uint32_t
> @@ -141,6 +158,57 @@ get_btf_kind (uint32_t ctf_kind)
>     return BTF_KIND_UNKN;
>   }
>   
> +/* Helper routines to map between 'relative' and 'absolute' IDs.
> +
> +   In BTF all records (including variables) are output in one long list, and all
> +   inter-type references are via index into that list.  But internally since we
> +   a) translate from CTF, which separates variable records from regular types
> +   and b) create some additional types after the fact, things like VAR and FUNC
> +   records are stored in separate vectors with their own indices.  These
> +   functions map between the 'relative' IDs (i.e.  indices in their respective
> +   containers) and 'absolute' IDs (i.e.  indices in the final contiguous
> +   output list), which goes in order:
> +     all normal type records translated from CTF
> +     all BTF_KIND_VAR records
> +     all BTF_KIND_FUNC records (synthesized split function records)
> +     all BTF_KIND_DATASEC records (synthesized)
> +
> +   The extra '+ 1's below are to account for the implicit "void" record, which
> +   has index 0 but isn't actually contained in the type list.  */
> +
> +/* Return the final BTF ID of the variable at relative index REL.  */
> +
> +static ctf_id_t
> +btf_absolute_var_id (ctf_id_t rel)
> +{
> +  return rel + (num_types_added + 1);
> +}
> +
> +/* Return the relative index of the variable with final BTF ID ABS.  */
> +
> +static ctf_id_t
> +btf_relative_var_id (ctf_id_t abs)
> +{
> +  return abs - (num_types_added + 1);
> +}
> +
> +/* Return the relative index of the func record with final BTF ID ABS.  */
> +
> +static ctf_id_t
> +btf_relative_func_id (ctf_id_t abs)
> +{
> +  return abs - ((num_types_added + 1) + num_vars_added);
> +}
> +
> +/* Return the final BTF ID of the datasec record at relative index REL.  */
> +
> +static ctf_id_t
> +btf_absolute_datasec_id (ctf_id_t rel)
> +{
> +  return rel + (num_types_added + 1) + num_vars_added + funcs->length ();
> +}
> +
> +
>   /* Allocate the btf_id_map, and initialize elements to BTF_INVALID_TYPEID.  */
>   
>   static void
> @@ -407,8 +475,7 @@ btf_collect_datasec (ctf_container_ref ctfc)
>         info.type = 0;
>         unsigned int *var_id = btf_var_ids->get (dvd);
>         if (var_id)
> -	/* +1 for the sentinel type not in the types map.  */
> -	info.type = *var_id + num_types_added + 1;
> +	info.type = btf_absolute_var_id (*var_id);
>         else
>   	continue;
>   
> @@ -620,6 +687,48 @@ btf_dmd_representable_bitfield_p (ctf_container_ref ctfc, ctf_dmdef_t *dmd)
>   
>   /* BTF asm helper routines.  */
>   
> +/* Asm'out a reference to another BTF type.  */
> +
> +static void
> +btf_asm_type_ref (const char *prefix, ctf_container_ref ctfc, ctf_id_t ref_id)
> +{
> +  if (ref_id == BTF_VOID_TYPEID || ref_id == BTF_INVALID_TYPEID)
> +    {
> +      /* There is no explicit void type.
> +	 Also handle any invalid refs that made it this far, just in case.  */
> +      dw2_asm_output_data (4, ref_id, "%s: void", prefix);
> +    }
> +  else if (ref_id >= num_types_added + 1
> +	   && ref_id < num_types_added + num_vars_added + 1)
> +    {
> +      /* Ref to a variable.  Should only appear in DATASEC entries.  */
> +      ctf_id_t var_id = btf_relative_var_id (ref_id);
> +      ctf_dvdef_ref dvd = ctfc->ctfc_vars_list[var_id];
> +      dw2_asm_output_data (4, ref_id, "%s: (BTF_KIND_VAR '%s')",
> +			   prefix, dvd->dvd_name);
> +
> +    }
> +  else if (ref_id >= num_types_added + num_vars_added + 1)
> +    {
> +      /* Ref to a FUNC record.  */
> +      size_t func_id = btf_relative_func_id (ref_id);
> +      ctf_dtdef_ref ref_type = (*funcs)[func_id];
> +      dw2_asm_output_data (4, ref_id, "%s: (BTF_KIND_FUNC '%s')",
> +			   prefix, ref_type->dtd_name);
> +    }
> +  else
> +    {
> +      /* Ref to a standard type in the types list.  */
> +      ctf_dtdef_ref ref_type = ctfc->ctfc_types_list[ref_id];
> +      uint32_t ref_kind
> +	= get_btf_kind (CTF_V2_INFO_KIND (ref_type->dtd_data.ctti_info));
> +
> +      dw2_asm_output_data (4, ref_id, "%s: (BTF_KIND_%s '%s')",
> +			   prefix, btf_kind_name (ref_kind),
> +			   ref_type->dtd_name);
> +    }
> +}
> +
>   /* Asm'out a BTF type. This routine is responsible for the bulk of the task
>      of converting CTF types to their BTF representation.  */
>   
> @@ -689,7 +798,10 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
>   	btf_kind = BTF_KIND_ENUM64;
>      }
>   
> -  dw2_asm_output_data (4, dtd->dtd_data.ctti_name, "btt_name");
> +  dw2_asm_output_data (4, dtd->dtd_data.ctti_name,
> +		       "TYPE %lu BTF_KIND_%s '%s'",
> +		       get_btf_id (dtd->dtd_type), btf_kind_name (btf_kind),
> +		       dtd->dtd_name);
>     dw2_asm_output_data (4, BTF_TYPE_INFO (btf_kind, btf_kflag, btf_vlen),
>   		       "btt_info: kind=%u, kflag=%u, vlen=%u",
>   		       btf_kind, btf_kflag, btf_vlen);
> @@ -715,29 +827,31 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
>         break;
>       }
>   
> -  dw2_asm_output_data (4, get_btf_id (dtd->dtd_data.ctti_type), "btt_type");
> +  ctf_id_t ref_id = get_btf_id (dtd->dtd_data.ctti_type);
> +  btf_asm_type_ref ("btt_type", ctfc, ref_id);
>   }
>   
>   /* Asm'out the variable information following a BTF_KIND_ARRAY.  */
>   
>   static void
> -btf_asm_array (ctf_dtdef_ref dtd)
> +btf_asm_array (ctf_container_ref ctfc, ctf_arinfo_t arr)
>   {
> -  dw2_asm_output_data (4, get_btf_id (dtd->dtd_u.dtu_arr.ctr_contents),
> -		       "bta_contents");
> -  dw2_asm_output_data (4, get_btf_id (dtd->dtd_u.dtu_arr.ctr_index),
> -		       "bta_index");
> -  dw2_asm_output_data (4, dtd->dtd_u.dtu_arr.ctr_nelems, "bta_nelems");
> +  btf_asm_type_ref ("bta_elem_type", ctfc, get_btf_id (arr.ctr_contents));
> +  btf_asm_type_ref ("bta_index_type", ctfc, get_btf_id (arr.ctr_index));
> +  dw2_asm_output_data (4, arr.ctr_nelems, "bta_nelems");
>   }
>   
>   /* Asm'out a BTF_KIND_VAR.  */
>   
>   static void
> -btf_asm_varent (ctf_dvdef_ref var)
> +btf_asm_varent (ctf_container_ref ctfc, ctf_dvdef_ref var)
>   {
> -  dw2_asm_output_data (4, var->dvd_name_offset, "btv_name");
> +  ctf_id_t ref_id = get_btf_id (var->dvd_type);
> +  dw2_asm_output_data (4, var->dvd_name_offset, "TYPE %u BTF_KIND_VAR '%s'",
> +		       (*(btf_var_ids->get (var)) + num_types_added + 1),
> +		       var->dvd_name);
>     dw2_asm_output_data (4, BTF_TYPE_INFO (BTF_KIND_VAR, 0, 0), "btv_info");
> -  dw2_asm_output_data (4, get_btf_id (var->dvd_type), "btv_type");
> +  btf_asm_type_ref ("btv_type", ctfc, ref_id);
>     dw2_asm_output_data (4, var->dvd_visibility, "btv_linkage");
>   }
>   
> @@ -745,7 +859,7 @@ btf_asm_varent (ctf_dvdef_ref var)
>      BTF_KIND_UNION.  */
>   
>   static void
> -btf_asm_sou_member (ctf_container_ref ctfc, ctf_dmdef_t * dmd)
> +btf_asm_sou_member (ctf_container_ref ctfc, ctf_dmdef_t * dmd, unsigned int idx)
>   {
>     ctf_dtdef_ref ref_type = ctfc->ctfc_types_list[dmd->dmd_type];
>   
> @@ -768,15 +882,19 @@ btf_asm_sou_member (ctf_container_ref ctfc, ctf_dmdef_t * dmd)
>         sou_offset &= 0x00ffffff;
>         sou_offset |= ((bits & 0xff) << 24);
>   
> +      dw2_asm_output_data (4, dmd->dmd_name_offset,
> +			   "MEMBER '%s' idx=%u",
> +			   dmd->dmd_name, idx);
>         /* Refer to the base type of the slice.  */
> -      dw2_asm_output_data (4, dmd->dmd_name_offset, "btm_name_off");
> -      dw2_asm_output_data (4, get_btf_id (base_type), "btm_type");
> +      btf_asm_type_ref ("btm_type", ctfc, get_btf_id (base_type));
>         dw2_asm_output_data (4, sou_offset, "btm_offset");
>       }
>     else
>       {
> -      dw2_asm_output_data (4, dmd->dmd_name_offset, "btm_name_off");
> -      dw2_asm_output_data (4, get_btf_id (dmd->dmd_type), "btm_type");
> +      dw2_asm_output_data (4, dmd->dmd_name_offset,
> +			   "MEMBER '%s' idx=%u",
> +			   dmd->dmd_name, idx);
> +      btf_asm_type_ref ("btm_type", ctfc, get_btf_id (dmd->dmd_type));
>         dw2_asm_output_data (4, dmd->dmd_offset, "btm_offset");
>       }
>   }
> @@ -784,9 +902,10 @@ btf_asm_sou_member (ctf_container_ref ctfc, ctf_dmdef_t * dmd)
>   /* Asm'out an enum constant following a BTF_KIND_ENUM{,64}.  */
>   
>   static void
> -btf_asm_enum_const (unsigned int size, ctf_dmdef_t * dmd)
> +btf_asm_enum_const (unsigned int size, ctf_dmdef_t * dmd, unsigned int idx)
>   {
> -  dw2_asm_output_data (4, dmd->dmd_name_offset, "bte_name");
> +  dw2_asm_output_data (4, dmd->dmd_name_offset, "ENUM_CONST '%s' idx=%u",
> +		       dmd->dmd_name, idx);
>     if (size == 4)
>       dw2_asm_output_data (size, dmd->dmd_value, "bte_value");
>     else
> @@ -799,7 +918,8 @@ btf_asm_enum_const (unsigned int size, ctf_dmdef_t * dmd)
>   /* Asm'out a function parameter description following a BTF_KIND_FUNC_PROTO.  */
>   
>   static void
> -btf_asm_func_arg (ctf_func_arg_t * farg, size_t stroffset)
> +btf_asm_func_arg (ctf_container_ref ctfc, ctf_func_arg_t * farg,
> +		  size_t stroffset)
>   {
>     /* If the function arg does not have a name, refer to the null string at
>        the start of the string table. This ensures correct encoding for varargs
> @@ -809,31 +929,33 @@ btf_asm_func_arg (ctf_func_arg_t * farg, size_t stroffset)
>     else
>       dw2_asm_output_data (4, 0, "farg_name");
>   
> -  dw2_asm_output_data (4, (btf_removed_type_p (farg->farg_type)
> -			   ? BTF_VOID_TYPEID
> -			   : get_btf_id (farg->farg_type)),
> -		       "farg_type");
> +  btf_asm_type_ref ("farg_type", ctfc, (btf_removed_type_p (farg->farg_type)
> +					? BTF_VOID_TYPEID
> +					: get_btf_id (farg->farg_type)));
>   }
>   
>   /* Asm'out a BTF_KIND_FUNC type.  */
>   
>   static void
> -btf_asm_func_type (ctf_dtdef_ref dtd)
> +btf_asm_func_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, size_t i)
>   {
> -  dw2_asm_output_data (4, dtd->dtd_data.ctti_name, "btt_name");
> -  dw2_asm_output_data (4, BTF_TYPE_INFO (BTF_KIND_FUNC, 0,
> -                                         dtd->linkage),
> -                       "btt_info: kind=%u, kflag=%u, linkage=%u",
> -                       BTF_KIND_FUNC, 0, dtd->linkage);
> -  dw2_asm_output_data (4, get_btf_id (dtd->dtd_data.ctti_type), "btt_type");
> +  ctf_id_t ref_id = dtd->dtd_data.ctti_type;
> +  dw2_asm_output_data (4, dtd->dtd_data.ctti_name,
> +		       "TYPE %lu BTF_KIND_FUNC '%s'",
> +		       num_types_added + num_vars_added + 1 + i,
> +		       dtd->dtd_name);
> +  dw2_asm_output_data (4, BTF_TYPE_INFO (BTF_KIND_FUNC, 0, dtd->linkage),
> +		       "btt_info: kind=%u, kflag=%u, linkage=%u",
> +		       BTF_KIND_FUNC, 0, dtd->linkage);
> +  btf_asm_type_ref ("btt_type", ctfc, get_btf_id (ref_id));
>   }
>   
>   /* Asm'out a variable entry following a BTF_KIND_DATASEC.  */
>   
>   static void
> -btf_asm_datasec_entry (struct btf_var_secinfo info)
> +btf_asm_datasec_entry (ctf_container_ref ctfc, struct btf_var_secinfo info)
>   {
> -  dw2_asm_output_data (4, info.type, "bts_type");
> +  btf_asm_type_ref ("bts_type", ctfc, info.type);
>     dw2_asm_output_data (4, info.offset, "bts_offset");
>     dw2_asm_output_data (4, info.size, "bts_size");
>   }
> @@ -841,17 +963,20 @@ btf_asm_datasec_entry (struct btf_var_secinfo info)
>   /* Asm'out a whole BTF_KIND_DATASEC, including its variable entries.  */
>   
>   static void
> -btf_asm_datasec_type (btf_datasec_t ds, size_t stroffset)
> +btf_asm_datasec_type (ctf_container_ref ctfc, btf_datasec_t ds, ctf_id_t id,
> +		      size_t stroffset)
>   {
> -  dw2_asm_output_data (4, ds.name_offset + stroffset, "btt_name");
> +  dw2_asm_output_data (4, ds.name_offset + stroffset,
> +		       "TYPE %lu BTF_KIND_DATASEC '%s'",
> +		       btf_absolute_datasec_id (id), ds.name);
>     dw2_asm_output_data (4, BTF_TYPE_INFO (BTF_KIND_DATASEC, 0,
>   					 ds.entries.length ()),
> -		       "btt_info");
> +		       "btt_info: n_entries=%u", ds.entries.length ());
>     /* Note: the "total section size in bytes" is emitted as 0 and patched by
>        loaders such as libbpf.  */
>     dw2_asm_output_data (4, 0, "btt_size");
>     for (size_t i = 0; i < ds.entries.length (); i++)
> -    btf_asm_datasec_entry (ds.entries[i]);
> +    btf_asm_datasec_entry (ctfc, ds.entries[i]);
>   }
>   
>   /* Compute and output the header information for a .BTF section.  */
> @@ -912,7 +1037,7 @@ output_btf_vars (ctf_container_ref ctfc)
>     if (num_ctf_vars)
>       {
>         for (i = 0; i < num_ctf_vars; i++)
> -	btf_asm_varent (ctfc->ctfc_vars_list[i]);
> +	btf_asm_varent (ctfc, ctfc->ctfc_vars_list[i]);
>       }
>   }
>   
> @@ -946,9 +1071,13 @@ output_asm_btf_sou_fields (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
>   {
>     ctf_dmdef_t * dmd;
>   
> +  unsigned idx = 0;
>     for (dmd = dtd->dtd_u.dtu_members;
>          dmd != NULL; dmd = (ctf_dmdef_t *) ctf_dmd_list_next (dmd))
> -      btf_asm_sou_member (ctfc, dmd);
> +    {
> +      btf_asm_sou_member (ctfc, dmd, idx);
> +      idx++;
> +    }
>   }
>   
>   /* Output all enumerator constants following a BTF_KIND_ENUM{,64}.  */
> @@ -959,9 +1088,13 @@ output_asm_btf_enum_list (ctf_container_ref ARG_UNUSED (ctfc),
>   {
>     ctf_dmdef_t * dmd;
>   
> +  unsigned idx = 0;
>     for (dmd = dtd->dtd_u.dtu_members;
>          dmd != NULL; dmd = (ctf_dmdef_t *) ctf_dmd_list_next (dmd))
> -    btf_asm_enum_const (dtd->dtd_data.ctti_size, dmd);
> +    {
> +      btf_asm_enum_const (dtd->dtd_data.ctti_size, dmd, idx);
> +      idx++;
> +    }
>   }
>   
>   /* Output all function arguments following a BTF_KIND_FUNC_PROTO.  */
> @@ -974,7 +1107,7 @@ output_asm_btf_func_args_list (ctf_container_ref ctfc,
>     ctf_func_arg_t * farg;
>     for (farg = dtd->dtd_u.dtu_argv;
>          farg != NULL; farg = (ctf_func_arg_t *) ctf_farg_list_next (farg))
> -    btf_asm_func_arg (farg, farg_name_offset);
> +    btf_asm_func_arg (ctfc, farg, farg_name_offset);
>   }
>   
>   /* Output the variable portion of a BTF type record. The information depends
> @@ -1010,7 +1143,7 @@ output_asm_btf_vlen_bytes (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
>         break;
>   
>       case BTF_KIND_ARRAY:
> -      btf_asm_array (dtd);
> +      btf_asm_array (ctfc, dtd->dtd_u.dtu_arr);
>         break;
>   
>       case BTF_KIND_STRUCT:
> @@ -1074,10 +1207,10 @@ output_btf_types (ctf_container_ref ctfc)
>   /* Output all BTF_KIND_FUNC type records.  */
>   
>   static void
> -output_btf_func_types (void)
> +output_btf_func_types (ctf_container_ref ctfc)
>   {
>     for (size_t i = 0; i < vec_safe_length (funcs); i++)
> -    btf_asm_func_type ((*funcs)[i]);
> +    btf_asm_func_type (ctfc, (*funcs)[i], i);
>   }
>   
>   /* Output all BTF_KIND_DATASEC records.  */
> @@ -1088,7 +1221,7 @@ output_btf_datasec_types (ctf_container_ref ctfc)
>     size_t name_offset = ctfc_get_strtab_len (ctfc, CTF_STRTAB);
>   
>     for (size_t i = 0; i < datasecs.length(); i++)
> -    btf_asm_datasec_type (datasecs[i], name_offset);
> +    btf_asm_datasec_type (ctfc, datasecs[i], i, name_offset);
>   }
>   
>   /* Postprocess the CTF debug data post initialization.
> @@ -1215,7 +1348,7 @@ btf_output (const char * filename)
>     output_btf_header (tu_ctfc);
>     output_btf_types (tu_ctfc);
>     output_btf_vars (tu_ctfc);
> -  output_btf_func_types ();
> +  output_btf_func_types (tu_ctfc);
>     output_btf_datasec_types (tu_ctfc);
>     output_btf_strs (tu_ctfc);
>   }
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-struct-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-struct-1.c
> index 89a5701bba0..05996fe195a 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-struct-1.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-struct-1.c
> @@ -11,10 +11,11 @@
>   /* { dg-options "-O0 -gbtf -dA" } */
>   
>   /* Struct type with 2 members (struct foo).  */
> +/* { dg-final { scan-assembler-times " BTF_KIND_STRUCT 'foo'" 1 } } */
>   /* { dg-final { scan-assembler-times "\[\t \]0x4000002\[\t \]+\[^\n\]*btt_info" 1 } } */
>   /* Struct type with 1 member (anon struct).  */
> +/* { dg-final { scan-assembler-times " BTF_KIND_STRUCT ''" 1 } } */
>   /* { dg-final { scan-assembler-times "\[\t \]0x4000001\[\t \]+\[^\n\]*btt_info" 1 } } */
> -/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*btt_name" 1 } } */
>   
>   struct foo
>   {
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-union-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-union-1.c
> index f3b120bb458..49cdc87cf59 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-union-1.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-union-1.c
> @@ -9,9 +9,9 @@
>   
>   /* Struct type with 1 member.  */
>   /* { dg-final { scan-assembler-times "\[\t \]0x4000001\[\t \]+\[^\n\]*btt_info" 1 } } */
> -/* Union type with 2 members.  */
> +/* Anonymous union type with 2 members.  */
>   /* { dg-final { scan-assembler-times "\[\t \]0x5000002\[\t \]+\[^\n\]*btt_info" 1 } } */
> -/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*btt_name" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_UNION ''" 1 } } */
>   
>   struct foo
>   {
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c
> index ab55445bd35..967b1e8746a 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c
> @@ -18,6 +18,9 @@
>   /* { dg-final { scan-assembler-times "\[\t \]0x5\[\t \]+\[^\n\]*bta_nelems" 1 } } */
>   /* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*bta_nelems" 1 } } */
>   
> +/* { dg-final { scan-assembler-times " bta_elem_type: \\(BTF_KIND_INT 'int'\\)" 4 } } */
> +/* { dg-final { scan-assembler-times " bta_elem_type: \\(BTF_KIND_ARRAY ''\\)" 1 } } */
> +
>   int b1[2] = {0,1};
>   int c1[5] = {0,1,2,3,4};
>   int a1[2][3] = { {3,4,5}, {2,3,4} };
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c
> index 9665ab67145..03c323a6d49 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c
> @@ -16,7 +16,7 @@
>   /* { dg-final { scan-assembler-times "\[\t \]0x20000020\[\t \]+\[^\n\]*btm_offset" 1 } } */
>   
>   /* Only 2 members.  */
> -/* { dg-final { scan-assembler-times "btm_name" 2 } } */
> +/* { dg-final { scan-assembler-times "MEMBER" 2 } } */
>   
>   struct foo
>   {
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c
> index 2984a3357eb..78b8b7d49ad 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c
> @@ -22,7 +22,7 @@
>   /* { dg-final { scan-assembler-times "\[\t \]0x84000001\[\t \]+\[^\n\]*btt_info" 1 } } */
>   
>   /* Bitfield "f" points to type ID 1.  */
> -/* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*btm_type" 1 } } */
> +/* { dg-final { scan-assembler-times " btm_type: \\(BTF_KIND_ENUM 'foo'" 1 } } */
>   
>   enum foo
>   {
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c
> index f4b298cf019..d6f3358d6fb 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c
> @@ -6,8 +6,8 @@
>   /* { dg-options "-O0 -gbtf -dA" } */
>   
>   /* Expect one DATASEC with vlen=1 (.foo_sec) and one with vlen=2 (.bar_sec) */
> -/* { dg-final { scan-assembler-times "0xf000002\[\t \]+\[^\n\]*btt_info" 1 } } */
> -/* { dg-final { scan-assembler-times "0xf000001\[\t \]+\[^\n\]*btt_info" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_DATASEC '.foo_sec'\[\\r\\n\]+\[^\\r\\n\]*0xf000001\[\t \]+\[^\n\]*btt_info" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_DATASEC '.bar_sec'\[\\r\\n\]+\[^\\r\\n\]*0xf000002\[\t \]+\[^\n\]*btt_info" 1 } } */
>   
>   /* Function entries should have offset and size of 0 at compile time.  */
>   /* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 3 } } */
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c
> index 2887cb1c5f2..021ce0345e4 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c
> @@ -5,6 +5,10 @@
>   
>   /* { dg-final { scan-assembler-times "\[\t \]0x6000004\[\t \]+\[^\n\]*btt_info" 1 } } */
>   /* { dg-final { scan-assembler-times "\[\t \]0x86000003\[\t \]+\[^\n\]*btt_info" 1 } } */
> +/* { dg-final { scan-assembler-times " ENUM_CONST 'QAD' idx=0" 1 } } */
> +/* { dg-final { scan-assembler-times " ENUM_CONST 'QED' idx=1" 1 } } */
> +/* { dg-final { scan-assembler-times " ENUM_CONST 'QOD' idx=2" 1 } } */
> +/* { dg-final { scan-assembler-times " ENUM_CONST 'QUD' idx=3" 1 } } */
>   /* { dg-final { scan-assembler-times "ascii \"QAD.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
>   /* { dg-final { scan-assembler-times "ascii \"QED.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
>   /* { dg-final { scan-assembler-times "ascii \"QOD.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c b/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c
> index 884d25cfbda..7ca0890884e 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c
> @@ -1,6 +1,6 @@
>   /* Test BTF generation for a function with an unrepresentable parameter.
>   
> -   BTF has no encoding for floating point types, among others. Function
> +   BTF has no encoding for vector types, among others. Function
>      parameters of unrepresentable types are emitted as 'void' types.
>   
>      We expect one BTF_KIND_FUNC_PROTO with 3 parameters, one of which
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-function-6.c b/gcc/testsuite/gcc.dg/debug/btf/btf-function-6.c
> index 48a946ab14b..e014d9990a9 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-function-6.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-function-6.c
> @@ -6,8 +6,8 @@
>   /* { dg-do compile } */
>   /* { dg-options "-O0 -gbtf -dA" } */
>   
> -/* { dg-final { scan-assembler-times "btt_info: kind=12, kflag=0, linkage=2" 1 } } */
> -/* { dg-final { scan-assembler-times "btt_info: kind=12, kflag=0, linkage=1" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_FUNC\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*linkage=2\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_FUNC_PROTO 'extfunc'" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_FUNC\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*linkage=1\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_FUNC_PROTO 'foo'" 1 } } */
>   
>   extern int extfunc(int a, int b);
>   
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c
> index a14ac0f89b2..f80d8089877 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c
> @@ -9,6 +9,9 @@
>   /* { dg-options "-O0 -gbtf -dA" } */
>   
>   /* { dg-final { scan-assembler-times "\[\t \]0x2000000\[\t \]+\[^\n\]*btt_info" 2 } } */
> +/* { dg-final { scan-assembeler-times " BTF_KIND_PTR ''\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_INT 'int'"}} */
> +/* { dg-final { scan-assembeler-times " BTF_KIND_PTR ''\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_STRUCT 'st'"}} */
> +
>   /* { dg-final { scan-assembler-times "ascii \"int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
>   /* { dg-final { scan-assembler-times "ascii \"st.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
>   
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c
> index bc3281437c9..79156cd7bcf 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c
> @@ -9,7 +9,9 @@
>   
>   /* { dg-final { scan-assembler-times "\[\t \]0x4000003\[\t \]+\[^\n\]*btt_info" 1 } } */
>   /* { dg-final { scan-assembler-times "\[\t \]0x4000002\[\t \]+\[^\n\]*btt_info" 1 } } */
> -/* { dg-final { scan-assembler-times "btm_name" 5 } } */
> +/* { dg-final { scan-assembler-times " btm_type: \\(BTF_KIND_INT" 3 } } */
> +/* { dg-final { scan-assembler-times " btm_type: \\(BTF_KIND_ARRAY" 1 } } */
> +/* { dg-final { scan-assembler-times " btm_type: \\(BTF_KIND_STRUCT" 1 } } */
>   
>   struct foo
>   {
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c
> index c3aff09ed9a..e9ff06883db 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c
> @@ -1,7 +1,7 @@
>   /* Test BTF generation for struct type with a member which refers to an
>      unsupported type.
>   
> -   BTF does not support floating point types (among other things). When
> +   BTF does not support vector types (among other things). When
>      generating BTF for a struct (or union) type, members which refer to
>      unsupported types should be skipped.  */
>   
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c
> index 472cc63f600..36bbb292f5c 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c
> @@ -41,13 +41,13 @@
>   /* { dg-final { scan-assembler-times "ascii \"node_t.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
>   /* { dg-final { scan-assembler-times "ascii \"arena_t.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
>   
> -/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*btv_type" 1 } } */
> -/* { dg-final { scan-assembler-times "\[\t \]0x3\[\t \]+\[^\n\]*btv_type" 1 } } */
> -/* { dg-final { scan-assembler-times "\[\t \]0x4\[\t \]+\[^\n\]*btv_type" 1 } } */
> -/* { dg-final { scan-assembler-times "\[\t \]0x6\[\t \]+\[^\n\]*btv_type" 1 } } */
> -/* { dg-final { scan-assembler-times "\[\t \]0x8\[\t \]+\[^\n\]*btv_type" 1 } } */
> -/* { dg-final { scan-assembler-times "\[\t \]0xb\[\t \]+\[^\n\]*btv_type" 1 } } */
> -/* { dg-final { scan-assembler-times "\[\t \]0xf\[\t \]+\[^\n\]*btv_type" 1 } } */
> +/* { dg-final { scan-assembler "BTF_KIND_VAR 'a'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_TYPEDEF 'my_int'" } } */
> +/* { dg-final { scan-assembler "BTF_KIND_VAR 'b'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_TYPEDEF 'foo_int'" } } */
> +/* { dg-final { scan-assembler "BTF_KIND_VAR 'c'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_TYPEDEF 'bar_int'" } } */
> +/* { dg-final { scan-assembler "BTF_KIND_VAR 'd'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_TYPEDEF 'node_t'" } } */
> +/* { dg-final { scan-assembler "BTF_KIND_VAR 'destination'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_TYPEDEF 'CBAR'" } } */
> +/* { dg-final { scan-assembler "BTF_KIND_VAR 'ticket'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_TYPEDEF 'CBARP'" } } */
> +/* { dg-final { scan-assembler "BTF_KIND_VAR 'suitcase'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_TYPEDEF 'arena_t'" } } */
>   
>   typedef int my_int;
>   typedef int foo_int;
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c
> index d66843717b3..e3a19028843 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c
> @@ -5,7 +5,7 @@
>   
>   /* One union type with 4 members */
>   /* { dg-final { scan-assembler-times "\[\t \]0x5000004\[\t \]+\[^\n\]*btt_info" 1 } } */
> -/* { dg-final { scan-assembler-times "btm_name" 4 } } */
> +/* { dg-final { scan-assembler-times "MEMBER" 4 } } */
>   
>   union onion
>   {
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-1.c
> index a79ed1d53b7..42503df396f 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-1.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-1.c
> @@ -5,6 +5,12 @@
>   
>   /* We expect 6 variables */
>   /* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 6 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'x1'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_INT" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'bar'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_UNION" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'lala'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_ENUM" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'arr'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_ARRAY" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'plong'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_PTR" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'st_inst'\[\\r\\n\]+\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\\(BTF_KIND_STRUCT 'st'" 1 } } */
>   
>   unsigned int x1;
>   
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c
> index db0bdd7be16..5f0c0b6e02d 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c
> @@ -1,7 +1,7 @@
>   /* BTF generation for variables with removed type.
>   
> -   BTF does not support floating point types, so no representation for the type
> -   'float' will be emitted. In this test, we check to also ensure that the
> +   BTF does not support vector types, so no representation for the type
> +   of 'bar' will be emitted. In this test, we check to also ensure that the
>      variable 'bar' is not emitted, as it references a type that is not supported
>      in BTF.  */
>   
> @@ -11,6 +11,9 @@
>   /* We expect only 3 variables.  */
>   /* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 3 } } */
>   
> +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'foo'" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'baz'" 1 } } */
> +/* { dg-final { scan-assembler-times " BTF_KIND_VAR 'myst'" 1 } } */
>   /* { dg-final { scan-assembler-times "ascii \"foo.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
>   /* { dg-final { scan-assembler-times "ascii \"baz.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
>   /* { dg-final { scan-assembler-times "ascii \"myst.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */


  reply	other threads:[~2023-05-31  6:13 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-25 16:37 [PATCH] " David Faust
2023-05-30  7:30 ` Indu Bhagat
2023-05-30 16:08   ` David Faust
2023-05-30 16:45     ` Indu Bhagat
2023-05-30 18:27 ` [PATCH 1/2] btf: be clear when record size/type is not used David Faust
2023-05-30 18:27   ` [PATCH 2/2] btf: improve -dA comments for testsuite David Faust
2023-05-31  6:13     ` Indu Bhagat [this message]
2023-06-02  8:32       ` Iain Sandoe
2023-06-02 16:07         ` Alex Coplan
2023-05-31  6:12   ` [PATCH 1/2] btf: be clear when record size/type is not used Indu Bhagat

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=16c13d09-eff0-8722-52c1-fe2eec165f11@oracle.com \
    --to=indu.bhagat@oracle.com \
    --cc=david.faust@oracle.com \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).