public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs
@ 2010-09-16 21:31 Joel Brobecker
  2010-09-16 22:23 ` Nathan Froyd
  2010-09-19 23:02 ` Jan Kratochvil
  0 siblings, 2 replies; 9+ messages in thread
From: Joel Brobecker @ 2010-09-16 21:31 UTC (permalink / raw)
  To: gdb-patches; +Cc: Joel Brobecker

Hello,

The GNAT compiler is starting to email DW_TAG_constant dies, so
I needed to add support for this type of tags. It turned out to
be a relatively easy task.

I could have tweaked the psymbol processing to have the block of
code that handles variables also handle constants. But I decided
against it, because I felt that it made the code more complicated
that it needed to, making the handling for variables a little more
complicated (in short, I had to add an code != DW_TAG_constant to
avoid the DIE from being skipped).

Does this look reasonable?

gdb/ChangeLog:

        * dwarf2read.c (scan_partial_symbols): Add handling of
        DW_TAG_constant DIEs.
        (add_partial_symbol, load_partial_dies, new_symbol): Likewise.

gdb/testsuite/ChangeLog:

        * gdb.dwarf2/dw2-const.S, gdb.dwarf2/dw2-const.exp: New files.

Tested on x86_64-linux. No regression.

Thanks,
-- 
Joel

---
 gdb/dwarf2read.c                       |   18 +++
 gdb/testsuite/gdb.dwarf2/dw2-const.S   |  224 ++++++++++++++++++++++++++++++++
 gdb/testsuite/gdb.dwarf2/dw2-const.exp |   46 +++++++
 3 files changed, 288 insertions(+), 0 deletions(-)
 create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-const.S
 create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-const.exp

diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 470a3f5..153d8ea 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -3467,6 +3467,7 @@ scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc,
 	    case DW_TAG_subprogram:
 	      add_partial_subprogram (pdi, lowpc, highpc, need_pc, cu);
 	      break;
+	    case DW_TAG_constant:
 	    case DW_TAG_variable:
 	    case DW_TAG_typedef:
 	    case DW_TAG_union_type:
@@ -3691,6 +3692,20 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
 				      cu->language, objfile);
 	}
       break;
+    case DW_TAG_constant:
+      {
+        struct psymbol_allocation_list *list;
+
+	if (pdi->is_external)
+	  list = &objfile->global_psymbols;
+	else
+	  list = &objfile->global_psymbols;
+	psym = add_psymbol_to_list (actual_name, strlen (actual_name),
+				    built_actual_name, VAR_DOMAIN, LOC_STATIC,
+				    list, 0, 0, cu->language, objfile);
+
+      }
+      break;
     case DW_TAG_variable:
       if (pdi->locdesc)
 	addr = decode_locdesc (pdi->locdesc, cu);
@@ -8568,6 +8583,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	 static members).  */
       if (!load_all
 	  && !is_type_tag_for_partial (abbrev->tag)
+	  && abbrev->tag != DW_TAG_constant
 	  && abbrev->tag != DW_TAG_enumerator
 	  && abbrev->tag != DW_TAG_subprogram
 	  && abbrev->tag != DW_TAG_lexical_block
@@ -8678,6 +8694,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	 unit with load_all_dies set.  */
 
       if (load_all
+	  || abbrev->tag == DW_TAG_constant
 	  || abbrev->tag == DW_TAG_subprogram
 	  || abbrev->tag == DW_TAG_variable
 	  || abbrev->tag == DW_TAG_namespace
@@ -10584,6 +10601,7 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
 	case DW_TAG_template_value_param:
 	  suppress_add = 1;
 	  /* Fall through.  */
+	case DW_TAG_constant:
 	case DW_TAG_variable:
 	case DW_TAG_member:
 	  /* Compilation with minimal debug info may result in variables
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-const.S b/gdb/testsuite/gdb.dwarf2/dw2-const.S
new file mode 100644
index 0000000..f5c64f9
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-const.S
@@ -0,0 +1,224 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Dummy function to provide debug information for.  */
+
+	.text
+.Lbegin_text1:
+	.globl func_cu1
+	.type func_cu1, %function
+func_cu1:
+.Lbegin_func_cu1:
+	.int 0
+.Lend_func_cu1:
+	.size func_cu1, .-func_cu1
+.Lend_text1:
+
+/* Debug information */
+
+	.section .debug_info
+.Lcu1_begin:
+	/* CU header */
+	.4byte	.Lcu1_end - .Lcu1_start		/* Length of Compilation Unit */
+.Lcu1_start:
+	.2byte	2				/* DWARF Version */
+	.4byte	.Labbrev1_begin			/* Offset into abbrev section */
+	.byte	4				/* Pointer size */
+
+	/* CU die */
+	.uleb128 1				/* Abbrev: DW_TAG_compile_unit */
+	.4byte	.Lline1_begin			/* DW_AT_stmt_list */
+	.4byte	.Lend_text1			/* DW_AT_high_pc */
+	.4byte	.Lbegin_text1			/* DW_AT_low_pc */
+	.ascii	"file1.txt\0"			/* DW_AT_name */
+	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
+	.byte	1				/* DW_AT_language (C) */
+
+        .uleb128        0x8                     /* Abbrev: DW_TAG_constant */
+        .ascii          "twelve\0"              /* DW_AT_name */
+	.4byte		.Ltype_const-.Lcu1_begin   /* DW_AT_type */
+        .byte           0xc                     /* DW_AT_const_value */
+
+.Ltype_const:
+        .uleb128        0x9                     /* Abbrev: DW_TAG_const_type */
+        .long           .Ltype_int-.Lcu1_begin  /* DW_AT_type */
+
+	/* func_cu1 */
+	.uleb128	2			/* Abbrev: DW_TAG_subprogram */
+	.byte		1			/* DW_AT_external */
+	.byte		1			/* DW_AT_decl_file */
+	.byte		2			/* DW_AT_decl_line */
+	.ascii		"func_cu1\0"		/* DW_AT_name */
+	.4byte		.Ltype_int-.Lcu1_begin	/* DW_AT_type */
+	.4byte		.Lbegin_func_cu1	/* DW_AT_low_pc */
+	.4byte		.Lend_func_cu1		/* DW_AT_high_pc */
+	.byte		1			/* DW_AT_frame_base: length */
+	.byte		0x55			/* DW_AT_frame_base: DW_OP_reg5 */
+
+.Ltype_int:
+	.uleb128	3			/* Abbrev: DW_TAG_base_type */
+	.ascii		"int\0"			/* DW_AT_name */
+	.byte		4			/* DW_AT_byte_size */
+	.byte		5			/* DW_AT_encoding */
+
+	.byte		0			/* End of children of CU */
+
+.Lcu1_end:
+
+/* Abbrev table */
+	.section .debug_abbrev
+.Labbrev1_begin:
+	.uleb128	1			/* Abbrev code */
+	.uleb128	0x11			/* DW_TAG_compile_unit */
+	.byte		1			/* has_children */
+	.uleb128	0x10			/* DW_AT_stmt_list */
+	.uleb128	0x6			/* DW_FORM_data4 */
+	.uleb128	0x12			/* DW_AT_high_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x11			/* DW_AT_low_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x25			/* DW_AT_producer */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x13			/* DW_AT_language */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.uleb128	2			/* Abbrev code */
+	.uleb128	0x2e			/* DW_TAG_subprogram */
+	.byte		0			/* has_children */
+	.uleb128	0x3f			/* DW_AT_external */
+	.uleb128	0xc			/* DW_FORM_flag */
+	.uleb128	0x3a			/* DW_AT_decl_file */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.uleb128	0x3b			/* DW_AT_decl_line */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x49			/* DW_AT_type */
+	.uleb128	0x13			/* DW_FORM_ref4 */
+	.uleb128	0x11			/* DW_AT_low_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x12			/* DW_AT_high_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x40			/* DW_AT_frame_base */
+	.uleb128	0xa			/* DW_FORM_block1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.uleb128	3			/* Abbrev code */
+	.uleb128	0x24			/* DW_TAG_base_type */
+	.byte		0			/* has_children */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0xb			/* DW_AT_byte_size */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.uleb128	0x3e			/* DW_AT_encoding */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+        .uleb128        0x8                     /* abbrev code */
+        .uleb128        0x27                    /* TAG: DW_TAG_constant */
+        .byte           0x0                     /* DW_children_no */
+        .uleb128        0x3                     /* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+        .uleb128        0x49                    /* DW_AT_type */
+        .uleb128        0x13                    /* DW_FORM_ref4 */
+        .uleb128        0x1c                    /* DW_AT_const_value */
+        .uleb128        0xb                     /* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+        .uleb128        0x9                     /* abbrev code */
+        .uleb128        0x26                    /* TAG: DW_TAG_const_type */
+        .byte           0x0                     /* DW_children_no */
+        .uleb128        0x49                    /* DW_AT_type */
+        .uleb128        0x13                    /* DW_FORM_ref4 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+/* Line table */
+	.section .debug_line
+.Lline1_begin:
+	.4byte		.Lline1_end - .Lline1_start	/* Initial length */
+.Lline1_start:
+	.2byte		2			/* Version */
+	.4byte		.Lline1_lines - .Lline1_hdr	/* header_length */
+.Lline1_hdr:
+	.byte		1			/* Minimum insn length */
+	.byte		1			/* default_is_stmt */
+	.byte		1			/* line_base */
+ 	.byte		1			/* line_range */
+	.byte		0x10			/* opcode_base */
+
+	/* Standard lengths */
+	.byte		0
+	.byte		1
+	.byte		1
+	.byte		1
+	.byte		1
+	.byte		0
+	.byte		0
+	.byte		0
+	.byte		1
+	.byte		0
+	.byte		0
+	.byte		1
+	.byte		0
+	.byte		0
+	.byte		0
+
+	/* Include directories */
+	.byte		0
+
+	/* File names */
+	.ascii		"file1.txt\0"
+	.uleb128	0
+	.uleb128	0
+	.uleb128	0
+
+	.byte		0
+
+.Lline1_lines:
+	.byte		0	/* DW_LNE_set_address */
+	.uleb128	5
+	.byte		2
+	.4byte		.Lbegin_func_cu1
+
+	.byte		3	/* DW_LNS_advance_line */
+	.sleb128	3	/* ... to 4 */
+
+	.byte		1	/* DW_LNS_copy */
+
+	.byte		1	/* DW_LNS_copy (second time as an end-of-prologue marker) */
+
+	.byte		0	/* DW_LNE_set_address */
+	.uleb128	5
+	.byte		2
+	.4byte		.Lend_func_cu1
+
+	.byte		0	/* DW_LNE_end_of_sequence */
+	.uleb128	1
+	.byte		1
+
+.Lline1_end:
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-const.exp b/gdb/testsuite/gdb.dwarf2/dw2-const.exp
new file mode 100644
index 0000000..d7bf46f
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-const.exp
@@ -0,0 +1,46 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+# For now pick a sampling of likely targets.
+if {![istarget *-*-linux*]
+    && ![istarget *-*-gnu*]
+    && ![istarget *-*-elf*]
+    && ![istarget *-*-openbsd*]
+    && ![istarget arm-*-eabi*]
+    && ![istarget powerpc-*-eabi*]} {
+    return 0
+}
+
+set testfile "dw2-const"
+set srcfile ${testfile}.S
+set binfile ${objdir}/${subdir}/${testfile}.x
+
+if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+    return -1
+}
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
+    return -1
+}
+
+if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
+    return -1
+}
+
+clean_restart ${testfile}.x
+
+gdb_test "print twelve" "= 12"
+
-- 
1.7.1

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs
  2010-09-16 21:31 [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs Joel Brobecker
@ 2010-09-16 22:23 ` Nathan Froyd
  2010-09-16 22:29   ` Joel Brobecker
  2010-09-19 23:02 ` Jan Kratochvil
  1 sibling, 1 reply; 9+ messages in thread
From: Nathan Froyd @ 2010-09-16 22:23 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On Thu, Sep 16, 2010 at 01:22:26PM -0700, Joel Brobecker wrote:
> @@ -3691,6 +3692,20 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
>  				      cu->language, objfile);
>  	}
>        break;
> +    case DW_TAG_constant:
> +      {
> +        struct psymbol_allocation_list *list;
> +
> +	if (pdi->is_external)
> +	  list = &objfile->global_psymbols;
> +	else
> +	  list = &objfile->global_psymbols;

Are these supposed to be different?

-Nathan

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs
  2010-09-16 22:23 ` Nathan Froyd
@ 2010-09-16 22:29   ` Joel Brobecker
  2010-09-17 13:11     ` Pedro Alves
  0 siblings, 1 reply; 9+ messages in thread
From: Joel Brobecker @ 2010-09-16 22:29 UTC (permalink / raw)
  To: Nathan Froyd; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 389 bytes --]

> > +	if (pdi->is_external)
> > +	  list = &objfile->global_psymbols;
> > +	else
> > +	  list = &objfile->global_psymbols;
> 
> Are these supposed to be different?

Duh, yes! It doesn't have any impact, because I don't think we can
get there with a non-global symbol, but I added this support just
in case I was wrong.

I'm testing the attached patch.  Thanks for spotting this!

-- 
Joel

[-- Attachment #2: dw-tag-constant-2.diff --]
[-- Type: text/x-diff, Size: 11383 bytes --]

commit 9d565d25f778cac99406c3a2b3c636b4225a4754
Author: Joel Brobecker <brobecker@adacore.com>
Date:   Tue Sep 14 21:20:47 2010 -0700

    DWARF: Add support for DW_TAG_constant DIEs
    
    gdb/ChangeLog:
    
            * dwarf2read.c (scan_partial_symbols): Add handling of
            DW_TAG_constant DIEs.
            (add_partial_symbol, load_partial_dies, new_symbol): Likewise.
    
    gdb/testsuite/ChangeLog:
    
            * gdb.dwarf2/dw2-const.S, gdb.dwarf2/dw2-const.exp: New files.

diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 470a3f5..5e677a5 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -3467,6 +3467,7 @@ scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc,
 	    case DW_TAG_subprogram:
 	      add_partial_subprogram (pdi, lowpc, highpc, need_pc, cu);
 	      break;
+	    case DW_TAG_constant:
 	    case DW_TAG_variable:
 	    case DW_TAG_typedef:
 	    case DW_TAG_union_type:
@@ -3691,6 +3692,20 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
 				      cu->language, objfile);
 	}
       break;
+    case DW_TAG_constant:
+      {
+        struct psymbol_allocation_list *list;
+
+	if (pdi->is_external)
+	  list = &objfile->global_psymbols;
+	else
+	  list = &objfile->static_psymbols,
+	psym = add_psymbol_to_list (actual_name, strlen (actual_name),
+				    built_actual_name, VAR_DOMAIN, LOC_STATIC,
+				    list, 0, 0, cu->language, objfile);
+
+      }
+      break;
     case DW_TAG_variable:
       if (pdi->locdesc)
 	addr = decode_locdesc (pdi->locdesc, cu);
@@ -8568,6 +8583,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	 static members).  */
       if (!load_all
 	  && !is_type_tag_for_partial (abbrev->tag)
+	  && abbrev->tag != DW_TAG_constant
 	  && abbrev->tag != DW_TAG_enumerator
 	  && abbrev->tag != DW_TAG_subprogram
 	  && abbrev->tag != DW_TAG_lexical_block
@@ -8678,6 +8694,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	 unit with load_all_dies set.  */
 
       if (load_all
+	  || abbrev->tag == DW_TAG_constant
 	  || abbrev->tag == DW_TAG_subprogram
 	  || abbrev->tag == DW_TAG_variable
 	  || abbrev->tag == DW_TAG_namespace
@@ -10584,6 +10601,7 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
 	case DW_TAG_template_value_param:
 	  suppress_add = 1;
 	  /* Fall through.  */
+	case DW_TAG_constant:
 	case DW_TAG_variable:
 	case DW_TAG_member:
 	  /* Compilation with minimal debug info may result in variables
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-const.S b/gdb/testsuite/gdb.dwarf2/dw2-const.S
new file mode 100644
index 0000000..f5c64f9
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-const.S
@@ -0,0 +1,224 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Dummy function to provide debug information for.  */
+
+	.text
+.Lbegin_text1:
+	.globl func_cu1
+	.type func_cu1, %function
+func_cu1:
+.Lbegin_func_cu1:
+	.int 0
+.Lend_func_cu1:
+	.size func_cu1, .-func_cu1
+.Lend_text1:
+
+/* Debug information */
+
+	.section .debug_info
+.Lcu1_begin:
+	/* CU header */
+	.4byte	.Lcu1_end - .Lcu1_start		/* Length of Compilation Unit */
+.Lcu1_start:
+	.2byte	2				/* DWARF Version */
+	.4byte	.Labbrev1_begin			/* Offset into abbrev section */
+	.byte	4				/* Pointer size */
+
+	/* CU die */
+	.uleb128 1				/* Abbrev: DW_TAG_compile_unit */
+	.4byte	.Lline1_begin			/* DW_AT_stmt_list */
+	.4byte	.Lend_text1			/* DW_AT_high_pc */
+	.4byte	.Lbegin_text1			/* DW_AT_low_pc */
+	.ascii	"file1.txt\0"			/* DW_AT_name */
+	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
+	.byte	1				/* DW_AT_language (C) */
+
+        .uleb128        0x8                     /* Abbrev: DW_TAG_constant */
+        .ascii          "twelve\0"              /* DW_AT_name */
+	.4byte		.Ltype_const-.Lcu1_begin   /* DW_AT_type */
+        .byte           0xc                     /* DW_AT_const_value */
+
+.Ltype_const:
+        .uleb128        0x9                     /* Abbrev: DW_TAG_const_type */
+        .long           .Ltype_int-.Lcu1_begin  /* DW_AT_type */
+
+	/* func_cu1 */
+	.uleb128	2			/* Abbrev: DW_TAG_subprogram */
+	.byte		1			/* DW_AT_external */
+	.byte		1			/* DW_AT_decl_file */
+	.byte		2			/* DW_AT_decl_line */
+	.ascii		"func_cu1\0"		/* DW_AT_name */
+	.4byte		.Ltype_int-.Lcu1_begin	/* DW_AT_type */
+	.4byte		.Lbegin_func_cu1	/* DW_AT_low_pc */
+	.4byte		.Lend_func_cu1		/* DW_AT_high_pc */
+	.byte		1			/* DW_AT_frame_base: length */
+	.byte		0x55			/* DW_AT_frame_base: DW_OP_reg5 */
+
+.Ltype_int:
+	.uleb128	3			/* Abbrev: DW_TAG_base_type */
+	.ascii		"int\0"			/* DW_AT_name */
+	.byte		4			/* DW_AT_byte_size */
+	.byte		5			/* DW_AT_encoding */
+
+	.byte		0			/* End of children of CU */
+
+.Lcu1_end:
+
+/* Abbrev table */
+	.section .debug_abbrev
+.Labbrev1_begin:
+	.uleb128	1			/* Abbrev code */
+	.uleb128	0x11			/* DW_TAG_compile_unit */
+	.byte		1			/* has_children */
+	.uleb128	0x10			/* DW_AT_stmt_list */
+	.uleb128	0x6			/* DW_FORM_data4 */
+	.uleb128	0x12			/* DW_AT_high_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x11			/* DW_AT_low_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x25			/* DW_AT_producer */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x13			/* DW_AT_language */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.uleb128	2			/* Abbrev code */
+	.uleb128	0x2e			/* DW_TAG_subprogram */
+	.byte		0			/* has_children */
+	.uleb128	0x3f			/* DW_AT_external */
+	.uleb128	0xc			/* DW_FORM_flag */
+	.uleb128	0x3a			/* DW_AT_decl_file */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.uleb128	0x3b			/* DW_AT_decl_line */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x49			/* DW_AT_type */
+	.uleb128	0x13			/* DW_FORM_ref4 */
+	.uleb128	0x11			/* DW_AT_low_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x12			/* DW_AT_high_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x40			/* DW_AT_frame_base */
+	.uleb128	0xa			/* DW_FORM_block1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.uleb128	3			/* Abbrev code */
+	.uleb128	0x24			/* DW_TAG_base_type */
+	.byte		0			/* has_children */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0xb			/* DW_AT_byte_size */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.uleb128	0x3e			/* DW_AT_encoding */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+        .uleb128        0x8                     /* abbrev code */
+        .uleb128        0x27                    /* TAG: DW_TAG_constant */
+        .byte           0x0                     /* DW_children_no */
+        .uleb128        0x3                     /* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+        .uleb128        0x49                    /* DW_AT_type */
+        .uleb128        0x13                    /* DW_FORM_ref4 */
+        .uleb128        0x1c                    /* DW_AT_const_value */
+        .uleb128        0xb                     /* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+        .uleb128        0x9                     /* abbrev code */
+        .uleb128        0x26                    /* TAG: DW_TAG_const_type */
+        .byte           0x0                     /* DW_children_no */
+        .uleb128        0x49                    /* DW_AT_type */
+        .uleb128        0x13                    /* DW_FORM_ref4 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+/* Line table */
+	.section .debug_line
+.Lline1_begin:
+	.4byte		.Lline1_end - .Lline1_start	/* Initial length */
+.Lline1_start:
+	.2byte		2			/* Version */
+	.4byte		.Lline1_lines - .Lline1_hdr	/* header_length */
+.Lline1_hdr:
+	.byte		1			/* Minimum insn length */
+	.byte		1			/* default_is_stmt */
+	.byte		1			/* line_base */
+ 	.byte		1			/* line_range */
+	.byte		0x10			/* opcode_base */
+
+	/* Standard lengths */
+	.byte		0
+	.byte		1
+	.byte		1
+	.byte		1
+	.byte		1
+	.byte		0
+	.byte		0
+	.byte		0
+	.byte		1
+	.byte		0
+	.byte		0
+	.byte		1
+	.byte		0
+	.byte		0
+	.byte		0
+
+	/* Include directories */
+	.byte		0
+
+	/* File names */
+	.ascii		"file1.txt\0"
+	.uleb128	0
+	.uleb128	0
+	.uleb128	0
+
+	.byte		0
+
+.Lline1_lines:
+	.byte		0	/* DW_LNE_set_address */
+	.uleb128	5
+	.byte		2
+	.4byte		.Lbegin_func_cu1
+
+	.byte		3	/* DW_LNS_advance_line */
+	.sleb128	3	/* ... to 4 */
+
+	.byte		1	/* DW_LNS_copy */
+
+	.byte		1	/* DW_LNS_copy (second time as an end-of-prologue marker) */
+
+	.byte		0	/* DW_LNE_set_address */
+	.uleb128	5
+	.byte		2
+	.4byte		.Lend_func_cu1
+
+	.byte		0	/* DW_LNE_end_of_sequence */
+	.uleb128	1
+	.byte		1
+
+.Lline1_end:
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-const.exp b/gdb/testsuite/gdb.dwarf2/dw2-const.exp
new file mode 100644
index 0000000..d7bf46f
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-const.exp
@@ -0,0 +1,46 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+# For now pick a sampling of likely targets.
+if {![istarget *-*-linux*]
+    && ![istarget *-*-gnu*]
+    && ![istarget *-*-elf*]
+    && ![istarget *-*-openbsd*]
+    && ![istarget arm-*-eabi*]
+    && ![istarget powerpc-*-eabi*]} {
+    return 0
+}
+
+set testfile "dw2-const"
+set srcfile ${testfile}.S
+set binfile ${objdir}/${subdir}/${testfile}.x
+
+if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+    return -1
+}
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
+    return -1
+}
+
+if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
+    return -1
+}
+
+clean_restart ${testfile}.x
+
+gdb_test "print twelve" "= 12"
+

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs
  2010-09-16 22:29   ` Joel Brobecker
@ 2010-09-17 13:11     ` Pedro Alves
  0 siblings, 0 replies; 9+ messages in thread
From: Pedro Alves @ 2010-09-17 13:11 UTC (permalink / raw)
  To: gdb-patches; +Cc: Joel Brobecker, Nathan Froyd

On Thursday 16 September 2010 21:43:50, Joel Brobecker wrote:
> +
> +       if (pdi->is_external)
> +         list = &objfile->global_psymbols;
> +       else
> +         list = &objfile->static_psymbols,

Comma operator alert.                       ^

> +       psym = add_psymbol_to_list (actual_name, strlen (actual_name),
> +                                   built_actual_name, VAR_DOMAIN, LOC_STATIC,
> +                                   list, 0, 0, cu->language, objfile);

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs
  2010-09-16 21:31 [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs Joel Brobecker
  2010-09-16 22:23 ` Nathan Froyd
@ 2010-09-19 23:02 ` Jan Kratochvil
  2010-09-21 18:41   ` Joel Brobecker
  1 sibling, 1 reply; 9+ messages in thread
From: Jan Kratochvil @ 2010-09-19 23:02 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On Thu, 16 Sep 2010 22:22:26 +0200, Joel Brobecker wrote:
> The GNAT compiler is starting to email DW_TAG_constant dies,

gfortran emits them since 2008:
	http://pkgs.fedoraproject.org/gitweb/?p=gdb.git;a=blob;f=gdb-6.8-fortran-tag-constant.patch;hb=HEAD

From the differences:

die_needs_namespace: DW_TAG_constant is missing in your patch, tested by the
attached testcase.  For gfortran-4.5 it has a prerequisite:
	[patch] regression on gfortran-4.5: stopped language detection
	http://sourceware.org/ml/gdb-patches/2010-09/msg00329.html
(for gdb.fortran/* one must create ln -s /usr/bin/gfortran $topdir/g77)

For add_partial_symbol - why do you make DW_TAG_constant different from
DW_TAG_variable?  DW_TAG_variable would handle more cases there.

Otherwise the patch of mine was forcing TYPE_CONST on that type but it is
unclear whether it should not be rather emitted by GCC.  DW_TAG_const_type is
emitted by gfortran.  So GDB is probably OK without forcing it.


Thanks,
Jan


gdb/
2010-09-19  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2read.c (die_needs_namespace) <DW_TAG_variable>: Add also
	DW_TAG_constant.

gdb/testsuite/
2010-09-19  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.fortran/module.exp (fully qualified name of DW_TAG_constant):
	New test.
	* gdb.fortran/module.f90 (mod1) <var_const>: New constant.

--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -4599,6 +4601,7 @@ die_needs_namespace (struct die_info *die, struct dwarf2_cu *cu)
       return 1;
 
     case DW_TAG_variable:
+    case DW_TAG_constant:
       /* We only need to prefix "globally" visible variables.  These include
 	 any variable marked with DW_AT_external or any variable that
 	 lives in a namespace.  [Variables in anonymous namespaces
--- a/gdb/testsuite/gdb.fortran/module.exp
+++ b/gdb/testsuite/gdb.fortran/module.exp
@@ -26,6 +26,8 @@ if { [prepare_for_testing $testfile.exp $testfile $srcfile {debug f77}] } {
 # The current source language is "auto; currently fortran".
 gdb_test "p modmany::var_i" " = 14" "stopped language detection"
 
+gdb_test "print mod1::var_const" " = 20" "fully qualified name of DW_TAG_constant"
+
 if ![runto MAIN__] then {
     perror "couldn't run to breakpoint MAIN__"
     continue
--- a/gdb/testsuite/gdb.fortran/module.f90
+++ b/gdb/testsuite/gdb.fortran/module.f90
@@ -15,6 +15,8 @@
 
 module mod1
         integer :: var_i = 1
+        integer :: var_const
+        parameter (var_const = 20)
 end module mod1
 
 module mod2

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs
  2010-09-19 23:02 ` Jan Kratochvil
@ 2010-09-21 18:41   ` Joel Brobecker
  2010-09-21 19:43     ` Jan Kratochvil
  0 siblings, 1 reply; 9+ messages in thread
From: Joel Brobecker @ 2010-09-21 18:41 UTC (permalink / raw)
  To: Jan Kratochvil; +Cc: gdb-patches

> For add_partial_symbol - why do you make DW_TAG_constant different from
> DW_TAG_variable?  DW_TAG_variable would handle more cases there.

As explained in my original email - I felt at the time that this would
make the DW_TAG_variable case overly complicated, whereas I did not see
why DW_TAG_constant would need more than what I added. If we prefer to
merge the two, I'm happy too. I just wanted to help keep things as
simple as possible.  What do you think?

I'm sorry about the two blunders last week. The consequence of trying
to do too much at the same time while trying to get ready for yet
another trip. I'm back, now, so I will try to focus a little better.

-- 
Joel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs
  2010-09-21 18:41   ` Joel Brobecker
@ 2010-09-21 19:43     ` Jan Kratochvil
  2010-09-22 18:43       ` Joel Brobecker
  0 siblings, 1 reply; 9+ messages in thread
From: Jan Kratochvil @ 2010-09-21 19:43 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On Mon, 20 Sep 2010 18:08:44 +0200, Joel Brobecker wrote:
> As explained in my original email - I felt at the time that this would
> make the DW_TAG_variable case overly complicated, whereas I did not see
> why DW_TAG_constant would need more than what I added. If we prefer to
> merge the two, I'm happy too. I just wanted to help keep things as
> simple as possible.  What do you think?

I got it now - I had the bug you describe in the patch of mine.  I am also in
favor of your simplified code case.


Thanks,
Jan

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs
  2010-09-21 19:43     ` Jan Kratochvil
@ 2010-09-22 18:43       ` Joel Brobecker
  2010-09-22 19:42         ` Jan Kratochvil
  0 siblings, 1 reply; 9+ messages in thread
From: Joel Brobecker @ 2010-09-22 18:43 UTC (permalink / raw)
  To: Jan Kratochvil; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 236 bytes --]

> I got it now - I had the bug you describe in the patch of mine.  I am also in
> favor of your simplified code case.

Cool. This is what I ended up checking in, after testing on x86_64-linux.
Do you want to commit your part?

-- 
Joel

[-- Attachment #2: tag-constant-3.diff --]
[-- Type: text/x-diff, Size: 12253 bytes --]

commit af62592968373eb577c44d0ab592e4f28ea2e6f9
Author: Joel Brobecker <brobecker@adacore.com>
Date:   Tue Sep 14 21:20:47 2010 -0700

    DWARF: Add support for DW_TAG_constant DIEs
    
    gdb/ChangeLog:
    
            * dwarf2read.c (scan_partial_symbols): Add handling of
            DW_TAG_constant DIEs.
            (add_partial_symbol, load_partial_dies, new_symbol): Likewise.
    
    gdb/testsuite/ChangeLog:
    
            * gdb.dwarf2/dw2-const.S, gdb.dwarf2/dw2-const.exp: New files.

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7f274ab..0f1bdc1 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
 2010-09-22  Joel Brobecker  <brobecker@adacore.com>
 
+	* dwarf2read.c (scan_partial_symbols): Add handling of
+	DW_TAG_constant DIEs.
+	(add_partial_symbol, load_partial_dies, new_symbol): Likewise.
+
+2010-09-22  Joel Brobecker  <brobecker@adacore.com>
+
 	* configure.ac: Add support for --enable-gdbserver.
 	* configure: Regenerate.
 
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index c4016b2..082400e 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -3466,6 +3466,7 @@ scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc,
 	    case DW_TAG_subprogram:
 	      add_partial_subprogram (pdi, lowpc, highpc, need_pc, cu);
 	      break;
+	    case DW_TAG_constant:
 	    case DW_TAG_variable:
 	    case DW_TAG_typedef:
 	    case DW_TAG_union_type:
@@ -3690,6 +3691,20 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
 				      cu->language, objfile);
 	}
       break;
+    case DW_TAG_constant:
+      {
+        struct psymbol_allocation_list *list;
+
+	if (pdi->is_external)
+	  list = &objfile->global_psymbols;
+	else
+	  list = &objfile->static_psymbols;
+	psym = add_psymbol_to_list (actual_name, strlen (actual_name),
+				    built_actual_name, VAR_DOMAIN, LOC_STATIC,
+				    list, 0, 0, cu->language, objfile);
+
+      }
+      break;
     case DW_TAG_variable:
       if (pdi->locdesc)
 	addr = decode_locdesc (pdi->locdesc, cu);
@@ -8567,6 +8582,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	 static members).  */
       if (!load_all
 	  && !is_type_tag_for_partial (abbrev->tag)
+	  && abbrev->tag != DW_TAG_constant
 	  && abbrev->tag != DW_TAG_enumerator
 	  && abbrev->tag != DW_TAG_subprogram
 	  && abbrev->tag != DW_TAG_lexical_block
@@ -8677,6 +8693,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	 unit with load_all_dies set.  */
 
       if (load_all
+	  || abbrev->tag == DW_TAG_constant
 	  || abbrev->tag == DW_TAG_subprogram
 	  || abbrev->tag == DW_TAG_variable
 	  || abbrev->tag == DW_TAG_namespace
@@ -10583,6 +10600,7 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
 	case DW_TAG_template_value_param:
 	  suppress_add = 1;
 	  /* Fall through.  */
+	case DW_TAG_constant:
 	case DW_TAG_variable:
 	case DW_TAG_member:
 	  /* Compilation with minimal debug info may result in variables
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index fc645fe..dd54449 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2010-09-22  Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.dwarf2/dw2-const.S, gdb.dwarf2/dw2-const.exp: New files.
+
 2010-09-16  Phil Muldoon  <pmuldoon@redhat.com>
             Jan Kratochvil  <jan.kratochvil@redhat.com>
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-const.S b/gdb/testsuite/gdb.dwarf2/dw2-const.S
new file mode 100644
index 0000000..f5c64f9
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-const.S
@@ -0,0 +1,224 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Dummy function to provide debug information for.  */
+
+	.text
+.Lbegin_text1:
+	.globl func_cu1
+	.type func_cu1, %function
+func_cu1:
+.Lbegin_func_cu1:
+	.int 0
+.Lend_func_cu1:
+	.size func_cu1, .-func_cu1
+.Lend_text1:
+
+/* Debug information */
+
+	.section .debug_info
+.Lcu1_begin:
+	/* CU header */
+	.4byte	.Lcu1_end - .Lcu1_start		/* Length of Compilation Unit */
+.Lcu1_start:
+	.2byte	2				/* DWARF Version */
+	.4byte	.Labbrev1_begin			/* Offset into abbrev section */
+	.byte	4				/* Pointer size */
+
+	/* CU die */
+	.uleb128 1				/* Abbrev: DW_TAG_compile_unit */
+	.4byte	.Lline1_begin			/* DW_AT_stmt_list */
+	.4byte	.Lend_text1			/* DW_AT_high_pc */
+	.4byte	.Lbegin_text1			/* DW_AT_low_pc */
+	.ascii	"file1.txt\0"			/* DW_AT_name */
+	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
+	.byte	1				/* DW_AT_language (C) */
+
+        .uleb128        0x8                     /* Abbrev: DW_TAG_constant */
+        .ascii          "twelve\0"              /* DW_AT_name */
+	.4byte		.Ltype_const-.Lcu1_begin   /* DW_AT_type */
+        .byte           0xc                     /* DW_AT_const_value */
+
+.Ltype_const:
+        .uleb128        0x9                     /* Abbrev: DW_TAG_const_type */
+        .long           .Ltype_int-.Lcu1_begin  /* DW_AT_type */
+
+	/* func_cu1 */
+	.uleb128	2			/* Abbrev: DW_TAG_subprogram */
+	.byte		1			/* DW_AT_external */
+	.byte		1			/* DW_AT_decl_file */
+	.byte		2			/* DW_AT_decl_line */
+	.ascii		"func_cu1\0"		/* DW_AT_name */
+	.4byte		.Ltype_int-.Lcu1_begin	/* DW_AT_type */
+	.4byte		.Lbegin_func_cu1	/* DW_AT_low_pc */
+	.4byte		.Lend_func_cu1		/* DW_AT_high_pc */
+	.byte		1			/* DW_AT_frame_base: length */
+	.byte		0x55			/* DW_AT_frame_base: DW_OP_reg5 */
+
+.Ltype_int:
+	.uleb128	3			/* Abbrev: DW_TAG_base_type */
+	.ascii		"int\0"			/* DW_AT_name */
+	.byte		4			/* DW_AT_byte_size */
+	.byte		5			/* DW_AT_encoding */
+
+	.byte		0			/* End of children of CU */
+
+.Lcu1_end:
+
+/* Abbrev table */
+	.section .debug_abbrev
+.Labbrev1_begin:
+	.uleb128	1			/* Abbrev code */
+	.uleb128	0x11			/* DW_TAG_compile_unit */
+	.byte		1			/* has_children */
+	.uleb128	0x10			/* DW_AT_stmt_list */
+	.uleb128	0x6			/* DW_FORM_data4 */
+	.uleb128	0x12			/* DW_AT_high_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x11			/* DW_AT_low_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x25			/* DW_AT_producer */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x13			/* DW_AT_language */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.uleb128	2			/* Abbrev code */
+	.uleb128	0x2e			/* DW_TAG_subprogram */
+	.byte		0			/* has_children */
+	.uleb128	0x3f			/* DW_AT_external */
+	.uleb128	0xc			/* DW_FORM_flag */
+	.uleb128	0x3a			/* DW_AT_decl_file */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.uleb128	0x3b			/* DW_AT_decl_line */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x49			/* DW_AT_type */
+	.uleb128	0x13			/* DW_FORM_ref4 */
+	.uleb128	0x11			/* DW_AT_low_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x12			/* DW_AT_high_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x40			/* DW_AT_frame_base */
+	.uleb128	0xa			/* DW_FORM_block1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.uleb128	3			/* Abbrev code */
+	.uleb128	0x24			/* DW_TAG_base_type */
+	.byte		0			/* has_children */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0xb			/* DW_AT_byte_size */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.uleb128	0x3e			/* DW_AT_encoding */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+        .uleb128        0x8                     /* abbrev code */
+        .uleb128        0x27                    /* TAG: DW_TAG_constant */
+        .byte           0x0                     /* DW_children_no */
+        .uleb128        0x3                     /* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+        .uleb128        0x49                    /* DW_AT_type */
+        .uleb128        0x13                    /* DW_FORM_ref4 */
+        .uleb128        0x1c                    /* DW_AT_const_value */
+        .uleb128        0xb                     /* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+        .uleb128        0x9                     /* abbrev code */
+        .uleb128        0x26                    /* TAG: DW_TAG_const_type */
+        .byte           0x0                     /* DW_children_no */
+        .uleb128        0x49                    /* DW_AT_type */
+        .uleb128        0x13                    /* DW_FORM_ref4 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+/* Line table */
+	.section .debug_line
+.Lline1_begin:
+	.4byte		.Lline1_end - .Lline1_start	/* Initial length */
+.Lline1_start:
+	.2byte		2			/* Version */
+	.4byte		.Lline1_lines - .Lline1_hdr	/* header_length */
+.Lline1_hdr:
+	.byte		1			/* Minimum insn length */
+	.byte		1			/* default_is_stmt */
+	.byte		1			/* line_base */
+ 	.byte		1			/* line_range */
+	.byte		0x10			/* opcode_base */
+
+	/* Standard lengths */
+	.byte		0
+	.byte		1
+	.byte		1
+	.byte		1
+	.byte		1
+	.byte		0
+	.byte		0
+	.byte		0
+	.byte		1
+	.byte		0
+	.byte		0
+	.byte		1
+	.byte		0
+	.byte		0
+	.byte		0
+
+	/* Include directories */
+	.byte		0
+
+	/* File names */
+	.ascii		"file1.txt\0"
+	.uleb128	0
+	.uleb128	0
+	.uleb128	0
+
+	.byte		0
+
+.Lline1_lines:
+	.byte		0	/* DW_LNE_set_address */
+	.uleb128	5
+	.byte		2
+	.4byte		.Lbegin_func_cu1
+
+	.byte		3	/* DW_LNS_advance_line */
+	.sleb128	3	/* ... to 4 */
+
+	.byte		1	/* DW_LNS_copy */
+
+	.byte		1	/* DW_LNS_copy (second time as an end-of-prologue marker) */
+
+	.byte		0	/* DW_LNE_set_address */
+	.uleb128	5
+	.byte		2
+	.4byte		.Lend_func_cu1
+
+	.byte		0	/* DW_LNE_end_of_sequence */
+	.uleb128	1
+	.byte		1
+
+.Lline1_end:
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-const.exp b/gdb/testsuite/gdb.dwarf2/dw2-const.exp
new file mode 100644
index 0000000..d7bf46f
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-const.exp
@@ -0,0 +1,46 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+# For now pick a sampling of likely targets.
+if {![istarget *-*-linux*]
+    && ![istarget *-*-gnu*]
+    && ![istarget *-*-elf*]
+    && ![istarget *-*-openbsd*]
+    && ![istarget arm-*-eabi*]
+    && ![istarget powerpc-*-eabi*]} {
+    return 0
+}
+
+set testfile "dw2-const"
+set srcfile ${testfile}.S
+set binfile ${objdir}/${subdir}/${testfile}.x
+
+if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+    return -1
+}
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
+    return -1
+}
+
+if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
+    return -1
+}
+
+clean_restart ${testfile}.x
+
+gdb_test "print twelve" "= 12"
+

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs
  2010-09-22 18:43       ` Joel Brobecker
@ 2010-09-22 19:42         ` Jan Kratochvil
  0 siblings, 0 replies; 9+ messages in thread
From: Jan Kratochvil @ 2010-09-22 19:42 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On Wed, 22 Sep 2010 18:20:14 +0200, Joel Brobecker wrote:
> Do you want to commit your part?

Checked-in:
	http://sourceware.org/ml/gdb-cvs/2010-09/msg00135.html

Testable only with gcc-4.4, before I check-in:
	[patch] regression on gfortran-4.5: stopped language detection
	http://sourceware.org/ml/gdb-patches/2010-09/msg00329.html


Thanks,
Jan

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2010-09-22 19:24 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-09-16 21:31 [RFA/commit] DWARF: Add support for DW_TAG_constant DIEs Joel Brobecker
2010-09-16 22:23 ` Nathan Froyd
2010-09-16 22:29   ` Joel Brobecker
2010-09-17 13:11     ` Pedro Alves
2010-09-19 23:02 ` Jan Kratochvil
2010-09-21 18:41   ` Joel Brobecker
2010-09-21 19:43     ` Jan Kratochvil
2010-09-22 18:43       ` Joel Brobecker
2010-09-22 19:42         ` Jan Kratochvil

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).