diff options
author | Paul Pluzhnikov <ppluzhnikov@google.com> | 2011-07-26 15:17:47 +0000 |
---|---|---|
committer | Paul Pluzhnikov <ppluzhnikov@google.com> | 2011-07-26 15:17:47 +0000 |
commit | 2eff07b325d8e8d6719844464d744c008860a6a3 (patch) | |
tree | 778268c4bde6feaa3d7be73daa3b6d1b82dd8dd2 | |
parent | 53d780c93d81fe0dbcce1a93252ee638937032c7 (diff) | |
download | gdb-2eff07b325d8e8d6719844464d744c008860a6a3.zip gdb-2eff07b325d8e8d6719844464d744c008860a6a3.tar.gz gdb-2eff07b325d8e8d6719844464d744c008860a6a3.tar.bz2 |
2011-07-26 Paul Pluzhnikov <ppluzhnikov@google.com>
* progspace.h (struct program_space): Add solib_add_generation.
* infcmd.c (post_create_inferior): Only call solib_add if not
already done.
* solib.c (solib_add): Increment solib_add_generation.
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/infcmd.c | 36 | ||||
-rw-r--r-- | gdb/progspace.h | 3 | ||||
-rw-r--r-- | gdb/solib.c | 2 |
4 files changed, 34 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 08361be..41dc0b2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2011-07-26 Paul Pluzhnikov <ppluzhnikov@google.com> + + * progspace.h (struct program_space): Add solib_add_generation. + * infcmd.c (post_create_inferior): Only call solib_add if not + already done. + * solib.c (solib_add): Increment solib_add_generation. + 2011-07-25 Jan Kratochvil <jan.kratochvil@redhat.com> Fix implicit pointer offsets. diff --git a/gdb/infcmd.c b/gdb/infcmd.c index aa3646b..0a38c64 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -421,6 +421,9 @@ post_create_inferior (struct target_ops *target, int from_tty) if (exec_bfd) { + const unsigned solib_add_generation + = current_program_space->solib_add_generation; + /* Create the hooks to handle shared library load and unload events. */ #ifdef SOLIB_CREATE_INFERIOR_HOOK @@ -428,24 +431,29 @@ post_create_inferior (struct target_ops *target, int from_tty) #else 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. */ + if (current_program_space->solib_add_generation == solib_add_generation) + { + /* The platform-specific hook should load initial shared libraries, + but didn't. FROM_TTY will be incorrectly 0 but such solib + targets should be fixed anyway. Call it only after the solib + target has been initialized by solib_create_inferior_hook. */ + + if (info_verbose) + warning (_("platform-specific solib_create_inferior_hook did " + "not load initial shared libraries.")); + + /* If the solist is global across processes, there's no need to + refetch it here. */ + if (!gdbarch_has_global_solist (target_gdbarch)) + { #ifdef SOLIB_ADD - SOLIB_ADD (NULL, 0, target, auto_solib_add); + SOLIB_ADD (NULL, 0, target, auto_solib_add); #else - solib_add (NULL, 0, target, auto_solib_add); + solib_add (NULL, 0, target, auto_solib_add); #endif + } + } } /* If the user sets watchpoints before execution having started, diff --git a/gdb/progspace.h b/gdb/progspace.h index 5d3ed95..76e8080 100644 --- a/gdb/progspace.h +++ b/gdb/progspace.h @@ -185,6 +185,9 @@ struct program_space solib.c. */ struct so_list *so_list; + /* Number of calls to solib_add. */ + unsigned solib_add_generation; + /* Per pspace data-pointers required by other GDB modules. */ void **data; unsigned num_data; diff --git a/gdb/solib.c b/gdb/solib.c index 94f8f13..49c1cdb 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -914,6 +914,8 @@ solib_add (char *pattern, int from_tty, { struct so_list *gdb; + current_program_space->solib_add_generation++; + if (pattern) { char *re_err = re_comp (pattern); |