From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 393 invoked by alias); 3 Jun 2007 09:35:19 -0000 Received: (qmail 384 invoked by uid 22791); 3 Jun 2007 09:35:17 -0000 X-Spam-Check-By: sourceware.org Received: from main.gmane.org (HELO ciao.gmane.org) (80.91.229.2) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 03 Jun 2007 09:35:12 +0000 Received: from root by ciao.gmane.org with local (Exim 4.43) id 1HumUI-0000Ud-7M for gdb@sources.redhat.com; Sun, 03 Jun 2007 11:35:02 +0200 Received: from dsl01.83.171.167.64.ip-pool.nefkom.net ([83.171.167.64]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 03 Jun 2007 11:35:02 +0200 Received: from bernhard.walle by dsl01.83.171.167.64.ip-pool.nefkom.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 03 Jun 2007 11:35:02 +0200 To: gdb@sources.redhat.com From: Bernhard Walle Subject: Re: gdb 6.5 does not open linux kernel core file properly Date: Sun, 03 Jun 2007 09:35:00 -0000 Message-ID: References: <20070501104231.GA5204@in.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User-Agent: pan 0.119 (Karma Hunters) X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2007-06/txt/msg00020.txt.bz2 Hello, Vivek Goyal wrote: > I am using GNU gdb Red Hat Linux (6.5-5.fc6rh). > > This problem is not present in gdb 6.4. It works perfectly fine. I found out that the error appeared with following change: cvs diff -u -D "2006-01-24 22:30:00 -0000" -D "2006-01-24 22:40:00 -0000" The problem is svr4_solib_create_inferior_hook() -> svr4_relocate_main_executable(). If I comment out this function, everything works fine. ;-) Index: gdb/ChangeLog =================================================================== RCS file: /mounts/users-space/schwab/repro/src-cvs/src/gdb/ChangeLog,v retrieving revision 1.7569 retrieving revision 1.7570 diff -u -r1.7569 -r1.7570 --- gdb/ChangeLog 24 Jan 2006 22:09:27 -0000 1.7569 +++ gdb/ChangeLog 24 Jan 2006 22:34:34 -0000 1.7570 @@ -1,5 +1,32 @@ 2006-01-24 Daniel Jacobowitz + PR gdb/1914 + * fork-child.c (fork_inferior): Don't call + solib_create_inferior_hook. + * infcmd.c (post_create_inferior): Call solib_add, + solib_create_inferior_hook, and re_enable_breakpoints_in_shlibs. + (attach_command): Don't call solib_add or + re_enable_breakpoints_in_shlibs. Call post_create_inferior + instead. + * remote.c (remote_open_1): Don't call solib_create_inferior_hook + or observer_notify_inferior_created. Call post_create_inferior + instead. + * corelow.c: Don't include "observer.h". + (solib_add_stub): Deleted. + (core_open): Don't call observer_notify_inferior_created or + solib_add_stub. Call post_create_inferior instead. + * inf-ptrace.c: Don't include "observer.h". + (inf_ptrace_attach): Don't call observer_notify_inferior_created. + * inf-ttrace.c: Don't include "observer.h". + (inf_ttrace_attach): Don't call observer_notify_inferior_created. + * inferior.h (solib_create_inferior_hook): Remove redundant + prototype. + * inftarg.c: Don't include "observer.h". + (child_attach): Don't call observer_notify_inferior_created. + * Makefile.in: Update dependencies. + +2006-01-24 Daniel Jacobowitz + * infcmd.c: Include "observer.h". (post_create_inferior): New function. (run_command_1): Call it. Also call proceed. Index: gdb/Makefile.in =================================================================== RCS file: /mounts/users-space/schwab/repro/src-cvs/src/gdb/Makefile.in,v retrieving revision 1.779 retrieving revision 1.780 diff -u -r1.779 -r1.780 --- gdb/Makefile.in 24 Jan 2006 22:09:28 -0000 1.779 +++ gdb/Makefile.in 24 Jan 2006 22:34:34 -0000 1.780 @@ -1831,7 +1831,7 @@ corelow.o: corelow.c $(defs_h) $(arch_utils_h) $(gdb_string_h) $(frame_h) \ $(inferior_h) $(symtab_h) $(command_h) $(bfd_h) $(target_h) \ $(gdbcore_h) $(gdbthread_h) $(regcache_h) $(regset_h) $(symfile_h) \ - $(exec_h) $(readline_h) $(observer_h) $(gdb_assert_h) \ + $(exec_h) $(readline_h) $(gdb_assert_h) \ $(exceptions_h) $(solib_h) core-regset.o: core-regset.c $(defs_h) $(command_h) $(gdbcore_h) \ $(inferior_h) $(target_h) $(gdb_string_h) $(gregset_h) @@ -2129,7 +2129,7 @@ $(serial_h) $(terminal_h) $(target_h) $(gdbthread_h) $(gdb_string_h) \ $(inflow_h) inf-ptrace.o: inf-ptrace.c $(defs_h) $(command_h) $(inferior_h) $(inflow_h) \ - $(gdbcore_h) $(observer_h) $(regcache_h) $(gdb_assert_h) \ + $(gdbcore_h) $(regcache_h) $(gdb_assert_h) \ $(gdb_string_h) $(gdb_ptrace_h) $(gdb_wait_h) $(inf_child_h) infptrace.o: infptrace.c $(defs_h) $(command_h) $(frame_h) $(gdbcore_h) \ $(inferior_h) $(regcache_h) $(target_h) $(gdb_assert_h) \ @@ -2141,10 +2141,10 @@ $(value_h) $(observer_h) $(language_h) $(solib_h) $(gdb_assert_h) \ $(mi_common_h) $(main_h) inftarg.o: inftarg.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \ - $(gdbcore_h) $(command_h) $(gdb_stat_h) $(observer_h) $(gdb_wait_h) \ + $(gdbcore_h) $(command_h) $(gdb_stat_h) $(gdb_wait_h) \ $(inflow_h) inf-ttrace.o: inf-ttrace.c $(defs_h) $(command_h) $(gdbcore_h) \ - $(gdbthread_h) $(inferior_h) $(observer_h) $(target_h) \ + $(gdbthread_h) $(inferior_h) $(target_h) \ $(gdb_assert_h) $(gdb_string_h) $(inf_child_h) $(inf_ttrace_h) interps.o: interps.c $(defs_h) $(gdbcmd_h) $(ui_out_h) $(event_loop_h) \ $(event_top_h) $(interps_h) $(completer_h) $(gdb_string_h) \ Index: gdb/corelow.c =================================================================== RCS file: /mounts/users-space/schwab/repro/src-cvs/src/gdb/corelow.c,v retrieving revision 1.53 retrieving revision 1.54 diff -u -r1.53 -r1.54 --- gdb/corelow.c 17 Dec 2005 22:33:59 -0000 1.53 +++ gdb/corelow.c 24 Jan 2006 22:34:34 -0000 1.54 @@ -1,7 +1,7 @@ /* Core dump and executable file functions below target vector, for GDB. Copyright (C) 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 + 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GDB. @@ -43,7 +43,6 @@ #include "symfile.h" #include "exec.h" #include "readline/readline.h" -#include "observer.h" #include "gdb_assert.h" #include "exceptions.h" #include "solib.h" @@ -236,21 +235,6 @@ core_close (0/*ignored*/); } -/* Stub function for catch_errors around shared library hacking. FROM_TTYP - is really an int * which points to from_tty. */ - -static int -solib_add_stub (void *from_ttyp) -{ -#ifdef SOLIB_ADD - SOLIB_ADD (NULL, *(int *) from_ttyp, ¤t_target, auto_solib_add); -#else - solib_add (NULL, *(int *)from_ttyp, ¤t_target, auto_solib_add); -#endif - re_enable_breakpoints_in_shlibs (); - return 0; -} - /* Look for sections whose names start with `.reg/' so that we can extract the list of threads in a core file. */ @@ -372,7 +356,7 @@ /* This is done first, before anything has a chance to query the inferior for information such as symbols. */ - observer_notify_inferior_created (&core_ops, from_tty); + post_create_inferior (&core_ops, from_tty); p = bfd_core_file_failing_command (core_bfd); if (p) @@ -398,9 +382,6 @@ /* Fetch all registers from core file. */ target_fetch_registers (-1); - /* Add symbols and section mappings for any shared libraries. */ - catch_errors (solib_add_stub, &from_tty, (char *) 0, RETURN_MASK_ALL); - /* Now, set up the frame cache, and print the top of stack. */ flush_cached_frames (); select_frame (get_current_frame ()); Index: gdb/fork-child.c =================================================================== RCS file: /mounts/users-space/schwab/repro/src-cvs/src/gdb/fork-child.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- gdb/fork-child.c 17 Dec 2005 22:33:59 -0000 1.28 +++ gdb/fork-child.c 24 Jan 2006 22:34:34 -0000 1.29 @@ -1,7 +1,7 @@ /* Fork a Unix child process, and set up to debug it, for GDB. Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, - 2000, 2001, 2004 Free Software Foundation, Inc. + 2000, 2001, 2004, 2005, 2006 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -403,12 +403,6 @@ might be used to have target-specific code initialize a variable in the new process prior to executing the first instruction. */ TARGET_CREATE_INFERIOR_HOOK (pid); - -#ifdef SOLIB_CREATE_INFERIOR_HOOK - SOLIB_CREATE_INFERIOR_HOOK (pid); -#else - solib_create_inferior_hook (); -#endif } /* Accept NTRAPS traps from the inferior. */ Index: gdb/inf-ptrace.c =================================================================== RCS file: /mounts/users-space/schwab/repro/src-cvs/src/gdb/inf-ptrace.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- gdb/inf-ptrace.c 24 Jan 2006 22:09:28 -0000 1.31 +++ gdb/inf-ptrace.c 24 Jan 2006 22:34:34 -0000 1.32 @@ -26,7 +26,6 @@ #include "inferior.h" #include "inflow.h" #include "gdbcore.h" -#include "observer.h" #include "regcache.h" #include "gdb_assert.h" @@ -222,10 +221,6 @@ inferior_ptid = pid_to_ptid (pid); push_target (ptrace_ops_hack); - - /* Do this first, before anything has had a chance to query the - inferior's symbol table or similar. */ - observer_notify_inferior_created (¤t_target, from_tty); } #ifdef PT_GET_PROCESS_STATE Index: gdb/inf-ttrace.c =================================================================== RCS file: /mounts/users-space/schwab/repro/src-cvs/src/gdb/inf-ttrace.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- gdb/inf-ttrace.c 24 Jan 2006 22:09:28 -0000 1.19 +++ gdb/inf-ttrace.c 24 Jan 2006 22:34:34 -0000 1.20 @@ -29,7 +29,6 @@ #include "gdbcore.h" #include "gdbthread.h" #include "inferior.h" -#include "observer.h" #include "target.h" #include "gdb_assert.h" @@ -721,10 +720,6 @@ inferior_ptid = pid_to_ptid (pid); push_target (ttrace_ops_hack); - - /* Do this first, before anything has had a chance to query the - inferior's symbol table or similar. */ - observer_notify_inferior_created (¤t_target, from_tty); } static void Index: gdb/infcmd.c =================================================================== RCS file: /mounts/users-space/schwab/repro/src-cvs/src/gdb/infcmd.c,v retrieving revision 1.142 retrieving revision 1.143 diff -u -r1.142 -r1.143 --- gdb/infcmd.c 24 Jan 2006 22:09:28 -0000 1.142 +++ gdb/infcmd.c 24 Jan 2006 22:34:34 -0000 1.143 @@ -405,6 +405,30 @@ void post_create_inferior (struct target_ops *target, int from_tty) { + if (exec_bfd) + { + /* Sometimes the platform-specific hook loads initial shared + libraries, and sometimes it doesn't. Try to do so first, so + that we can add them with the correct value for FROM_TTY. */ +#ifdef SOLIB_ADD + SOLIB_ADD (NULL, from_tty, target, auto_solib_add); +#else + solib_add (NULL, from_tty, target, auto_solib_add); +#endif + + /* Create the hooks to handle shared library load and unload + events. */ +#ifdef SOLIB_CREATE_INFERIOR_HOOK + SOLIB_CREATE_INFERIOR_HOOK (pid); +#else + solib_create_inferior_hook (); +#endif + + /* Enable any breakpoints which were disabled when the + underlying shared library was deleted. */ + re_enable_breakpoints_in_shlibs (); + } + observer_notify_inferior_created (target, from_tty); } @@ -1899,18 +1923,12 @@ reread_symbols (); } -#ifdef SOLIB_ADD - /* Add shared library symbols from the newly attached process, if any. */ - SOLIB_ADD ((char *) 0, from_tty, ¤t_target, auto_solib_add); -#else - solib_add (NULL, from_tty, ¤t_target, auto_solib_add); -#endif - re_enable_breakpoints_in_shlibs (); - /* Take any necessary post-attaching actions for this platform. */ target_post_attach (PIDGET (inferior_ptid)); + post_create_inferior (¤t_target, from_tty); + /* Install inferior's terminal modes. */ target_terminal_inferior (); Index: gdb/inferior.h =================================================================== RCS file: /mounts/users-space/schwab/repro/src-cvs/src/gdb/inferior.h,v retrieving revision 1.74 retrieving revision 1.75 diff -u -r1.74 -r1.75 --- gdb/inferior.h 24 Jan 2006 22:09:28 -0000 1.74 +++ gdb/inferior.h 24 Jan 2006 22:34:34 -0000 1.75 @@ -213,8 +213,6 @@ extern void fetch_inferior_registers (int); -extern void solib_create_inferior_hook (void); - extern void child_terminal_info (char *, int); extern void term_info (char *, int); Index: gdb/inftarg.c =================================================================== RCS file: /mounts/users-space/schwab/repro/src-cvs/src/gdb/Attic/inftarg.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- gdb/inftarg.c 24 Jan 2006 22:09:28 -0000 1.46 +++ gdb/inftarg.c 24 Jan 2006 22:34:34 -0000 1.47 @@ -34,7 +34,6 @@ #include #include #include -#include "observer.h" #include "gdb_wait.h" #include "inflow.h" @@ -210,10 +209,6 @@ inferior_ptid = pid_to_ptid (pid); push_target (&deprecated_child_ops); - - /* Do this first, before anything has had a chance to query the - inferior's symbol table or similar. */ - observer_notify_inferior_created (¤t_target, from_tty); } #if !defined(CHILD_POST_ATTACH) Index: gdb/remote.c =================================================================== RCS file: /mounts/users-space/schwab/repro/src-cvs/src/gdb/remote.c,v retrieving revision 1.199 retrieving revision 1.200 diff -u -r1.199 -r1.200 --- gdb/remote.c 24 Jan 2006 22:09:28 -0000 1.199 +++ gdb/remote.c 24 Jan 2006 22:34:34 -0000 1.200 @@ -2295,24 +2295,10 @@ getpkt (buf, rs->remote_packet_size, 0); } - /* FIXME: need a master target_open vector from which all - remote_opens can be called, so that stuff like this can - go there. Failing that, the following code must be copied - to the open function for any remote target that wants to - support svr4 shared libraries. */ + post_create_inferior (¤t_target, from_tty); - /* Set up to detect and load shared libraries. */ if (exec_bfd) /* No use without an exec file. */ - { -#ifdef SOLIB_CREATE_INFERIOR_HOOK - SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid)); -#else - solib_create_inferior_hook (); -#endif - remote_check_symbols (symfile_objfile); - } - - observer_notify_inferior_created (¤t_target, from_tty); + remote_check_symbols (symfile_objfile); } /* This takes a program previously attached to and detaches it. After