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

@@ -89,20 +89,20 @@ 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
(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. */
is compared against a 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. */
static LONGEST pa64_solib_total_st_size;
/* When the threshold is reached for any shlib, we refuse to add
symbols for subsequent shlibs, even if those shlibs' symbols would
be small enough to fit under the threshold. (Although this may
be small enough to fit under the threshold. Although this may
result in one, early large shlib preventing the loading of later,
smalller shlibs' symbols, it allows us to issue one informational
smaller shlibs' symbols, it allows us to issue one informational
message. The alternative, to issue a message for each shlib whose
symbols aren't loaded, could be a big annoyance where the threshold
is exceeded due to a very large number of shlibs.) */
is exceeded due to a very large number of shlibs. */
static int pa64_solib_st_size_threshold_exceeded;
/* When adding fields, be sure to clear them in _initialize_pa64_solib. */
@@ -368,7 +368,7 @@ pa64_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
@@ -886,28 +886,37 @@ _initialize_pa64_solib (void)
"Load shared object library symbols for files matching REGEXP.");
add_info ("sharedlibrary", pa64_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 */
pa64_solib_restart ();
}
@@ -1157,8 +1166,9 @@ add_to_solist (boolean from_tty, char *dll_path,
st_size = pa64_solib_sizeof_symbol_table (dll_path);
pa64_solib_st_size_threshhold_exceeded =
!from_tty
&& auto_solib_add
&& ( (st_size + pa64_solib_total_st_size)
> (auto_solib_add * (LONGEST)1000000));
> (auto_solib_limit * (LONGEST)1000000));
if (pa64_solib_st_size_threshhold_exceeded)
{
pa64_solib_add_solib_objfile (new_so, dll_path, from_tty, 1);