aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2007-03-29 17:16:05 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2007-03-29 17:16:05 +0000
commitbcb674cff702e0b46719839a0af4e1ab1619918c (patch)
treef8ffc8cc3eb4ec3eb78ced88fd498a47ed48b42e /ld
parent436868fbdf0d04a677a805ed751ad8a042ef63dd (diff)
downloadgdb-bcb674cff702e0b46719839a0af4e1ab1619918c.zip
gdb-bcb674cff702e0b46719839a0af4e1ab1619918c.tar.gz
gdb-bcb674cff702e0b46719839a0af4e1ab1619918c.tar.bz2
ld/
200x-xx-xx Richard Sandiford <richard@codesourcery.com> Daniel Jacobowitz <dan@codesourcery.com> * NEWS: Mention -l:foo. * ld.texinfo: Document it. * ldlang.c (new_afile): If a lang_input_file_is_l_enum entry as a name beginning with a coloh, convert it to a lang_input_file_is_search_file_enum entry without the colon. ld/testsuite/ * ld-libs/lib-1.s, ld-libs/lib-2.s, ld-libs/lib-2.d, * ld-libs/libs.exp: New files.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog9
-rw-r--r--ld/NEWS3
-rw-r--r--ld/ld.texinfo29
-rw-r--r--ld/ldlang.c8
-rw-r--r--ld/testsuite/ChangeLog5
-rw-r--r--ld/testsuite/ld-libs/lib-1.s2
-rw-r--r--ld/testsuite/ld-libs/lib-2.d4
-rw-r--r--ld/testsuite/ld-libs/lib-2.s2
-rw-r--r--ld/testsuite/ld-libs/libs.exp9
9 files changed, 58 insertions, 13 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 372a5d2..13e1e7d 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,12 @@
+2007-03-29 Richard Sandiford <richard@codesourcery.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+
+ * NEWS: Mention -l:foo.
+ * ld.texinfo: Document it.
+ * ldlang.c (new_afile): If a lang_input_file_is_l_enum
+ entry as a name beginning with a coloh, convert it to a
+ lang_input_file_is_search_file_enum entry without the colon.
+
2007-03-28 Richard Sandiford <richard@codesourcery.com>
* ld.h (ld_config_type): Add rpath_separator.
diff --git a/ld/NEWS b/ld/NEWS
index 48e4432..cbce99c 100644
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -1,4 +1,7 @@
-*- text -*-
+* -l:foo now searches the library path for a filename called foo,
+ without converting it to libfoo.a or libfoo.so.
+
* Add a new command line option '--default-script=FILE' or '-dT FILE'
which specifies a replacement for the built in, default linker
script.
diff --git a/ld/ld.texinfo b/ld/ld.texinfo
index 8dfb4ab..8d40f80 100644
--- a/ld/ld.texinfo
+++ b/ld/ld.texinfo
@@ -614,21 +614,24 @@ of the function. By default, the linker uses @code{_init} as the
function to call.
@cindex archive files, from cmd line
-@kindex -l@var{archive}
-@kindex --library=@var{archive}
-@item -l@var{archive}
-@itemx --library=@var{archive}
-Add archive file @var{archive} to the list of files to link. This
-option may be used any number of times. @command{ld} will search its
-path-list for occurrences of @code{lib@var{archive}.a} for every
-@var{archive} specified.
+@kindex -l@var{namespec}
+@kindex --library=@var{namespec}
+@item -l@var{namespec}
+@itemx --library=@var{namespec}
+Add the archive or object file specified by @var{namespec} to the
+list of files to link. This option may be used any number of times.
+If @var{namespec} is of the form @file{:@var{filename}}, @command{ld}
+will search the library path for a file called @var{filename}, otherise it
+will search the library path for a file called @file{lib@var{namespec}.a}.
On systems which support shared libraries, @command{ld} may also search for
-libraries with extensions other than @code{.a}. Specifically, on ELF
-and SunOS systems, @command{ld} will search a directory for a library with
-an extension of @code{.so} before searching for one with an extension of
-@code{.a}. By convention, a @code{.so} extension indicates a shared
-library.
+files other than @file{lib@var{namespec}.a}. Specifically, on ELF
+and SunOS systems, @command{ld} will search a directory for a library
+called @file{lib@var{namespec}.so} before searching for one called
+@file{lib@var{namespec}.a}. (By convention, a @code{.so} extension
+indicates a shared library.) Note that this behavior does not apply
+to @file{:@var{filename}}, which always specifies a file called
+@var{filename}.
The linker will search an archive only once, at the location where it is
specified on the command line. If the archive defines a symbol which
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 85dd271..7731bfb 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -913,6 +913,14 @@ new_afile (const char *name,
lang_has_input_file = TRUE;
p->target = target;
p->sysrooted = FALSE;
+
+ if (file_type == lang_input_file_is_l_enum
+ && name[0] == ':' && name[1] != '\0')
+ {
+ file_type = lang_input_file_is_search_file_enum;
+ name = name + 1;
+ }
+
switch (file_type)
{
case lang_input_file_is_symbols_only_enum:
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index b57388a..0893e8e 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-03-29 Richard Sandiford <richard@codesourcery.com>
+
+ * ld-libs/lib-1.s, ld-libs/lib-2.s, ld-libs/lib-2.d,
+ * ld-libs/libs.exp: New files.
+
2007-03-28 Richard Sandiford <richard@codesourcery.com>
* ld-vxworks/rpath-1.s, ld-vxworks/rpath-1.d,
diff --git a/ld/testsuite/ld-libs/lib-1.s b/ld/testsuite/ld-libs/lib-1.s
new file mode 100644
index 0000000..7cc5e1d
--- /dev/null
+++ b/ld/testsuite/ld-libs/lib-1.s
@@ -0,0 +1,2 @@
+ .globl foo
+ .set foo,0x2000
diff --git a/ld/testsuite/ld-libs/lib-2.d b/ld/testsuite/ld-libs/lib-2.d
new file mode 100644
index 0000000..b055417
--- /dev/null
+++ b/ld/testsuite/ld-libs/lib-2.d
@@ -0,0 +1,4 @@
+#...
+0+1000 A bar
+0+2000 A foo
+#pass
diff --git a/ld/testsuite/ld-libs/lib-2.s b/ld/testsuite/ld-libs/lib-2.s
new file mode 100644
index 0000000..af749d3
--- /dev/null
+++ b/ld/testsuite/ld-libs/lib-2.s
@@ -0,0 +1,2 @@
+ .globl bar
+ .set bar,0x1000
diff --git a/ld/testsuite/ld-libs/libs.exp b/ld/testsuite/ld-libs/libs.exp
new file mode 100644
index 0000000..8609d65
--- /dev/null
+++ b/ld/testsuite/ld-libs/libs.exp
@@ -0,0 +1,9 @@
+file mkdir tmpdir/libtmp
+
+# Check that -l: works. The first "test" just creates an object file
+# for the second one.
+run_ld_link_tests {
+ {"-l: test (preparation)" "-r" "" {lib-1.s} {} "libtmp/anobject"}
+ {"-l: test" "-r -Ltmpdir/libtmp -l:anobject" "" {lib-2.s}
+ {{nm -C lib-2.d}} "lib-2"}
+}