diff options
-rw-r--r-- | gdb/ChangeLog | 39 | ||||
-rw-r--r-- | gdb/infcmd.c | 36 | ||||
-rw-r--r-- | gdb/infrun.c | 2 | ||||
-rw-r--r-- | gdb/linux-nat.c | 4 | ||||
-rw-r--r-- | gdb/nto-procfs.c | 4 | ||||
-rw-r--r-- | gdb/solib-darwin.c | 2 | ||||
-rw-r--r-- | gdb/solib-frv.c | 2 | ||||
-rw-r--r-- | gdb/solib-irix.c | 4 | ||||
-rw-r--r-- | gdb/solib-null.c | 2 | ||||
-rw-r--r-- | gdb/solib-osf.c | 2 | ||||
-rw-r--r-- | gdb/solib-pa64.c | 2 | ||||
-rw-r--r-- | gdb/solib-som.c | 2 | ||||
-rw-r--r-- | gdb/solib-spu.c | 4 | ||||
-rw-r--r-- | gdb/solib-sunos.c | 2 | ||||
-rw-r--r-- | gdb/solib-svr4.c | 12 | ||||
-rw-r--r-- | gdb/solib-target.c | 2 | ||||
-rw-r--r-- | gdb/solib.c | 19 | ||||
-rw-r--r-- | gdb/solib.h | 2 | ||||
-rw-r--r-- | gdb/solist.h | 2 |
19 files changed, 96 insertions, 48 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bfb8d29..8f88733 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,40 @@ +2010-01-08 Jan Kratochvil <jan.kratochvil@redhat.com> + + Add from_tty to solib_create_inferior_hook. + * infcmd.c (post_create_inferior): Move solib_add after + solib_create_inferior_hook. Pass from_tty to + solib_create_inferior_hook. Call solib_add and SOLIB_ADD with + 0 from_tty and comment why. + * infrun.c (follow_exec): Pass from_tty solib_create_inferior_hook as 0. + * linux-nat.c (linux_child_follow_fork): Likewise. + * nto-procfs.c (procfs_post_attach, procfs_create_inferior): Likewise. + * solib-darwin.c (darwin_solib_create_inferior_hook): New parameter + from_tty. + * solib-frv.c (frv_solib_create_inferior_hook): Likewise. + * solib-irix.c (irix_solib_create_inferior_hook): Likewise. + * solib-null.c (null_solib_create_inferior_hook): Likewise. + * solib-osf.c (osf_solib_create_inferior_hook): Likewise. + * solib-pa64.c (pa64_solib_create_inferior_hook): Likewise. + * solib-som.c (som_solib_create_inferior_hook): Likewise. + * solib-spu.c (spu_solib_create_inferior_hook): New parameter from_tty. + Pass it to svr4_so_ops.solib_create_inferior_hook. + * solib-sunos.c (sunos_solib_create_inferior_hook): New parameter + from_tty. + * solib-svr4.c (enable_break): New parameter from_tty. Pass it to + solib_add. + (svr4_solib_create_inferior_hook): New parameter from_tty. Pass it to + enable_break. + * solib-target.c (solib_target_solib_create_inferior_hook): New + parameter from_tty. + * solib.c (solib_create_inferior_hook): New parameter from_tty. Pass + it to ops->solib_create_inferior_hook. + (reload_shared_libraries): Pass from_tty to solib_create_inferior_hook. + Move solib_add after solib_create_inferior_hook, call it now with + from_tty as 0. New comment there. + * solib.h (solib_create_inferior_hook): New parameter from_tty. + * solist.h (struct target_so_ops <solib_create_inferior_hook>): + Likewise. + 2010-01-08 Vladimir Prus <vladimir@codesourcery.com> Fix multiexec race. @@ -22,7 +59,7 @@ (ada_print_type): Remove support for VAX floats. * ada-valprint.c (ada_val_print_1): Remove support for VAX floats. -2010-01-08 jan kratochvil <jan.kratochvil@redhat.com> +2010-01-08 Jan Kratochvil <jan.kratochvil@redhat.com> * stabsread.c (read_args): Handle zero arguments. diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 821ae5f..21a2233 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -397,22 +397,6 @@ post_create_inferior (struct target_ops *target, int from_tty) /* Now that we know the register layout, retrieve current PC. */ stop_pc = regcache_read_pc (get_current_regcache ()); - /* If the solist is global across processes, there's no need to - refetch it here. */ - if (exec_bfd && !gdbarch_has_global_solist (target_gdbarch)) - { - /* 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. - If we made all the inferior hook methods consistent, - this call could be removed. */ -#ifdef SOLIB_ADD - SOLIB_ADD (NULL, from_tty, target, auto_solib_add); -#else - solib_add (NULL, from_tty, target, auto_solib_add); -#endif - } - if (exec_bfd) { /* Create the hooks to handle shared library load and unload @@ -420,7 +404,25 @@ post_create_inferior (struct target_ops *target, int from_tty) #ifdef SOLIB_CREATE_INFERIOR_HOOK SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid)); #else - solib_create_inferior_hook (); + solib_create_inferior_hook (from_tty); +#endif + } + + /* If the solist is global across processes, there's no need to + refetch it here. */ + if (exec_bfd && !gdbarch_has_global_solist (target_gdbarch)) + { + /* Sometimes the platform-specific hook loads initial shared + libraries, and sometimes it doesn't. If it doesn't FROM_TTY will be + incorrectly 0 but such solib targets should be fixed anyway. If we + made all the inferior hook methods consistent, this call could be + removed. Call it only after the solib target has been initialized by + solib_create_inferior_hook. */ + +#ifdef SOLIB_ADD + SOLIB_ADD (NULL, 0, target, auto_solib_add); +#else + solib_add (NULL, 0, target, auto_solib_add); #endif } diff --git a/gdb/infrun.c b/gdb/infrun.c index cfa7e82..3d6812d 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -764,7 +764,7 @@ follow_exec (ptid_t pid, char *execd_pathname) #ifdef SOLIB_CREATE_INFERIOR_HOOK SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid)); #else - solib_create_inferior_hook (); + solib_create_inferior_hook (0); #endif jit_inferior_created_hook (); diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 0c95b95..48ea1bc 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -769,7 +769,7 @@ holding the child stopped. Try \"set detach-on-fork\" or \ breakpoint. If a "cloned-VM" event was propagated better throughout the core, this wouldn't be required. */ - solib_create_inferior_hook (); + solib_create_inferior_hook (0); } /* Let the thread_db layer learn about this new process. */ @@ -952,7 +952,7 @@ Attaching after process %d fork to child process %d.\n"), shared libraries, and install the solib event breakpoint. If a "cloned-VM" event was propagated better throughout the core, this wouldn't be required. */ - solib_create_inferior_hook (); + solib_create_inferior_hook (0); } /* Let the thread_db layer learn about this new process. */ diff --git a/gdb/nto-procfs.c b/gdb/nto-procfs.c index 215647d..d8f3c91 100644 --- a/gdb/nto-procfs.c +++ b/gdb/nto-procfs.c @@ -654,7 +654,7 @@ static void procfs_post_attach (pid_t pid) { if (exec_bfd) - solib_create_inferior_hook (); + solib_create_inferior_hook (0); } static ptid_t @@ -1215,7 +1215,7 @@ procfs_create_inferior (struct target_ops *ops, char *exec_file, if (exec_bfd != NULL || (symfile_objfile != NULL && symfile_objfile->obfd != NULL)) - solib_create_inferior_hook (); + solib_create_inferior_hook (0); } static void diff --git a/gdb/solib-darwin.c b/gdb/solib-darwin.c index b019ada..3c70089 100644 --- a/gdb/solib-darwin.c +++ b/gdb/solib-darwin.c @@ -295,7 +295,7 @@ darwin_special_symbol_handling (void) /* Shared library startup support. See documentation in solib-svr4.c */ static void -darwin_solib_create_inferior_hook (void) +darwin_solib_create_inferior_hook (int from_tty) { struct minimal_symbol *msymbol; char **bkpt_namep; diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c index 5c9a220..0976c83 100644 --- a/gdb/solib-frv.c +++ b/gdb/solib-frv.c @@ -984,7 +984,7 @@ frv_relocate_main_executable (void) */ static void -frv_solib_create_inferior_hook (void) +frv_solib_create_inferior_hook (int from_tty) { /* Relocate main executable. */ frv_relocate_main_executable (); diff --git a/gdb/solib-irix.c b/gdb/solib-irix.c index 596f9a0..17f7240 100644 --- a/gdb/solib-irix.c +++ b/gdb/solib-irix.c @@ -392,7 +392,7 @@ enable_break (void) SYNOPSIS - void solib_create_inferior_hook () + void solib_create_inferior_hook (int from_tty) DESCRIPTION @@ -437,7 +437,7 @@ enable_break (void) */ static void -irix_solib_create_inferior_hook (void) +irix_solib_create_inferior_hook (int from_tty) { struct inferior *inf; struct thread_info *tp; diff --git a/gdb/solib-null.c b/gdb/solib-null.c index adefb04..2cc6c64 100644 --- a/gdb/solib-null.c +++ b/gdb/solib-null.c @@ -32,7 +32,7 @@ null_special_symbol_handling (void) } static void -null_solib_create_inferior_hook (void) +null_solib_create_inferior_hook (int from_tty) { } diff --git a/gdb/solib-osf.c b/gdb/solib-osf.c index ded5670..ab6ea56 100644 --- a/gdb/solib-osf.c +++ b/gdb/solib-osf.c @@ -306,7 +306,7 @@ osf_clear_solib (void) Also, what if child has exit()ed? Must exit loop somehow. */ static void -osf_solib_create_inferior_hook (void) +osf_solib_create_inferior_hook (int from_tty) { struct inferior *inf; struct thread_info *tp; diff --git a/gdb/solib-pa64.c b/gdb/solib-pa64.c index 79fdb93..df97f31 100644 --- a/gdb/solib-pa64.c +++ b/gdb/solib-pa64.c @@ -329,7 +329,7 @@ bfd_lookup_symbol (bfd *abfd, char *symname) with shared libraries mapped shareable. */ static void -pa64_solib_create_inferior_hook (void) +pa64_solib_create_inferior_hook (int from_tty) { struct minimal_symbol *msymbol; unsigned int dld_flags, status; diff --git a/gdb/solib-som.c b/gdb/solib-som.c index 758db07..6540d0b 100644 --- a/gdb/solib-som.c +++ b/gdb/solib-som.c @@ -183,7 +183,7 @@ struct { means running until the "_start" is called. */ static void -som_solib_create_inferior_hook (void) +som_solib_create_inferior_hook (int from_tty) { enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch); struct minimal_symbol *msymbol; diff --git a/gdb/solib-spu.c b/gdb/solib-spu.c index 07b7a1b..e752544 100644 --- a/gdb/solib-spu.c +++ b/gdb/solib-spu.c @@ -371,7 +371,7 @@ spu_enable_break (struct objfile *objfile) /* Create inferior hook. */ static void -spu_solib_create_inferior_hook (void) +spu_solib_create_inferior_hook (int from_tty) { /* Remove all previously installed solib breakpoints. Both the SVR4 code and us will re-install all required breakpoints. */ @@ -402,7 +402,7 @@ spu_solib_create_inferior_hook (void) } /* Call SVR4 hook -- this will re-insert the SVR4 solib breakpoints. */ - svr4_so_ops.solib_create_inferior_hook (); + svr4_so_ops.solib_create_inferior_hook (from_tty); /* If the inferior is statically linked against libspe, we need to install our own solib breakpoint right now. Otherwise, it will be installed by diff --git a/gdb/solib-sunos.c b/gdb/solib-sunos.c index db2a40c..e8a1f32 100644 --- a/gdb/solib-sunos.c +++ b/gdb/solib-sunos.c @@ -741,7 +741,7 @@ sunos_special_symbol_handling (void) */ static void -sunos_solib_create_inferior_hook (void) +sunos_solib_create_inferior_hook (int from_tty) { struct thread_info *tp; struct inferior *inf; diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index ee87a43..00e16b0 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -1265,7 +1265,7 @@ exec_entry_point (struct bfd *abfd, struct target_ops *targ) */ static int -enable_break (struct svr4_info *info) +enable_break (struct svr4_info *info, int from_tty) { struct minimal_symbol *msymbol; char **bkpt_namep; @@ -1285,7 +1285,7 @@ enable_break (struct svr4_info *info) mean r_brk has already been relocated. Assume the dynamic linker is the object containing r_brk. */ - solib_add (NULL, 0, ¤t_target, auto_solib_add); + solib_add (NULL, from_tty, ¤t_target, auto_solib_add); sym_addr = 0; if (info->debug_base && solib_svr4_r_map (info) != 0) sym_addr = solib_svr4_r_brk (info); @@ -1412,7 +1412,7 @@ enable_break (struct svr4_info *info) info->debug_loader_name = xstrdup (interp_name); info->debug_loader_offset_p = 1; info->debug_loader_offset = load_addr; - solib_add (NULL, 0, ¤t_target, auto_solib_add); + solib_add (NULL, from_tty, ¤t_target, auto_solib_add); } /* Record the relocated start and end address of the dynamic linker @@ -1651,7 +1651,7 @@ svr4_relocate_main_executable (void) SYNOPSIS - void svr4_solib_create_inferior_hook () + void svr4_solib_create_inferior_hook (int from_tty) DESCRIPTION @@ -1696,7 +1696,7 @@ svr4_relocate_main_executable (void) */ static void -svr4_solib_create_inferior_hook (void) +svr4_solib_create_inferior_hook (int from_tty) { struct inferior *inf; struct thread_info *tp; @@ -1710,7 +1710,7 @@ svr4_solib_create_inferior_hook (void) if (!svr4_have_link_map_offsets ()) return; - if (!enable_break (info)) + if (!enable_break (info, from_tty)) return; #if defined(_SCO_DS) diff --git a/gdb/solib-target.c b/gdb/solib-target.c index 994caac..a9c34c8 100644 --- a/gdb/solib-target.c +++ b/gdb/solib-target.c @@ -306,7 +306,7 @@ solib_target_special_symbol_handling (void) } static void -solib_target_solib_create_inferior_hook (void) +solib_target_solib_create_inferior_hook (int from_tty) { /* Nothing needed. */ } diff --git a/gdb/solib.c b/gdb/solib.c index 7662e9d..6d6bf83 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -1015,7 +1015,7 @@ clear_solib (void) SYNOPSIS - void solib_create_inferior_hook () + void solib_create_inferior_hook (int from_tty) DESCRIPTION @@ -1025,10 +1025,10 @@ clear_solib (void) SOLIB_CREATE_INFERIOR_HOOK. */ void -solib_create_inferior_hook (void) +solib_create_inferior_hook (int from_tty) { struct target_so_ops *ops = solib_ops (target_gdbarch); - ops->solib_create_inferior_hook(); + ops->solib_create_inferior_hook (from_tty); } /* GLOBAL FUNCTION @@ -1104,7 +1104,6 @@ reload_shared_libraries (char *ignored, int from_tty, struct cmd_list_element *e) { no_shared_libraries (NULL, from_tty); - solib_add (NULL, from_tty, NULL, auto_solib_add); /* Creating inferior hooks here has two purposes. First, if we reload shared libraries then the address of solib breakpoint we've computed previously might be no longer valid. For example, if we forgot to set @@ -1119,9 +1118,19 @@ reload_shared_libraries (char *ignored, int from_tty, #ifdef SOLIB_CREATE_INFERIOR_HOOK SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid)); #else - solib_create_inferior_hook (); + solib_create_inferior_hook (from_tty); #endif } + + /* Sometimes the platform-specific hook loads initial shared + libraries, and sometimes it doesn't. If it doesn't FROM_TTY will be + incorrectly 0 but such solib targets should be fixed anyway. If we + made all the inferior hook methods consistent, this call could be + removed. Call it only after the solib target has been initialized by + solib_create_inferior_hook. */ + + solib_add (NULL, 0, NULL, auto_solib_add); + /* We have unloaded and then reloaded debug info for all shared libraries. However, frames may still reference them, for example a frame's unwinder might still point of DWARF FDE structures that are now freed. diff --git a/gdb/solib.h b/gdb/solib.h index 0a1317c..03a4b08 100644 --- a/gdb/solib.h +++ b/gdb/solib.h @@ -42,7 +42,7 @@ extern int solib_read_symbols (struct so_list *, int); addresses to which they are linked, and sufficient information to read in their symbols at a later time. */ -extern void solib_create_inferior_hook (void); +extern void solib_create_inferior_hook (int from_tty); /* If ADDR lies in a shared library, return its name. */ diff --git a/gdb/solist.h b/gdb/solist.h index 08107a1..573f736 100644 --- a/gdb/solist.h +++ b/gdb/solist.h @@ -90,7 +90,7 @@ struct target_so_ops void (*clear_solib) (void); /* Target dependent code to run after child process fork. */ - void (*solib_create_inferior_hook) (void); + void (*solib_create_inferior_hook) (int from_tty); /* Do additional symbol handling, lookup, etc. after symbols for a shared object have been loaded. */ |