]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
dwarf2out.c (loc_descriptor): For SYMBOL_REFs and LABEL_REFs use DW_OP_addr+DW_OP_sta...
authorJakub Jelinek <jakub@redhat.com>
Thu, 17 Dec 2009 22:07:13 +0000 (23:07 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 17 Dec 2009 22:07:13 +0000 (23:07 +0100)
* dwarf2out.c (loc_descriptor): For SYMBOL_REFs and LABEL_REFs
use DW_OP_addr+DW_OP_stack_value instead of DW_OP_implicit_value.
(add_const_value_attribute): For CONST_STRING, SYMBOL_REFs and
LABEL_REFs use DW_OP_addr+DW_OP_stack_value DW_AT_location instead of
DW_AT_const_value.

* gcc.dg/debug/dwarf2/const-1.c: Don't expect DW_AT_const_value,
but instead DW_AT_location with DW_OP_addr+DW_OP_stack_value.  Add
-gno-strict-dwarf -fno-merge-debug-strings to dg-options.
* g++.dg/debug/dwarf2/const1.C: Likewise.
* g++.dg/debug/dwarf2/template-params-3.C: Likewise.
* g++.dg/debug/dwarf2/template-func-params-3.C: Likewise.

From-SVN: r155327

gcc/ChangeLog
gcc/dwarf2out.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/debug/dwarf2/const1.C
gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C
gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C
gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c

index 2ac875f3c379145e052c59e31854776f0d96acbe..c74baf6b393bd6988090c2d53724b71ec9daa2c1 100644 (file)
@@ -1,3 +1,11 @@
+2009-12-17  Jakub Jelinek  <jakub@redhat.com>
+
+       * dwarf2out.c (loc_descriptor): For SYMBOL_REFs and LABEL_REFs
+       use DW_OP_addr+DW_OP_stack_value instead of DW_OP_implicit_value.
+       (add_const_value_attribute): For CONST_STRING, SYMBOL_REFs and
+       LABEL_REFs use DW_OP_addr+DW_OP_stack_value DW_AT_location instead of
+       DW_AT_const_value.
+
 2009-12-17  Alexandre Oliva  <aoliva@redhat.com>
 
        PR debug/41679
index c366ee52c8a1ba903fb159f46e0e691b7bc9b9ec..da0405774c655efb2433e98d003db724d647c84a 100644 (file)
@@ -13775,10 +13775,10 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
          && (dwarf_version >= 4 || !dwarf_strict))
        {
-         loc_result = new_loc_descr (DW_OP_implicit_value,
-                                     DWARF2_ADDR_SIZE, 0);
-         loc_result->dw_loc_oprnd2.val_class = dw_val_class_addr;
-         loc_result->dw_loc_oprnd2.v.val_addr = rtl;
+         loc_result = new_loc_descr (DW_OP_addr, 0, 0);
+         loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
+         loc_result->dw_loc_oprnd1.v.val_addr = rtl;
+         add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
          VEC_safe_push (rtx, gc, used_rtx_array, rtl);
        }
       break;
@@ -15223,10 +15223,20 @@ add_const_value_attribute (dw_die_ref die, rtx rtl)
       return true;
 
     case CONST_STRING:
-      resolve_one_addr (&rtl, NULL);
-      add_AT_addr (die, DW_AT_const_value, rtl);
-      VEC_safe_push (rtx, gc, used_rtx_array, rtl);
-      return true;
+      if (dwarf_version >= 4 || !dwarf_strict)
+       {
+         dw_loc_descr_ref loc_result;
+         resolve_one_addr (&rtl, NULL);
+       rtl_addr:
+         loc_result = new_loc_descr (DW_OP_addr, 0, 0);
+         loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
+         loc_result->dw_loc_oprnd1.v.val_addr = rtl;
+         add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
+         add_AT_loc (die, DW_AT_location, loc_result);
+         VEC_safe_push (rtx, gc, used_rtx_array, rtl);
+         return true;
+       }
+      return false;
 
     case CONST:
       if (CONSTANT_P (XEXP (rtl, 0)))
@@ -15236,9 +15246,9 @@ add_const_value_attribute (dw_die_ref die, rtx rtl)
       if (!const_ok_for_output (rtl))
        return false;
     case LABEL_REF:
-      add_AT_addr (die, DW_AT_const_value, rtl);
-      VEC_safe_push (rtx, gc, used_rtx_array, rtl);
-      return true;
+      if (dwarf_version >= 4 || !dwarf_strict)
+       goto rtl_addr;
+      return false;
 
     case PLUS:
       /* In cases where an inlined instance of an inline function is passed
index 345d6645dee9b601a398f52923616b530ad5b2a4..ace164a9edb87ad5714dea356a287db3025e20a1 100644 (file)
@@ -1,3 +1,12 @@
+2009-12-17  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.dg/debug/dwarf2/const-1.c: Don't expect DW_AT_const_value,
+       but instead DW_AT_location with DW_OP_addr+DW_OP_stack_value.  Add
+       -gno-strict-dwarf -fno-merge-debug-strings to dg-options.
+       * g++.dg/debug/dwarf2/const1.C: Likewise.
+       * g++.dg/debug/dwarf2/template-params-3.C: Likewise.
+       * g++.dg/debug/dwarf2/template-func-params-3.C: Likewise.
+
 2009-12-17  Alexandre Oliva  <aoliva@redhat.com>
 
        PR debug/41679
index eaed5bd603e2bc0c9e64121a37e3d894f8e52475..7b18fa0693bfb183dd6eecb78491e61c5965297f 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
-/* { dg-options "-O -gdwarf-2 -dA" } */
+/* { dg-options "-O -gdwarf-2 -dA -gno-strict-dwarf -fno-merge-debug-strings" } */
 /* { dg-require-visibility "" } */
-/* { dg-final { scan-assembler "DW_AT_const_value" } } */
+/* { dg-final { scan-assembler "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*fnx\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" } } */
 
-extern void x () __attribute__((visibility ("hidden")));
-void (* const f) () = x;
+extern void fnx () __attribute__((visibility ("hidden")));
+void (* const f) () = fnx;
index 9f3dc8c287032f6d0db7b583c684657877053336..4c72490351b88f5823cec769fa5fcf36c9f1fca1 100644 (file)
@@ -1,9 +1,9 @@
 // Contributed by Dodji Seketeli <dodji@redhat.com>
 // Origin PR debug/30161
-// { dg-options "-g -dA" }
+// { dg-options "-g -dA -gno-strict-dwarf -fno-merge-debug-strings" }
 // { dg-final { scan-assembler "DW_TAG_template_value_param" } }
 // { dg-final { scan-assembler "f.*DW_AT_name" } }
-// { dg-final { scan-assembler "_Z4blehv.*DW_AT_const_value" } }
+// { dg-final { scan-assembler "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*_Z4blehv\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" } } */
 
 typedef void (*func_ptr)();
 
index 06b0e2b821a08785d62585ac1720249ba6fd71e0..e69e1c9f37bb3cdf2d80a9353502b3efc440c71b 100644 (file)
@@ -1,9 +1,9 @@
 // Contributed by Dodji Seketeli <dodji@redhat.com>
 // Origin PR debug/30161
-// { dg-options "-g -dA" }
+// { dg-options "-g -dA -gno-strict-dwarf -fno-merge-debug-strings" }
 // { dg-final { scan-assembler "DW_TAG_template_value_param" } }
 // { dg-final { scan-assembler "f.*DW_AT_name" } }
-// { dg-final { scan-assembler "_Z4blehv.*DW_AT_const_value" } }
+// { dg-final { scan-assembler "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*_Z4blehv\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" } } */
 
 typedef void (*func_ptr) ();
 
index 26aa9bd8c503e994fc56debef3eae0b0693d3ac3..bc5c7d611de68ba02fa7dfc2b143781a0ddc42aa 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
-/* { dg-options "-O -gdwarf-2 -dA" } */
+/* { dg-options "-O -gdwarf-2 -dA -gno-strict-dwarf -fno-merge-debug-strings" } */
 /* { dg-require-visibility "" } */
-/* { dg-final { scan-assembler "DW_AT_const_value" } } */
+/* { dg-final { scan-assembler "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*fnx\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" } } */
 
-extern void x() __attribute__((visibility("hidden")));
-static void (*f)() = x;
+extern void fnx() __attribute__((visibility("hidden")));
+static void (*f)() = fnx;