This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] gold --with-lib-path
- From: Ian Lance Taylor <iant at google dot com>
- To: ÐÐÐÐÐÐ ÐÑÑÐÐ <leo at yuriev dot ru>
- Cc: binutils at sourceware dot org
- Date: Wed, 02 Nov 2011 21:32:04 -0700
- Subject: Re: [PATCH] gold --with-lib-path
- References: <CAO2+NUB+gwOcWcS1-4yLfwgdG1x-AjkO5-kOSOyHQVaeN2FErw@mail.gmail.com> <CAO2+NUBbuGfW4REh16gT+35-=_WZp_O=nPMAFp34mKG260jF-g@mail.gmail.com>
ÐÐÐÐÐÐ ÐÑÑÐÐ <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.