Commit Graph

743 Commits

Author SHA1 Message Date
lukem eca6fe7e73 fix spello in comment 2011-08-05 03:55:31 +00:00
joerg 5c2887509e Don't kill the read(2) stub, just the magic around it. 2011-04-22 14:18:34 +00:00
joerg 77abb554dc Disable Fortification for pthread and rump stubs. 2011-04-21 13:38:14 +00:00
martin a128c5080b Backout previous, it causes lots of test failures (tests/fs/nfs for
example).
2011-04-21 08:17:00 +00:00
christos e6eca274ad Fix SSP builds (Vladimir Kirillov) 2011-04-12 19:49:48 +00:00
joerg 928f301be9 Rework TLS initialisation:
- Update TCB for the initial thread in pthread__initthread, not
  pthread__init to get it valid as soon as possible.
- Don't overwrite the pt_tls field in pthread__initthread.
- Don't deallocate pt_tls in pthread__scrubthread. This worked more by
  chance than by design.
- Handle freeing the TLS area in pthread_create after removing the
  thread instance from the dead queue.
2011-03-30 00:03:26 +00:00
matt def13dad30 Add __HAVE___LWP_GETTCB_FAST support (for mips and powerpc). 2011-03-17 00:43:48 +00:00
joerg 01eef02a1b If TLS support is present, use it for pthread__self(). The
initialisation order is correct in this case as _lwp_setprivate has been
called already by ld.elf_so for dynamic programs or _libc_init for
statically linked ones.
2011-03-16 12:39:44 +00:00
matt 71fdb89287 Use __lwp_gettcb_fast if present. 2011-03-12 07:46:29 +00:00
joerg aad599979d Add TLS support infrastructure. For dynamic binaries, ld.elf_so exports
_rtld_tls_allocate and _rtld_tls_free. libpthread uses this functions to
setup the thread private area of all new threads. ld.elf_so is
responsible for setting up the private area for the initial thread.
Similar functions are called from _libc_init for static binaries, using
dl_iterate_phdr to access the ELF Program Header.

Add test cases to exercise the different TLS storage models. Test cases
are compiled and installed on all platforms, but are skipped on
platforms not marked for TLS support.

This material is based upon work partially supported by
The NetBSD Foundation under a contract with Joerg Sonnenberger.

It is inspired by the TLS support in FreeBSD by Doug Rabson and the
clean ups of the DragonFly port of the original FreeBSD modifications.
2011-03-09 23:10:05 +00:00
joerg b7b592d544 Back out using the thread register (if present) for now.
libgcc_s's __register_frame_info gets called from libc's CSU code before
the libc constructors are run. __register_frame_info in turn calls
pthread_mutex_lock. libpthread is not initialised at this point and
therefore pthread__self() traps when deferencing the thread register.
This worked before because the garbage from pthread__self() is
effectively ignored.
2011-02-25 14:32:38 +00:00
joerg 1631a78097 Allow storing and receiving the LWP private pointer via ucontext_t
on all platforms except VAX and IA64. Add fast access via register for
AMD64, i386 and SH3 ports. Use this fast access in libpthread to replace
the stack based pthread_self(). Implement skeleton support for Alpha,
HPPA, PowerPC, SPARC and SPARC64, but leave it disabled.

Ports that support this feature provide __HAVE____LWP_GETPRIVATE_FAST in
machine/types.h and a corresponding __lwp_getprivate_fast in
machine/mcontext.h.

This material is based upon work partially supported by
The NetBSD Foundation under a contract with Joerg Sonnenberger.
2011-02-24 04:28:41 +00:00
christos 4ffe9a1805 make the code more re-usable 2011-01-26 18:48:57 +00:00
christos 74a83d351e Moving the ssp check inside the source code does not work properly because
the compiler loses information about the size of the object. So instead of
the hacky #define mess we did before, add a way to inject our function between
the user call and the system call.
2011-01-26 18:11:35 +00:00
christos 13fe5bd280 Fix SSP build.
XXX: This is gross.
2011-01-25 19:13:26 +00:00
christos c5d359be42 make pthread__sp unsigned long. 2011-01-25 19:12:04 +00:00
skrll f1d73a2c94 Add support for DF_1_BIND_NOW, DF_1_NODELETE and DF_1_NOOPEN marked
objects, and the RTLD_NODELETE and RTLD_NOLOAD flags to dlopen(3).

Mark libpthread as DF_1_NOOPEN and use it to test the functionality.

Somewhat taken from FreeBSD.

Fixes PR 42029.

OK from christos and joerg.
2010-12-24 12:41:42 +00:00
christos 736ce759b3 use pthread__stacksize since size has not been initialized yet. 2010-12-22 22:41:45 +00:00
christos 5cea6e6df8 only mprotect base if we moved it. 2010-12-22 22:19:46 +00:00
christos 66f16a1fa6 I've had this patch in my tree for a while and since it only improves
the situation, I decided to commit it. There is an inherent problem
with ASLR and the way the pthread library is using the thread stack.

Our pthread library chooses that stack for each thread strategically
so that it can locate the location of the pthread struct for each
thread by masking the stack pointer and looking just below the red
zone it creates. Unfortunately with ASLR you get many random values
for the initial stack, and there are situations where the masked
stack base ends up below the base of the stack. (this happens on
x86 when the stack base happens to be 0x???02000 for example and
your mask is stackmask is 0xffe00000). To fix this, we detect the
pathological cases (this happens only in the main thread), allocate
more stack, and mprotect it appropriately. Then we stash the main
base and the main struct, so that when we look for the pthread
struct in pthread__id, we can special case the main thread.

Another way to work around the problem is unlimiting stacksize,
but the proper way is to use TLS to find the thread structure and
not to play games with the thread stacks.
2010-12-18 15:54:27 +00:00
tron 103af04b49 Don't use internal libc function __findenv(). 2010-11-14 22:25:23 +00:00
skrll 162991256a Spell immediately correctly. 2010-11-02 20:49:47 +00:00
christos 5861d73fd7 move namespace protection before inclusion. 2010-08-06 15:21:50 +00:00
christos e8deba048f Add a weak alias for pthread_attr_get_np. Noted my Matthias Drochner. 2010-08-06 14:23:06 +00:00
wiz 6abd2b9ccc Fix typo. 2010-08-06 06:29:38 +00:00
christos ea1f852ab8 document pthread_getattr_np 2010-08-06 05:35:42 +00:00
christos f6cf46930e make kevent(2) a cancelation point, and document properly all the cancelation
points we currently support.
2010-08-06 05:25:46 +00:00
christos 32d8a48951 Add pthread_getattr_np() 2010-08-06 05:25:02 +00:00
wiz 4d7c45167f Sort sections. 2010-07-09 20:58:38 +00:00
wiz bb4a6891d0 Fix typo. 2010-07-09 20:56:01 +00:00
jruoho b46f888960 Add a compatibility note. Also some minor improvements. 2010-07-09 18:16:31 +00:00
jruoho be670be457 Update ERRORS, tidy SEE ALSO. 2010-07-09 18:07:20 +00:00
jruoho 267d79598f Rearrange, reword, clarify. Remove duplicate paragraphs and recurring
sentences. Update the ERRORS to reflect reality in NetBSD.
2010-07-09 18:01:53 +00:00
jruoho bc665d2683 Re-add EINVAL for pthread_condattr_destroy(3) (misread the pthread__error()). 2010-07-09 17:54:08 +00:00
jruoho e328c0292c Note also alignment via mmap(2), as done in NetBSD. 2010-07-09 17:15:59 +00:00
jruoho c42287d313 As per (now closed) PR lib/43581, add a note about unsupported modifications
to the red zone size.
2010-07-09 17:03:04 +00:00
jruoho dd981aaaa6 Remove error conditions. Add CAVEATS to note the questionable value of the
functions in NetBSD, which does not support additional condition attributes.
Note that these do not conform to SUSv4, where two additional attributes are
mandated.
2010-07-09 16:54:30 +00:00
jruoho 4ec5f0283b Use .Ss for non-standard subtitle. 2010-07-09 12:00:38 +00:00
jruoho 10bc8c491b Rewrite this for clarity. Also remove AUTHORS; someone was proud enough to
put himself as the author, even though the page was directly cut-and-pasted
from the Open Group's specification.
2010-07-09 11:03:26 +00:00
jruoho 70d17355ab Add missing prototypes. Noted by wiz@ -- thanks. 2010-07-09 10:55:57 +00:00
wiz 83d2a68694 Mark up NULL. 2010-07-09 10:55:11 +00:00
wiz f42b354e7d Mark up NULL, remove double space. 2010-07-09 10:49:48 +00:00
wiz 2fb2239c33 Add missing word. 2010-07-09 10:45:36 +00:00
jruoho 379ef6d482 Fix the return values; pthread_resume_np() may fail with ESRCH. In addition,
some improvements to markup and wording.
2010-07-09 09:18:45 +00:00
jruoho 6f7f6ed0ba Add the last compatibility note for the NetBSD extensions. 2010-07-09 09:10:34 +00:00
jruoho 9c4ae7f5c2 Update conformance to the 2001 revision. 2010-07-09 08:51:28 +00:00
wiz b4d7d4fbfb Sort errors. 2010-07-09 08:32:39 +00:00
wiz c351e7655b Remove empty line. 2010-07-09 08:31:35 +00:00
jruoho 6aa4892177 Rationalize by moving
pthread_key_delete(3) to pthread_key_create(3); and
	pthread_setspecific(3) to pthread_getspecific(3)
2010-07-09 08:22:04 +00:00
jruoho 3cc3be4df9 Rationalize by moving
pthread_attr_setname_np(3) to pthread_attr_getname_np(3); and
	pthread_setname_np(3) to pthread_getname_np(3).
2010-07-09 07:31:01 +00:00