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.
This commit is contained in:
Paul Pluzhnikov 2011-07-26 15:17:47 +00:00
parent 53d780c93d
commit 2eff07b325
4 changed files with 33 additions and 13 deletions

View File

@ -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.

View File

@ -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,

View File

@ -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;

View File

@ -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);