public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Fix regression in -file-list-exec-source-files command.
@ 2010-08-19  9:18 Joel Brobecker
  2010-08-19 10:01 ` Joel Brobecker
  0 siblings, 1 reply; 6+ messages in thread
From: Joel Brobecker @ 2010-08-19  9:18 UTC (permalink / raw)
  To: gdb-patches; +Cc: Joel Brobecker

This is to fix one of the issues that was blocking for the 7.2 release :).

See http://sourceware.org/ml/gdb/2010-07/msg00118.html for
a description of the problem. Namely, the file and fullname
fields are inverted in the output of the -file-list-exec-source-files
GDB/MI command:

    (gdb) interpreter-exec mi -file-list-exec-source-files
    ^done,files=[{file="/takamaka.a/brobecke/ex/list-exec-source-files/foo.c",fullname="foo.c"},{file="/takamaka.a/brobecke/ex/list-exec-source-files/foo.c",fullname="foo.c"},{file="",fullname="init.c"},{file="",fullname="../sysdeps/x86_64/elf/start.S"},{file="",fullname="../sysdeps/x86_64/elf/start.S"}]

It turns out to be a silly thinko: The map_symbol_filenames function
calls the psymtab version of map_symbol_filenames routine, and this
version called the callback function with filename and fullname
in the wrong order (fullname/filename instead of filename/fullname).

The routine description in symfile.h confirst that expected order for
the FUN callback parameters:

    /* Call a callback for every file defined in OBJFILE.  FUN is the
       callback.  It is passed the file's name, the file's full name,
       and the DATA passed to this function.  */
    void (*map_symbol_filenames) (struct objfile *objfile,
                                  void (*fun) (const char *, const char *,
                                               void *),
                                  void *data);

Fixing this error uncovered another location where the arguments
were reversed: maybe_add_partial_symtab_filename.  Once the first
error was fixed, the debugger would crash while attempting to do
completion, because it was given a NULL fullname instead of the
non-NULL filename.

IMO, we would had a better chance of avoiding this sort of issue if we
had named the parameters in the callback function. It was less than
immediate to verify the order of arguments when I found the source of
the first problem (unnamed parameters, and lack of function documentation).
What I suggest is to create a type for the function pointer callback,
and have the parameters named and documented... But that can be taken
care of through another patch.

gdb/ChangeLog:

        * psymtab.c (map_symbol_filenames_psymtab): Call FUN with
        the arguments in the correct order.
        * symtab.c (maybe_add_partial_symtab_filename): Declare
        the arguments in the correct order.

I've checked this in HEAD and 7.2 branch, as it seems sufficiently obvious.
This was tested on x86_64-linux in HEAD.  I'll see whether it's possible
to create a regression test or not, next.

---
 gdb/ChangeLog |    7 +++++++
 gdb/psymtab.c |    2 +-
 gdb/symtab.c  |    2 +-
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b889876..580be2b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2010-08-19  Joel Brobecker  <brobecker@adacore.com>
+
+	* psymtab.c (map_symbol_filenames_psymtab): Call FUN with
+	the arguments in the correct order.
+	* symtab.c (maybe_add_partial_symtab_filename): Declare
+	the arguments in the correct order.
+
 2010-08-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
 	* varobj.c (varobj_create): Replace variable old_fi with old_id,
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index bc47681..228b7a8 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -913,7 +913,7 @@ map_symbol_filenames_psymtab (struct objfile *objfile,
 	continue;
 
       fullname = psymtab_to_fullname (ps);
-      (*fun) (fullname, ps->filename, data);
+      (*fun) (ps->filename, fullname, data);
     }
 }
 
diff --git a/gdb/symtab.c b/gdb/symtab.c
index d43d573..baf6d94 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -4072,7 +4072,7 @@ struct add_partial_filename_data
 
 /* A callback for map_partial_symbol_filenames.  */
 static void
-maybe_add_partial_symtab_filename (const char *fullname, const char *filename,
+maybe_add_partial_symtab_filename (const char *filename, const char *fullname,
 				   void *user_data)
 {
   struct add_partial_filename_data *data = user_data;
-- 
1.7.1

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

* Re: [PATCH] Fix regression in -file-list-exec-source-files command.
  2010-08-19  9:18 [PATCH] Fix regression in -file-list-exec-source-files command Joel Brobecker
@ 2010-08-19 10:01 ` Joel Brobecker
  2010-08-19 16:35   ` Doug Evans
  0 siblings, 1 reply; 6+ messages in thread
From: Joel Brobecker @ 2010-08-19 10:01 UTC (permalink / raw)
  To: gdb-patches

> This was tested on x86_64-linux in HEAD.  I'll see whether it's possible
> to create a regression test or not, next.

The problem that I am seeing is that, in the testsuite, we compile the
examples using the source full filenames. For instance, using
gdb.base/arrayidx.exp, we do:

    % gcc /[...]/gdb.base/arrayidx.c -g  -lm   -o [...]

As a result, the filename field ends up containing the fullname:

    (gdb) interpreter-exec mi -file-list-exec-source-files
    ^done,files=[{file="/[...]/gdb.base/arrayidx.c",fullname="/[...]/gdb.base/arrayidx.c"}, [...]

Because of that, we cannot use one of our source files to demonstrate
the problem.

The only thing I can think of that we could use to demonstrate the problem
is to check for empty filenames. Before the patch was applied, one of
the entries looked like this:

    {file="",fullname="init.c"}

There is no guaranty that this is going to happen on all platforms,
or even appear consistently on a given platform. This is probably
dependent on the compiler as well as the way system libraries such
as the C library have been built.  But I suppose that is better than
nothing.

-- 
Joel

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

* Re: [PATCH] Fix regression in -file-list-exec-source-files command.
  2010-08-19 10:01 ` Joel Brobecker
@ 2010-08-19 16:35   ` Doug Evans
  2010-08-19 18:35     ` [RFA/commit/testsuite] Add test for -file-list-exec-source-files Joel Brobecker
  0 siblings, 1 reply; 6+ messages in thread
From: Doug Evans @ 2010-08-19 16:35 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On Thu, Aug 19, 2010 at 3:01 AM, Joel Brobecker <brobecker@adacore.com> wrote:
>> This was tested on x86_64-linux in HEAD.  I'll see whether it's possible
>> to create a regression test or not, next.
>
> The problem that I am seeing is that, in the testsuite, we compile the
> examples using the source full filenames. For instance, using
> gdb.base/arrayidx.exp, we do:
>
>    % gcc /[...]/gdb.base/arrayidx.c -g  -lm   -o [...]
>
> As a result, the filename field ends up containing the fullname:
>
>    (gdb) interpreter-exec mi -file-list-exec-source-files
>    ^done,files=[{file="/[...]/gdb.base/arrayidx.c",fullname="/[...]/gdb.base/arrayidx.c"}, [...]
>
> Because of that, we cannot use one of our source files to demonstrate
> the problem.
>
> The only thing I can think of that we could use to demonstrate the problem
> is to check for empty filenames. Before the patch was applied, one of
> the entries looked like this:
>
>    {file="",fullname="init.c"}
>
> There is no guaranty that this is going to happen on all platforms,
> or even appear consistently on a given platform. This is probably
> dependent on the compiler as well as the way system libraries such
> as the C library have been built.  But I suppose that is better than
> nothing.

While not ideal, could you create a test in assembler/dwarf?

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

* [RFA/commit/testsuite] Add test for -file-list-exec-source-files
  2010-08-19 16:35   ` Doug Evans
@ 2010-08-19 18:35     ` Joel Brobecker
  2010-08-19 18:55       ` Jan Kratochvil
  0 siblings, 1 reply; 6+ messages in thread
From: Joel Brobecker @ 2010-08-19 18:35 UTC (permalink / raw)
  To: gdb-patches; +Cc: Joel Brobecker

Hello,

As suggested by Doug, we can use a hand-written assembly file to
force the type of debugging information that we need in order to
reproduce the problem that was reported with -file-list-exec-source-files.

Although not ideal, as mentioned Doug, I think that is much better than
what I initially suggested, as are sure that we will be testing the fix
on GNU targets running ELF. And I think that this is more than enough
to ensure that any regression gets noticed promptly.

I almost entirely copied the dw2-basic testcase, and just adapted it
loosely to do my own test rather than make a minimal one.  As such,
I preserved the original copyright years and also put a note mentioning
where the testcase comes from.

gdb/testsuite/ChangeLog:

        * gdb.dwarf/dw2-filename.S, gdb.dwarf/dw2-filename.exp: New files.

Tested on x86_64-linux. Fails before the fix is applied, passes afterwards.
Does this look OK?

---
 gdb/testsuite/gdb.dwarf2/dw2-filename.S   |  199 +++++++++++++++++++++++++++++
 gdb/testsuite/gdb.dwarf2/dw2-filename.exp |   54 ++++++++
 2 files changed, 253 insertions(+), 0 deletions(-)
 create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-filename.S
 create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-filename.exp

diff --git a/gdb/testsuite/gdb.dwarf2/dw2-filename.S b/gdb/testsuite/gdb.dwarf2/dw2-filename.S
new file mode 100644
index 0000000..a6c9da8
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-filename.S
@@ -0,0 +1,199 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2004, 2007, 2008, 2009, 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/>.  */
+
+/* Test a minimal file containing DWARF-2 information.  This test also
+   serves as a skeleton for other DWARF-2 tests.  Most other tests will
+   not be this extensively itemized and commented...  */
+
+/* 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) */
+
+	/* 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 */
+
+	.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-filename.exp b/gdb/testsuite/gdb.dwarf2/dw2-filename.exp
new file mode 100644
index 0000000..f0c5ae8
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-filename.exp
@@ -0,0 +1,54 @@
+# Copyright 2004, 2005, 2007, 2008, 2009, 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/>.
+
+# Note: Inspired from dw2-basic.exp.
+
+# 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-filename"
+set dwarf_srcfile "file1.txt"
+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
+
+# Verify that -file-list-exec-source-files returns a list where
+# the "file" is "file1.txt" (file base name), and "fullname" is
+# the full path to that file.  What we want to verify, most of all,
+# is that the file and fullname fields are now inverted.
+gdb_test "interpreter-exec mi -file-list-exec-source-files" \
+         ".*{file=\"file1\\.txt\",fullname=\".+file1\\.txt\"}.*"
+
-- 
1.7.1

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

* Re: [RFA/commit/testsuite] Add test for -file-list-exec-source-files
  2010-08-19 18:35     ` [RFA/commit/testsuite] Add test for -file-list-exec-source-files Joel Brobecker
@ 2010-08-19 18:55       ` Jan Kratochvil
  2010-09-02 15:37         ` Joel Brobecker
  0 siblings, 1 reply; 6+ messages in thread
From: Jan Kratochvil @ 2010-08-19 18:55 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On Thu, 19 Aug 2010 20:35:12 +0200, Joel Brobecker wrote:
> I almost entirely copied the dw2-basic testcase, and just adapted it
> loosely to do my own test rather than make a minimal one.

I really do not mind as the existint gdb.dwarf2/ testcases are in many cases
overcomplicated anyway but providing a simplified code still FAILing/PASSing
appropriately.


Thanks,
Jan


--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-filename.S
@@ -0,0 +1,53 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2004, 2007, 2008, 2009, 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/>.  */
+
+/* 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 */
+	.ascii	"file1.txt\0"			/* DW_AT_name */
+	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
+	.byte	1				/* DW_AT_language (C) */
+
+.Lcu1_end:
+
+/* Abbrev table */
+	.section .debug_abbrev
+.Labbrev1_begin:
+	.uleb128	1			/* Abbrev code */
+	.uleb128	0x11			/* DW_TAG_compile_unit */
+	.byte		0			/* has_children */
+	.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 */
+
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-filename.exp
@@ -0,0 +1,44 @@
+# Copyright 2004, 2005, 2007, 2008, 2009, 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/>.
+
+# Note: Inspired from dw2-basic.exp.
+
+# 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-filename"
+set srcfile ${testfile}.S
+set binfile ${objdir}/${subdir}/${testfile}.x
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {nodebug}] != "" } {
+    return -1
+}
+
+clean_restart ${testfile}.x
+
+# Verify that -file-list-exec-source-files returns a list where
+# the "file" is "file1.txt" (file base name), and "fullname" is
+# the full path to that file.  What we want to verify, most of all,
+# is that the file and fullname fields are now inverted.
+gdb_test "interpreter-exec mi -file-list-exec-source-files" \
+         ".*{file=\"file1\\.txt\",fullname=\".+file1\\.txt\"}.*"

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

* Re: [RFA/commit/testsuite] Add test for -file-list-exec-source-files
  2010-08-19 18:55       ` Jan Kratochvil
@ 2010-09-02 15:37         ` Joel Brobecker
  0 siblings, 0 replies; 6+ messages in thread
From: Joel Brobecker @ 2010-09-02 15:37 UTC (permalink / raw)
  To: Jan Kratochvil; +Cc: gdb-patches

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

> > I almost entirely copied the dw2-basic testcase, and just adapted it
> > loosely to do my own test rather than make a minimal one.
> 
> I really do not mind as the existint gdb.dwarf2/ testcases are in many cases
> overcomplicated anyway but providing a simplified code still FAILing/PASSing
> appropriately.

:-) Thanks for doing that! I checked this testcase in as attached.

-- 
Joel

[-- Attachment #2: tc.diff --]
[-- Type: text/x-diff, Size: 4748 bytes --]

commit 46713d72258fedf05fb0fa3f385c42b398a3e47b
Author: Joel Brobecker <brobecker@adacore.com>
Date:   Thu Aug 19 20:15:32 2010 +0200

    Add test for -file-list-exec-source-files
    
    gdb/testsuite/ChangeLog:
    
            * gdb.dwarf/dw2-filename.S, gdb.dwarf/dw2-filename.exp: New files.

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 12e33a7..084c227 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-09-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+            Joel Brobecker  <brobecker@adacore.com>
+
+	* gdb.dwarf/dw2-filename.S, gdb.dwarf/dw2-filename.exp: New files.
+
 2010-08-31  Doug Evans  <dje@google.com>
 
 	* gdb.dwarf2/dw4-sig-types.exp: Use .x for executable name.
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-filename.S b/gdb/testsuite/gdb.dwarf2/dw2-filename.S
new file mode 100644
index 0000000..7cac4ab
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-filename.S
@@ -0,0 +1,53 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2004, 2007, 2008, 2009, 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/>.  */
+
+/* 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 */
+	.ascii	"file1.txt\0"			/* DW_AT_name */
+	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
+	.byte	1				/* DW_AT_language (C) */
+
+.Lcu1_end:
+
+/* Abbrev table */
+	.section .debug_abbrev
+.Labbrev1_begin:
+	.uleb128	1			/* Abbrev code */
+	.uleb128	0x11			/* DW_TAG_compile_unit */
+	.byte		0			/* has_children */
+	.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 */
+
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-filename.exp b/gdb/testsuite/gdb.dwarf2/dw2-filename.exp
new file mode 100644
index 0000000..e1afe64
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-filename.exp
@@ -0,0 +1,44 @@
+# Copyright 2004, 2005, 2007, 2008, 2009, 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/>.
+
+# Note: Inspired from dw2-basic.exp.
+
+# 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-filename"
+set srcfile ${testfile}.S
+set binfile ${objdir}/${subdir}/${testfile}.x
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {nodebug}] != "" } {
+    return -1
+}
+
+clean_restart ${testfile}.x
+
+# Verify that -file-list-exec-source-files returns a list where
+# the "file" is "file1.txt" (file base name), and "fullname" is
+# the full path to that file.  What we want to verify, most of all,
+# is that the file and fullname fields are now inverted.
+gdb_test "interpreter-exec mi -file-list-exec-source-files" \
+         ".*{file=\"file1\\.txt\",fullname=\".+file1\\.txt\"}.*"

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

end of thread, other threads:[~2010-09-02 15:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-19  9:18 [PATCH] Fix regression in -file-list-exec-source-files command Joel Brobecker
2010-08-19 10:01 ` Joel Brobecker
2010-08-19 16:35   ` Doug Evans
2010-08-19 18:35     ` [RFA/commit/testsuite] Add test for -file-list-exec-source-files Joel Brobecker
2010-08-19 18:55       ` Jan Kratochvil
2010-09-02 15:37         ` Joel Brobecker

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