+ 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);
@@ -705,33 +817,41 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
dw2_asm_output_data (4, dtd->dtd_data.ctti_size, "btt_size: %uB",
dtd->dtd_data.ctti_size);
return;
+ case BTF_KIND_ARRAY:
+ case BTF_KIND_FWD:
+ /* These types do not encode any information in the size/type field
+ and should write 0. */
+ dw2_asm_output_data (4, 0, "(unused)");
+ return;
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");
}
@@ -835,9 +962,12 @@ 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");
@@ -845,7 +975,7 @@ btf_asm_datasec_type (btf_datasec_t ds, size_t stroffset)
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. */
@@ -906,7 +1036,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]);
}
}
@@ -940,9 +1070,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}. */
@@ -968,7 +1102,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
@@ -1004,7 +1138,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:
@@ -1068,10 +1202,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. */
@@ -1082,7 +1216,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.
@@ -1209,7 +1343,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-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 } } */