From c1f76af469388d3df815c82de566387da5ae000f Mon Sep 17 00:00:00 2001 From: Indu Bhagat Date: Thu, 20 May 2021 11:19:04 -0700 Subject: [PATCH] CTF/BTF testsuites This commit adds a new testsuite for the CTF debug format. 2021-06-28 Indu Bhagat David Faust gcc/testsuite/ * lib/gcc-dg.exp (gcc-dg-frontend-supports-ctf): New procedure. (gcc-dg-debug-runtest): Add -gctf support. * gcc.dg/debug/btf/btf-1.c: New test. * gcc.dg/debug/btf/btf-2.c: Likewise. * 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-array-1.c: Likewise. * gcc.dg/debug/btf/btf-bitfields-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-cvr-quals-1.c: Likewise. * gcc.dg/debug/btf/btf-enum-1.c: Likewise. * gcc.dg/debug/btf/btf-forward-1.c: Likewise. * gcc.dg/debug/btf/btf-function-1.c: Likewise. * gcc.dg/debug/btf/btf-function-2.c: Likewise. * gcc.dg/debug/btf/btf-int-1.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-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.exp: Likewise. * gcc.dg/debug/ctf/ctf-1.c: Likewise. * gcc.dg/debug/ctf/ctf-2.c: Likewise. * gcc.dg/debug/ctf/ctf-anonymous-struct-1.c: Likewise. * gcc.dg/debug/ctf/ctf-anonymous-union-1.c: Likewise. * gcc.dg/debug/ctf/ctf-array-1.c: Likewise. * gcc.dg/debug/ctf/ctf-array-2.c: Likewise. * gcc.dg/debug/ctf/ctf-array-3.c: Likewise. * gcc.dg/debug/ctf/ctf-array-4.c: Likewise. * gcc.dg/debug/ctf/ctf-attr-mode-1.c: Likewise. * gcc.dg/debug/ctf/ctf-attr-used-1.c: Likewise. * gcc.dg/debug/ctf/ctf-bitfields-1.c: Likewise. * gcc.dg/debug/ctf/ctf-bitfields-2.c: Likewise. * gcc.dg/debug/ctf/ctf-bitfields-3.c: Likewise. * gcc.dg/debug/ctf/ctf-bitfields-4.c: Likewise. * gcc.dg/debug/ctf/ctf-complex-1.c: Likewise. * gcc.dg/debug/ctf/ctf-cvr-quals-1.c: Likewise. * gcc.dg/debug/ctf/ctf-cvr-quals-2.c: Likewise. * gcc.dg/debug/ctf/ctf-cvr-quals-3.c: Likewise. * gcc.dg/debug/ctf/ctf-cvr-quals-4.c: Likewise. * gcc.dg/debug/ctf/ctf-enum-1.c: Likewise. * gcc.dg/debug/ctf/ctf-enum-2.c: Likewise. * gcc.dg/debug/ctf/ctf-file-scope-1.c: Likewise. * gcc.dg/debug/ctf/ctf-float-1.c: Likewise. * gcc.dg/debug/ctf/ctf-forward-1.c: Likewise. * gcc.dg/debug/ctf/ctf-forward-2.c: Likewise. * gcc.dg/debug/ctf/ctf-func-index-1.c: Likewise. * gcc.dg/debug/ctf/ctf-function-pointers-1.c: Likewise. * gcc.dg/debug/ctf/ctf-function-pointers-2.c: Likewise. * gcc.dg/debug/ctf/ctf-function-pointers-3.c: Likewise. * gcc.dg/debug/ctf/ctf-functions-1.c: Likewise. * gcc.dg/debug/ctf/ctf-int-1.c: Likewise. * gcc.dg/debug/ctf/ctf-objt-index-1.c: Likewise. * gcc.dg/debug/ctf/ctf-pointers-1.c: Likewise. * gcc.dg/debug/ctf/ctf-pointers-2.c: Likewise. * gcc.dg/debug/ctf/ctf-preamble-1.c: Likewise. * gcc.dg/debug/ctf/ctf-skip-types-1.c: Likewise. * gcc.dg/debug/ctf/ctf-skip-types-2.c: Likewise. * gcc.dg/debug/ctf/ctf-skip-types-3.c: Likewise. * gcc.dg/debug/ctf/ctf-skip-types-4.c: Likewise. * gcc.dg/debug/ctf/ctf-skip-types-5.c: Likewise. * gcc.dg/debug/ctf/ctf-skip-types-6.c: Likewise. * gcc.dg/debug/ctf/ctf-str-table-1.c: Likewise. * gcc.dg/debug/ctf/ctf-struct-1.c: Likewise. * gcc.dg/debug/ctf/ctf-struct-2.c: Likewise. * gcc.dg/debug/ctf/ctf-struct-array-1.c: Likewise. * gcc.dg/debug/ctf/ctf-struct-pointer-1.c: Likewise. * gcc.dg/debug/ctf/ctf-struct-pointer-2.c: Likewise. * gcc.dg/debug/ctf/ctf-typedef-1.c: Likewise. * gcc.dg/debug/ctf/ctf-typedef-2.c: Likewise. * gcc.dg/debug/ctf/ctf-typedef-3.c: Likewise. * gcc.dg/debug/ctf/ctf-typedef-struct-1.c: Likewise. * gcc.dg/debug/ctf/ctf-typedef-struct-2.c: Likewise. * gcc.dg/debug/ctf/ctf-typedef-struct-3.c: Likewise. * gcc.dg/debug/ctf/ctf-union-1.c: Likewise. * gcc.dg/debug/ctf/ctf-variables-1.c: Likewise. * gcc.dg/debug/ctf/ctf-variables-2.c: Likewise. * gcc.dg/debug/ctf/ctf.exp: Likewise. --- gcc/testsuite/gcc.dg/debug/btf/btf-1.c | 6 ++ gcc/testsuite/gcc.dg/debug/btf/btf-2.c | 10 +++ .../gcc.dg/debug/btf/btf-anonymous-struct-1.c | 23 ++++++ .../gcc.dg/debug/btf/btf-anonymous-union-1.c | 23 ++++++ gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c | 31 ++++++++ gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c | 34 +++++++++ gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c | 26 +++++++ gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c | 43 ++++++++++++ gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c | 23 ++++++ gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c | 52 ++++++++++++++ gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c | 45 ++++++++++++ gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c | 30 ++++++++ gcc/testsuite/gcc.dg/debug/btf/btf-forward-1.c | 24 +++++++ gcc/testsuite/gcc.dg/debug/btf/btf-function-1.c | 18 +++++ gcc/testsuite/gcc.dg/debug/btf/btf-function-2.c | 18 +++++ gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c | 22 ++++++ gcc/testsuite/gcc.dg/debug/btf/btf-int-1.c | 44 ++++++++++++ gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c | 25 +++++++ gcc/testsuite/gcc.dg/debug/btf/btf-pointers-2.c | 13 ++++ gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c | 22 ++++++ gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c | 19 +++++ gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c | 82 ++++++++++++++++++++++ gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c | 16 +++++ gcc/testsuite/gcc.dg/debug/btf/btf-variables-1.c | 33 +++++++++ gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c | 27 +++++++ gcc/testsuite/gcc.dg/debug/btf/btf-variables-3.c | 36 ++++++++++ gcc/testsuite/gcc.dg/debug/btf/btf.exp | 41 +++++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-1.c | 6 ++ gcc/testsuite/gcc.dg/debug/ctf/ctf-2.c | 10 +++ .../gcc.dg/debug/ctf/ctf-anonymous-struct-1.c | 23 ++++++ .../gcc.dg/debug/ctf/ctf-anonymous-union-1.c | 26 +++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-array-1.c | 31 ++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-array-2.c | 38 ++++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-array-3.c | 17 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-array-4.c | 13 ++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-mode-1.c | 22 ++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-used-1.c | 22 ++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-1.c | 30 ++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-2.c | 39 ++++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c | 16 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-4.c | 19 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-complex-1.c | 21 ++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-1.c | 65 +++++++++++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-2.c | 30 ++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-3.c | 25 +++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-4.c | 23 ++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-1.c | 7 ++ gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-2.c | 7 ++ gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-1.c | 21 ++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-2.c | 27 +++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-file-scope-1.c | 25 +++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-float-1.c | 16 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-1.c | 40 +++++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-2.c | 16 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-func-index-1.c | 25 +++++++ .../gcc.dg/debug/ctf/ctf-function-pointers-1.c | 24 +++++++ .../gcc.dg/debug/ctf/ctf-function-pointers-2.c | 22 ++++++ .../gcc.dg/debug/ctf/ctf-function-pointers-3.c | 21 ++++++ .../gcc.dg/debug/ctf/ctf-function-pointers-4.c | 18 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-functions-1.c | 34 +++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-int-1.c | 17 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-objt-index-1.c | 30 ++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-1.c | 26 +++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-2.c | 25 +++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-preamble-1.c | 11 +++ gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-1.c | 38 ++++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-2.c | 17 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-3.c | 20 ++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-4.c | 19 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-5.c | 19 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-6.c | 18 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-7.c | 18 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-8.c | 27 +++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-str-table-1.c | 26 +++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-1.c | 25 +++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-2.c | 32 +++++++++ .../gcc.dg/debug/ctf/ctf-struct-array-1.c | 65 +++++++++++++++++ .../gcc.dg/debug/ctf/ctf-struct-array-2.c | 15 ++++ .../gcc.dg/debug/ctf/ctf-struct-pointer-1.c | 21 ++++++ .../gcc.dg/debug/ctf/ctf-struct-pointer-2.c | 22 ++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-1.c | 68 ++++++++++++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-2.c | 20 ++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-3.c | 24 +++++++ .../gcc.dg/debug/ctf/ctf-typedef-struct-1.c | 14 ++++ .../gcc.dg/debug/ctf/ctf-typedef-struct-2.c | 17 +++++ .../gcc.dg/debug/ctf/ctf-typedef-struct-3.c | 32 +++++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-union-1.c | 14 ++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-1.c | 25 +++++++ gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-2.c | 16 +++++ gcc/testsuite/gcc.dg/debug/ctf/ctf.exp | 41 +++++++++++ gcc/testsuite/lib/gcc-dg.exp | 64 +++++++++++++---- 91 files changed, 2376 insertions(+), 15 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-struct-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-union-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-forward-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-function-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-function-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-int-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-pointers-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-variables-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-variables-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf.exp create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-struct-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-union-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-array-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-array-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-array-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-array-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-mode-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-used-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-complex-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-file-scope-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-float-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-func-index-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-functions-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-int-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-objt-index-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-preamble-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-4.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-5.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-6.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-7.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-8.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-str-table-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-3.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-union-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-2.c create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf.exp diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-1.c new file mode 100644 index 0000000..bcbc949 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-1.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-gbtf" } */ + +void func(void) +{ +} diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-2.c new file mode 100644 index 0000000..70e2ff1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-2.c @@ -0,0 +1,10 @@ +/* Check the BTF header information. */ + +/* { dg-do compile } */ +/* { dg-options "-gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "0xeb9f.*btf_magic" 1} } */ +/* { dg-final { scan-assembler-times "0x1.*btf_version" 1 } } */ +/* { dg-final { scan-assembler-times "0.*btf_flags" 1 } } */ + +int foo; 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 new file mode 100644 index 0000000..89a5701 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-struct-1.c @@ -0,0 +1,23 @@ +/* Test BTF generation of anonymous struct. + + We expect two BTF struct records: + - struct foo, with two fields "a" and "bar" + - struct with one field "b" + + The anonymous struct should have a name of 0, pointing to the null string + at the start of the string table. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* Struct type with 2 members (struct foo). */ +/* { dg-final { scan-assembler-times "\[\t \]0x4000002\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* Struct type with 1 member (anon struct). */ +/* { 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 +{ + int a; + struct { int b; } bar; +} myfoo; 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 new file mode 100644 index 0000000..f3b120b --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-union-1.c @@ -0,0 +1,23 @@ +/* Test BTF generation of anonymous union. + + We expect a named struct type and an anonymous union type record to + be generated. The anonymous union record should have a name of 0, + pointing to the null string at the start of the string table. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* Struct type with 1 member. */ +/* { dg-final { scan-assembler-times "\[\t \]0x4000001\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* 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 } } */ + +struct foo +{ + union + { + int value; + char ascii; + }; +} myfoo; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c new file mode 100644 index 0000000..ab55445 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c @@ -0,0 +1,31 @@ +/* BTF generation for array type. + + Unsized arrays are encoded with a 0 for the number of elements. + + In this testcase, 5 distinct BTF records for arrays are expected + b1 : cta_nelems = 2 + c1 : cta_nelems = 3 + a1 : cta_nelems = 2, 5 + buf : cta_nelems = 0. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "0x3000000\[\t \]+\[^\n\]*btt_info" 5 } } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*bta_nelems" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x3\[\t \]+\[^\n\]*bta_nelems" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x5\[\t \]+\[^\n\]*bta_nelems" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*bta_nelems" 1 } } */ + +int b1[2] = {0,1}; +int c1[5] = {0,1,2,3,4}; +int a1[2][3] = { {3,4,5}, {2,3,4} }; + +/* Variable length struct using arrays. */ +struct my_array +{ + int flags; + int length; + int buf[]; +} my_array_obj; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c new file mode 100644 index 0000000..c6bf521 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c @@ -0,0 +1,34 @@ +/* Basic tests for BTF bitfields. + + The structure containing bitfield members should be marked with KIND_FLAG=1 + The bitfield member offsets should be encoded as: + (bit_size << 24) | bit_offset + - (0xa << 24) | 0x20 + - (0x7 << 24) | 0x2a + - (0x13 << 24) | 0x40 - note that this is aligned to 0x40. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x84000004\[\t \]+\[^\n\]*btt_info" 1 } } */ + +/* { dg-final { scan-assembler-times "\[\t \]0xa000020\[\t \]+\[^\n\]*btm_offset" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x700002a\[\t \]+\[^\n\]*btm_offset" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x13000040\[\t \]+\[^\n\]*btm_offset" 1 } } */ + +struct bitt { + int a; + unsigned int bitfield_a : 10; + unsigned int bitfield_b : 7; + unsigned int bitfield_c : 19; +} bitty; + +struct no_bitt { + int a; + int b; +} no_bitty; + +int main () +{ + return bitty.bitfield_b + bitty.a; +} diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c new file mode 100644 index 0000000..9665ab6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c @@ -0,0 +1,26 @@ +/* Test BTF generation for struct with 0 size bitfield. + + We expect a struct with 2 members to be generated. The size 0 bitfield + should not have any entry in the member list. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* Struct with bitfield members, and 2 members. */ +/* { dg-final { scan-assembler-times "\[\t \]0x84000002\[\t \]+\[^\n\]*btt_info" 1 } } */ + +/* Bitfield size 31 (0x1f) at offset 0. */ +/* { dg-final { scan-assembler-times "\[\t \]0x1f000000\[\t \]+\[^\n\]*btm_offset" 1 } } */ + +/* Bitfield size 32 (0x20) at offset 32. */ +/* { dg-final { scan-assembler-times "\[\t \]0x20000020\[\t \]+\[^\n\]*btm_offset" 1 } } */ + +/* Only 2 members. */ +/* { dg-final { scan-assembler-times "btm_name" 2 } } */ + +struct foo +{ + unsigned a : 31; + unsigned : 0; + unsigned c : 32; +} myfoo; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c new file mode 100644 index 0000000..440623c --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c @@ -0,0 +1,43 @@ +/* Test BTF generation for enum-type bitfields + + It is allowed to have a bitfield type be an enum type. + We expect the following types: + + [1] enum 'foo'(1U#B) size=4U#B + 'BAR' value=0 + 'BAZ' value=1 + 'QUZ' value=2 + 'QUX' value=3 + [2] int 'unsigned int' size=4 offset=0 bits=32 + [3] struct 'bitt' size=4 + member 'f' type=1 bitfield_size=2 bit_offset=0 + member 'data' type=2 bitfield_size=14 bit_offset=2 + */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* Enum with 4 members. */ +/* { dg-final { scan-assembler-times "\[\t \]0x6000004\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* Struct with bitfield members, and 2 members. */ +/* { dg-final { scan-assembler-times "\[\t \]0x84000002\[\t \]+\[^\n\]*btt_info" 1 } } */ + +/* Bitfield "f" points to type ID 1. */ +/* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*btm_type" 1 } } */ + +/* Bitfield "data" points to type ID 2. */ +/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*btm_type" 1 } } */ + +enum foo +{ + BAR = 0, + BAZ = 1, + QUZ = 2, + QUX = 3 +}; + +struct bitt +{ + enum foo f : 2; + unsigned data : 14; +} bitty; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c new file mode 100644 index 0000000..af91845 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c @@ -0,0 +1,23 @@ +/* Test BTF generation for non-representable bitfields. + + Due to the limitations of BTF, we only have 24 bits in which to store + the bitfield offset (in bits, from the beginning of the struct). + + In this test, we construct a structure such that the bitfield will have + an offset so large as to be unrepresentable in BTF. We expect that the + resulting BTF will describe the rest of the structure, ignoring the + non-representable bitfield. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* Struct with 3 members and no bitfield (kind_flag not set). */ +/* { dg-final { scan-assembler-times "\[\t \]0x4000003\[\t \]+\[^\n\]*btt_info" 1 } } */ + +struct bigly +{ + int a; + int b[((0xffffff + 1) / (8 * sizeof (int)))]; + unsigned unsup : 7; + char c; +} big; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c new file mode 100644 index 0000000..79e9f52 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c @@ -0,0 +1,52 @@ +/* Test BTF generation of BTF_KIND_{CONST,VOLATILE,RESTRICT} records. + + BTF const, volatile and restrict records are nameless type records pointing + to the type they modify. + + Types: + [1] int 'int' size=4U offset=0 bits=32 SIGNED + [2] const type=1 + [3] volatile type=1 + [4] const type=3 + [5] ptr type=1 + [6] restrict type=5 + [7] ptr type=2 + [8] restrict type=7 + + Note: + - Type id 3 describes a volatile int. + - Type id 2 describes a const int. + - Type id 4 describes a const volatile int by modifying id 3. + - Type id 6 describes a restrict pointer to int. + - Type id 8 describes a restrict pointer to const int. + */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "ascii \"int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ + +/* types 5 and 7 are pointers, to 'int' and 'const int' respectively. */ +/* { dg-final { scan-assembler-times "\[\t \]0x2000000\[\t \]+\[^\n\]*btt_info" 2 } } */ + +/* type 3 has VOLATILE qualifier */ +/* { dg-final { scan-assembler-times "\[\t \]0x9000000\[\t \]+\[^\n\]*btt_info" 1 } } */ + +/* types 2 and 4 have CONST qualifier. */ +/* { dg-final { scan-assembler-times "\[\t \]0xa000000\[\t \]+\[^\n\]*btt_info" 2 } } */ + +/* types 6 and 8 have RESTRICT qualifier. */ +/* { dg-final { scan-assembler-times "\[\t \]0xb000000\[\t \]+\[^\n\]*btt_info" 2 } } */ + +const int a = 10; + +volatile int b; + +int * restrict c; + +const volatile int d = 20; + +const int * restrict e; + +const int * f; +int const * g; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c new file mode 100644 index 0000000..88ae4c4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c @@ -0,0 +1,45 @@ +/* BTF generation of BTF_KIND_DATASEC records. + + We expect 3 DATASEC records: one for each of .data, .rodata and .bss. + .rodata: the consts; c,e,my_cstruct + .bss: a,b,bigarr + .data: d + + The type IDs of the variables placed in each section are not deterministic + so we cannot check them. + */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* Check for two DATASEC entries with vlen 3, and one with vlen 1. */ +/* { dg-final { scan-assembler-times "0xf000003\[\t \]+\[^\n\]*btt_info" 2 } } */ +/* { dg-final { scan-assembler-times "0xf000001\[\t \]+\[^\n\]*btt_info" 1 } } */ + +/* The offset entry for each variable in a DATSEC should be 0 at compile time. */ +/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 7 } } */ + +/* Check that strings for each DATASEC have been added to the BTF string table. */ +/* { dg-final { scan-assembler-times "ascii \".data.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \".rodata.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \".bss.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ + +int a; +long long b; +const long unsigned int c; + +int d = 137; + +const int e = -55; + +int bigarr[20][10]; + +struct c_struct { + long x; + char c; +}; + +const struct c_struct my_cstruct = { + 99, + '?' +}; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c new file mode 100644 index 0000000..728493b --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c @@ -0,0 +1,30 @@ +/* Test BTF generation for enums. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x6000004\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x6000003\[\t \]+\[^\n\]*btt_info" 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 } } */ +/* { dg-final { scan-assembler-times "ascii \"QUD.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"YES.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"NO.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"IDUNNO.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "bte_value" 7 } } */ + +enum foo +{ + QAD, + QED, + QOD, + QUD, +} a; + +enum barsigned +{ + YES=1000, + NO=-1000, + IDUNNO=0, +} b; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-forward-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-forward-1.c new file mode 100644 index 0000000..c894fa2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-forward-1.c @@ -0,0 +1,24 @@ +/* Test BTF generation of forwards. + + Check that the KIND_FLAG (bit 31) of btt_info is set (1) for the forward to + union, and not set (0) for forward to struct. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x87000000\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x7000000\[\t \]+\[^\n\]*btt_info" 1 } } */ + +typedef struct _fwd_st +{ + struct unk_struct_type *data[4]; +} fwd_st_t; + +fwd_st_t struct_container; + +typedef struct _fwd_un +{ + union unk_union_type *options[4]; +} fwd_un_t; + +fwd_un_t union_container; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-function-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-function-1.c new file mode 100644 index 0000000..9fa1498 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-function-1.c @@ -0,0 +1,18 @@ +/* Test BTF generation for functions. + + We expect to see one BTF_KIND_FUNC_PROTO with 2 named arguments. + The parameter names should appear in the auxilliary string table. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0xd000002\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* { dg-final { scan-assembler-times "farg_name" 2 } } */ +/* { dg-final { scan-assembler-times "farg_type" 2 } } */ +/* { dg-final { scan-assembler-times "ascii \"alpha.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"bravo.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ + +int funfoo (int alpha, long bravo) +{ + return 0; +} diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-function-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-function-2.c new file mode 100644 index 0000000..3c7fda9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-function-2.c @@ -0,0 +1,18 @@ +/* Test BTF generation for functions with varargs. + + We expect one BTF_KIND_FUNC_PROTO with two arguments. The second argument + should have "farg_name" and "farg_type" both of 0, representing varargs. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0xd000002\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* { dg-final { scan-assembler-times "farg_name" 2 } } */ +/* { dg-final { scan-assembler-times "farg_type" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*farg_name" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*farg_type" 1 } } */ + +int fmt (const char * format, ...) +{ + return 0; +} diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c b/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c new file mode 100644 index 0000000..35f96a2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c @@ -0,0 +1,22 @@ +/* Test BTF generation for a function with an unrepresentable parameter. + + BTF has no encoding for floating point 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 + has type_id=0. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0xd000003\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* { dg-final { scan-assembler-times "farg_name" 3 } } */ +/* { dg-final { scan-assembler-times "farg_type" 3 } } */ + +/* 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) +{ + return 0; +} diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-int-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-int-1.c new file mode 100644 index 0000000..2381dec --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-int-1.c @@ -0,0 +1,44 @@ +/* Tests for BTF integer base types. + + 0 f ff 00 ff + | 0 | encoding | offset | 00 | bits | + encoding: + signed 1 << 24 + char 2 << 24 + + All offsets in this test should be 0. + This test does _not_ check number of bits, as it may vary between targets. + */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* Check for 8 BTF_KIND_INT types. */ +/* { dg-final { scan-assembler-times "\[\t \]0x1000000\[\t \]+\[^\n\]*btt_info" 8 } } */ + +/* Check the signed/char flags, but not bit size. */ +/* { dg-final { scan-assembler-times "\[\t \]0x10000..\[\t \]+\[^\n\]*bti_encoding" 3 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x20000..\[\t \]+\[^\n\]*bti_encoding" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x30000..\[\t \]+\[^\n\]*bti_encoding" 1 } } */ + +/* Check that there is a string entry for each type name. */ +/* { dg-final { scan-assembler-times "ascii \"unsigned char.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"signed char.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"short unsigned int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"short int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"unsigned int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"long unsigned int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"long int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ + +unsigned char a = 11; +signed char b = -22; + +unsigned short c = 33; +signed short d = 44; + +unsigned int e = 55; +signed int f = -66; + +unsigned long int g = 77; +signed long int h = 88; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c new file mode 100644 index 0000000..a14ac0f --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c @@ -0,0 +1,25 @@ +/* Test BTF generation for pointer types. + + Two pointer types are expected: + - int * + - struct st * + */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x2000000\[\t \]+\[^\n\]*btt_info" 2 } } */ +/* { 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 } } */ + +int foo = 10; +int *pfoo = &foo; + +struct st +{ + int a; + int *pb; + struct st * next; +}; + +struct st * bar; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-pointers-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-pointers-2.c new file mode 100644 index 0000000..c77b224 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-pointers-2.c @@ -0,0 +1,13 @@ +/* Test BTF generation for pointers to void. + + In this test, we expect that the pointer references type ID 0, the reserved + void typeid, and that no intermediate type is generated for void. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x2000000\[\t \]+\[^\n\]*btt_info" 1 } } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x1000000\[\t \]+\[^\n\]*btt_info" 0 } } */ + +void *ptr; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c new file mode 100644 index 0000000..bc32814 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c @@ -0,0 +1,22 @@ +/* Test BTF generation of struct type. + + Two BTF_KIND_STRUCT records are expected. + - struct foo with 3 members + - struct data with 2 members */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { 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 } } */ + +struct foo +{ + int after; + int before; + struct { + unsigned short n_valid; + int set[10]; + } data; +} my_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 new file mode 100644 index 0000000..24514fc --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c @@ -0,0 +1,19 @@ +/* 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 + generating BTF for a struct (or union) type, members which refer to + unsupported types should be skipped. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* Expect a struct with only 2 members - 'f' should not be present. */ +/* { dg-final { scan-assembler-times "\[\t \]0x4000002\[\t \]+\[^\n\]*btt_info" 1 } } */ + +struct with_float +{ + int a; + float f; + char c; +} instance; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c new file mode 100644 index 0000000..472cc63 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c @@ -0,0 +1,82 @@ +/* Test BTF generation for BTF_KIND_TYPEDEF records. + + 7 typedef records are expected. We expect the following types (among others): + [1] int 'int' size=4 offset=0 bits=32 SIGNED + [2] typedef 'my_int' type=1 + [3] typedef 'foo_int' type=1 + [4] typedef 'bar_int' type=1 + .. + [6] typedef 'CBAR' type=5 + .. + [8] typedef 'CBARP' type=7 + [9] struct '_node' size=16 + .. + [11] typedef 'node_t' type=9 + [12] struct '_arena' + .. + [15] typedef 'arena_t' type=12 + [16] var 'a' type=2 linkage=1 (global) + [17] var 'suitcase' type=15 linkage=1 (global) + [18] var 'b' type=3 linkage=1 (global) + [19] var 'c' type=4 linkage=1 (global) + [20] var 'd' type=11 linkage=1 (global) + [21] var 'destination' type=6 linkage=1 (global) + [22] var 'ticket' type=8 linkage=1 (global) + + Note that the order of the variables is not guaranteed, so we do not check + particular variables have exactly the right typedef. Instead, we check: + 1. 7 typedef records are generated, along with the correct strings for them. + 2. There is one variable pointing to each typedef. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x8000000\[\t \]+\[^\n\]*btt_info" 7 } } */ + +/* { dg-final { scan-assembler-times "ascii \"my_int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"foo_int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"bar_int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"CBAR.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"CBARP.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ +/* { 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 } } */ + +typedef int my_int; +typedef int foo_int; +typedef int bar_int; + +typedef const bar_int CBAR; +typedef const bar_int * CBARP; + +typedef struct _node +{ + foo_int name_off; + bar_int info; + struct _node * next; +} node_t; + + +typedef struct _arena +{ + node_t nodes[16]; + my_int vardata; + bar_int flags; +} arena_t; + +my_int a; +foo_int b; +bar_int c; +node_t d; + +CBAR destination; +CBARP ticket = &destination; + +arena_t suitcase; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c new file mode 100644 index 0000000..d668437 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c @@ -0,0 +1,16 @@ +/* Test BTF generation for union type. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* 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 } } */ + +union onion +{ + int redness; + char *name; + unsigned short freshness; + unsigned short flavor; +} my_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 new file mode 100644 index 0000000..a79ed1d --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-1.c @@ -0,0 +1,33 @@ +/* BTF generation for variables. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* We expect 6 variables */ +/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 6 } } */ + +unsigned int x1; + +struct st +{ + int a; + int b; +}; + +union { + long int value; + struct st * pointer; +} bar; + +enum +{ + FOO = 0, + BAR = 2, + BAZ, +} lala; + +int arr[10][20]; + +unsigned long * plong; + +struct st st_inst; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c new file mode 100644 index 0000000..0f9742e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c @@ -0,0 +1,27 @@ +/* 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 + variable 'bar' is not emitted, as it references a type that is not supported + in BTF. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* We expect only 3 variables. */ +/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 3 } } */ + +/* { 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 } } */ + +int foo; +float bar; +int baz[10]; + +struct st +{ + int a; + int b : 6; + int c : 2; +} myst; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-3.c b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-3.c new file mode 100644 index 0000000..8cae221 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-3.c @@ -0,0 +1,36 @@ +/* Test BTF generation for static versus global variables. + + BTF_KIND_VAR types represeting variables are followed by a 32-bit + "linkage", which can take one of currently two valid values: + 0 = static + 1 = global + + In this test, make a few static and a few global variables, and ensure + they are noted with the correct "linkage" values. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gbtf -dA" } */ + +/* Expect 6 variables. */ +/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 6 } } */ + +/* 3 global, 3 static. */ +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*btv_linkage" 3 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*btv_linkage" 3 } } */ + +int a; + +static long b; + +struct foo { + int x; + int y; +}; + +struct foo g_foo; + +static struct foo s_foo; + +static unsigned int s_arr [10][5]; + +unsigned int g_arr [20]; diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf.exp b/gcc/testsuite/gcc.dg/debug/btf/btf.exp new file mode 100644 index 0000000..e72a2be --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/btf/btf.exp @@ -0,0 +1,41 @@ +# Copyright (C) 2002-2019 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# GCC testsuite that uses the `dg.exp' driver. + +# Load support procs. +load_lib gcc-dg.exp + +# Disable on ptx (in sync with DWARF testsuite) +if { [istarget nvptx-*-*] } { + return +} + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS " -ansi -pedantic-errors" +} + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\] ]] \ + "" $DEFAULT_CFLAGS + +# All done. +dg-finish diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-1.c new file mode 100644 index 0000000..6f637df --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-1.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-gctf" } */ + +void func(void) +{ +} diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-2.c new file mode 100644 index 0000000..ccbb109 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-2.c @@ -0,0 +1,10 @@ +/* A LEVEL of 0 with -gctf turns off CTF debug info generation. */ + +/* { dg-do compile } */ +/* { dg-options "-gctf0 -dA" } */ + +/* { dg-final { scan-assembler-times "0xdff2.*CTF preamble magic number" 0} } */ +/* { dg-final { scan-assembler-times "0x4.*CTF preamble version" 0 } } */ +/* { dg-final { scan-assembler-times "0.*CTF preamble flags" 0 } } */ + +const char * _CONTEXT_NAME = "foobar"; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-struct-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-struct-1.c new file mode 100644 index 0000000..93547d4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-struct-1.c @@ -0,0 +1,23 @@ +/* Test compilation and CTF generation of anonymous structs. An anonymous + struct type is encoded as no-name CTF struct type. + + For this testcase, a single CTF anonymous struct is expected. + struct {} : ctt_name = 0 (point to offset 0 in the CTF string table to + denote empty string) + + Two CTF struct records should be generated in total. + struct a : ctt_info = 0x1a000002 (2 fields) + struct {} : ctt_info = 0x1a000001 (1 field) */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*ctt_name" 1 } } */ +/* { dg-final { scan-assembler-times "0x1a000002\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "0x1a000001\[\t \]+\[^\n\]*ctt_info" 1 } } */ + +struct a +{ + struct { int b1; } a1; + int a2; +} my_a; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-union-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-union-1.c new file mode 100644 index 0000000..f45af9b --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-union-1.c @@ -0,0 +1,26 @@ +/* Test compilation and CTF generation of anonymous union. An anonymous union + is encoded as no-name CTF union type. + + For this testcase, a single CTF anonymous union is expected. + struct {} : ctt_name = 0 (point to offset 0 in the CTF string table to + denote empty string) + + Two CTF struct records should be generated in total. + struct anon_union : ctt_info = 0x1a000001 (1 field) + union {} : ctt_info = 0x1e000002 (2 fields) */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*ctt_name" 1 } } */ +/* { dg-final { scan-assembler-times "0x1a000001\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "0x1e000002\[\t \]+\[^\n\]*ctt_info" 1 } } */ + +struct anon_union +{ + union + { + char name; + int value; + }; +} my_anon_u; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-1.c new file mode 100644 index 0000000..006a758 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-1.c @@ -0,0 +1,31 @@ +/* CTF generation for array type. + + Unsized arrays are encoded with a 0 for the number of elements. + + In this testcase, 5 distinct CTF records for arrays are expected + b1 : cta_nelems = 2 + c1 : cta_nelems = 3 + a1 : cta_nelems = 2, 5 + buf : cta_nelems = 0. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "0x12000000\[\t \]+\[^\n\]*ctt_info" 5 } } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*cta_nelems" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x3\[\t \]+\[^\n\]*cta_nelems" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x5\[\t \]+\[^\n\]*cta_nelems" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*cta_nelems" 1 } } */ + +int b1[2] = {0,1}; +int c1[5] = {0,1,2,3,4}; +int a1[2][3] = { {3,4,5}, {2,3,4} }; + +/* Variable length struct using arrays. */ +struct my_array +{ + int flags; + int length; + int buf[]; +} my_array_obj; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-2.c new file mode 100644 index 0000000..2a19da0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-2.c @@ -0,0 +1,38 @@ +/* CTF generation for unsized arrays. + + Unsized arrays are encoded with a 0 for the number of elements. The type + of array index is the INT type. + + TBD_CTF_FORMAT_OPEN_ISSUES (1) - + This testcase makes a note of the case of a probable misrepresentation. + See Note 1 and Note 2 below. + + In the CTF section, these types are encoded as : + + Variables: + _CTF_NEWSTR -> 7: const char [0] (size 0x0) + _CTF_SECTION -> 6: const char [5] (size 0x5) + b1 -> 2: int [0] (size 0x0) + b2 -> 3: int [0] (size 0x0) + + Note 1 : There is misrepresentation in that b1 and b2 are specified + differently by the user. + Note 2 : It is arguable though whether the representation for + _CTF_NEWSTR is incorrect. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "0x12000000\[\t \]+\[^\n\]*ctt_info" 5 } } */ + +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*cta_nelems" 3 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x5\[\t \]+\[^\n\]*cta_nelems" 1 } } */ + +static int b1[] = {}; + +int b2[0]; + +const char _CTF_SECTION[] = ".ctf"; + +extern const char _CTF_NEWSTR[]; +const char _CTF_NEWSTR[] = "ctfinfo"; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-3.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-3.c new file mode 100644 index 0000000..8def208 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-3.c @@ -0,0 +1,17 @@ +/* CTF generation for variable length arrays. + + In this testcase, a specific flavor of vla appears in the function + signature. + + TBD_CTF_FORMAT_OPEN_ISSUES (1) - + This testcase makes a note of another case of a probable misrepresentation. + See ctf-array-2.c for some context on how vla's are a case of a probable + misrepresentation in CTF. Nevertheless, compilation should not fail. */ + +/* { dg-do compile } */ +/* { dg-options "-gctf" } */ + +int foo (int a, int b[a][a]) +{ + return b[a-1][a-3]; +} diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-4.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-4.c new file mode 100644 index 0000000..013a8ff --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-array-4.c @@ -0,0 +1,13 @@ +/* CTF generation for array type. + + Test CTF generation for single element arrays. In this testcase, one CTF + record for array is expected with cta_nelems = 1. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "0x12000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*cta_nelems" 1 } } */ + +int b[1]; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-mode-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-mode-1.c new file mode 100644 index 0000000..fc3af03 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-mode-1.c @@ -0,0 +1,22 @@ +/* Test CTF generation works well with ((mode)) attribute. + + In this testcase, CTF should report type of bqi to be an enum and + not an int. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ascii \"B1.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"B2.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"B3.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "cte_value" 3} } */ + +/* There are no better/direct methods to assert that the CTF for typedef of + enum has been added. */ +/* { dg-final { scan-assembler-times "\[\t \]0x22000003\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x2a000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x3\[\t \]+\[^\n\]*ctv_typeidx" 1} } */ + +typedef enum { B1 = 1, B2 = 2, B3 = 3 } B; +B __attribute__ ((mode (QI))) bqi; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-used-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-used-1.c new file mode 100644 index 0000000..61f6b64 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-used-1.c @@ -0,0 +1,22 @@ +/* Test CTF generation works well with ((used)) function attribute. + + This attribute, attached to a function, means that code must be emitted for + the function even if it appears that the function is not referenced. */ + +/* { dg-do compile ) */ +/* { dg-options "-O2 -gctf -dA" } */ + +/* These should be true for higher optimization levels. */ +/* { dg-final { scan-assembler-times "ascii \"keep_this.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"lose_this.0\"\[\t \]+\[^\n\]*ctf_string" 0 } } */ + +static int lose_this(int a) +{ + return a + 2; +} + +__attribute__((used)) +static int keep_this(double a) +{ + return a * 2; +} diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-1.c new file mode 100644 index 0000000..1deac90 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-1.c @@ -0,0 +1,30 @@ +/* CTF generation for bitfields. + + In this testcase, two slices are expected - one for enum and the other for + int. CTF slices are unnamed records. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*cts_bits" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x3\[\t \]+\[^\n\]*cts_bits" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*ctt_name" 2 } } */ + +enum color +{ + RED, + GREEN, + BLUE, + YELLOW, + ORANGE, + BLACK +}; + +struct quickcolor +{ + enum color col:3; + int brushid:2; + int strokes; +}; + +struct quickcolor qc; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-2.c new file mode 100644 index 0000000..aea0921 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-2.c @@ -0,0 +1,39 @@ +/* The bitfield type (int) may be shared, but slices are not de-duplicated. + + In this testcase, it is expected to see a total of 6 CTF slices and 2 CTF + integer types for the bitfields - unsigned long long and signed long long. + + cts_offset is the offset of the bitfield into a machine word. + TBD - hardcoding cts_offset checks into the testcase will cause it to break + across targets with different BIT_PER_WORD. Is there a way to add + cts_offset related checks in the testcase? */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x6\[\t \]+\[^\n\]*cts_type" 3 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*cts_type" 3 } } */ + +/* { dg-final { scan-assembler-times "\[\t \]0xf\[\t \]+\[^\n\]*cts_bits" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x21\[\t \]+\[^\n\]*cts_bits" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x10\[\t \]+\[^\n\]*cts_bits" 2 } } */ + +/* { dg-final { scan-assembler-times "ascii \"long long unsigned int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"long long int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +struct fields +{ + unsigned long long u1 : 15; + unsigned long long u2 : 33; + unsigned long long u3 : 16; + signed long long s1 : 15; + signed long long s2 : 33; + signed long long s3 : 16; +} flags; + +int i = 33; + +int main () +{ + return flags.u1 + i; +} diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c new file mode 100644 index 0000000..8fbcf12 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c @@ -0,0 +1,16 @@ +/* The bool bitfield type. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*cts_type" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*cts_bits" 2 } } */ + +/* { dg-final { scan-assembler-times "ascii \"_Bool.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +#include + +struct open_file { + bool mmapped:1; + bool released:1; +} of; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-4.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-4.c new file mode 100644 index 0000000..012069a --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-4.c @@ -0,0 +1,19 @@ +/* The zero sized bitfield. + + In this testcase, two slices are expected. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*cts_type" 2 } } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x5\[\t \]+\[^\n\]*cts_bits" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0xa\[\t \]+\[^\n\]*cts_bits" 1 } } */ + +/* { dg-final { scan-assembler-times "ctm_name" 2 } } */ +struct foo +{ + int a:5; + unsigned:0; + int b:10; +} foome; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-complex-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-complex-1.c new file mode 100644 index 0000000..a36dd9b --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-complex-1.c @@ -0,0 +1,21 @@ +/* Tests for CTF complex base types. + + CTF does not have representation for complex integer types. + + This testcase has a mix of C constructs containing COMPLEX_TYPE. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-require-effective-target libc_has_complex_functions } */ + +/* { dg-final { scan-assembler-times "ascii \"complex double.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"complex long double.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"complex float.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +#include + +double complex z1 = I * I; + +const long double complex z2 = I * I; + +float complex z4 = 1+2.11*I; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-1.c new file mode 100644 index 0000000..9368d47 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-1.c @@ -0,0 +1,65 @@ +/* Test compilation of stubs with various qualifiers - const, restrict and + volatile. + + Testcase includes a std header to allow testing of shared types across + files. Only one CTF record for int is expected. + + CTF records for CVR qualifiers are no-name records. In this testcase, there + are 5 qualifiers across constructs. 2 more no-name CTF records correspond to + CTF pointer records. + + TYPEID: name string (size) -> ref TYPEID : ref name string (size) -> ... + + Types: + 1: long int (size 0x8) + 2: long unsigned int (size 0x8) + 3: size_t (size 0x8) -> 2: long unsigned int (size 0x8) + 4: int (size 0x4) + 5: const int (size 0x4) -> 4: int (size 0x4) + 6: volatile const int (size 0x4) -> 5: const int (size 0x4) -> 4: int (size 0x4) + 7: long long int (size 0x8) + 8: long double (size 0x10) + 9: int * (size 0x8) -> 4: int (size 0x4) + a: int *restrict (size 0x8) -> 9: int * (size 0x8) -> 4: int (size 0x4) + b: const int * (size 0x8) -> 5: const int (size 0x4) -> 4: int (size 0x4) + c: const int *restrict (size 0x8) -> b: const int * (size 0x8) -> 5: const int (size 0x4) -> 4: int (size 0x4) + d: INTP (size 0x8) -> 9: int * (size 0x8) -> 4: int (size 0x4) + e: const INTP (size 0x8) -> d: INTP (size 0x8) -> 9: int * (size 0x8) -> 4: int (size 0x4) + f: void (size 0x0) + 10: void (*) (size_t, int *restrict, const int *restrict) (size 0x0) + */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ascii \"int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*ctt_name" 7 } } */ + +/* type id 9, b have POINTER type. */ +/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*ctt_info" 2 } } */ + +/* type id 5, e have CONST qualifier. */ +/* { dg-final { scan-assembler-times "\[\t \]0x32000000\[\t \]+\[^\n\]*ctt_info" 2 } } */ + +/* type id a, c have RESTRICT qualifier. */ +/* { dg-final { scan-assembler-times "\[\t \]0x36000000\[\t \]+\[^\n\]*ctt_info" 2 } } */ + +/* type id 6 has VOLATILE qualifier. */ +/* { dg-final { scan-assembler-times "\[\t \]0x2e000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ + +#include "stddef.h" + +const volatile int a = 5; +int *restrict b; + +const int * i; +int const * j; + +typedef int * INTP; +const INTP int_p; + +void foo (size_t n, int *restrict p, const int *restrict q) +{ + while (n-- > 0) + *p++ = *q++; +} diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-2.c new file mode 100644 index 0000000..4f328f3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-2.c @@ -0,0 +1,30 @@ +/* Test compilation of stubs with various expressions involving const + qualifier. + + In this testcase, a single CTF record for const int is expected. A total of + two const qualifier CTF records are expected (const int and const struct + s1). */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ascii \"int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x32000000\[\t \]+\[^\n\]*ctt_info" 2 } } */ + +struct mystruct +{ + struct + { + int a; + const int b; + } s1; + char * name; +} my_a; + +struct s1 +{ + int i; + const int ci; +} s; + +const struct s1 cs; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-3.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-3.c new file mode 100644 index 0000000..97317a4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-3.c @@ -0,0 +1,25 @@ +/* Test compilation of stubs with various expressions involving const and + volatile qualifiers. + + In this testcase, it is expected to have const and volatile CTF + records. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ascii \"unsigned char.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x2e000000\[\t \]+\[^\n\]*ctt_info" 5 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x32000000\[\t \]+\[^\n\]*ctt_info" 3 } } */ +/* Two arrays. */ +/* { dg-final { scan-assembler-times "\[\t \]0x12000000\[\t \]+\[^\n\]*ctt_info" 2 } } */ + + +const volatile unsigned char vicar = 11; + +const volatile unsigned char * vicarage = &vicar; + +volatile float vilify[2]; + +const volatile char victor = 'Y'; + +const volatile char vindictive[2]; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-4.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-4.c new file mode 100644 index 0000000..c1633ee --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-4.c @@ -0,0 +1,23 @@ +/* Test compilation of stubs with various qualifiers - const, restrict and + volatile. + + CTF records for CVR qualifiers are no-name records. In this testcase, there + is 1 const qualifier. 1 more no-name CTF record corresponds to the CTF + pointer record. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*ctt_name" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x32000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ + +typedef const struct howto_struct howto_type; + +typedef struct entry +{ + int addend; + howto_type *howto; +} how_ent; + +how_ent hent; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-1.c new file mode 100644 index 0000000..1ad5f25 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-1.c @@ -0,0 +1,7 @@ +/* Verify that CTF debug info can co-exist with dwarf. */ +/* { dg-do compile } */ +/* { dg-options "-gctf -gdwarf -dA" } */ +/* { dg-final { scan-assembler "0xdff2.*CTF preamble magic number" } } */ + +void func (void) +{ } diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-2.c new file mode 100644 index 0000000..df2c1eb --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-2.c @@ -0,0 +1,7 @@ +/* Verify that CTF debug info can co-exist with dwarf. */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -gctf -dA" } */ +/* { dg-final { scan-assembler "0xdff2.*CTF preamble magic number" } } */ + +void func (void) +{ } diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-1.c new file mode 100644 index 0000000..9693544 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-1.c @@ -0,0 +1,21 @@ +/* CTF generation for enums. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ascii \"RED.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"GREEN.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"BLUE.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"YELLOW.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "cte_value" 4} } */ + + +enum foo_color +{ + RED, + GREEN, + BLUE, + YELLOW +}; + +enum foo_color my_color; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-2.c new file mode 100644 index 0000000..fd8aaec --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-2.c @@ -0,0 +1,27 @@ +/* CTF generation for enums. + + CTF represents enum values with an int32_t. For enum values not + representable with int32_t data type, the compiler skips adding CTF for + them. This will be fixed soon in the CTF format. + TBD_CTF_REPRESENTATION_LIMIT. + + In this testcase, CTF for enumerator GFS_MONOTONIC will not be generated. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ascii \"GFS_MONOTONIC.0\"\[\t \]+\[^\n\]*ctf_string" 0 } } */ +/* { dg-final { scan-assembler-times "ascii \"GFS_RUNTIME.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"GFS_STATIC.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "cte_value" 2} } */ + + +enum gomp_schedule_type +{ + GFS_RUNTIME, + GFS_STATIC, + GFS_MONOTONIC = 0x80000000U +}; + +enum gomp_schedule_type gsch_type; + diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-file-scope-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-file-scope-1.c new file mode 100644 index 0000000..a683113 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-file-scope-1.c @@ -0,0 +1,25 @@ +/* CTF is not generated for entities not at file-scope. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ascii \"SFOO.0\"\[\t \]+\[^\n\]*ctf_string" 0 } } */ +/* { dg-final { scan-assembler-times "ascii \"gfoo.0\"\[\t \]+\[^\n\]*ctf_string" 0 } } */ +/* { dg-final { scan-assembler-times "ascii \"foo.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +int foo (int n) +{ + typedef struct { int a[n]; } SFOO; + + SFOO a; + __attribute__ ((noinline)) SFOO gfoo (void) { return a; } + + a.a[0] = 1; + a.a[9] = 2; + + SFOO b; + b = gfoo (); + + return b.a[0] == 1 && b.a[9] == 2; +} + diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-float-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-float-1.c new file mode 100644 index 0000000..9e24b45 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-float-1.c @@ -0,0 +1,16 @@ +/* Tests for CTF float base types. + - Verify that there is a single record for the base types. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-final { scan-assembler-times "ascii \"float.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"double.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"long double.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +float a; +float b = 33; + +double c = 44; +double d = 45; + +long double e; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-1.c new file mode 100644 index 0000000..fdec743 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-1.c @@ -0,0 +1,40 @@ +/* CTF forward type is generated for forward declarations of types in C. + + Check that the ctf-kind of CTF_K_FOWARD type is CTF_K_STRUCT or CTF_K_UNION. + For forward types, the compiler encodes the CTF kind in the ctt_type field. + CTF_K_FORWARD is used as the CTF type as usual in the ctt_info. */ + +/* Note - A value of 6 in "ctt_size or ctt_type" appears twice in this + testcase. This might be misconstrued as 2 CTK_K_FORWARD records of struct + type. The second assembler tag is due to a ref type in a CVR CTF record. + TBD - perhaps a more robust string pattern is needed. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x26000000\[\t \]+\[^\n\]*ctt_info" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x6\[\t \]+\[^\n\]*ctt_size or ctt_type" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x7\[\t \]+\[^\n\]*ctt_size or ctt_type" 2 } } */ + +typedef struct __locale_struct +{ + struct __locale_data *__locales[13]; /* forward struct type. */ + + const int *__ctype_toupper; + const char *__names[13]; +} *__locale_t; + +typedef __locale_t locale_t; + +locale_t loc; + +typedef struct __inter_struct +{ + union __inter_data * __inters[13]; /* forward union type. */ + + const int * __ctype_kind; +} * __inter_t; + +typedef __inter_t inter_t; + +inter_t inter; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-2.c new file mode 100644 index 0000000..a3154f2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-2.c @@ -0,0 +1,16 @@ +/* CTF forward type is generated for forward declarations of enum types in C. + + Check that the ctf-kind of CTF_K_FOWARD type is CTF_K_ENUM. + For forward types, the compiler encodes the CTF kind in the ctt_type field. + CTF_K_FORWARD is used as the CTF type as usual in the ctt_info. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x26000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x8\[\t \]+\[^\n\]*ctt_size or ctt_type" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"vibgyor.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +enum vibgyor; + +char * (*get_color_name) (enum vibgyor); diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-func-index-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-func-index-1.c new file mode 100644 index 0000000..86ca795 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-func-index-1.c @@ -0,0 +1,25 @@ +/* CTF function index sub-section. + + A function index sub-section in the CTF section contains the offset to the + string name of the global function symbols. The number of entries in the + func info section and the func index section are always the same. + + In this testcase, 2 records in the function index section are expected. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "funcinfo_name" 2 } } */ +/* { dg-final { scan-assembler-times "funcinfo_func_type" 2 } } */ +/* { dg-final { scan-assembler-times "ascii \"bar.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"foo.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +int foo (void) +{ + return 0; +} + +int bar (int a) +{ + return 33 + a; +} diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-1.c new file mode 100644 index 0000000..cc1a600a --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-1.c @@ -0,0 +1,24 @@ +/* CTF generation of function pointers. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-final { scan-assembler-times "\[\t \]0x16000001\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x16000002\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x16000003\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"__foo_fn.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"destroy.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"func.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +int (*func) (int *, char); + +typedef int (*__foo_fn) (void *__cookie, char *__buf, int __nbytes); + +typedef struct object +{ + int myint; + char mychar; + void (*destroy)(struct object *); +} object_t; + +object_t myobj; +__foo_fn fooit; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-2.c new file mode 100644 index 0000000..a4a1104 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-2.c @@ -0,0 +1,22 @@ +/* CTF generation of function pointers. + + In this testcase, there is a single function type expected for two + different function pointer types. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-final { scan-assembler-times "\[\t \]0x16000001\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"rcu_callback_t.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"func.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +struct callback_head { + struct callback_head *next; + void (*func) (struct callback_head *head); +} __attribute__ (( aligned (sizeof (void *)))); +#define rcu_head callback_head + +struct callback_head chead; + +typedef void (*rcu_callback_t) (struct rcu_head *head); + +rcu_callback_t rcb; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-3.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-3.c new file mode 100644 index 0000000..fe35d6c --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-3.c @@ -0,0 +1,21 @@ +/* CTF generation of function pointers. + + In this testcase, there is a single function type expected. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-final { scan-assembler-times "\[\t \]0x16000001\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"foo_init_callback.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"fn.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +struct foo; + +typedef void (* foo_init_callback) (struct foo *f1); + +struct foo +{ + /* Function to call to initialize. */ + foo_init_callback fn; +}; + +struct foo f; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-4.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-4.c new file mode 100644 index 0000000..b8a7417 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-4.c @@ -0,0 +1,18 @@ +/* CTF generation of function pointers. + + In this testcase, Type de-duplication of function type is exercised. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-final { scan-assembler-times "\[\t \]0x16000001\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"var_assign_func_t.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +struct variable; + +typedef struct variable *var_assign_func_t (struct variable *); + +typedef struct variable { + var_assign_func_t *assign_func; +} shell_var_t; + +shell_var_t a; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-functions-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-functions-1.c new file mode 100644 index 0000000..0b086a5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-functions-1.c @@ -0,0 +1,34 @@ +/* CTF generation for functions with varargs or otherwise. + + In this testcase, it is expected to see one CTF_K_FUNCTION record with two + function arguments. The second function argument with a value of 0 + corresponds to the ellipsis. + + Example CTF section excerpt on x86_64 : + + .long 0x5 # ctt_name (name = format) + .long 0x16000002 # ctt_info (CTF_K_FUNCTION with 2 arguments) + .long 0x2 # ctt_size or ctt_type (return typeID) + .long 0x2 # dtu_argv (TypeID of the First argument) + .long 0 # dtu_argv (TypeID of the second argument) + .ascii "\0" # ctf_string + .ascii "int\0" # ctf_string + .ascii "format\0" # ctf_string + + */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x16000002\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "dtu_argv" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*dtu_argv" 1 } } */ + +int foo (void); + +int bar (int); + +int * format (int * fmt, ...) +{ + return fmt; +} diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-int-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-int-1.c new file mode 100644 index 0000000..8c68b2e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-int-1.c @@ -0,0 +1,17 @@ +/* Tests for CTF integer base types. + - Verify that there is a single record for the base types. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-final { scan-assembler-times "ascii \"int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"short int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"long int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +int a; +int b = 33; + +short int c = 44; +short int d = 45; + +long int e = 90; +long int f; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-objt-index-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-objt-index-1.c new file mode 100644 index 0000000..ee3481a --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-objt-index-1.c @@ -0,0 +1,30 @@ +/* CTF objext index sub-section. + + An object index sub-section in the CTF section contains the offset to the + string name of the global object symbols. The number of entries in the + obj info section and objt index section are always the same. + + In this testcase, 4 records in the object index section are expected. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "objtinfo_name" 4 } } */ +/* { dg-final { scan-assembler-times "objtinfo_var_type" 4 } } */ +/* { dg-final { scan-assembler-times "ascii \"a.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"b.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"a1.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"d_instance.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +static int b = 33; + +int a = 44; +int a1[2] = {22, 33}; + +struct d +{ + int d1; + int d2; +}; + +struct d d_instance; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-1.c new file mode 100644 index 0000000..e1fccec --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-1.c @@ -0,0 +1,26 @@ +/* CTF generation for pointer types. + + In this testcase, two CTF pointer type records are expected + - int * + - struct foo_struct * + */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ascii \"foo_struct.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*ctt_info" 2 } } */ + +int b = 44; +int * a = &b; + +struct foo_struct +{ + int bar_mem_1; + int bar_mem_2; + float d; + struct foo_struct *next; +}; + +struct foo_struct * node; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-2.c new file mode 100644 index 0000000..e36e5ec --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-2.c @@ -0,0 +1,25 @@ +/* CTF generation for pointer types. + + In this testcase, de-duplication of pointer types is exercised. The + compostition of structs in this testcase is such that when adding CTF for + pointer type (link), the pointed-to-type type already adds the pointer to + struct link. + + In this testcase, one CTF pointer type record is expected. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ + +struct link; + +typedef struct items { + struct link * link; + int str; +} itemslist; + +itemslist il; + +struct link { struct link * next; }; + diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-preamble-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-preamble-1.c new file mode 100644 index 0000000..28547fa --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-preamble-1.c @@ -0,0 +1,11 @@ +/* Verify the CTF preamble in the CTF section. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-final { scan-assembler "0xdff2.*CTF preamble magic number" } } */ +/* { dg-final { scan-assembler "0x4.*CTF preamble version" } } */ +/* { dg-final { scan-assembler "0.*CTF preamble flags" } } */ + +void func (void) +{ +} diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-1.c new file mode 100644 index 0000000..0c51839 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-1.c @@ -0,0 +1,38 @@ +/* CTF does not have representation for some types at this time. These types + are skipped in the CTF generation phase in the compiler. + + An explicit CTF type with kind CTF_K_UNKNOWN is created for types that do + not have representation in CTF. */ + +/* { dg-do compile } */ +/* { dg-options "-gctf -dA" } */ +/* { dg-final { scan-assembler-times "\[\t \]0x2000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"unknown.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +/* { dg-require-effective-target libc_has_complex_functions } */ + +#include + +typedef float La_x86_64_xmm __attribute__ ((__vector_size__ (16))); +La_x86_64_xmm a1; + +/* GCC also supports complex integer data types. */ +complex char a; +complex signed char b; +complex unsigned char c; +complex short int d; +complex short unsigned int e; +complex int f; +complex unsigned int g; +complex long int h; +complex long unsigned int i; +complex long long int j; + +enum gomp_schedule_type +{ + GFS_RUNTIME, + GFS_STATIC, + GFS_MONOTONIC = 0x80000000U +}; + +enum gomp_schedule_type gsch_type; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-2.c new file mode 100644 index 0000000..7c8b17d --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-2.c @@ -0,0 +1,17 @@ +/* CTF does not have representation for some types at this time. These types + are skipped in the CTF generation phase in the compiler. + + Skip IEEE interchange and extended formats for CTF generation. + + In this testcase, CTF records for types are not added as CTF has no + representation for IEEE interchange and extended formats. + + CTF records for variables do exist, however. The referenced type is + CTF_TYPE_NULLID. */ + +/* { dg-do compile } */ +/* { dg-options "-gctf" } */ + +/* { dg-require-effective-target float16 } */ + +_Float16 f16; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-3.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-3.c new file mode 100644 index 0000000..394fa2f --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-3.c @@ -0,0 +1,20 @@ +/* CTF does not have representation for some types at this time. These types + are skipped in the CTF generation phase in the compiler. + + Skip IEEE interchange and extended formats for CTF generation. + + In this testcase, CTF records for types are not added as CTF has no + representation for IEEE interchange and extended formats. + + CTF records for variables and pointer do exist, however. The referenced + type is CTF_TYPE_NULLID. */ + +/* { dg-do compile } */ +/* { dg-options "-gctf" } */ + +/* { dg-require-effective-target float32 } */ +/* { dg-require-effective-target float32x } */ + +_Float32 f32; +_Float32x f32x; +_Float32 * f32p; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-4.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-4.c new file mode 100644 index 0000000..f4374e6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-4.c @@ -0,0 +1,19 @@ +/* CTF does not have representation for some types at this time. These types + are skipped in the CTF generation phase in the compiler. + + Skip IEEE interchange and extended formats for CTF generation. + + In this testcase, CTF records for types are not added as CTF has no + representation for IEEE interchange and extended formats. + + CTF records for variables and pointer do exist, however. The referenced + type is CTF_TYPE_NULLID. */ + +/* { dg-do compile } */ +/* { dg-options "-gctf" } */ + +/* { dg-require-effective-target float64 } */ +/* { dg-require-effective-target float64x } */ + +_Float64 f64; +_Float64x f64x; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-5.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-5.c new file mode 100644 index 0000000..026f9e0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-5.c @@ -0,0 +1,19 @@ +/* CTF does not have representation for some types at this time. These types + are skipped in the CTF generation phase in the compiler. + + Skip IEEE interchange and extended formats for CTF generation. + + In this testcase, CTF records for types are not added as CTF has no + representation for IEEE interchange and extended formats. + + CTF records for variables and pointer do exist, however. The referenced + type is CTF_TYPE_NULLID. */ + +/* { dg-do compile } */ +/* { dg-options "-gctf" } */ + +/* { dg-require-effective-target float128 } */ +/* { dg-require-effective-target float128x } */ + +_Float128 f128; +_Float128x f128x; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-6.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-6.c new file mode 100644 index 0000000..f2dbe08 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-6.c @@ -0,0 +1,18 @@ +/* CTF does not have representation for some types at this time. These types + are skipped in the CTF generation phase in the compiler. + + Skip Decimal Floating Point format types for CTF generation. + + In this testcase, CTF records for types are not added as CTF has no + representation for Decimal floating point format. + + CTF records for variables do exist, however. The referenced type is + CTF_TYPE_NULLID. */ + +/* { dg-do compile } */ +/* { dg-options "-gctf" } */ +/* { dg-require-effective-target dfp } */ + +_Decimal32 d32; +_Decimal64 d64; +_Decimal128 d128; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-7.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-7.c new file mode 100644 index 0000000..a9d86de --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-7.c @@ -0,0 +1,18 @@ +/* CTF does not have representation for some types at this time. These types + are skipped in the CTF generation phase in the compiler. + + Skip IEEE interchange and extended formats for CTF generation. + + In this testcase, CTF records for types are not added as CTF has no + representation for IEEE interchange and extended formats. This testcase + checks that CTF generation skips the 128-bit float gracefully, when code + generation is for a 32-bit environment. */ + +/* { dg-do compile } */ +/* { dg-options "-gctf -m32" } */ + +/* { dg-require-effective-target float128 } */ +/* { dg-require-effective-target float128x } */ + +_Float128 f128; +_Float128x f128x; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-8.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-8.c new file mode 100644 index 0000000..2413e91 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-8.c @@ -0,0 +1,27 @@ +/* CTF does not have representation for _Atomic qualifier. This qualifier is + skipped in the CTF generation phase in the compiler. + + In this testcase, CTF records for the _Atomic qualifier are not added as + CTF has no representation for it. CTF records for the underlying type are, + however, added. So, CTF records for typedef, const and the underlying + struct are expected. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x2a000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x32000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x1a000003\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ctm_name" 3 } } */ + +/* { dg-final { scan-assembler-times "ascii \"comp_type.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"comp_type_t.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"c1.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +typedef struct comp_type +{ + int a; + float b; + char c; +} comp_type_t; + +_Atomic const comp_type_t c1; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-str-table-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-str-table-1.c new file mode 100644 index 0000000..0a0f1f0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-str-table-1.c @@ -0,0 +1,26 @@ +/* CTF String Table as generated by the compiler is expected to have only a + single empty string. Just an optimization by the compiler, it is not + mandated by the CTF format. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-final { scan-assembler-times "ascii \".0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +union wait +{ + int w_status; + struct + { + int __w_termsig; + int __w_coredump; + } __wait_terminated; + struct + { + int __w_stopval; + int __w_stopsig; + } __wait_stopped; +}; + +typedef union { union wait * __uptr; int * iptr; } __WAIT_STATUS; + +__WAIT_STATUS waitstatus; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-1.c new file mode 100644 index 0000000..19711c0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-1.c @@ -0,0 +1,25 @@ +/* Test compilation of struct type. + + In this testcase, two CTF_K_STRUCT records are expected + struct a : ctt_info = 0x1a000004 (4 field members) + struct b : ctt_into = 0x1a000002 (2 field members) +*/ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x1a000004\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x1a000002\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ctm_name" 6 } } */ + +struct a +{ + int d1; + int d2; + float c; + struct b + { + int time; + int wall; + } b1; +} my_a; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-2.c new file mode 100644 index 0000000..09b4d2f --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-2.c @@ -0,0 +1,32 @@ +/* Test for compilation of self-referntial structs. + + Further, the compiler is expected to generate a single CTF struct type for + struct dmx_dtdef (due to Type de-duplication at CTF generation). */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-final { scan-assembler-times "ascii \"dmx_dtdef.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"dtd_name.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"dtd_type.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"dmx_dtdef_t.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +struct link +{ + struct link * next; +} * s_link; + +typedef long dmx_id_t; + +typedef struct dmx_dtdef +{ + char * dtd_name; + dmx_id_t dtd_type; +} dmx_dtdef_t; + +typedef struct dmx_bundle +{ + dmx_id_t dmb_type; + dmx_dtdef_t * dmb_dtd; +} dmx_bundle_t; + +dmx_bundle_t dbt; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-1.c new file mode 100644 index 0000000..d6c6b6b --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-1.c @@ -0,0 +1,65 @@ +/* Test Compilation of mixed constructs containing structs and arrays. + + Further, the compiler is expected to generate a single CTF struct type for + struct cmodel (due to Type de-duplication at the time of CTF generation). + + const qualifier in fields of structs should be processed. It appears as a + no-name CTF record with appropriate ctt_info. In this testcase, there are + two const qualifiers - const char and const struct cmodel. However, due to + way the debug information is represented in DWARF die, 3 const qualifier + records appear in the CTF section. + + <1>: Abbrev Number: 14 (DW_TAG_typedef) + DW_AT_name : (indirect string, offset: 0x114): cmodel_t + DW_AT_type : <0x9a> + <1>: Abbrev Number: 13 (DW_TAG_const_type) + DW_AT_type : <0xe1> + <1>: Abbrev Number: 4 (DW_TAG_array_type) + DW_AT_type : <0xed> + DW_AT_sibling : <0x102> + + <2><101>: Abbrev Number: 0 + <1><102>: Abbrev Number: 13 (DW_TAG_const_type) + <103> DW_AT_type : <0xf2> + <1><107>: Abbrev Number: 15 (DW_TAG_variable) + <108> DW_AT_name : (indirect string, offset: 0x57): _models + <10f> DW_AT_type : <0x102> + <1><11d>: Abbrev Number: 0 + + This results in: + + _models -> e: const const cmodel_t [3] (size 0x30) -> d: const cmodel_t [3] (size 0x30) + + Deemed as acceptable for now. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ascii \"cmodel.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"cname.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"cpointer.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"cmodel_t.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +/* 3 const records are expected. */ +/* { dg-final { scan-assembler-times "\[\t \]0x32000000\[\t \]+\[^\n\]*ctt_info" 3 } } */ + +struct a +{ + int a1[2]; + struct { int b[3]; } a2; +}; + +struct a my_a; + +typedef struct cmodel +{ + const char *cname; + int ccode; + int cpointer; +} cmodel_t; + +static const cmodel_t _models[] = { + {"ILP32", 0, 4}, + {"LP64", 0, 8}, + {"", 0, 0} +}; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c new file mode 100644 index 0000000..9e698fd --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c @@ -0,0 +1,15 @@ +/* CTF generation for struct type in presence of DWARF2. + + In case of DWARF2, the data member location is an expression containing + the location. CTF generation feeds off DWARF dies; this testcase tests + that the location expr is handled. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA -gdwarf-2" } */ + +/* { dg-final { scan-assembler-times "0x12000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x4\[\t \]+\[^\n\]*cta_nelems" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*ctm_offset" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x4\[\t \]+\[^\n\]*ctm_offset" 1 } } */ + +static struct ranges {int from, to;} lim_regs[] = {{ 16, 7}, { 16, 6}, { 20, 7},{ 20, 6}}; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-1.c new file mode 100644 index 0000000..22005ed --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-1.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* This tests the following scenario: + + 1. struct foo; + 2. struct foo *a_foo; + 3. struct foo { int bar; }; + 4. void baz (struct foo *f) { f->bar = 0; } + + At 2. a forward for struct foo is generated and at 3. the struct + type is fully defined. When a pointer to foo is encountered at 4., + an additional CTF type for the completed struct shall be emitted as + well. The linker will deduplicate both types. */ + +struct foo; +struct foo *a_foo; +struct foo { int bar; }; +void baz (struct foo *f) { f->bar = 0; } + +/* { dg-final { scan-assembler-times "\[\t \]\"bar.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-2.c new file mode 100644 index 0000000..569e5e2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-2.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* This tests the following scenario: + + 1. struct foo; + 2. struct foo *a_foo; + 3. struct foo { int bar; }; + 4. void baz (struct foo **f) { f->bar = 0; } + + At 2. a forward for struct foo is generated and at 3. the struct + type is fully defined. When a pointer to a pointer to foo is + encountered at 4., an additional CTF type for the completed struct + shall be emitted as well. The linker will deduplicate both + types. */ + +struct foo; +struct foo *a_foo; +struct foo { int bar; }; +void baz (struct foo **f) { (*f)->bar = 0; } + +/* { dg-final { scan-assembler-times "\[\t \]\"bar.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-1.c new file mode 100644 index 0000000..aa40ab0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-1.c @@ -0,0 +1,68 @@ +/* CTF_K_TYPEDEF record generation. + + In this testcase, 7 typedef records are expected. + + Further, the declared variables must be of type typedef + + Variables: + a -> 2: my_int (size 0x4) -> 1: int (size 0x4) + b -> 3: bar_int (size 0x4) -> 1: int (size 0x4) + c -> 4: foo_int (size 0x4) -> 1: int (size 0x4) + d -> 7: my_array (size 0x8) -> 5: struct (size 0x8) + e -> 9: CINT (size 0x4) -> 8: const int (size 0x4) -> 1: int (size 0x4) + f -> c: CINTP (size 0x8) -> b: const int * (size 0x8) -> a: const int (size 0x4) -> 1: int (size 0x4) + g -> f: my_node_t (size 0x8) -> d: struct my_node (size 0x8) + + There is no direct way to check that the variables are of type typedef. + So in this testcase, we simply check that: + 1. The typedef records are generated (Check for 7 specific ctt_info, and + check for the ascii strings for the typedef names). + 2. The ctv_typeidx are distinct (each pointing to a specfic unique type). + Note that if variables were not of type typedef, ctv_typeidx will not be + unique (type of a, b, c will all point to int); hence, the check. + */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "0x2a000000\[\t \]+\[^\n\]*ctt_info" 7 } } */ +/* { dg-final { scan-assembler-times "ascii \"my_int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"bar_int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"foo_int.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"my_array.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"CINT.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"CINTP.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"my_node_t.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*ctv_typeidx" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x4\[\t \]+\[^\n\]*ctv_typeidx" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x5\[\t \]+\[^\n\]*ctv_typeidx" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x9\[\t \]+\[^\n\]*ctv_typeidx" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0xa\[\t \]+\[^\n\]*ctv_typeidx" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0xc\[\t \]+\[^\n\]*ctv_typeidx" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0xf\[\t \]+\[^\n\]*ctv_typeidx" 1 } } */ + +typedef int my_int; +typedef int bar_int; +typedef int foo_int; + +typedef struct { int a[2]; } my_array; + +typedef const int CINT; +typedef const int * CINTP; + +typedef struct my_node +{ + int flags; + char value; +} my_node_t; + +my_int a; +bar_int b; +foo_int c; + +my_array d; +CINT e = 3; +CINTP f = &e; + +my_node_t g; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-2.c new file mode 100644 index 0000000..8c9d3bb --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-2.c @@ -0,0 +1,20 @@ +/* CTF_K_TYPEDEF record generation. + + In this testcase, typedef of type void should be generated. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "0x2a000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"foo_void_type.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"void.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +typedef void foo_void_type; + +struct bar +{ + int a; + foo_void_type *b; +}; + +struct bar c; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-3.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-3.c new file mode 100644 index 0000000..93d0845 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-3.c @@ -0,0 +1,24 @@ +/* Type de-duplication of CTF_K_TYPEDEF records. + + In this testcase, a single CTF record for typedef is expected. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "0x2a000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"foo_type.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"foo.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +typedef struct foo foo_type; + +struct bar +{ + struct foo * f1; + foo_type * f2; +}; + +struct testme { + struct bar * b1; +}; + +struct testme * t1; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-1.c new file mode 100644 index 0000000..19e8f49 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +typedef struct my_int +{ + int upper; + int lower; + struct bitmask + { + int flags; + } my_mask; +} my_int_t; + +my_int_t mit; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-2.c new file mode 100644 index 0000000..deeb85a --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-2.c @@ -0,0 +1,17 @@ +/* Test compilation of typedef composition in structs. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +typedef struct +{ + int day, month, year; +} Date; + +typedef struct +{ + Date filedDate, fixedDate; + int severity; +} BugRef; + +BugRef CR2112; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-3.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-3.c new file mode 100644 index 0000000..6d6918b --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-3.c @@ -0,0 +1,32 @@ +/* Test CTF generation for a typedef instantiation with CVR quals. + + Caveat: There is no direct way to test that the type of foo is + "const my_int_t" via scanning the assembly. This test instead + checks for the presence of some of the CTF constructs involved + individually. Specifically, it checks for CTF const record and + CTF typedef record. + + Variables: + foo -> 4: const my_int_t (size 0x8) -> 3: my_int_t (size 0x8) -> 1: struct my_int (size 0x8) + + Types: + 1: struct my_int (size 0x8) + 2: int (size 0x4) + 3: my_int_t (size 0x8) -> 1: struct my_int (size 0x8) + 4: const my_int_t (size 0x8) -> 3: my_int_t (size 0x8) -> 1: struct my_int (size 0x8) +*/ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "\[\t \]0x4\[\t \]+\[^\n\]*ctv_typeidx" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x2a000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x32000000\[\t \]+\[^\n\]*ctt_info" 1 } } */ + +typedef struct my_int +{ + int upper; + int lower; +} my_int_t; + +const my_int_t foo = {10, 20}; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-union-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-union-1.c new file mode 100644 index 0000000..929d532 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-union-1.c @@ -0,0 +1,14 @@ +/* CTF generation for union type. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ +/* { dg-final { scan-assembler-times "\[\t \]0x1e000004\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ctm_name" 4 } } */ + +union c +{ + int c1; + int c2; + int c3; + int c4; +} my_u_c; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-1.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-1.c new file mode 100644 index 0000000..8c3ab10 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-1.c @@ -0,0 +1,25 @@ +/* CTF generation for global variables. + + In this testcase, 7 records in the variable info section are expected. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ctv_name" 7 } } */ + +float var1; +double var2; +long double var3; + +char ascii = 'a'; + +int a = 33; +int a1[2] = {22, 33}; + +struct d +{ + int d1; + int d2; +}; + +struct d d_instance; diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-2.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-2.c new file mode 100644 index 0000000..75c3ed7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-2.c @@ -0,0 +1,16 @@ +/* CTF generation for static variables inside a function. + + In this testcase, CTF record for bstatic is NOT expected. CTF generation + is only carried out for variables at file-scope or global-scope. */ + +/* { dg-do compile ) */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* { dg-final { scan-assembler-times "ctv_name" 0 } } */ +/* { dg-final { scan-assembler-times "ascii \"bstatic.0\"\[\t \]+\[^\n\]*ctf_string" 0 } } */ + +int foo (int a) +{ + static int bstatic = 3; + return a + bstatic; +} diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf.exp b/gcc/testsuite/gcc.dg/debug/ctf/ctf.exp new file mode 100644 index 0000000..46055f8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf.exp @@ -0,0 +1,41 @@ +# Copyright (C) 2002-2019 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# GCC testsuite that uses the `dg.exp' driver. + +# Load support procs. +load_lib gcc-dg.exp + +# Disable on ptx (in sync with DWARF testsuite) +if { [istarget nvptx-*-*] } { + return +} + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS " -ansi -pedantic-errors" +} + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\] ]] \ + "" $DEFAULT_CFLAGS + +# All done. +dg-finish diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp index c7722ba..51d8a11 100644 --- a/gcc/testsuite/lib/gcc-dg.exp +++ b/gcc/testsuite/lib/gcc-dg.exp @@ -621,6 +621,22 @@ proc gcc-dg-runtest { testcases flags default-extra-flags } { } } +# Check if frontend has CTF support +proc gcc-dg-frontend-supports-ctf { target_compile trivial } { + global srcdir subdir + + set comp_output [$target_compile \ + "$srcdir/$subdir/$trivial" "trivial.S" assembly \ + "additional_flags=-gctf"] + if { ! [string match \ + "*CTF debug info requested, but not supported for * frontend*" \ + $comp_output] } { + remove-build-file "trivial.S" + return 1 + } + return 0 +} + # Check if the target system supports the debug format proc gcc-dg-target-supports-debug-format { target_compile trivial type } { global srcdir subdir @@ -639,21 +655,30 @@ proc gcc-dg-target-supports-debug-format { target_compile trivial type } { proc gcc-dg-debug-runtest { target_compile trivial opt_opts testcases } { if ![info exists DEBUG_TORTURE_OPTIONS] { set DEBUG_TORTURE_OPTIONS "" - foreach type {-gdwarf-2 -gstabs -gstabs+ -gxcoff -gxcoff+} { - if [expr [gcc-dg-target-supports-debug-format \ - $target_compile $trivial $type]] { - foreach level {1 "" 3} { - if { ($type == "-gdwarf-2") && ($level != "") } { - lappend DEBUG_TORTURE_OPTIONS [list "${type}" "-g${level}"] - foreach opt $opt_opts { - lappend DEBUG_TORTURE_OPTIONS \ - [list "${type}" "-g${level}" "$opt" ] - } - } else { - lappend DEBUG_TORTURE_OPTIONS [list "${type}${level}"] - foreach opt $opt_opts { - lappend DEBUG_TORTURE_OPTIONS \ - [list "${type}${level}" "$opt" ] + foreach type {-gctf -gdwarf-2 -gstabs -gstabs+ -gxcoff -gxcoff+} { + if { $type == "-gctf" } { + if [expr [gcc-dg-frontend-supports-ctf \ + $target_compile $trivial]] { + # At this time, running tests with various opt levels or + # ctf debug info levels does not add value. + lappend DEBUG_TORTURE_OPTIONS [list "${type}"] + } + } else { + if [expr [gcc-dg-target-supports-debug-format \ + $target_compile $trivial $type]] { + foreach level {1 "" 3} { + if { ($type == "-gdwarf-2") && ($level != "") } { + lappend DEBUG_TORTURE_OPTIONS [list "${type}" "-g${level}"] + foreach opt $opt_opts { + lappend DEBUG_TORTURE_OPTIONS \ + [list "${type}" "-g${level}" "$opt" ] + } + } else { + lappend DEBUG_TORTURE_OPTIONS [list "${type}${level}"] + foreach opt $opt_opts { + lappend DEBUG_TORTURE_OPTIONS \ + [list "${type}${level}" "$opt" ] + } } } } @@ -698,6 +723,15 @@ proc gcc-dg-debug-runtest { target_compile trivial opt_opts testcases } { set doit 0 } + # These tests check for information which is not emitted for CTF + # as CTF type information is emitted for entities at file and + # global scope only. + if { ([string match {*/debug-[126].c} "$nshort"] \ + || [string match {*/enum-[12].C} "$nshort"] ) \ + && [string match "*ctf*" "$flags"] } { + set doit 0 + } + if { $doit } { verbose -log "Testing $nshort, $flags" 1 dg-test $test $flags "" -- 2.7.4