summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-aout
Commit message (Collapse)AuthorAgeFilesLines
* Move the man pages for the a.out dynamic linker into the 1aoutjdp2000-01-292-227/+2
| | | | | | | section. I created rtld.1aout earlier with a repository copy. This clears the way for the ELF dynamic linker man page, which I will commit next.
* .Nm += "rtld"phantom1999-09-282-2/+4
| | | | apropos(1) now knows about rtld(1) manpage.
* $Id$ -> $FreeBSD$peter1999-08-2813-13/+13
|
* Fix a bug in the handling of minor version numbers. Formerly, thejdp1998-11-071-13/+34
| | | | | | | | | | | | | | | | rtld would accept the first shared library it found with the right major version number, even if the minor version number was too low. If a different version of the shared library with an adequate minor version number appeared later in the search path, it would not be found. Now the rtld searches all locations first looking for a library with a minor version that is high enough. Only if such a library is not found will it fall back to accepting a minor version number that is too low. As before, a warning comes out in that case. This solves some problems encountered when building an older world on a -current system.
* Don't recognize a file as an a.out shared library unless it has atjdp1998-09-051-6/+4
| | | | | | | | | | | | least 2 version numbers. This fixes the bug where the dynamic linker would try to load an ELF shared library if it found one. Note, this change also fixes the same thing in "ld", because the code is shared. For "ld" there is still a problem with ".a" libraries, which cannot be distinguished by name. I haven't decided what, if anything, to do about that.
* Chaneg MACHINE to MACHINE_ARCH to support MACHINE=pc98.jb1998-09-051-3/+3
|
* Pass me the pointy hat with the extra sequins. Just a moment, while I getmckay1998-08-221-6/+20
| | | | | | | | | it to sit right... The __error() hack gave out the wrong address. It returned the address of errno in ld.so instead of the address of errno in the main program. Oops. The hack is now correct, just in time to be obsoleted by elf.
* Since I got no objections to this patch, and no one has offered anymckay1998-06-211-1/+70
| | | | | | | | | | | | alternative, I present .. ta! da! .. the __error() hack. This patch to the a.out dynamic loader provides old a.out binaries with __error() if they are linked with an older libc that lacks it, but are also linked against a library that needs it. There is a smaller, tricker hack that takes advantage of the fact that ld.so has __error() too, courtesy of the new libc, but this hack is the straightforward version.
* Search for libraries in dlopen() when the specified pathbrian1998-06-073-8/+13
| | | | | | contains no ``/''s. Elf already searches it seems. Mostly submitted by: Mike Smith <mike@smith.net.au>
* Seperate the Paul Kranenburg a.out rtld stuff into a stand-alone area awaypeter1998-06-011-5/+3
| | | | | from the gpl ld code. This is part 2 of something that I began in 1996. A repository copy has happened behind cvs's back.
* ELF preparation step 2:sos1998-05-262-4/+4
| | | | | | | | | | | | | | Move a.out libraries to /usr/lib/aout to make space for ELF libs. Make rtld usr /usr/lib/aout as default library path. Make ldconfig reject /usr/lib as an a.out library path. Fix various Makefiles for LIBDIR!=/usr/lib breakage. This will after a make world & reboot give a system that no longer uses /usr/lib/*, infact one could remove all the old libraries there, they are not used anymore. We are getting close to an ELF make world, but I'll let this all settle for a week or two...
* Implement dladdr.jdp1998-02-061-4/+94
|
* Make emacs work again. This is a workaround for the fact that thejdp1997-12-051-18/+33
| | | | | | | | | | | | | | | | | | | | emacs a.out file, self-generated by emacs's "unexec" function in "unexsunos4.c", is invalid. In particular, its "_end" symbol has the wrong value. The dynamic linker was using the value of that symbol to initialize its sbrk break level. The workaround is to peek at the executable's a.out header in memory, and calculate what "_end" should be based on the segment sizes. I will work out a fix for emacs and send it to the FSF. This dynamic linker workaround is still worthwhile, if only to avoid forcing all emacs users to build a new version. Note: xemacs gives a bogus warning at startup, for related reasons. The warning is harmless and can safely be ignored. I will send a patch to the xemacs maintainers to get rid of it, and meanwhile add a patch file to our port.
* Get rid of the dynamic linker's internal malloc package, and arrangejdp1997-11-292-267/+474
| | | | | | | | | | | | | | | | | | | | | | | | | | things so that it uses the same malloc as is used by the program being executed. This has several advantages, the big one being that you can now debug core dumps from dynamically linked programs and get useful information out of them. Until now, that didn't work. The internal malloc package placed the tables describing the loaded shared libraries in a mapped region of high memory that was not written to core files. Thus the debugger had no way of determining what was loaded where in memory. Now that the dynamic linker uses the application's malloc package (normally, but not necessarily, the system malloc), its tables end up in the regular heap area where they will be included in core dumps. The debugger now works very well indeed, thank you very much. Also ... Bring the program a little closer to conformance with style(9). There is still a long way to go. Add minimal const correctness changes to get rid of compiler warnings caused by the recent const changes in <dlfcn.h> and <link.h>. Improve performance by eliminating redundant calculations of symbols' hash values.
* Many places in the code NULL is used in integer context, wherephk1997-09-181-2/+2
| | | | | | | | | plain 0 should be used. This happens to work because we #define NULL to 0, but is stylistically wrong and can cause problems for people trying to port bits of code to other environments. PR: 2752 Submitted by: Arne Henrik Juul <arnej@imf.unit.no>
* spelling corrections.wosch1997-09-132-6/+6
| | | | | PR: docs/4450 Submitted by: josh@quick.net
* - In dlsym(), if the lookup fails using the original symbol, prepend annate1997-08-191-2/+30
| | | | | | | underscore and try looking it up again. This is a non-issue if we switch to ELF. Reviewed by: sef, jdp
* Implement dlsym(RTLD_NEXT, symbol).jdp1997-08-021-12/+64
|
* Typo fix.max1997-05-272-6/+6
| | | | | PR: 3693 Submitted by: Kazuo Horikawa <k-horik@yk.rim.or.jp>
* Changes to support the kernel linker:dfr1997-05-131-1/+4
| | | | | | | | | | | | | | Add a -Bforcedynamic option which generates a dynamic object even if no shared libraries were given in the link. Make RRS in text section warnings conditional on "-assert pure-text" so that I can link non-PIC kernel modules without tons of link errors. Changes to bsd.lib.mk to follow. Fix a couple of bugs exposed by the fact that the kernel is not linked at zero. Reviewed by: jdp
* Fix a bug that caused the relocs for linker set members in sharedjdp1997-04-301-1/+3
| | | | | | | libraries to come out as 1-byte relocations instead of 4-byte relocations. Submitted by: Doug Rabson <dfr@nlsystems.com>
* Fixed `make depend' and related bogons. LDFLAGS was used forbde1997-04-161-10/+2
| | | | | | | | | | | ld-specific flags. LDFLAGS is really for ld-related flags for cc, not for ld, and some flags, e.g., -Bshareable, mean completely different things to cc and ld. Having the wrong things in LDFLAGS also broke the standard ${PROG} target. This was kludged around by using a special rule that depended on LDFLAGS being bogus. Fixing `make depend' broke the special rule but fixed the standard rule (except in the DESTDIR case, which was handled more strictly here than elsewhere).
* Revert $FreeBSD$ to $Id$peter1997-02-2213-13/+13
|
* Use xmalloc instead of malloc in two places, so that out-of-memoryjdp1997-01-241-1/+1
| | | | | | conditions will be detected. Submitted by: Philippe Charnier <charnier@xp11.frmug.org>
* Pay attention to the environment variable "LD_IGNORE_MISSING_OBJECTS".jdp1997-01-173-2/+61
| | | | | | | | | If it is set to a nonempty string, then simply skip any missing shared libraries. This came up in a discussion long ago as a potentially useful feature at sysinstall time. For example, an X11 utility could be used without the X libraries being present, provided the utility had a mode in which no X functions were actually called.
* If a library is found in the hints file, but the library doesn't exist,jdp1997-01-141-0/+4
| | | | | | | | | ignore the hint. This is a straightforward fix, and it should go into 2.2 after a burn-in period of a few days. Noticed by: bde
* Make the long-awaited change from $Id$ to $FreeBSD$jkh1997-01-1413-13/+13
| | | | | | | | This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long. Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
* Sort cross references.wosch1997-01-132-6/+6
|
* Use the RTLD_NOW symbol, now that it is defined in <dlfcn.h>.jdp1997-01-121-4/+3
|
* Correct typos and spelling errors.jdp1997-01-122-10/+10
|
* Add support for the LD_BIND_NOW environment variable. If it is set to ajdp1997-01-123-30/+71
| | | | | | | | | | | | | | | | | | | | | nonempty string, then function calls are relocated at program start-up rather than lazily. This variable is standard on Sun and SVR4 systems. The dlopen() function now supports both lazy and immediate binding, as determined by its "mode" argument, which can be either 1 (RTLD_LAZY) or 2 (RTLD_NOW). I will add defines of these symbols to <dlfcn.h> as soon as I've done a little more checking to make sure they won't cause collisions or bootstrapping problems that would break "make world". The "LD_*" environment variables which alter dynamic linker behavior are now treated as unset if they are set to the empty string. This agrees with the standard SVR4 conventions for the dynamic linker. Add a work-around for programs compiled with certain buggy versions of crt0.o. The buggy versions failed to set the "crt_ldso" member of the interface structure. This caused certain error messages from the dynamic linker to begin with "(null)" instead of the pathname of the dynamic linker.
* Add support for the LD_BIND_NOW environment variable. If it is set to ajdp1997-01-122-2/+21
| | | | | | | | | | | nonempty string, then function calls are relocated at program start-up rather than lazily. This variable is standard on Sun and SVR4 systems. The dlopen() function now supports both lazy and immediate binding, as determined by its "mode" argument, which can be either 1 (RTLD_LAZY) or 2 (RTLD_NOW). I will add defines of these symbols to <dlfcn.h> as soon as I've done a little more checking to make sure they won't cause collisions or bootstrapping problems that would break "make world".
* Fix spelling error in manpage.swallace1996-12-262-4/+4
|
* If errors occur during the loading of the shared libraries required byjdp1996-10-241-10/+30
| | | | | | | | | | | | | 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.
* Fix two minor typos in the manual page.jdp1996-10-182-6/+6
|
* Add the search directories from the hints file only the first time it isjdp1996-10-101-2/+5
| | | | | | 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.
* Fix a bug that caused a segmentation violation if dlsym() was calledjdp1996-10-101-2/+2
| | | | with its first argument equal to NULL.
* There's no need to 'unsetenv()' unsafe environment variables explicitlynate1996-10-011-6/+1
| | | | | | 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.
* Sigh, oh well, here's my obligigatory "oops" commit. I don't quite knowpeter1996-10-011-1/+13
| | | | | | | 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 <pst@freebsd.org>
* Update to handle new version ld.so.hints and info in executable forpeter1996-10-014-62/+331
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Update the backends to go with the top-level ld changes. The non-i386peter1996-10-013-11/+34
| | | | | | | changes are for completeness, I don't think they work. There are changes to deal with the new include files. Obtained from: NetBSD (mostly)
* Support for .weak (in addition to the N_INDR stab) for gcc/g++. Also dealpeter1996-10-015-19/+562
| | | | | | | | | | 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)
* add missing comma(s) in .Xr macroswosch1996-09-232-6/+6
|
* Use `install -C' instead of lots of shell commands to install ld.sobde1996-09-121-13/+2
| | | | | | | | | 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.)
* When checking to see whether a needed shared library has alreadyjdp1996-05-221-2/+36
| | | | | | | | | | | 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: peter@freebsd.org Reviewed by: peter@freebsd.org
* ``mv'' -> ``mv -f''wosch1996-05-071-3/+3
| | | | | ``rm'' -> ``rm -f'' so mv/rm may not ask for confirmation if you are not root
* Implement support for LD_PRELOAD in the dynamic linker. Removejdp1996-04-203-24/+118
| | | | | | | descriptions of LD_NO_INTERN_SEARCH and LD_NOSTD_PATH from the manual page, since they are not supported. Submitted by: Doug Ambrisko <ambrisko@ambrisko.roble.com>
* Implement support for LD_PRELOAD in the dynamic linker.jdp1996-04-201-1/+27
| | | | Submitted by: Doug Ambrisko <ambrisko@ambrisko.roble.com>
* This release is a moderate restructuring of the dynamic linker.jdp1996-01-131-592/+605
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: nate@freebsd.org
* Split up the code so that a single directory can be searched, tojdp1996-01-131-81/+116
| | | | | | | support some changes in the dynamic linker. (This code is shared by the dynamic linker.) Reviewed by: nate@freebsd.org
OpenPOWER on IntegriCloud