From 268a4a75bdc5271819e657da07b868c8bddc500f Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Fri, 8 Jan 2010 22:52:04 +0000 Subject: [PATCH] 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. --- gdb/ChangeLog | 39 ++++++++++++++++++++++++++++++++++++++- gdb/infcmd.c | 36 +++++++++++++++++++----------------- gdb/infrun.c | 2 +- gdb/linux-nat.c | 4 ++-- gdb/nto-procfs.c | 4 ++-- gdb/solib-darwin.c | 2 +- gdb/solib-frv.c | 2 +- gdb/solib-irix.c | 4 ++-- gdb/solib-null.c | 2 +- gdb/solib-osf.c | 2 +- gdb/solib-pa64.c | 2 +- gdb/solib-som.c | 2 +- gdb/solib-spu.c | 4 ++-- gdb/solib-sunos.c | 2 +- gdb/solib-svr4.c | 12 ++++++------ gdb/solib-target.c | 2 +- gdb/solib.c | 19 ++++++++++++++----- gdb/solib.h | 2 +- gdb/solist.h | 2 +- 19 files changed, 96 insertions(+), 48 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bfb8d29e6a..8f88733d69 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 821ae5fb37..21a2233ac4 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 cfa7e82865..3d6812d2e3 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 0c95b95f93..48ea1bc46c 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 215647d0a3..d8f3c91a82 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 b019adaa39..3c700899d4 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 5c9a220fd9..0976c8352e 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 596f9a01a2..17f7240269 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 adefb044fd..2cc6c64378 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 ded56709fe..ab6ea56fcf 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 79fdb93a46..df97f319cf 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 758db07ee2..6540d0b7bd 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 07b7a1b42f..e752544699 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 db2a40cc56..e8a1f32488 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 ee87a43cb0..00e16b000a 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 994caacafc..a9c34c8506 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 7662e9d71c..6d6bf83588 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 0a1317c025..03a4b08b26 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 08107a1c08..573f736651 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. */ -- 2.34.1