public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-1985] BTF: Support for BTF_KIND_FLOAT
@ 2021-07-02 15:32 David Faust
  0 siblings, 0 replies; only message in thread
From: David Faust @ 2021-07-02 15:32 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:18d0fad77b580d1ac64ed04d94fd3c9795687b91

commit r12-1985-g18d0fad77b580d1ac64ed04d94fd3c9795687b91
Author: David Faust <david.faust@oracle.com>
Date:   Tue Jun 1 09:22:59 2021 -0700

    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.

Diff:
---
 gcc/btfout.c                                     |  2 ++
 gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c     | 20 ++++++++++++++++++++
 gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c  |  2 +-
 gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c    |  2 +-
 gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c |  2 +-
 include/btf.h                                    |  9 +++++----
 6 files changed, 30 insertions(+), 7 deletions(-)

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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-07-02 15:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-02 15:32 [gcc r12-1985] BTF: Support for BTF_KIND_FLOAT David Faust

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).