Previously it was not supported to generate both CTF and BTF debug info
in the same compiler run, as both formats made incompatible changes to
the same internal data structures.

With the structural change in the prior patches, in particular the
guarantee that CTF will always be fully emitted before any BTF
translation occurs, there is no longer anything preventing generation
of both CTF and BTF at the same time.  This patch changes option parsing
to allow any combination of -gdwarf, -gctf, and -gbtf at the same time.

gcc/
        * opts.cc (set_debug_level): Allow any combination of -gdwarf,
        -gctf and -gbtf to be enabled at the same time.

gcc/testsuite/
        * gcc.dg/debug/btf/btf-3.c: New test.
        * gcc.dg/debug/btf/btf-4.c: Likewise.
        * gcc.dg/debug/btf/btf-5.c: Likewise.
---
 gcc/opts.cc                            | 20 +++++---------------
 gcc/testsuite/gcc.dg/debug/btf/btf-3.c |  8 ++++++++
 gcc/testsuite/gcc.dg/debug/btf/btf-4.c |  8 ++++++++
 gcc/testsuite/gcc.dg/debug/btf/btf-5.c |  9 +++++++++
 4 files changed, 30 insertions(+), 15 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-3.c
 create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-4.c
 create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-5.c

diff --git a/gcc/opts.cc b/gcc/opts.cc
index 1b1b46455af6..7e9f2d91172b 100644
--- a/gcc/opts.cc
+++ b/gcc/opts.cc
@@ -3506,21 +3506,11 @@ set_debug_level (uint32_t dinfo, int extended, const 
char *arg,
     }
   else
     {
-      /* Make and retain the choice if both CTF and DWARF debug info are to
-        be generated.  */
-      if (((dinfo == DWARF2_DEBUG) || (dinfo == CTF_DEBUG))
-         && ((opts->x_write_symbols == (DWARF2_DEBUG|CTF_DEBUG))
-             || (opts->x_write_symbols == DWARF2_DEBUG)
-             || (opts->x_write_symbols == CTF_DEBUG)))
-       {
-         opts->x_write_symbols |= dinfo;
-         opts_set->x_write_symbols |= dinfo;
-       }
-      /* However, CTF and BTF are not allowed together at this time.  */
-      else if (((dinfo == DWARF2_DEBUG) || (dinfo == BTF_DEBUG))
-              && ((opts->x_write_symbols == (DWARF2_DEBUG|BTF_DEBUG))
-                  || (opts->x_write_symbols == DWARF2_DEBUG)
-                  || (opts->x_write_symbols == BTF_DEBUG)))
+      /* Any combination of DWARF, CTF and BTF is allowed.  */
+      if (((dinfo == DWARF2_DEBUG) || (dinfo == CTF_DEBUG)
+          || (dinfo == BTF_DEBUG))
+         && ((opts->x_write_symbols | (DWARF2_DEBUG | CTF_DEBUG | BTF_DEBUG))
+              == (DWARF2_DEBUG | CTF_DEBUG | BTF_DEBUG)))
        {
          opts->x_write_symbols |= dinfo;
          opts_set->x_write_symbols |= dinfo;
diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-3.c 
b/gcc/testsuite/gcc.dg/debug/btf/btf-3.c
new file mode 100644
index 000000000000..93c8164a2a54
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/btf/btf-3.c
@@ -0,0 +1,8 @@
+/* Verify that BTF debug info can co-exist with DWARF.  */
+/* { dg-do compile } */
+/* { dg-options "-gdwarf -gbtf -dA" } */
+/* { dg-final { scan-assembler "0xeb9f.*btf_magic" } } */
+/* { dg-final { scan-assembler "DWARF version number" } } */
+
+void func (void)
+{ }
diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-4.c 
b/gcc/testsuite/gcc.dg/debug/btf/btf-4.c
new file mode 100644
index 000000000000..b087917188bb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/btf/btf-4.c
@@ -0,0 +1,8 @@
+/* Verify that BTF debug info can co-exist with CTF.  */
+/* { dg-do compile } */
+/* { dg-options "-gctf -gbtf -dA" } */
+/* { dg-final { scan-assembler "0xeb9f.*btf_magic" } } */
+/* { dg-final { scan-assembler "0xdff2.*CTF preamble magic number" } } */
+
+void func (void)
+{ }
diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-5.c 
b/gcc/testsuite/gcc.dg/debug/btf/btf-5.c
new file mode 100644
index 000000000000..45267b5fc422
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/btf/btf-5.c
@@ -0,0 +1,9 @@
+/* Verify that BTF, CTF and DWARF can all co-exist happily.  */
+/* { dg-do compile } */
+/* { dg-options "-gctf -gbtf -gdwarf -dA" } */
+/* { dg-final { scan-assembler "0xeb9f.*btf_magic" } } */
+/* { dg-final { scan-assembler "0xdff2.*CTF preamble magic number" } } */
+/* { dg-final { scan-assembler "DWARF version number" } } */
+
+void func (void)
+{ }
-- 
2.43.0

Reply via email to