Commit Graph
149 Commits
Author SHA1 Message Date
John Polstra 2e167ceaa6 Eliminate compiler warnings. I modified the submitted patch a
little, primarily by changing the white space.  This aligns the
fix with changes that have already been made in -current, and will
simplify future merges from the main branch.

PR:		bin/6328
Reviewed by:	jdp
Submitted by:	[email protected] (Chia-liang Kao)
1998-04-19 23:01:27 +00:00
Jordan K. Hubbard 129ec01ab6 MFC: style nits. 1998-03-03 07:00:20 +00:00
John Polstra 296c601b45 Sync with main branch. 1998-01-10 20:46:17 +00:00
Tim Vanderhoek ed1f57f9a0 Use consistent spelling,
writeable -> writable (recall prior debate over this? :-)
	initialise -> initialize
	recognise -> recognize

Merry Christmas! :)
1997-12-25 09:36:42 +00:00
Jordan K. Hubbard 7f8ac6aa1a MFC: -R support for ports collection. 1997-12-25 07:57:43 +00:00
John-Mark Gurney 561b4afb4a MFC: spelling fixes 1997-10-12 08:12:40 +00:00
Nate Williams 6ca1b66ffd MFC: Prepend an underscore if a symbol lookup fails and try again. 1997-09-02 14:18:52 +00:00
John Polstra 71f74e3e1d Sync with -current. 1997-08-08 02:18:14 +00:00
John Polstra de6956e773 Merge from main branch 1.17 -> 1.18: Fix typos and misspellings. 1997-05-31 04:30:12 +00:00
Masafumi Max NAKANE 7028cf659a Merge the typo fix from -current.
PR:		3693
Submitted by:	Kazuo Horikawa <[email protected]>
1997-05-27 13:48:38 +00:00
John Polstra a7379d76a6 Partial merge from main branch 1.40 -> 1.41: Set the dynamic linker
name when necessary, to work around a bug in some versions of crt0.o.
1997-05-25 20:29:54 +00:00
Satoshi Asami 1ac6f2d09a Merge Bruce's de-bogosifying chagnes from -current (1.24). 1997-05-08 07:11:32 +00:00
John Polstra d1c849bab3 Merge two bug fixes from main branch:
Use xmalloc instead of malloc:
        ld.c            1.38 -> 1.39
        support.c       1.2  -> 1.3

    Fix miscounting of N_INDR (alias) symbols:
        ld.c            1.39 -> 1.40
1997-02-03 00:50:35 +00:00
John Polstra 561a4a3115 Merge bug fix from main branch 1.43 -> 1.44: If a library is found
in the hints file, but the library doesn't exist, ignore the hint.
1997-01-20 19:37:13 +00:00
Poul-Henning Kamp 4420bcc126 YAMFC 1996-12-03 15:25:18 +00:00
Poul-Henning Kamp 245110794e YAMFC 1996-12-03 10:53:06 +00:00
Poul-Henning Kamp 3b020d9f64 YAMFC 1996-11-23 08:35:39 +00:00
Poul-Henning Kamp 8b62f74164 Merge from -current 1996-11-10 12:03:38 +00:00
Joerg Wunsch 7f6109e927 Merge from rev 1.16: fix the ldconfig handling for non-existant
directories.
1996-11-08 23:20:38 +00:00
cvs2svn 2fce0b4e66 This commit was manufactured by cvs2svn to create branch 'RELENG_2_2'. 1996-11-02 10:41:29 +00:00
Peter Wemm fecaa12727 oops, uninitialised variable.. -v mode depended on stack contents.
Submitted by: Masafumi NAKANE <[email protected]>, PR#1920
1996-10-29 18:45:20 +00:00
John Polstra ab6c6377b3 If errors occur during the loading of the shared libraries required by
the main program, report them directly from the dynamic linker and die
there, rather than returning an error message to crt0.o.  This enables
the printing of error messages even for old executables, whose version
of crt0.o is not able to print them.

This fix closes PR bin/1869.

The code in crt0.o for printing error messages from the dynamic linker
is no longer used, because of this change.  But it must remain, for
backward compatibility with older dynamic linkers.
1996-10-24 16:24:19 +00:00
John Polstra 16804804df Fix two minor typos in the manual page. 1996-10-18 04:49:43 +00:00
John Polstra e5bbb2e4b5 Add the search directories from the hints file only the first time it is
opened.  After that, the directories are already present, and there is
no point in adding them again.  This doesn't fix any bugs; it's just for
efficiency.
1996-10-10 23:16:50 +00:00
John Polstra 7c6da7dcef Add a new option "-f hints_file" to specify an alternate file instead of
"/var/run/ld.so.hints".

Delete an incorrect statement about LD_LIBRARY_PATH from the manual
page.
1996-10-10 23:14:23 +00:00
John Polstra 9151bb8d2d Fix a bug that caused a segmentation violation if dlsym() was called
with its first argument equal to NULL.
1996-10-10 04:10:32 +00:00
Nate Williams 9ac501e21b There's no need to 'unsetenv()' unsafe environment variables explicitly
since rt_readenv() already takes care of not setting unsafe variables.
This was part of the changes I submitted to Peter and John during the
review which must have gotten missed.
1996-10-01 16:09:18 +00:00
Peter Wemm 3e17261bac Sigh, oh well, here's my obligigatory "oops" commit. I don't quite know
how I managed to get this out of sync, but I did.  I guess that's what I
get for directly committing from different machines that I was testing on.

Pointed out by: Paul Traina <[email protected]>
1996-10-01 11:54:38 +00:00
Peter Wemm 9731d13765 Incorporate John Polstra's sods.c display of the details about the
dynamic linking information in the executable.  It's quite extensive.
It's connected to ldd's (new) -v option.
1996-10-01 02:16:16 +00:00
Peter Wemm 5584286a91 Update to handle new version ld.so.hints and info in executable for
configurable fallback search paths, as well as new crt interface version.

Also:
 - even faster getenv(), get all environment variable settings in a single
   pass.
 - ldd printf-like format specifications
 - minor code cleanups, one vsprintf -> vsnprintf (harmless)

The library search sequence is a little more complete now. Before,
it'd search $LD_LIBRARY_PATH (by opendir/readdir/closedir), then read
the hints file, then read /usr/lib (again by scanning thr directory).  It
would then fail if there was no "found" library.

Now, it does LD_LIBRARY_PATH and the hints file the same, but then uses
a longer fallback path.  The -R path is fetched from the executable if
specified at build time, the ldconfig path is appended, and /usr/lib is
appended to that. Duplicates are suppressed.  This means that simply
placing a new library in /usr/local/lib will work (the same as it did in
/usr/lib) without needing ldconfig -m.  It will find it quicker if the
ldconfig is run though.

Similar changes have been made to the NetBSD ld.so, but ours is rather
different now due to John Polstra's speedups and fixes from a while back.

The ldd printf-like format support came direct from NetBSD.

Reviewed by: nate, jdp
1996-10-01 01:52:03 +00:00
Peter Wemm d138df6140 Support for specifying printf-like output specs to control the ldd output
as present in the new rtld version.

Obtained from: NetBSD
Reviewed by: nate, jdp
1996-10-01 01:34:32 +00:00
Peter Wemm 80c714994d Updates to deal with ld.so.hints version 2. It now deals with the
ldconfig path (from NetBSD).  I added code to make sure there were no
duplicates in the path when multiple ldconfig -m's were used.

Reviewed by: nate, jdp
Obtained from: NetBSD (partly)
1996-10-01 01:31:51 +00:00
Peter Wemm b186571cf6 Update the backends to go with the top-level ld changes. The non-i386
changes are for completeness, I don't think they work.  There are changes
to deal with the new include files.

Obtained from: NetBSD (mostly)
1996-10-01 01:28:10 +00:00
Peter Wemm d0a184df5d Support for .weak (in addition to the N_INDR stab) for gcc/g++. Also deal
with the -R option and store the path in the dynamic header when specified.
The $LD_RUN_PATH environment variable is not checked yet.

While here, split up the code a bit more to enable more selective replacing
of GPL'ed components that are linked with ld.so with others.

Obtained from: NetBSD (mostly, the breakup is my fault)
1996-10-01 01:22:51 +00:00
Wolfram Schneider e0e5145ce6 add missing comma(s) in .Xr macros 1996-09-23 22:24:39 +00:00
Bruce Evans 87d0dcafca Use `install -C' instead of lots of shell commands to install ld.so
as atomically as possible.

(Immutable targets can't be renamed without opening a window when
neither the source nor the target is immutable.  Perhaps there
should be a rename_immutable syscall to do this if unsetting the
immutable flags would work.)
1996-09-12 03:42:54 +00:00
Wolfram Schneider b8923d4cc0 [HISTORY] command appeared in Version 1 AT&T UNIX
Obtained from: A Quarter Century of UNIX, Peter H. Salus, page 41
1996-08-29 18:06:19 +00:00
Jordan K. Hubbard 526195ad0d General -Wall warning cleanup, part I.
Submitted-By: Kent Vander Velden <[email protected]>
1996-07-12 19:08:36 +00:00
Bill Paul a13bb127d2 Aw c'mon. I'm being driven mad by plenty of other things. I don't
need this.

Consider the following code:

	case 'O':
		output_filename = malloc(strlen(arg)+4);
		strcpy(output_filename, arg);
		strcat(output_filename, ".tmp");
		real_output_filename = arg;
		return;

The idea here is to malloc() a buffer big enough to hold the name of
a supplied file name, plus ".tmp". So we malloc() 'size of filename'
bytes plus 4, right? Wrong! ".tmp" is _FIVE_ bytes long! There's a
traling '\0' which strcat() gleefully tacks on _outside_ the bounds
of the buffer. Result: program corrupts own memory. Program SEGVs at
seemingly random times. Bill not like random SEGVs. Bill smash.

Know how I found this? I've been trying to bootstrap -current on my
2.1.0-RELEASE machine at work and I couldn't seem to get libc.a built
because the linker would intermittently blow chunks while executing
things like 'ld -O foo.o -X -r foo.o'. Since this is an initial
bootstrap version of ld, it was linked against the 2.1.0 libc, who's
malloc() behaves differently than that in -current.

Presumeably ld -O doesn't blow up in -current, otherwise someone would
have spotted this already. I don't know if this is a bug or a feature.

Anyway. I'm changing the strlen(arg)+4 to strlen(arg)+5. Bah.
1996-06-08 04:52:57 +00:00
Poul-Henning Kamp b5938566d8 Add an option -O <filename> to ld. From the manpage:
-O filename
             Specifies the name of the output file.  The file is created as
             filename.tmp and when output is complete renamed to filename.
This allows us to:
	ld -O ${.TARGET} -x -r ${.TARGET}
1996-05-28 16:17:48 +00:00
John Polstra 20c29c9fd8 Zero out an unused field in a structure that is written to the output
file.  The field formerly contained random garbage, leading to spurious
differences between otherwise identical executables and libraries.

Submitted by:	Bruce Evans <[email protected]>
1996-05-27 18:06:02 +00:00
John Polstra 1dd43c183e When checking to see whether a needed shared library has already
been loaded, look for a match by device and inode number if the
traditional pathname comparisons don't find a match.  This detects
the case in which a library is requested using two different names
which are really links to the same file, and avoids loading it
twice.

Requested by:	[email protected]
Reviewed by:	[email protected]
1996-05-22 06:34:12 +00:00
Wolfram Schneider 9fb933075e `mv'' -> `mv -f''
``rm'' -> ``rm -f''
so mv/rm may not ask for confirmation if you are not root
1996-05-07 23:19:49 +00:00
John Polstra 55e214c197 When a local symbol that would normally be eliminated by "-x" or
"-X" must survive, because of references from relocations, don't
qualify the symbol name with the name of the input file.  This
saves some string space.  It makes libc_pic.a about 2.4% smaller.

Adapted from a suggestion by Bruce Evans.
1996-04-24 23:31:08 +00:00
John Polstra dd2b076850 Implement support for LD_PRELOAD in the dynamic linker. Remove
descriptions of LD_NO_INTERN_SEARCH and LD_NOSTD_PATH from the manual
page, since they are not supported.

Submitted by:	Doug Ambrisko <[email protected]>
1996-04-20 18:29:50 +00:00
John Polstra c049096e82 Implement support for LD_PRELOAD in the dynamic linker.
Submitted by:	Doug Ambrisko <[email protected]>
1996-04-20 18:27:56 +00:00
Mike Pritchard edf0e5b3f8 Correct some man page xrefs, and some other minor changes to bring some
man pages up to mdoc guidelines and fix some minor formatting glitches.
Also fixed a number of man pages to not abuse the .Xr macro to
display functions and path names and a lot of other junk.
1996-04-08 04:18:31 +00:00
Paul Traina 0f6b2cb3f8 Bring in some of Paul K's fixes for ldconfig from NetBSD-current.
This solves the problem of being unable to use shared libraries with dots
in their names before the ".so.<version>" code.

This should be brought into -stable.

There are more changes from Paul that look like they should be included,
but they change the format of the hints file, so I'm not going to bring them
in now (but we should in the future).

Obtained from: [email protected]
1996-02-26 02:22:33 +00:00
John Polstra 5a81ed9667 This release is a moderate restructuring of the dynamic linker.
It addresses a number of problems that were present in earlier
versions.

The calls to the "init" and "fini" functions of shared libraries
have been reordered, so that they are called in a strictly nested
fashion, as is required for C++ constructors and destructors.  In
addition, the "init" functions are called in better order relative
to each other.  That makes the system more tolerant of C++ programs
which depend on a library's being initialized before its clients.

The dynamic linker is now more tolerant of shared libraries in
which dependencies on other shared libraries are incompletely
recorded.

Cleanup in the event of errors has been improved throughout the
dynamic linker.  A number of memory leaks were eliminated.

The warning message for a shared library whose minor version number
is too old has been clarified.

The code dealing with the "ld.so.hints" file has been cleaned up.
A bug that caused the hints file to be unmapped incompletely has
been fixed.  A different bug that could potentially cause the hints
file to be mapped on top of a loaded object has been fixed.

The code that searches for shared libraries has been cleaned up.
The searching is now more compatible with that done by SunOS and
SVR4.  Also, some unnecessary and useless searches of both the
hints file and library directories have been eliminated.

Reviewed by:	[email protected]
1996-01-13 00:15:25 +00:00
John Polstra eb4a4eeb45 Split up the code so that a single directory can be searched, to
support some changes in the dynamic linker.  (This code is shared
by the dynamic linker.)

Reviewed by:	[email protected]
1996-01-13 00:14:53 +00:00