]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix offload dwarf info
authorAndrew Stubbs <ams@codesourcery.com>
Sun, 6 Dec 2020 19:23:55 +0000 (19:23 +0000)
committerAndrew Stubbs <ams@codesourcery.com>
Fri, 15 Jan 2021 11:27:02 +0000 (11:27 +0000)
Add a notional code range to the notional parent function of offload kernel
functions.  This is enough to prevent GDB discarding them.

gcc/ChangeLog:

* dwarf2out.c (gen_subprogram_die): Add high/low_pc attributes for
parents of offload kernels.

gcc/dwarf2out.c

index 4d84a9e960738bc705ef7d8b175d1b6a574a5fe8..a4a1b934dc7686657d759a6cf89b90dac89969cb 100644 (file)
@@ -23079,6 +23079,20 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
              /* We have already generated the labels.  */
              add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
                                  fde->dw_fde_end, false);
+
+            /* Offload kernel functions are nested within a parent function
+               that doesn't actually exist within the offload object.  GDB
+               will ignore the function and everything nested within unless
+               we give it a notional code range (the values aren't
+               important, as long as they are valid).  */
+            if (flag_generate_offload
+                && lookup_attribute ("omp target entrypoint",
+                                     DECL_ATTRIBUTES (decl))
+                && subr_die->die_parent
+                && subr_die->die_parent->die_tag == DW_TAG_subprogram
+                && !get_AT_low_pc (subr_die->die_parent))
+              add_AT_low_high_pc (subr_die->die_parent, fde->dw_fde_begin,
+                                  fde->dw_fde_end, false);
            }
          else
            {