This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] gold --with-lib-path


ÐÐÐÐÐÐ ÐÑÑÐÐ <leo@yuriev.ru> writes:

> There a lot of troubles while using gold in real life without the
> built-in libs search path...
> This is a simplest-way patch for ones.

Thanks.  I just committed a different patch which implements
--with-lib-path.  This patch also fixes up the search path used by a
cross-linker when there is no sysroot.  Committed to mainline.

Ian


2011-11-02  Ian Lance Taylor  <iant@google.com>

	* configure.ac: Add --with-lib-path option.  Define LIB_PATH and
	NATIVE_LINKER.
	* Makefile.am (AM_CPPFLAGS): Define TOOLLIBDIR.
	* options.cc (General_options::finalize): Use library search path
	from configure script if specified.  If not native and no sysroot,
	only search TOOLLIBDIR.
	* options.h (Search_directory::Search_directory): Change name to
	const std::string&.
	(General_options::add_to_library_path_with_sysroot): Change arg to
	const std::string&.
	* configure, Makefile.in, config.in: Rebuild.


Index: Makefile.am
===================================================================
RCS file: /cvs/src/src/gold/Makefile.am,v
retrieving revision 1.63
diff -u -p -r1.63 Makefile.am
--- Makefile.am	23 Sep 2011 15:02:32 -0000	1.63
+++ Makefile.am	3 Nov 2011 04:29:29 -0000
@@ -15,7 +15,7 @@ AM_CPPFLAGS = \
 	-I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../elfcpp \
 	-DLOCALEDIR="\"$(datadir)/locale\"" \
 	-DBINDIR="\"$(bindir)\"" -DTOOLBINDIR="\"$(tooldir)/bin\"" \
-	@INCINTL@
+	-DTOOLLIBDIR="\"$(tooldir)/lib\"" @INCINTL@
 
 LIBIBERTY = ../libiberty/libiberty.a
 
Index: configure.ac
===================================================================
RCS file: /cvs/src/src/gold/configure.ac,v
retrieving revision 1.67
diff -u -p -r1.67 configure.ac
--- configure.ac	23 Sep 2011 15:02:32 -0000	1.67
+++ configure.ac	3 Nov 2011 04:29:30 -0000
@@ -238,6 +238,20 @@ AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDI
 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
 		   [Default OSABI code])
 
+AC_ARG_WITH(lib-path,
+[  --with-lib-path=dir1:dir2...  set default LIB_PATH],
+[case "$withval" in
+ yes) LIB_PATH='"/lib:/usr/lib"' ;;
+ no) LIB_PATH='""' ;;
+ *) LIB_PATH='"'"$withval"'"' ;;
+ esac],
+[LIB_PATH='"::DEFAULT::"'])
+AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
+		   [Default library search path])
+if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
+  AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
+fi
+
 AC_CHECK_TOOL(NM, nm)
 
 AC_PROG_CC
Index: options.cc
===================================================================
RCS file: /cvs/src/src/gold/options.cc,v
retrieving revision 1.116
diff -u -p -r1.116 options.cc
--- options.cc	3 Oct 2011 17:01:43 -0000	1.116
+++ options.cc	3 Nov 2011 04:29:31 -0000
@@ -1121,33 +1121,48 @@ General_options::finalize()
                  program_name);
 #endif
 
+  std::string libpath;
   if (this->user_set_Y())
     {
-      std::string s = this->Y();
-      if (s.compare(0, 2, "P,") == 0)
-	s.erase(0, 2);
+      libpath = this->Y();
+      if (libpath.compare(0, 2, "P,") == 0)
+	libpath.erase(0, 2);
+    }
+  else if (!this->nostdlib())
+    {
+#ifndef NATIVE_LINKER
+#define NATIVE_LINKER 0
+#endif
+      const char* p = LIB_PATH;
+      if (strcmp(p, "::DEFAULT::") != 0)
+	libpath = p;
+      else if (NATIVE_LINKER
+	       || this->user_set_sysroot()
+	       || *TARGET_SYSTEM_ROOT != '\0')
+	{
+	  this->add_to_library_path_with_sysroot("/lib");
+	  this->add_to_library_path_with_sysroot("/usr/lib");
+	}
+      else
+	this->add_to_library_path_with_sysroot(TOOLLIBDIR);
+    }
 
+  if (!libpath.empty())
+    {
       size_t pos = 0;
       size_t next_pos;
       do
 	{
-	  next_pos = s.find(':', pos);
+	  next_pos = libpath.find(':', pos);
 	  size_t len = (next_pos == std::string::npos
 			? next_pos
 			: next_pos - pos);
 	  if (len != 0)
-	    this->add_to_library_path_with_sysroot(s.substr(pos, len).c_str());
+	    this->add_to_library_path_with_sysroot(libpath.substr(pos, len));
 	  pos = next_pos + 1;
 	}
       while (next_pos != std::string::npos);
     }
-  else if (!this->nostdlib())
-    {
-      // Even if they don't specify it, we add -L /lib and -L /usr/lib.
-      // FIXME: We should only do this when configured in native mode.
-      this->add_to_library_path_with_sysroot("/lib");
-      this->add_to_library_path_with_sysroot("/usr/lib");
-    }
 
   // Parse the contents of -retain-symbols-file into a set.
   if (this->retain_symbols_file())
Index: options.h
===================================================================
RCS file: /cvs/src/src/gold/options.h,v
retrieving revision 1.172
diff -u -p -r1.172 options.h
--- options.h	3 Nov 2011 03:38:34 -0000	1.172
+++ options.h	3 Nov 2011 04:29:31 -0000
@@ -543,7 +543,7 @@ class Search_directory
   { }
 
   // This is the usual constructor.
-  Search_directory(const char* name, bool put_in_sysroot)
+  Search_directory(const std::string& name, bool put_in_sysroot)
     : name_(name), put_in_sysroot_(put_in_sysroot), is_in_sysroot_(false)
   {
     if (this->name_.empty())
@@ -1463,7 +1463,7 @@ class General_options
 
   // These are called by finalize() to set up the search-path correctly.
   void
-  add_to_library_path_with_sysroot(const char* arg)
+  add_to_library_path_with_sysroot(const std::string& arg)
   { this->add_search_directory_to_library_path(Search_directory(arg, true)); }
 
   // Apply any sysroot to the directory lists.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]