* [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).