From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22498 invoked by alias); 12 Aug 2004 17:47:31 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 22483 invoked from network); 12 Aug 2004 17:47:30 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 12 Aug 2004 17:47:30 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i7CHlUe1014741 for ; Thu, 12 Aug 2004 13:47:30 -0400 Received: from pobox.toronto.redhat.com (pobox.toronto.redhat.com [172.16.14.4]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i7CHlUa20940; Thu, 12 Aug 2004 13:47:30 -0400 Received: from touchme.toronto.redhat.com (IDENT:postfix@touchme.toronto.redhat.com [172.16.14.9]) by pobox.toronto.redhat.com (8.12.8/8.12.8) with ESMTP id i7CHlLse021955; Thu, 12 Aug 2004 13:47:29 -0400 Received: from redhat.com (toocool.toronto.redhat.com [172.16.14.72]) by touchme.toronto.redhat.com (Postfix) with ESMTP id 73B0680001E; Thu, 12 Aug 2004 13:47:21 -0400 (EDT) Message-ID: <411BAD29.7080805@redhat.com> Date: Thu, 12 Aug 2004 17:47:00 -0000 From: Jeff Johnston User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 MIME-Version: 1.0 To: Michael Chastain Cc: gdb-patches@sources.redhat.com Subject: Re: [RFA]: Fix for pending breakpoints in manually loaded/unloaded shlibs References: <41191D71.60204@redhat.com> <4119D461.nailB1A1E2BLH@mindspring.com> <411A3E5D.7060309@redhat.com> <411B7192.nailNVT199XPP@mindspring.com> In-Reply-To: <411B7192.nailNVT199XPP@mindspring.com> Content-Type: multipart/mixed; boundary="------------000807090704050503020600" X-SW-Source: 2004-08/txt/msg00467.txt.bz2 This is a multi-part message in MIME format. --------------000807090704050503020600 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1763 Michael Chastain wrote: > Okay, here's a patch for unload.exp to make it work on hpux 11.11. > I tested it on hpux 11.11 with both hp ansi c B.11.11.28706.GP and > gcc 3.3.4. I didn't test it on any linux. > > It will be easy to add more arms to the "switch" statement > as it gets tested on more operating systems. > > Can you: > > throw this chunk in > rip out the old bug-gdb address > rip out the "-L" / "-rpath" leftovers (see below) > re-test on i686-pc-linux-gnu > re-post the patch (mention that you re-tested on i686-pc-linux-gnu) > > Right before gdb_exit there is a chunk of code to set "-L" or "-rpath". > It looks dead because these values are never used after being set. > Can you rip that out? Sorry I didn't catch that earlier. > > Then I will re-test on native hppa2.0w-hp-hpux11.11 and that ought > to be good for approval. > Ok, see the attached patch. The modified test runs fine on x86 linux. Thanks, -- Jeff J. > Michael C > > --- /house/chastain/u/unload.exp 2004-08-12 07:32:11.268088000 -0400 > +++ unload.exp 2004-08-12 09:09:43.989638000 -0400 > @@ -48,7 +48,14 @@ > return -1 > } > > -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "additional_flags=-DSHLIB_DIR\=\"${shlibdir}\"" "libs=-ldl"]] != "" } { > +set dl_lib_flag "" > +switch -glob [istarget] { > + "hppa*-hp-hpux*" { } > + "*-*-linux*" { set dl_lib_flag "libs=-ldl" } > + default { } > +} > + > +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "additional_flags=-DSHLIB_DIR\=\"${shlibdir}\"" $dl_lib_flag]] != "" } { > gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." > } > > --------------000807090704050503020600 Content-Type: text/plain; name="unloadtst.patch2" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="unloadtst.patch2" Content-length: 7814 Index: gdb.base/unload.c =================================================================== RCS file: gdb.base/unload.c diff -N gdb.base/unload.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.base/unload.c 12 Aug 2004 17:46:15 -0000 @@ -0,0 +1,57 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2004 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include +#include + +int k = 0; + +#define SHLIB_NAME SHLIB_DIR "/unloadshr.sl" + +int main() +{ + void *handle; + int (*unloadshr) (int); + int y; + char *msg; + + handle = dlopen (SHLIB_NAME, RTLD_LAZY); + msg = dlerror (); + + if (!handle) + { + fprintf (stderr, msg); + exit (1); + } + + unloadshr = (int (*)(int))dlsym (handle, "shrfunc1"); + + if (!unloadshr) + { + fprintf (stderr, dlerror ()); + exit (1); + } + + y = (*unloadshr)(3); + + printf ("y is %d\n", y); + + dlclose (handle); + + return 0; +} Index: gdb.base/unload.exp =================================================================== RCS file: gdb.base/unload.exp diff -N gdb.base/unload.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.base/unload.exp 12 Aug 2004 17:46:15 -0000 @@ -0,0 +1,142 @@ +# Copyright 2003, 2004 +# 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# This file was created by Jeff Johnston. (jjohnstn@redhat.com) +# The shared library compilation portion was copied from shlib-call.exp which was +# written by Elena Zannoni (ezannoni@redhat.com). + +if $tracelevel then { + strace $tracelevel +} + +# +# test running programs +# +set prms_id 0 +set bug_id 0 + +# are we on a target board? +if ![isnative] then { + return 0 +} + +set testfile "unload" +set libfile "unloadshr" +set libsrcfile ${libfile}.c +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} +set shlibdir ${objdir}/${subdir} + +if [get_compiler_info ${binfile}] { + return -1 +} + +set dl_lib_flag "" +switch -glob [istarget] { + "hppa*-hp-hpux*" { } + "*-*-linux*" { set dl_lib_flag "libs=-ldl" } + default { } +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "additional_flags=-DSHLIB_DIR\=\"${shlibdir}\"" $dl_lib_flag]] != "" } { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + +# Build the shared libraries this test case needs. +# + +if {$gcc_compiled == 0} { + if [istarget "hppa*-hp-hpux*"] then { + set additional_flags "additional_flags=+z" + } elseif { [istarget "mips-sgi-irix*"] } { + # Disable SGI compiler's implicit -Dsgi + set additional_flags "additional_flags=-Usgi" + } else { + # don't know what the compiler is... + set additional_flags "" + } +} else { + if { ([istarget "powerpc*-*-aix*"] + || [istarget "rs6000*-*-aix*"]) } { + set additional_flags "" + } else { + set additional_flags "additional_flags=-fpic" + } +} + +if {[gdb_compile "${srcdir}/${subdir}/${libsrcfile}" "${objdir}/${subdir}/${libfile}.o" object [list debug $additional_flags]] != ""} { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + +if [istarget "hppa*-*-hpux*"] { + remote_exec build "ld -b ${objdir}/${subdir}/${libfile}.o -o ${objdir}/${subdir}/${libfile}.sl" +} else { + set additional_flags "additional_flags=-shared" + if {[gdb_compile "${objdir}/${subdir}/${libfile}.o" "${objdir}/${subdir}/${libfile}.sl" executable [list debug $additional_flags]] != ""} { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." + } +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +if [target_info exists gdb_stub] { + gdb_step_for_stub; +} + +# +# Test setting a breakpoint in a dynamically loaded library which is +# manually loaded and unloaded +# + +gdb_test_multiple "break shrfunc1" "set pending breakpoint" { + -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { + gdb_test "y" "Breakpoint.*shrfunc1.*pending." "set pending breakpoint" + } +} + +gdb_test "info break" \ + "Num Type\[ \]+Disp Enb Address\[ \]+What.* +\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*shrfunc1.*" \ +"single pending breakpoint info" + +set unloadshr_line [gdb_get_line_number "unloadshr break" ${srcdir}/${subdir}/${libsrcfile}] + +gdb_test "run" \ +"Starting program.*unload.* +Breakpoint.*at.* +Pending breakpoint \"shrfunc1\" resolved.* +Breakpoint.*, shrfunc1 \\\(x=3\\\).*unloadshr.c:$unloadshr_line.*" \ +"running program" + +gdb_test "continue" \ +"Continuing.*y is 7.*warning: Temporarily disabling unloaded shared library breakpoints.*warning: breakpoint #.*Program exited normally." \ +"continuing to end of program" + +# +# Try to rerun program and verify that shared breakpoint is reset properly +# + +gdb_test "run" \ +".*Breakpoint.*shrfunc1.*at.*unloadshr.c:$unloadshr_line.*" \ +"rerun to shared library breakpoint" + +gdb_test "continue" \ +"Continuing.*y is 7.*warning: Temporarily disabling unloaded shared library breakpoints.*warning: breakpoint #.*Program exited normally." \ +"continuing to end of program second time" Index: gdb.base/unloadshr.c =================================================================== RCS file: gdb.base/unloadshr.c diff -N gdb.base/unloadshr.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.base/unloadshr.c 12 Aug 2004 17:46:15 -0000 @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2004 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include + +int shrfunc1 (int x) +{ + return x + 4; /* unloadshr break */ +} --------------000807090704050503020600--