From: Joel Brobecker <brobecker@adacore.com>
To: gdb-patches@sourceware.org
Subject: Re: [RFA/ada] Improve is_known_support_routine
Date: Sun, 07 Jan 2007 07:14:00 -0000 [thread overview]
Message-ID: <20070107071439.GA537@adacore.com> (raw)
In-Reply-To: <20070106182652.GR15512@adacore.com>
[-- Attachment #1: Type: text/plain, Size: 2922 bytes --]
I noticed while cleaning up the same code that I forgot to delete
a local variable that became unused. Here is a new patch.
Rested on x86-linux.
> A customer just reported us an issue that we never noticed before.
> It can be reduced to this:
>
> procedure Foo is
> begin
> raise Constraint_Error;
> end Foo;
>
> We're setting an exception catchpoint. Then we debug from a location
> that's not where the sources are ("cd subdir"):
>
> % gnatmake -g foo
> % gdb foo
> (gdb) cd subdir
> (gdb) catch exception
> (gdb) run
> Catchpoint 1, CONSTRAINT_ERROR at <__gnat_raise_nodefer_with_msg>
> (e=0x805844c) at a-except.adb:818
> 818 a-except.adb: No such file or directory.
> in a-except.adb
> (gdb) f
> #0 <__gnat_raise_nodefer_with_msg> (e=0x805844c) at a-except.adb:818
> 818 in a-except.adb
>
> As you see, the debugger did not go up the call stack to foo.adb.
> Here is the the expected output:
>
> (gdb) run
> Catchpoint 1, CONSTRAINT_ERROR at 0x080497fe in foo () at foo.adb:3
> 3 raise Constraint_Error;
> (gdb) f
> #4 0x080497fe in foo () at foo.adb:3
> 3 raise Constraint_Error;
>
> The is_known_support_routine identifies any frame for which we cannot
> find the source file. The check we currently have in place is a bit too
> simplistic, so I replaced it with the function we use to locate source
> files:
>
> - if (stat (sal.symtab->filename, &st))
> + if (symtab_to_fullname (sal.symtab) == NULL)
>
> Unfortunately, I cannot reproduce this within our testsuite, because
> we use GNAT project files to build the executable. One of the side effects
> of using a project file is that the compiler is called with the absolute
> filename rather than a relative filename. As a result, symtab->filename
> contains the absolute path, and hence the stat call always succeeds.
>
> Because we offer the option of building GDB out of tree, apart from
> creating on the fly the setup in a temporary directory, followed by
> compiling and then testing there, I am not sure how to create a testcase
> for this issue... We were able to add a testcase in our testsuite,
> however, as it uses another type of technology that allows us to build
> our example programs without project files.
>
> For now, I propose that we commit this patch without adding a testcase.
> I think that the symtab_to_fullname routine is already fairly
> extensively tested as it just a wrapper around a fairly central routine
> in source location.
>
> 2007-01-06 Joel Brobecker <brobecker@adacore.com>
>
> * ada-lang.c: Add include of source.h.
> (is_known_support_routine): Improve the check verifying that the file
> associated to this frame exists.
> * Makefile.in (ada-lang.o): Add dependency on source.h.
>
> Tested on x86-linux. Ok to apply?
Thank you,
--
Joel
[-- Attachment #2: stat.diff --]
[-- Type: text/plain, Size: 1938 bytes --]
Index: ada-lang.c
===================================================================
RCS file: /cvs/src/src/gdb/ada-lang.c,v
retrieving revision 1.88
diff -u -p -r1.88 ada-lang.c
--- ada-lang.c 4 Jan 2007 06:31:51 -0000 1.88
+++ ada-lang.c 7 Jan 2007 07:11:44 -0000
@@ -55,6 +55,7 @@ Boston, MA 02110-1301, USA. */
#include "exceptions.h"
#include "annotate.h"
#include "valprint.h"
+#include "source.h"
#ifndef ADA_RETAIN_DOTS
#define ADA_RETAIN_DOTS 0
@@ -9056,7 +9057,6 @@ is_known_support_routine (struct frame_i
= find_pc_line (get_frame_pc (frame), pc_is_after_call);
char *func_name;
int i;
- struct stat st;
/* The heuristic:
1. The symtab is null (indicating no debugging symbols)
@@ -9072,7 +9072,7 @@ is_known_support_routine (struct frame_i
symbols; in this case, the filename referenced by these symbols
does not exists. */
- if (stat (sal.symtab->filename, &st))
+ if (symtab_to_fullname (sal.symtab) == NULL)
return 1;
for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.870
diff -u -p -r1.870 Makefile.in
--- Makefile.in 4 Jan 2007 22:11:44 -0000 1.870
+++ Makefile.in 7 Jan 2007 07:11:52 -0000
@@ -1696,7 +1696,8 @@ ada-lang.o: ada-lang.c $(defs_h) $(gdb_s
$(inferior_h) $(symfile_h) $(objfiles_h) $(breakpoint_h) \
$(gdbcore_h) $(hashtab_h) $(gdb_obstack_h) $(ada_lang_h) \
$(completer_h) $(gdb_stat_h) $(ui_out_h) $(block_h) $(infcall_h) \
- $(dictionary_h) $(exceptions_h) $(annotate_h) $(valprint_h)
+ $(dictionary_h) $(exceptions_h) $(annotate_h) $(valprint_h) \
+ $(source_h)
ada-typeprint.o: ada-typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) \
$(symtab_h) $(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) \
$(target_h) $(command_h) $(gdbcmd_h) $(language_h) $(demangle_h) \
next prev parent reply other threads:[~2007-01-07 7:14 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-06 18:26 Joel Brobecker
2007-01-07 7:14 ` Joel Brobecker [this message]
2007-01-07 23:38 ` Daniel Jacobowitz
2007-01-08 3:30 ` Joel Brobecker
2007-01-08 3:30 ` Joel Brobecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070107071439.GA537@adacore.com \
--to=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox