diff options
author | Jeff Law <law@redhat.com> | 1995-06-19 21:26:58 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1995-06-19 21:26:58 +0000 |
commit | 156285aac0a393645bcfb14c2d0d7f7b48b659df (patch) | |
tree | a4b0d8c332b6a00f9352e9f9cca6640e7b763ea8 /gdb | |
parent | c2730ba305d14b3a058019b5447b89cd17202ec0 (diff) | |
download | gdb-156285aac0a393645bcfb14c2d0d7f7b48b659df.zip gdb-156285aac0a393645bcfb14c2d0d7f7b48b659df.tar.gz gdb-156285aac0a393645bcfb14c2d0d7f7b48b659df.tar.bz2 |
* somsolib.c (som_solib_add): Validate regexp argument.
Don't assume the first entry on dld's library list is the main
program. Don't load the same library more than once and don't
consider the main program a shared library.
(som_solib_sharedlibrary_command): New function
(_initialize_som_solib): Add "sharedlibrary" command.
mentor-7135
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/somsolib.c | 48 |
2 files changed, 48 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7367bdf..562b9bd 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +Sat Jun 17 10:17:16 1995 Jeff Law (law@snake.cs.utah.edu) + + * somsolib.c (som_solib_add): Validate regexp argument. + Don't assume the first entry on dld's library list is the main + program. Don't load the same library more than once and don't + consider the main program a shared library. + (som_solib_sharedlibrary_command): New function + (_initialize_som_solib): Add "sharedlibrary" command. + Thu Jun 15 14:54:58 1995 Stan Shebs <shebs@andros.cygnus.com> * array-rom.c: Remove, no longer used. diff --git a/gdb/somsolib.c b/gdb/somsolib.c index 22b787b..8b5fc52 100644 --- a/gdb/somsolib.c +++ b/gdb/somsolib.c @@ -113,7 +113,13 @@ som_solib_add (arg_string, from_tty, target) asection *shlib_info; int status; unsigned int dld_flags; - char buf[4]; + char buf[4], *re_err; + + /* First validate our arguments. */ + if ((re_err = re_comp (arg_string ? arg_string : ".")) != NULL) + { + error ("Invalid regexp: %s", re_err); + } /* If we're debugging a core file, or have attached to a running process, then som_solib_create_inferior_hook will not have been @@ -212,14 +218,7 @@ som_solib_add (arg_string, from_tty, target) addr = extract_unsigned_integer (buf, 4); /* Now that we have a pointer to the dynamic library list, walk - through it and add the symbols for each library. - - Skip the first entry since it's our executable. */ - status = target_read_memory (addr + 36, buf, 4); - if (status != 0) - goto err; - - addr = extract_unsigned_integer (buf, 4); + through it and add the symbols for each library. */ so_list_tail = so_list_head; /* Find the end of the list of shared objects. */ @@ -232,6 +231,7 @@ som_solib_add (arg_string, from_tty, target) unsigned int name_len; char *name; struct so_list *new_so; + struct so_list *so_list = so_list_head; struct section_table *p; if (addr == 0) @@ -259,6 +259,25 @@ som_solib_add (arg_string, from_tty, target) if (status != 0) goto err; + /* See if we've already loaded something with this name. */ + while (so_list) + { + if (!strcmp (so_list->som_solib.name, name)) + break; + so_list = so_list->next; + } + + /* We've already loaded this one or it's the main program, skip it. */ + if (so_list || !strcmp (name, symfile_objfile->name)) + { + status = target_read_memory (addr + 36, buf, 4); + if (status != 0) + goto err; + + addr = (CORE_ADDR) extract_unsigned_integer (buf, 4); + continue; + } + name = obsavestring (name, name_len - 1, &symfile_objfile->symbol_obstack); @@ -657,9 +676,20 @@ som_sharedlibrary_info_command (ignore, from_tty) } } +static void +som_solib_sharedlibrary_command (args, from_tty) + char *args; + int from_tty; +{ + dont_repeat (); + som_solib_add (args, from_tty, (struct target_ops *) 0); +} + void _initialize_som_solib () { + add_com ("sharedlibrary", class_files, som_solib_sharedlibrary_command, + "Load shared object library symbols for files matching REGEXP."); add_info ("sharedlibrary", som_sharedlibrary_info_command, "Status of loaded shared object libraries."); } |