From: Jan Kratochvil Date: Fri, 8 Jan 2010 22:52:04 +0000 (+0000) Subject: gdb/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=268a4a75bdc5271819e657da07b868c8bddc500f;p=binutils-gdb.git gdb/ 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 ): Likewise. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bfb8d29e6a1..8f88733d695 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,40 @@ +2010-01-08 Jan Kratochvil + + 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 ): + Likewise. + 2010-01-08 Vladimir Prus 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 +2010-01-08 Jan Kratochvil * stabsread.c (read_args): Handle zero arguments. diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 821ae5fb37b..21a2233ac44 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 cfa7e82865e..3d6812d2e3b 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 0c95b95f936..48ea1bc46c8 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 215647d0a30..d8f3c91a827 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 b019adaa398..3c700899d40 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 5c9a220fd9f..0976c8352ea 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 596f9a01a24..17f7240269c 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 adefb044fdc..2cc6c643789 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 ded56709fe5..ab6ea56fcfd 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 79fdb93a468..df97f319cf0 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 758db07ee28..6540d0b7bd5 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 07b7a1b42fd..e752544699d 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 db2a40cc568..e8a1f32488d 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 ee87a43cb08..00e16b000a7 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 994caacafc4..a9c34c85061 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 7662e9d71c9..6d6bf835889 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 0a1317c025c..03a4b08b264 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 08107a1c083..573f7366512 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. */