]> 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)
committerKwok Cheung Yeung <kcy@codesourcery.com>
Thu, 22 Apr 2021 17:14:30 +0000 (10:14 -0700)
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 a5537b59fb7e186e443a11176b0188cbf7b104a3..fdd09cbef3be34bc9823a38a9817e767248ebdf5 100644 (file)
@@ -23411,6 +23411,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
            {