2007-05-08 Paul Gilliam <pgilliam@us.ibm.com>
[deliverable/binutils-gdb.git] / gdb / solib.c
index 215d82bcbc9b3d82e600e2cf49922aa835336f76..0b5e2e3938c4436c2486b1c2c168d26d6f362034 100644 (file)
@@ -1,8 +1,7 @@
 /* Handle shared libraries for GDB, the GNU Debugger.
 
-   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2005, 2006
-   Free Software Foundation, Inc.
+   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+   2000, 2001, 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -85,10 +84,6 @@ static int solib_cleanup_queued = 0; /* make_run_cleanup called */
 
 static void do_clear_solib (void *);
 
-/* If non-zero, this is a prefix that will be added to the front of the name
-   shared libraries with an absolute filename for loading.  */
-static char *solib_absolute_prefix = NULL;
-
 /* If non-empty, this is a search path for loading non-absolute shared library
    symbol files.  This takes precedence over the environment variables PATH
    and LD_LIBRARY_PATH.  */
@@ -114,26 +109,26 @@ The search path for loading non-absolute shared library symbol files is %s.\n"),
 
    DESCRIPTION
 
-   Global variable SOLIB_ABSOLUTE_PREFIX is used as a prefix directory
+   Global variable GDB_SYSROOT is used as a prefix directory
    to search for shared libraries if they have an absolute path.
 
    Global variable SOLIB_SEARCH_PATH is used as a prefix directory
    (or set of directories, as in LD_LIBRARY_PATH) to search for all
-   shared libraries if not found in SOLIB_ABSOLUTE_PREFIX.
+   shared libraries if not found in GDB_SYSROOT.
 
    Search algorithm:
-   * If there is a solib_absolute_prefix and path is absolute:
-   *   Search for solib_absolute_prefix/path.
+   * If there is a gdb_sysroot and path is absolute:
+   *   Search for gdb_sysroot/path.
    * else
    *   Look for it literally (unmodified).
    * Look in SOLIB_SEARCH_PATH.
    * If available, use target defined search function.
-   * If solib_absolute_prefix is NOT set, perform the following two searches:
+   * If gdb_sysroot is NOT set, perform the following two searches:
    *   Look in inferior's $PATH.
    *   Look in inferior's $LD_LIBRARY_PATH.
    *   
    * The last check avoids doing this search when targetting remote
-   * machines since solib_absolute_prefix will almost always be set.
+   * machines since gdb_sysroot will almost always be set.
 
    RETURNS
 
@@ -146,25 +141,24 @@ solib_open (char *in_pathname, char **found_pathname)
   int found_file = -1;
   char *temp_pathname = NULL;
   char *p = in_pathname;
-  int solib_absolute_prefix_is_empty;
+  int gdb_sysroot_is_empty;
 
-  solib_absolute_prefix_is_empty = (solib_absolute_prefix == NULL
-                                    || *solib_absolute_prefix == 0);
+  gdb_sysroot_is_empty = (gdb_sysroot == NULL || *gdb_sysroot == 0);
 
-  if (! IS_ABSOLUTE_PATH (in_pathname) || solib_absolute_prefix_is_empty)
+  if (! IS_ABSOLUTE_PATH (in_pathname) || gdb_sysroot_is_empty)
     temp_pathname = in_pathname;
   else
     {
-      int prefix_len = strlen (solib_absolute_prefix);
+      int prefix_len = strlen (gdb_sysroot);
 
       /* Remove trailing slashes from absolute prefix.  */
       while (prefix_len > 0
-            && IS_DIR_SEPARATOR (solib_absolute_prefix[prefix_len - 1]))
+            && IS_DIR_SEPARATOR (gdb_sysroot[prefix_len - 1]))
        prefix_len--;
 
       /* Cat the prefixed pathname together.  */
       temp_pathname = alloca (prefix_len + strlen (in_pathname) + 1);
-      strncpy (temp_pathname, solib_absolute_prefix, prefix_len);
+      strncpy (temp_pathname, gdb_sysroot, prefix_len);
       temp_pathname[prefix_len] = '\0';
       strcat (temp_pathname, in_pathname);
     }
@@ -172,7 +166,7 @@ solib_open (char *in_pathname, char **found_pathname)
   /* Now see if we can open it.  */
   found_file = open (temp_pathname, O_RDONLY | O_BINARY, 0);
 
-  /* If the search in solib_absolute_prefix failed, and the path name is
+  /* If the search in gdb_sysroot failed, and the path name is
      absolute at this point, make it relative.  (openp will try and open the
      file according to its absolute path otherwise, which is not what we want.)
      Affects subsequent searches for this solib.  */
@@ -206,14 +200,14 @@ solib_open (char *in_pathname, char **found_pathname)
                                           &temp_pathname);
 
   /* If not found, next search the inferior's $PATH environment variable. */
-  if (found_file < 0 && solib_absolute_prefix_is_empty)
+  if (found_file < 0 && gdb_sysroot_is_empty)
     found_file = openp (get_in_environ (inferior_environ, "PATH"),
                        OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY | O_BINARY, 0,
                        &temp_pathname);
 
   /* If not found, next search the inferior's $LD_LIBRARY_PATH 
      environment variable. */
-  if (found_file < 0 && solib_absolute_prefix_is_empty)
+  if (found_file < 0 && gdb_sysroot_is_empty)
     found_file = openp (get_in_environ (inferior_environ, "LD_LIBRARY_PATH"),
                        OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY | O_BINARY, 0,
                        &temp_pathname);
@@ -979,18 +973,21 @@ inferior.  Otherwise, symbols must be loaded manually, using `sharedlibrary'."),
                           show_auto_solib_add,
                           &setlist, &showlist);
 
-  add_setshow_filename_cmd ("solib-absolute-prefix", class_support,
-                           &solib_absolute_prefix, _("\
-Set prefix for loading absolute shared library symbol files."), _("\
-Show prefix for loading absolute shared library symbol files."), _("\
-For other (relative) files, you can add values using `set solib-search-path'."),
+  add_setshow_filename_cmd ("sysroot", class_support,
+                           &gdb_sysroot, _("\
+Set an alternate system root."), _("\
+Show the current system root."), _("\
+The system root is used to load absolute shared library symbol files.\n\
+For other (relative) files, you can add directories using\n\
+`set solib-search-path'."),
                            reload_shared_libraries,
                            NULL,
                            &setlist, &showlist);
 
-  /* Set the default value of "solib-absolute-prefix" from the sysroot, if
-     one is set.  */
-  solib_absolute_prefix = xstrdup (gdb_sysroot);
+  add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
+                &setlist);
+  add_alias_cmd ("solib-absolute-prefix", "sysroot", class_support, 0,
+                &showlist);
 
   add_setshow_optional_filename_cmd ("solib-search-path", class_support,
                                     &solib_search_path, _("\
This page took 0.02654 seconds and 4 git commands to generate.