Changelog:

	2001-10-27  Fred Fish  <fnf@redhat.com>

	* symfile.c (auto_solib_add): Update comment to note that
	this variable is now just used as a boolean to control shlib
	autoloading, and clarify when it is used.
	* symfile.h (auto_solib_add): Ditto.

	* symfile.c (auto_solib_limit): New variable that holds the
	autoloading threshold instead of overloading auto_solib_add.
	* symfile.h (auto_solib_limit): Ditto.

	* irix5-nat.c (_initialize_solib): Change auto-solib-add
	variable from var_zinteger to var_boolean and update help.
	* osfsolib.c (_initialize_solib): Ditto.
	* pa64solib.c (_initialize_pa64_solib): Ditto.
	* solib.c (_initialize_solib): Ditto.
	* somsolib.c (_initialize_som_solib): Ditto.
	* xcoffsolib.c (_initialize_solib): Ditto.

	* pa64solib.c (pa64_solib_total_st_size): Update comment to
	note that the new auto_solib_limit variable is used instead
	of overloading auto_solib_add variable.
	(_initialize_pa64_solib): Ditto.
	* somsolib.c (som_solib_total_st_size): Ditto.
	(_initialize_som_solib): Ditto.

	* pa64solib.c (_initialize_pa64_solib): Add new set/show
	commands for auto-solib-limit variable.
	* somsolib.c (_initialize_som_solib): Ditto

	* pa64solib.c (add_to_solist): Check that auto_solib_add is
	set and use auto_solib_limit as the threshold size instead
	of auto_solib_add.
	* somsolib.c (som_solib_add): Ditto, and also change warning
	text about size threshold exceeded.

  doc/ChangeLog:

	2001-10-28  Fred Fish  <fnf@redhat.com>

	* gdb.texinfo (auto-solib-add): Change docs to match
	implementation change.
	(auto-solib-limit): Add docs for new variable.
This commit is contained in:
Fred Fish 2001-10-30 04:05:36 +00:00
parent 310a798eb8
commit b7209cb4ed
11 changed files with 209 additions and 111 deletions

View file

@ -161,11 +161,10 @@ static struct so_list *so_list_head;
shared objects on the so_list_head list. (When we say size, here
we mean of the information before it is brought into memory and
potentially expanded by GDB.) When adding a new shlib, this value
is compared against the threshold size, held by auto_solib_add
is compared against the threshold size, held by auto_solib_limit
(in megabytes). If adding symbols for the new shlib would cause
the total size to exceed the threshold, then the new shlib's symbols
are not loaded.
*/
the total size to exceed the threshold, then the new shlib's
symbols are not loaded. */
static LONGEST som_solib_total_st_size;
/* When the threshold is reached for any shlib, we refuse to add
@ -403,7 +402,7 @@ som_solib_load_symbols (struct so_list *so, char *name, int from_tty,
/* Add symbols from shared libraries into the symtab list, unless the
size threshold (specified by auto_solib_add, in megabytes) would
size threshold specified by auto_solib_limit (in megabytes) would
be exceeded. */
void
@ -778,12 +777,13 @@ som_solib_add (char *arg_string, int from_tty, struct target_ops *target)
st_size = som_solib_sizeof_symbol_table (name);
som_solib_st_size_threshold_exceeded =
!from_tty &&
((st_size + som_solib_total_st_size) > (auto_solib_add * (LONGEST) 1000000));
auto_solib_add &&
((st_size + som_solib_total_st_size) > (auto_solib_limit * (LONGEST) 1000000));
if (som_solib_st_size_threshold_exceeded)
{
if (!threshold_warning_given)
warning ("Symbols for some libraries have not been loaded, because\ndoing so would exceed the size threshold specified by auto-solib-add.\nTo manually load symbols, use the 'sharedlibrary' command.\nTo raise the threshold, set auto-solib-add to a larger value and rerun\nthe program.\n");
warning ("Symbols for some libraries have not been loaded, because\ndoing so would exceed the size threshold specified by auto-solib-limit.\nTo manually load symbols, use the 'sharedlibrary' command.\nTo raise the threshold, set auto-solib-limit to a larger value and rerun\nthe program.\n");
threshold_warning_given = 1;
/* We'll still make note of this shlib, even if we don't
@ -1571,28 +1571,37 @@ _initialize_som_solib (void)
"Load shared object library symbols for files matching REGEXP.");
add_info ("sharedlibrary", som_sharedlibrary_info_command,
"Status of loaded shared object libraries.");
add_show_from_set
(add_set_cmd ("auto-solib-add", class_support, var_zinteger,
(add_set_cmd ("auto-solib-add", class_support, var_boolean,
(char *) &auto_solib_add,
"Set autoloading size threshold (in megabytes) of shared library symbols.\n\
If nonzero, symbols from all shared object libraries will be loaded\n\
automatically when the inferior begins execution or when the dynamic linker\n\
informs gdb that a new library has been loaded, until the symbol table\n\
of the program and libraries exceeds this threshold.\n\
Otherwise, symbols must be loaded manually, using `sharedlibrary'.",
"Set autoloading of shared library symbols.\n\
If \"on\", symbols from all shared object libraries will be loaded\n\
automatically when the inferior begins execution, when the dynamic linker\n\
informs gdb that a new library has been loaded, or when attaching to the\n\
inferior. Otherwise, symbols must be loaded manually, using `sharedlibrary'.",
&setlist),
&showlist);
/* ??rehrauer: On HP-UX, the kernel parameter MAXDSIZ limits how much
data space a process can use. We ought to be reading MAXDSIZ and
setting auto_solib_add to some large fraction of that value. If
not that, we maybe ought to be setting it smaller than the default
for MAXDSIZ (that being 64Mb, I believe). However, [1] this threshold
is only crudely approximated rather than actually measured, and [2]
50 Mbytes is too small for debugging gdb itself. Thus, the arbitrary
100 figure.
*/
auto_solib_add = 100; /* Megabytes */
add_show_from_set
(add_set_cmd ("auto-solib-limit", class_support, var_zinteger,
(char *) &auto_solib_limit,
"Set threshold (in Mb) for autoloading shared library symbols.\n\
When shared library autoloading is enabled, new libraries will be loaded\n\
only until the total size of shared library symbols exceeds this\n\
threshold in megabytes. Is ignored when using `sharedlibrary'.",
&setlist),
&showlist);
/* ??rehrauer: On HP-UX, the kernel parameter MAXDSIZ limits how
much data space a process can use. We ought to be reading
MAXDSIZ and setting auto_solib_limit to some large fraction of
that value. If not that, we maybe ought to be setting it smaller
than the default for MAXDSIZ (that being 64Mb, I believe).
However, [1] this threshold is only crudely approximated rather
than actually measured, and [2] 50 Mbytes is too small for
debugging gdb itself. Thus, the arbitrary 100 figure. */
auto_solib_limit = 100; /* Megabytes */
som_solib_restart ();
}