* [PATCH] BTF: Support for BTF_KIND_FLOAT
@ 2021-07-01 17:53 David Faust
2021-07-02 7:31 ` Richard Biener
0 siblings, 1 reply; 2+ messages in thread
From: David Faust @ 2021-07-01 17:53 UTC (permalink / raw)
To: gcc-patches
Add BTF_KIND_FLOAT, a new BTF type kind which has recently stabilized in
the linux kernel [1]. This kind is used for encoding floating point
types, and is of particular use when generating BTF for some s390
arch-specific kernel headers.
Also update some BTF tests which previously used floating point types to
check correct behavior for types with no BTF representation.
[1]: https://github.com/torvalds/linux/commit/b1828f0b04828aa8cccadf00a702f459caefeed9
bootstrapped and tested on x86_64-linux-gnu, ok to install?
include/ChangeLog:
* btf.h (struct btf_type): Update bit usage comment.
(BTF_INFO_KIND): Update bit mask.
(BTF_KIND_FLOAT): New define.
(BTF_KIND_MAX): Update.
gcc/ChangeLog:
* btfout.c (get_btf_kind): Support BTF_KIND_FLOAT.
(btf_asm_type): Likewise.
gcc/testsuite/ChangeLog:
* gcc.dg/debug/btf/btf-float-1.c: New test.
* gcc.dg/debug/btf/btf-function-3.c: Use different unrepresentable type.
* gcc.dg/debug/btf/btf-struct-2.c: Likewise.
* gcc.dg/debug/btf/btf-variables-2.c: Likewise.
---
gcc/btfout.c | 2 ++
gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c | 20 +++++++++++++++++++
.../gcc.dg/debug/btf/btf-function-3.c | 2 +-
gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c | 2 +-
.../gcc.dg/debug/btf/btf-variables-2.c | 2 +-
include/btf.h | 9 +++++----
6 files changed, 30 insertions(+), 7 deletions(-)
create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c
diff --git a/gcc/btfout.c b/gcc/btfout.c
index e58c969825a..8cdd9905fb6 100644
--- a/gcc/btfout.c
+++ b/gcc/btfout.c
@@ -124,6 +124,7 @@ get_btf_kind (uint32_t ctf_kind)
switch (ctf_kind)
{
case CTF_K_INTEGER: return BTF_KIND_INT;
+ case CTF_K_FLOAT: return BTF_KIND_FLOAT;
case CTF_K_POINTER: return BTF_KIND_PTR;
case CTF_K_ARRAY: return BTF_KIND_ARRAY;
case CTF_K_FUNCTION: return BTF_KIND_FUNC_PROTO;
@@ -627,6 +628,7 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
switch (btf_kind)
{
case BTF_KIND_INT:
+ case BTF_KIND_FLOAT:
case BTF_KIND_STRUCT:
case BTF_KIND_UNION:
case BTF_KIND_ENUM:
diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c
new file mode 100644
index 00000000000..6876df04158
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c
@@ -0,0 +1,20 @@
+/* Tests for BTF floating point type kinds. We expect a single record for each
+ of the base types: float, double and long double. */
+
+/* { dg-do compile } */
+/* { dg-options "-O0 -gbtf -dA" } */
+
+/* { dg-final { scan-assembler-times "\[\t \]0x10000000\[\t \]+\[^\n\]*btt_info" 3 } } */
+
+/* { dg-final { scan-assembler-times "ascii \"float.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
+/* { dg-final { scan-assembler-times "ascii \"double.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
+/* { dg-final { scan-assembler-times "ascii \"long double.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
+
+float a;
+float b = 1.5f;
+
+double c;
+double d = -99.9;
+
+long double e;
+long double f = 1000.01;
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 35f96a2152c..c83b823d22f 100644
--- a/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c
+++ b/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c
@@ -16,7 +16,7 @@
/* Exactly one function parameter should have type_id=0. */
/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*farg_type" 1 } } */
-int foo (int a, float f, long b)
+int foo (int a, float __attribute__((__vector_size__(16))) f, long b)
{
return 0;
}
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 24514fcb31e..c3aff09ed9a 100644
--- a/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c
+++ b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c
@@ -14,6 +14,6 @@
struct with_float
{
int a;
- float f;
+ float __attribute__((__vector_size__(16))) f;
char c;
} instance;
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 0f9742e9ac5..db0bdd7be16 100644
--- a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c
+++ b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c
@@ -16,7 +16,7 @@
/* { dg-final { scan-assembler-times "ascii \"myst.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
int foo;
-float bar;
+float __attribute__((__vector_size__(16))) bar;
int baz[10];
struct st
diff --git a/include/btf.h b/include/btf.h
index 3b1a4c3093f..bf720ee49b4 100644
--- a/include/btf.h
+++ b/include/btf.h
@@ -62,8 +62,8 @@ struct btf_type
uint32_t info; /* Encoded kind, variant length, kind flag:
- bits 0-15: vlen
- bits 16-23: unused
- - bits 24-27: kind
- - bits 28-30: unused
+ - bits 24-28: kind
+ - bits 29-30: unused
- bit 31: kind_flag
See accessor macros below. */
@@ -79,7 +79,7 @@ struct btf_type
/* The folloing macros access the information encoded in btf_type.info. */
/* Type kind. See below. */
-#define BTF_INFO_KIND(info) (((info) >> 24) & 0x0f)
+#define BTF_INFO_KIND(info) (((info) >> 24) & 0x1f)
/* Number of entries of variable length data following certain type kinds.
For example, number of structure members, number of function parameters. */
#define BTF_INFO_VLEN(info) ((info) & 0xffff)
@@ -108,7 +108,8 @@ struct btf_type
#define BTF_KIND_FUNC_PROTO 13 /* Function Prototype. */
#define BTF_KIND_VAR 14 /* Variable. */
#define BTF_KIND_DATASEC 15 /* Section such as .bss or .data. */
-#define BTF_KIND_MAX BTF_KIND_DATASEC
+#define BTF_KIND_FLOAT 16 /* Floating point. */
+#define BTF_KIND_MAX BTF_KIND_FLOAT
#define NR_BTF_KINDS (BTF_KIND_MAX + 1)
/* For some BTF_KINDs, struct btf_type is immediately followed by
--
2.31.1
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] BTF: Support for BTF_KIND_FLOAT
2021-07-01 17:53 [PATCH] BTF: Support for BTF_KIND_FLOAT David Faust
@ 2021-07-02 7:31 ` Richard Biener
0 siblings, 0 replies; 2+ messages in thread
From: Richard Biener @ 2021-07-02 7:31 UTC (permalink / raw)
To: David Faust; +Cc: GCC Patches
On Thu, Jul 1, 2021 at 7:54 PM David Faust via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> Add BTF_KIND_FLOAT, a new BTF type kind which has recently stabilized in
> the linux kernel [1]. This kind is used for encoding floating point
> types, and is of particular use when generating BTF for some s390
> arch-specific kernel headers.
>
> Also update some BTF tests which previously used floating point types to
> check correct behavior for types with no BTF representation.
>
> [1]: https://github.com/torvalds/linux/commit/b1828f0b04828aa8cccadf00a702f459caefeed9
>
> bootstrapped and tested on x86_64-linux-gnu, ok to install?
OK.
Richard.
> include/ChangeLog:
>
> * btf.h (struct btf_type): Update bit usage comment.
> (BTF_INFO_KIND): Update bit mask.
> (BTF_KIND_FLOAT): New define.
> (BTF_KIND_MAX): Update.
>
> gcc/ChangeLog:
>
> * btfout.c (get_btf_kind): Support BTF_KIND_FLOAT.
> (btf_asm_type): Likewise.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.dg/debug/btf/btf-float-1.c: New test.
> * gcc.dg/debug/btf/btf-function-3.c: Use different unrepresentable type.
> * gcc.dg/debug/btf/btf-struct-2.c: Likewise.
> * gcc.dg/debug/btf/btf-variables-2.c: Likewise.
> ---
> gcc/btfout.c | 2 ++
> gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c | 20 +++++++++++++++++++
> .../gcc.dg/debug/btf/btf-function-3.c | 2 +-
> gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c | 2 +-
> .../gcc.dg/debug/btf/btf-variables-2.c | 2 +-
> include/btf.h | 9 +++++----
> 6 files changed, 30 insertions(+), 7 deletions(-)
> create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c
>
> diff --git a/gcc/btfout.c b/gcc/btfout.c
> index e58c969825a..8cdd9905fb6 100644
> --- a/gcc/btfout.c
> +++ b/gcc/btfout.c
> @@ -124,6 +124,7 @@ get_btf_kind (uint32_t ctf_kind)
> switch (ctf_kind)
> {
> case CTF_K_INTEGER: return BTF_KIND_INT;
> + case CTF_K_FLOAT: return BTF_KIND_FLOAT;
> case CTF_K_POINTER: return BTF_KIND_PTR;
> case CTF_K_ARRAY: return BTF_KIND_ARRAY;
> case CTF_K_FUNCTION: return BTF_KIND_FUNC_PROTO;
> @@ -627,6 +628,7 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
> switch (btf_kind)
> {
> case BTF_KIND_INT:
> + case BTF_KIND_FLOAT:
> case BTF_KIND_STRUCT:
> case BTF_KIND_UNION:
> case BTF_KIND_ENUM:
> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c
> new file mode 100644
> index 00000000000..6876df04158
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c
> @@ -0,0 +1,20 @@
> +/* Tests for BTF floating point type kinds. We expect a single record for each
> + of the base types: float, double and long double. */
> +
> +/* { dg-do compile } */
> +/* { dg-options "-O0 -gbtf -dA" } */
> +
> +/* { dg-final { scan-assembler-times "\[\t \]0x10000000\[\t \]+\[^\n\]*btt_info" 3 } } */
> +
> +/* { dg-final { scan-assembler-times "ascii \"float.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
> +/* { dg-final { scan-assembler-times "ascii \"double.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
> +/* { dg-final { scan-assembler-times "ascii \"long double.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
> +
> +float a;
> +float b = 1.5f;
> +
> +double c;
> +double d = -99.9;
> +
> +long double e;
> +long double f = 1000.01;
> 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 35f96a2152c..c83b823d22f 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c
> @@ -16,7 +16,7 @@
> /* Exactly one function parameter should have type_id=0. */
> /* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*farg_type" 1 } } */
>
> -int foo (int a, float f, long b)
> +int foo (int a, float __attribute__((__vector_size__(16))) f, long b)
> {
> return 0;
> }
> 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 24514fcb31e..c3aff09ed9a 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c
> @@ -14,6 +14,6 @@
> struct with_float
> {
> int a;
> - float f;
> + float __attribute__((__vector_size__(16))) f;
> char c;
> } instance;
> 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 0f9742e9ac5..db0bdd7be16 100644
> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c
> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c
> @@ -16,7 +16,7 @@
> /* { dg-final { scan-assembler-times "ascii \"myst.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */
>
> int foo;
> -float bar;
> +float __attribute__((__vector_size__(16))) bar;
> int baz[10];
>
> struct st
> diff --git a/include/btf.h b/include/btf.h
> index 3b1a4c3093f..bf720ee49b4 100644
> --- a/include/btf.h
> +++ b/include/btf.h
> @@ -62,8 +62,8 @@ struct btf_type
> uint32_t info; /* Encoded kind, variant length, kind flag:
> - bits 0-15: vlen
> - bits 16-23: unused
> - - bits 24-27: kind
> - - bits 28-30: unused
> + - bits 24-28: kind
> + - bits 29-30: unused
> - bit 31: kind_flag
> See accessor macros below. */
>
> @@ -79,7 +79,7 @@ struct btf_type
>
> /* The folloing macros access the information encoded in btf_type.info. */
> /* Type kind. See below. */
> -#define BTF_INFO_KIND(info) (((info) >> 24) & 0x0f)
> +#define BTF_INFO_KIND(info) (((info) >> 24) & 0x1f)
> /* Number of entries of variable length data following certain type kinds.
> For example, number of structure members, number of function parameters. */
> #define BTF_INFO_VLEN(info) ((info) & 0xffff)
> @@ -108,7 +108,8 @@ struct btf_type
> #define BTF_KIND_FUNC_PROTO 13 /* Function Prototype. */
> #define BTF_KIND_VAR 14 /* Variable. */
> #define BTF_KIND_DATASEC 15 /* Section such as .bss or .data. */
> -#define BTF_KIND_MAX BTF_KIND_DATASEC
> +#define BTF_KIND_FLOAT 16 /* Floating point. */
> +#define BTF_KIND_MAX BTF_KIND_FLOAT
> #define NR_BTF_KINDS (BTF_KIND_MAX + 1)
>
> /* For some BTF_KINDs, struct btf_type is immediately followed by
> --
> 2.31.1
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-07-02 7:31 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-01 17:53 [PATCH] BTF: Support for BTF_KIND_FLOAT David Faust
2021-07-02 7:31 ` Richard Biener
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).