diff options
author | Roland McGrath <roland@gnu.org> | 1999-03-19 15:32:17 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1999-03-19 15:32:17 +0000 |
commit | 0702b5f4fb6041e8f753b871de8a7152d4103d66 (patch) | |
tree | 738b90aa3a9c589d2ca130881f1ddb7ba1570b76 /sysdeps/mach/hurd/Makefile | |
parent | 1999-03-19 Roland McGrath <roland@baalperazim.frob.com> (diff) | |
download | glibc-0702b5f4fb6041e8f753b871de8a7152d4103d66.tar.gz glibc-0702b5f4fb6041e8f753b871de8a7152d4103d66.tar.bz2 glibc-0702b5f4fb6041e8f753b871de8a7152d4103d66.zip |
1999-03-19 Roland McGrath <roland@baalperazim.frob.com>
* sysdeps/mach/hurd/fcntl.c (__fcntl: case F_GETLK,F_SETLK,F_SETLKW):
Support whole-file locking (only) by using the file_lock RPC. This
has very wrong semantics, but is better than nothing for the time
being. (Correct POSIX.1 locking will require new RPCs in the Hurd
protocols that will be somewhat hairy to specify.)
Diffstat (limited to 'sysdeps/mach/hurd/Makefile')
-rw-r--r-- | sysdeps/mach/hurd/Makefile | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile index d635e9bb0a..92048d92d2 100644 --- a/sysdeps/mach/hurd/Makefile +++ b/sysdeps/mach/hurd/Makefile @@ -111,12 +111,34 @@ $(inst_libdir)/libc.a: $(hurd)/libc-ldscript $(+force); $(do-install) $(inst_libdir)/libc_p.a: $(hurd)/libc_p-ldscript $(+force); $(do-install) endif -# Make sure these are used to build the libc.so shared object too. +# Make sure these are used to build the libc.so shared object too. There +# is a circular dependency between each of these shared objects and libc +# (many high-level libc functions call stubs, stubs call low-level libc +# functions like memcpy and mach_msg). This works out fine at run time +# (all the objects are loaded before resolving their symbols, so these +# interdependencies are fine). But to create the shared objects we must +# link them one at a time; since each needs one or both of the others to +# produce its DT_NEEDED entries and to assign its undefined symbols the +# right symbol versions, we can't do any of them before the others! To +# get around this, we link each lib*user.so shared object twice. First, +# we link an object without reference to libc.so (since we haven't linked +# libc.so yet), so it lacks a DT_NEEDED record for the libc soname it +# depends on, and its undefined symbol references lack the symbol version +# assignments they should have. We will use this shared object solely to +# link libc.so against it; that gives libc.so the proper DT_NEEDED record, +# and symbol versions assignments (if the lib*user.so object is using them). +# Finally we link a second version of the same lib*user.so shared object, +# this time linked normally against libc so it gets a proper DT_NEEDED +# record and symbol version set; this one can be installed for run-time use. rpcuserlibs := $(common-objpfx)mach/libmachuser.so \ $(common-objpfx)hurd/libhurduser.so -$(common-objpfx)libc.so: $(rpcuserlibs) +link-rpcuserlibs := $(rpcuserlibs:%user.so=%user-link.so) +$(common-objpfx)libc.so: $(link-rpcuserlibs) rpath-dirs += mach hurd +$(link-rpcuserlibs): %-link.so: %_pic.a + $(build-module) -nostdlib -Wl,-soname=$(*F).so$($(*F).so-version) + # And get them into the libc.so ldscript. $(inst_libdir)/libc.so: $(rpcuserlibs) |