From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10518 invoked by alias); 2 Jan 2008 22:39:44 -0000 Received: (qmail 10460 invoked by uid 9639); 2 Jan 2008 22:39:38 -0000 Date: Wed, 02 Jan 2008 22:39:00 -0000 Message-ID: <20080102223938.10445.qmail@sourceware.org> From: moore@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Don't descend into structure definitions when looking for a function definition X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 5d087b7b9f72f72791cc1349f384bf963c0599e5 X-Git-Newrev: a24692e579989250c60a2cbef2a32bd55b5790ca Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q1/txt/msg00004.txt.bz2 The branch, master has been updated via a24692e579989250c60a2cbef2a32bd55b5790ca (commit) from 5d087b7b9f72f72791cc1349f384bf963c0599e5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit a24692e579989250c60a2cbef2a32bd55b5790ca Author: Tim Moore Date: Wed Jan 2 22:45:33 2008 +0100 Don't descend into structure definitions when looking for a function definition This fixes Bugzilla 5467. frysk-sys/lib/dwfl/cni/ChangeLog: 2008-01-02 Tim Moore * cni/DwarfDie.cxx (iterate_decl): Don't descend into struture and union types. frysk-core/frysk/hpd/ChangeLog: 2008-01-02 Tim Moore * TestBreakpoints.java (testBreakOnStructMemberName): New test. frsyk-core/frysk/pkglibdir/ChangeLog: 2008-01-02 Tim Moore * funit-structmember.c: New test with structure member and function that share a name. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/hpd/ChangeLog | 4 ++++ frysk-core/frysk/hpd/TestBreakpoints.java | 16 ++++++++++++++++ frysk-core/frysk/pkglibdir/ChangeLog | 5 +++++ frysk-core/frysk/pkglibdir/funit-structmember.c | 17 +++++++++++++++++ frysk-sys/lib/dwfl/ChangeLog | 5 +++++ frysk-sys/lib/dwfl/cni/DwarfDie.cxx | 8 ++++---- 6 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 frysk-core/frysk/pkglibdir/funit-structmember.c First 500 lines of diff: diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog index 3dfa4e7..8a026a6 100644 --- a/frysk-core/frysk/hpd/ChangeLog +++ b/frysk-core/frysk/hpd/ChangeLog @@ -1,3 +1,7 @@ +2008-01-02 Tim Moore + + * TestBreakpoints.java (testBreakOnStructMemberName): New test. + 2007-12-20 Phil Muldoon * InfoCommand.java: New. Add auxv, maps, debuginfo. diff --git a/frysk-core/frysk/hpd/TestBreakpoints.java b/frysk-core/frysk/hpd/TestBreakpoints.java index 6c1eae2..7d5ad4b 100644 --- a/frysk-core/frysk/hpd/TestBreakpoints.java +++ b/frysk-core/frysk/hpd/TestBreakpoints.java @@ -173,4 +173,20 @@ public class TestBreakpoints e.expect("Quitting..."); e.close(); } + + // Test if a breakpoint can be set on a function that has the same + // name as a structure member. + + public void testBreakOnStructMemberName() { + e = HpdTestbed.run("funit-structmember"); + e.send("break testfn\n"); + e.expect("break.*" + prompt); + e.send("go\n"); + e.expect("go.*" + prompt + ".*Breakpoint.*testfn.*"); + e.send("where\n"); + e.expect("where.*#0.* testfn *\\(.+\\).*" + prompt); + e.send("quit\n"); + e.expect("Quitting..."); + e.close(); + } } diff --git a/frysk-core/frysk/pkglibdir/ChangeLog b/frysk-core/frysk/pkglibdir/ChangeLog index 01dd56d..21191c8 100644 --- a/frysk-core/frysk/pkglibdir/ChangeLog +++ b/frysk-core/frysk/pkglibdir/ChangeLog @@ -1,3 +1,8 @@ +2008-01-02 Tim Moore + + * funit-structmember.c: New test with structure member and function + that share a name. + 2007-12-21 Petr Machata * funit-calls.c (recursive): New function. diff --git a/frysk-core/frysk/pkglibdir/funit-structmember.c b/frysk-core/frysk/pkglibdir/funit-structmember.c new file mode 100644 index 0000000..9f7ac39 --- /dev/null +++ b/frysk-core/frysk/pkglibdir/funit-structmember.c @@ -0,0 +1,17 @@ +#include + +struct Foo +{ + int (*testfn)(void); +}; + +int testfn(void) +{ + return 42; +} + +int main() +{ + (void)testfn(); + return 0; +} diff --git a/frysk-sys/lib/dwfl/ChangeLog b/frysk-sys/lib/dwfl/ChangeLog index 99d3325..ad8aa0c 100644 --- a/frysk-sys/lib/dwfl/ChangeLog +++ b/frysk-sys/lib/dwfl/ChangeLog @@ -1,3 +1,8 @@ +2008-01-02 Tim Moore + + * cni/DwarfDie.cxx (iterate_decl): Don't descend into struture and + union types. + 2007-12-14 Sami Wagiaalla * DwarfDie.java (isDefinitionOnly): New function. diff --git a/frysk-sys/lib/dwfl/cni/DwarfDie.cxx b/frysk-sys/lib/dwfl/cni/DwarfDie.cxx index ea328be..9274ea8 100644 --- a/frysk-sys/lib/dwfl/cni/DwarfDie.cxx +++ b/frysk-sys/lib/dwfl/cni/DwarfDie.cxx @@ -571,16 +571,16 @@ iterate_decl (Dwarf_Die *die_p, char *sym, size_t nfiles) Dwarf_Word fileidx; attr = dwarf_attr (die, DW_AT_decl_file, &attr_mem); + int tag = dwarf_tag(die); // DW_TAG_enumerator doesn't have a DW_AT_decl_file if ((dwarf_formudata (attr, &fileidx) != 0 || (size_t)fileidx >= nfiles) - && dwarf_tag (die) != DW_TAG_enumerator) + && tag != DW_TAG_enumerator) continue; - if (name) if (strcmp(name, sym) == 0) return die; - - if (dwarf_haschildren (die)) + if (dwarf_haschildren (die) && tag != DW_TAG_structure_type + && tag != DW_TAG_union_type) { Dwarf_Die *result = iterate_decl (die, sym, nfiles); if (result != NULL) hooks/post-receive -- frysk system monitor/debugger