2001-12-21 Michael Snyder <msnyder@redhat.com>
[deliverable/binutils-gdb.git] / gdb / osfsolib.c
index 1294072f8ed070f1771b2a2c72f2d4fd4aa32b9c..2ef7947676bde4e27c728663b474d9cc59660886 100644 (file)
@@ -1,5 +1,6 @@
 /* Handle OSF/1 shared libraries for GDB, the GNU Debugger.
-   Copyright 1993, 94, 95, 96, 98, 1999 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1995, 1996, 1998, 1999, 2000
+   Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -36,7 +37,7 @@
 #include "command.h"
 #include "target.h"
 #include "frame.h"
-#include "gnu-regex.h"
+#include "gdb_regex.h"
 #include "inferior.h"
 #include "language.h"
 #include "gdbcmd.h"
@@ -113,14 +114,10 @@ static ldr_process_t fake_ldr_process;
 
 /* Called by ldr_* routines to read memory from the current target.  */
 
-static int ldr_read_memory PARAMS ((CORE_ADDR, char *, int, int));
+static int ldr_read_memory (CORE_ADDR, char *, int, int);
 
 static int
-ldr_read_memory (memaddr, myaddr, len, readstring)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     int len;
-     int readstring;
+ldr_read_memory (CORE_ADDR memaddr, char *myaddr, int len, int readstring)
 {
   int result;
   char *buffer;
@@ -130,7 +127,7 @@ ldr_read_memory (memaddr, myaddr, len, readstring)
       target_read_string (memaddr, &buffer, len, &result);
       if (result == 0)
        strcpy (myaddr, buffer);
-      free (buffer);
+      xfree (buffer);
     }
   else
     result = target_read_memory (memaddr, myaddr, len);
@@ -173,34 +170,25 @@ struct so_list
 
 static struct so_list *so_list_head;   /* List of known shared objects */
 
-extern int
-fdmatch PARAMS ((int, int));   /* In libiberty */
+extern int fdmatch (int, int); /* In libiberty */
 
 /* Local function prototypes */
 
-static void
-sharedlibrary_command PARAMS ((char *, int));
+static void sharedlibrary_command (char *, int);
 
-static void
-info_sharedlibrary_command PARAMS ((char *, int));
+static void info_sharedlibrary_command (char *, int);
 
-static int
-symbol_add_stub PARAMS ((char *));
+static int symbol_add_stub (char *);
 
-static struct so_list *
-  find_solib PARAMS ((struct so_list *));
+static struct so_list *find_solib (struct so_list *);
 
-static struct link_map *
-  first_link_map_member PARAMS ((void));
+static struct link_map *first_link_map_member (void);
 
-static struct link_map *
-  next_link_map_member PARAMS ((struct so_list *));
+static struct link_map *next_link_map_member (struct so_list *);
 
-static void
-xfer_link_map_member PARAMS ((struct so_list *, struct link_map *));
+static void xfer_link_map_member (struct so_list *, struct link_map *);
 
-static int
-solib_map_sections PARAMS ((char *));
+static int solib_map_sections (char *);
 
 /*
 
@@ -230,8 +218,7 @@ solib_map_sections PARAMS ((char *));
  */
 
 static int
-solib_map_sections (arg)
-     char *arg;
+solib_map_sections (char *arg)
 {
   struct so_list *so = (struct so_list *) arg; /* catch_errors bogon */
   char *filename;
@@ -242,7 +229,7 @@ solib_map_sections (arg)
   bfd *abfd;
 
   filename = tilde_expand (so->so_name);
-  old_chain = make_cleanup (free, filename);
+  old_chain = make_cleanup (xfree, filename);
 
   scratch_chan = openp (getenv ("PATH"), 1, filename, O_RDONLY, 0,
                        &scratch_pathname);
@@ -317,7 +304,7 @@ solib_map_sections (arg)
  */
 
 static struct link_map *
-first_link_map_member ()
+first_link_map_member (void)
 {
   struct link_map *lm = NULL;
   static struct link_map first_lm;
@@ -360,8 +347,7 @@ first_link_map_member ()
 }
 
 static struct link_map *
-next_link_map_member (so_list_ptr)
-     struct so_list *so_list_ptr;
+next_link_map_member (struct so_list *so_list_ptr)
 {
   struct link_map *lm = NULL;
   static struct link_map next_lm;
@@ -402,9 +388,7 @@ next_link_map_member (so_list_ptr)
 }
 
 static void
-xfer_link_map_member (so_list_ptr, lm)
-     struct so_list *so_list_ptr;
-     struct link_map *lm;
+xfer_link_map_member (struct so_list *so_list_ptr, struct link_map *lm)
 {
   int i;
   so_list_ptr->lm = *lm;
@@ -462,7 +446,7 @@ xfer_link_map_member (so_list_ptr, lm)
        error ("xfer_link_map_member: Can't read pathname for load map: %s\n",
               safe_strerror (errcode));
       strncpy (so_list_ptr->so_name, buffer, MAX_PATH_SIZE - 1);
-      free (buffer);
+      xfree (buffer);
       so_list_ptr->so_name[MAX_PATH_SIZE - 1] = '\0';
 
       for (i = 0; i < lm->module_info.region_count; i++)
@@ -489,7 +473,7 @@ xfer_link_map_member (so_list_ptr, lm)
                region_name = "??";
              warning ("cannot handle shared library relocation for %s (%s)",
                       so_list_ptr->so_name, region_name);
-             free (buffer);
+             xfree (buffer);
            }
        }
 #endif
@@ -524,8 +508,7 @@ xfer_link_map_member (so_list_ptr, lm)
  */
 
 static struct so_list *
-find_solib (so_list_ptr)
-     struct so_list *so_list_ptr;      /* Last lm or NULL for first one */
+find_solib (struct so_list *so_list_ptr)
 {
   struct so_list *so_list_next = NULL;
   struct link_map *lm = NULL;
@@ -573,8 +556,7 @@ find_solib (so_list_ptr)
 /* A small stub to get us past the arg-passing pinhole of catch_errors.  */
 
 static int
-symbol_add_stub (arg)
-     char *arg;
+symbol_add_stub (char *arg)
 {
   register struct so_list *so = (struct so_list *) arg;                /* catch_errs bogon */
   CORE_ADDR text_addr = 0;
@@ -598,7 +580,8 @@ symbol_add_stub (arg)
        text_addr = bfd_section_vma (so->abfd, lowest_sect) + LM_OFFSET (so);
     }
 
-  section_addrs.text_addr = text_addr;
+  section_addrs.other[0].addr = text_addr;
+  section_addrs.other[0].name = ".text";
   so->objfile = symbol_file_add (so->so_name, so->from_tty,
                                 &section_addrs, 0, OBJF_SHARED);
   return (1);
@@ -613,17 +596,14 @@ symbol_add_stub (arg)
    SYNOPSIS
 
    void solib_add (char *arg_string, int from_tty,
-   struct target_ops *target)
+   struct target_ops *target, int readsyms)
 
    DESCRIPTION
 
  */
 
 void
-solib_add (arg_string, from_tty, target)
-     char *arg_string;
-     int from_tty;
-     struct target_ops *target;
+solib_add (char *arg_string, int from_tty, struct target_ops *target, int readsyms)
 {
   register struct so_list *so = NULL;  /* link map state variable */
 
@@ -634,6 +614,9 @@ solib_add (arg_string, from_tty, target)
   int count;
   int old;
 
+  if (!readsyms)
+    return;
+
   if ((re_err = re_comp (arg_string ? arg_string : ".")) != NULL)
     {
       error ("Invalid regexp: %s", re_err);
@@ -723,9 +706,7 @@ solib_add (arg_string, from_tty, target)
  */
 
 static void
-info_sharedlibrary_command (ignore, from_tty)
-     char *ignore;
-     int from_tty;
+info_sharedlibrary_command (char *ignore, int from_tty)
 {
   register struct so_list *so = NULL;  /* link map state variable */
   int header_done = 0;
@@ -790,8 +771,7 @@ info_sharedlibrary_command (ignore, from_tty)
  */
 
 char *
-solib_address (address)
-     CORE_ADDR address;
+solib_address (CORE_ADDR address)
 {
   register struct so_list *so = 0;     /* link map state variable */
 
@@ -810,7 +790,7 @@ solib_address (address)
 /* Called by free_all_symtabs */
 
 void
-clear_solib ()
+clear_solib (void)
 {
   struct so_list *next;
   char *bfd_filename;
@@ -821,10 +801,11 @@ clear_solib ()
     {
       if (so_list_head->sections)
        {
-         free ((PTR) so_list_head->sections);
+         xfree (so_list_head->sections);
        }
       if (so_list_head->abfd)
        {
+         remove_target_sections (so_list_head->abfd);
          bfd_filename = bfd_get_filename (so_list_head->abfd);
          if (!bfd_close (so_list_head->abfd))
            warning ("cannot close \"%s\": %s",
@@ -836,8 +817,8 @@ clear_solib ()
 
       next = so_list_head->next;
       if (bfd_filename)
-       free ((PTR) bfd_filename);
-      free ((PTR) so_list_head);
+       xfree (bfd_filename);
+      xfree (so_list_head);
       so_list_head = next;
     }
 }
@@ -879,7 +860,7 @@ clear_solib ()
  */
 
 void
-solib_create_inferior_hook ()
+solib_create_inferior_hook (void)
 {
 
   /* Nothing to do for statically bound executables.  */
@@ -899,7 +880,7 @@ solib_create_inferior_hook ()
   stop_signal = TARGET_SIGNAL_0;
   do
     {
-      target_resume (-1, 0, stop_signal);
+      target_resume (minus_one_ptid, 0, stop_signal);
       wait_for_inferior ();
     }
   while (stop_signal != TARGET_SIGNAL_TRAP);
@@ -910,8 +891,7 @@ solib_create_inferior_hook ()
      and will put out an annoying warning.
      Delaying the resetting of stop_soon_quietly until after symbol loading
      suppresses the warning.  */
-  if (auto_solib_add)
-    solib_add ((char *) 0, 0, (struct target_ops *) 0);
+  solib_add ((char *) 0, 0, (struct target_ops *) 0, auto_solib_add);
   stop_soon_quietly = 0;
 }
 
@@ -931,16 +911,14 @@ solib_create_inferior_hook ()
  */
 
 static void
-sharedlibrary_command (args, from_tty)
-     char *args;
-     int from_tty;
+sharedlibrary_command (char *args, int from_tty)
 {
   dont_repeat ();
-  solib_add (args, from_tty, (struct target_ops *) 0);
+  solib_add (args, from_tty, (struct target_ops *) 0, 1);
 }
 
 void
-_initialize_solib ()
+_initialize_solib (void)
 {
   add_com ("sharedlibrary", class_files, sharedlibrary_command,
           "Load shared object library symbols for files matching REGEXP.");
@@ -948,13 +926,13 @@ _initialize_solib ()
            "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 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.  Otherwise, symbols\n\
-must be loaded manually, using `sharedlibrary'.",
+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);
 }
This page took 0.029331 seconds and 4 git commands to generate.