<feed xmlns='http://www.w3.org/2005/Atom'>
<title>src-test2/libexec/rtld-elf/amd64, branch stable/4</title>
<subtitle>FreeBSD source tree</subtitle>
<id>https://cgit-dev.freebsd.org/src-test2/atom?h=stable%2F4</id>
<link rel='self' href='https://cgit-dev.freebsd.org/src-test2/atom?h=stable%2F4'/>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/'/>
<updated>2000-03-13T04:59:44Z</updated>
<entry>
<title>This commit was manufactured by cvs2svn to create branch 'RELENG_4'.</title>
<updated>2000-03-13T04:59:44Z</updated>
<author>
<name>cvs2svn</name>
<email>cvs2svn@FreeBSD.org</email>
</author>
<published>2000-03-13T04:59:44Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/commit/?id=842f30848780866cb822fe01c4d3d4576718ddb3'/>
<id>urn:sha1:842f30848780866cb822fe01c4d3d4576718ddb3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>When a threads package registers locking methods with dllockinit(),</title>
<updated>2000-01-29T01:27:04Z</updated>
<author>
<name>John Polstra</name>
<email>jdp@FreeBSD.org</email>
</author>
<published>2000-01-29T01:27:04Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/commit/?id=7dbe16fbeef1df733f74de7203647a4eba928609'/>
<id>urn:sha1:7dbe16fbeef1df733f74de7203647a4eba928609</id>
<content type='text'>
figure out which shared object(s) contain the the locking methods
and fully bind those objects as if they had been loaded with
LD_BIND_NOW=1.  The goal is to keep the locking methods from
requiring any lazy binding.  Otherwise infinite recursion occurs
in _rtld_bind.

This fixes the infinite recursion problem in the linuxthreads port.
</content>
</entry>
<entry>
<title>Block almost all signals in the default locking method instead of</title>
<updated>2000-01-25T01:32:56Z</updated>
<author>
<name>John Polstra</name>
<email>jdp@FreeBSD.org</email>
</author>
<published>2000-01-25T01:32:56Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/commit/?id=5bc2f0f7891a5e346b78ca6b3d587f0cb23f96df'/>
<id>urn:sha1:5bc2f0f7891a5e346b78ca6b3d587f0cb23f96df</id>
<content type='text'>
just a few of them.  This looks like it solves the recent

  ld-elf.so.1: assert failed: /usr/src/libexec/rtld-elf/lockdflt.c:55

failures seen by some applications such as JDK.
</content>
</entry>
<entry>
<title>Revamp the mechanism for enumerating and calling shared objects'</title>
<updated>2000-01-09T21:13:48Z</updated>
<author>
<name>John Polstra</name>
<email>jdp@FreeBSD.org</email>
</author>
<published>2000-01-09T21:13:48Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/commit/?id=9bfb1dfc29cb17b192fd05e9f8b17f702928a2ee'/>
<id>urn:sha1:9bfb1dfc29cb17b192fd05e9f8b17f702928a2ee</id>
<content type='text'>
init and fini functions.  Now the code is very careful to hold no
locks when calling these functions.  Thus the dynamic linker cannot
be re-entered with a lock already held.

Remove the tolerance for recursive locking that I added in revision
1.2 of dllockinit.c.  Recursive locking shouldn't happen any more.

Mozilla and JDK users: I'd appreciate confirmation that things still
work right (or at least the same) with these changes.
</content>
</entry>
<entry>
<title>Work around an assert failure in the dynamic linker's default thread</title>
<updated>1999-12-28T04:38:17Z</updated>
<author>
<name>John Polstra</name>
<email>jdp@FreeBSD.org</email>
</author>
<published>1999-12-28T04:38:17Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/commit/?id=3600eb76c6005988b386d04cfdb5963b38a18eee'/>
<id>urn:sha1:3600eb76c6005988b386d04cfdb5963b38a18eee</id>
<content type='text'>
locking functions.  If an application loads a shared object with
dlopen() and the shared object has an init function which requires
lazy binding, then _rtld_bind is called when the thread is already
inside the dynamic linker.  This leads to a recursive acquisition
of the lock, which I was not expecting -- hence the assert failure.

This work-around makes the default locking functions handle recursive
locking.  It is NOT the correct fix -- that should be implemented
at the generic locking level rather than in the default locking
functions.  I will implement the correct fix in a future commit.

Since the dllockinit() interface will likely need to change, warn
about that in both the man page and the header file.
</content>
</entry>
<entry>
<title>Add a new function dllockinit() for registering thread locking</title>
<updated>1999-12-27T04:44:04Z</updated>
<author>
<name>John Polstra</name>
<email>jdp@FreeBSD.org</email>
</author>
<published>1999-12-27T04:44:04Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/commit/?id=d3980376e8c139e07958914c5184ab37463e4818'/>
<id>urn:sha1:d3980376e8c139e07958914c5184ab37463e4818</id>
<content type='text'>
functions to be used by the dynamic linker.  This can be called by
threads packages at start-up time.  I will add the call to libc_r
soon.

Also add a default locking method that is used up until dllockinit()
is called.  The default method works by blocking SIGVTALRM, SIGPROF,
and SIGALRM in critical sections.  It is based on the observation
that most user-space threads packages implement thread preemption
with one of these signals (usually SIGVTALRM).

The dynamic linker has never been reentrant, but it became less
reentrant in revision 1.34 of "src/libexec/rtld-elf/rtld.c".
Starting with that revision, multiple threads each doing lazy
binding could interfere with each other.  The usual symptom was
that a symbol was falsely reported as undefined at start-up time.
It was rare but not unseen.  This commit fixes it.
</content>
</entry>
<entry>
<title>$Id$ -&gt; $FreeBSD$</title>
<updated>1999-08-28T00:22:10Z</updated>
<author>
<name>Peter Wemm</name>
<email>peter@FreeBSD.org</email>
</author>
<published>1999-08-28T00:22:10Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/commit/?id=7f3dea244c40159a41ab22da77a434d7c5b5e85a'/>
<id>urn:sha1:7f3dea244c40159a41ab22da77a434d7c5b5e85a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix a serious performance bug for large programs on the Alpha,</title>
<updated>1999-06-25T02:53:59Z</updated>
<author>
<name>John Polstra</name>
<email>jdp@FreeBSD.org</email>
</author>
<published>1999-06-25T02:53:59Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/commit/?id=962fdc466afdd71fb36d0c285205fd2876212b5e'/>
<id>urn:sha1:962fdc466afdd71fb36d0c285205fd2876212b5e</id>
<content type='text'>
discovered by Hidetoshi Shimokawa.  Large programs need multiple
GOTs.  The lazy binding stub in the PLT can be reached from any of
these GOTs, but the dynamic linker only has enough information to
fix up the first GOT entry.  Thus calls through the other GOTs went
through the time-consuming lazy binding process on every call.

This fix rewrites the PLT entries themselves to bypass the lazy
binding.

Tested by Hidetoshi Shimokawa and Steve Price.

Reviewed by:	Doug Rabson &lt;dfr@freebsd.org&gt;
</content>
</entry>
<entry>
<title>Eliminate all machine-dependent code from the main source body and</title>
<updated>1999-04-09T00:28:43Z</updated>
<author>
<name>John Polstra</name>
<email>jdp@FreeBSD.org</email>
</author>
<published>1999-04-09T00:28:43Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/commit/?id=d5b537d01a6711c4426da2a627b11a71cf3b11e8'/>
<id>urn:sha1:d5b537d01a6711c4426da2a627b11a71cf3b11e8</id>
<content type='text'>
the Makefile, and move it down into the architecture-specific
subdirectories.

Eliminate an asm() statement for the i386.

Make the dynamic linker work if it is built as an executable instead
of as a shared library.  See i386/Makefile.inc to find out how to
do it.  Note, this change is not enabled and it might never be
enabled.  But it might be useful in the future.  Building the
dynamic linker as an executable should make it start up faster,
because it won't have any relocations.  But in practice I suspect
the difference is negligible.
</content>
</entry>
<entry>
<title>Add alpha support.</title>
<updated>1998-09-04T19:03:57Z</updated>
<author>
<name>Doug Rabson</name>
<email>dfr@FreeBSD.org</email>
</author>
<published>1998-09-04T19:03:57Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src-test2/commit/?id=13575fc46f0ff13172a820b6fcd3626f6de7263a'/>
<id>urn:sha1:13575fc46f0ff13172a820b6fcd3626f6de7263a</id>
<content type='text'>
Submitted by: John Birrell &lt;jb@cimlogic.com.au&gt; (with extra hacks by me)
Obtained from: Probably NetBSD
</content>
</entry>
</feed>
