Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!utgpu!water!watmath!clyde!rutgers!ames!ucbcad!ucbvax!sdcsvax!darrell From: darrell@sdcsvax.UUCP Newsgroups: mod.os,comp.os.research Subject: Re: Shared Libraries Message-ID: <3003@sdcsvax.UCSD.EDU> Date: Thu, 16-Apr-87 19:42:00 EST Article-I.D.: sdcsvax.3003 Posted: Thu Apr 16 19:42:00 1987 Date-Received: Sat, 18-Apr-87 04:33:22 EST Sender: darrell@sdcsvax.UCSD.EDU Lines: 24 Approved: mod-os@sdcsvax.uucp Xref: utgpu mod.os:130 comp.os.research:1 A combination of fixed addresses and binding at load time is possible, by associating a version number with the library. At link time, the version number of the library is stored in the load module. At load time, that version number is compared with the version number of the library that is being shared. If they match (which we assume they will usually do), all is fine. On a mismatch, more work is needed. Two solutions come to mind: - Load the version of the library needed by the load module. This assumes that old versions of the library are kept around. It also means that we waste space for multiple versions of the library, but no more than that needed for non-shared libraries. - Patch the references in the load module. The linker must save in the load module a list of the places where library references have been inserted. Then the loader can fix these up with the real references. This assumes that the semantics of the library have not changed. It also requires a more complex loader, and extra crud in the load module. --Per Bothner bothner@pescadero.stanford.edu ...!decwrl!labrea!navajo!bothner Computer Science Dept., Stanford University, Stanford CA 94305