diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-12-17 23:07:13 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-12-17 23:07:13 +0100 |
commit | 1d6a323453a9261b5ffea44bf37af20369203ef8 (patch) | |
tree | 035d2af942a102f0f2d21ec3c9dc44b27f699373 /gcc | |
parent | cbdd74793b8442f78a18c036cdac8a5ba472b7c5 (diff) | |
download | gcc-1d6a323453a9261b5ffea44bf37af20369203ef8.zip gcc-1d6a323453a9261b5ffea44bf37af20369203ef8.tar.gz gcc-1d6a323453a9261b5ffea44bf37af20369203ef8.tar.bz2 |
dwarf2out.c (loc_descriptor): For SYMBOL_REFs and LABEL_REFs use DW_OP_addr+DW_OP_stack_value instead of...
* 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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 32 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/dwarf2/const1.C | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c | 8 |
7 files changed, 50 insertions, 23 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2ac875f..c74baf6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index c366ee5..da04057 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 345d664..ace164a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/const1.C b/gcc/testsuite/g++.dg/debug/dwarf2/const1.C index eaed5bd..7b18fa0 100644 --- a/gcc/testsuite/g++.dg/debug/dwarf2/const1.C +++ b/gcc/testsuite/g++.dg/debug/dwarf2/const1.C @@ -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; diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C index 9f3dc8c..4c72490 100644 --- a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C +++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C @@ -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)(); diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C b/gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C index 06b0e2b..e69e1c9 100644 --- a/gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C +++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C @@ -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) (); diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c index 26aa9bd..bc5c7d6 100644 --- a/gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c @@ -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; |