| Commit | Line | Data |
|---|---|---|
| 5ab852b8 | 1 | $DragonFly: src/lib/libpthread/README,v 1.3 2008/02/09 00:28:26 swildner Exp $ |
| 4491bca1 SS |
2 | |
| 3 | Proxy libpthread | |
| 4 | ================ | |
| 5 | ||
| 6 | We want to be able to switch between threading libraries at execution | |
| 5ab852b8 | 7 | time. This problem is solved by this proxy libpthread. |
| 4491bca1 | 8 | |
| a4bded30 SS |
9 | The operation at link time is as follows. |
| 10 | libc.so anyways defines all pthread functions as weak symbols | |
| 4491bca1 SS |
11 | except for pthread_create. libpthread.so now also defines a dummy |
| 12 | pthread_create as weak symbol and ld is satisfied. At execution time | |
| 13 | later rtld will resolve all these references to the strong symbols in the | |
| 14 | right thread library. | |
| 15 | ||
| 16 | Allowing the user to switch the threading lib works like this: At link | |
| 17 | time ld reads the SONAME of libpthread.so, which is set to libpthread.so.0 | |
| 18 | (or a higher major, if ABI changes). Usually libfoo.so is a symlink to | |
| 19 | libfoo.so.3 which also has set its SONAME to libfoo.so.3, so that if | |
| 20 | libfoo.so.4 is being installed, programs will still continue to use | |
| 21 | libfoo.so.3 and not follow the symlink libfoo.so to the newer -- and | |
| 22 | possibly incompatible -- libfoo.so.4. What we do is approximately the | |
| 23 | opposite: libpthread.so is no symlink, but nevertheless has its SONAME | |
| 24 | set to libpthread.so.0. Now, however, libpthread.so.0 is a symlink to the | |
| 25 | threading library of your choice. The linker will use the default | |
| 26 | threading lib which libpthread.so is linked to, but the runtime linker | |
| 27 | will instead follow the symlink. | |
| 28 | ||
| 29 | This (obviously) does not work for static linking. |