diff options
author | David Faust <david.faust@oracle.com> | 2021-06-01 09:22:59 -0700 |
---|---|---|
committer | David Faust <david.faust@oracle.com> | 2021-07-02 08:32:44 -0700 |
commit | 18d0fad77b580d1ac64ed04d94fd3c9795687b91 (patch) | |
tree | 1dcda79f66eae9a3de3ddc5028ec73c71db26cd5 /gcc | |
parent | b60761baa6fd6acf3200e732283d133f4ce0f0e9 (diff) | |
download | gcc-18d0fad77b580d1ac64ed04d94fd3c9795687b91.zip gcc-18d0fad77b580d1ac64ed04d94fd3c9795687b91.tar.gz gcc-18d0fad77b580d1ac64ed04d94fd3c9795687b91.tar.bz2 |
BTF: Support for BTF_KIND_FLOAT
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
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/btfout.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c | 2 |
5 files changed, 25 insertions, 3 deletions
diff --git a/gcc/btfout.c b/gcc/btfout.c index e58c969..8cdd990 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 0000000..6876df0 --- /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 35f96a2..c83b823 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 24514fc..c3aff09 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 0f9742e..db0bdd7 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 |