Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Update.
2000-12-31  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/powerpc/pspinlock.c: Don't include pt-machine.h here.

	* manager.c (pthread_allocate_stack): Prepare for removal of MAP_FIXED.
  • Loading branch information
Ulrich Drepper committed Dec 31, 2000
1 parent 09f5e16 commit 41b64fc
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 16 deletions.
6 changes: 6 additions & 0 deletions linuxthreads/ChangeLog
@@ -1,3 +1,9 @@
2000-12-31 Ulrich Drepper <drepper@redhat.com>

* sysdeps/powerpc/pspinlock.c: Don't include pt-machine.h here.

* manager.c (pthread_allocate_stack): Prepare for removal of MAP_FIXED.

2000-11-15 Wolfram Gloger <wg@malloc.de>

* manager.c (pthread_free): [!FLOATING_STACKS]: Only remap the
Expand Down
46 changes: 31 additions & 15 deletions linuxthreads/manager.c
Expand Up @@ -345,6 +345,8 @@ static int pthread_allocate_stack(const pthread_attr_t *attr,

/* Allocate space for stack and thread descriptor at default address */
#ifdef NEED_SEPARATE_REGISTER_STACK
void *res_addr;

if (attr != NULL)
{
guardsize = page_roundup (attr->__guardsize, granularity);
Expand All @@ -371,18 +373,26 @@ static int pthread_allocate_stack(const pthread_attr_t *attr,
/* XXX Fix for floating stacks with variable sizes. */

/* First the main stack: */
if (mmap((caddr_t)((char *)(new_thread + 1) - stacksize / 2),
stacksize / 2, PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0)
== MAP_FAILED)
/* Bad luck, this segment is already mapped. */
return -1;
map_addr = (caddr_t)((char *)(new_thread + 1) - stacksize / 2);
res_addr = mmap(map_addr, stacksize / 2,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
if (res_addr != map_addr)
{
/* Bad luck, this segment is already mapped. */
if (res_addr != MAP_FAILED)
munmap(res_addr, stacksize / 2);
return -1;
}
/* Then the register stack: */
if (mmap((caddr_t)new_thread_bottom, stacksize/2,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0)
== MAP_FAILED)
map_addr = (caddr_t)new_thread_bottom;
res_addr = mmap(map_addr, stacksize/2,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXES, -1, 0);
if (res_addr != map_addr)
{
if (res_addr != MAP_FAILED)
munmap(res_addr, stacksize / 2);
munmap((caddr_t)((char *)(new_thread + 1) - stacksize/2),
stacksize/2);
return -1;
Expand Down Expand Up @@ -419,6 +429,8 @@ static int pthread_allocate_stack(const pthread_attr_t *attr,
new_thread_bottom = (char *) map_addr + guardsize;
new_thread = ((pthread_descr) (new_thread_bottom + stacksize)) - 1;
# else /* !FLOATING_STACKS */
void *res_addr;

if (attr != NULL)
{
guardsize = page_roundup (attr->__guardsize, granularity);
Expand All @@ -434,13 +446,17 @@ static int pthread_allocate_stack(const pthread_attr_t *attr,

new_thread = default_new_thread;
new_thread_bottom = (char *) (new_thread + 1) - stacksize;
map_addr = mmap((caddr_t)((char *)(new_thread + 1) - stacksize - guardsize),
stacksize + guardsize,
map_addr = new_thread_bottom - guardsize;
res_addr = mmap(map_addr, stacksize + guardsize,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
if (map_addr == MAP_FAILED)
/* Bad luck, this segment is already mapped. */
return -1;
if (res_addr != map_addr)
{
/* Bad luck, this segment is already mapped. */
if (res_addr != MAP_FAILED)
munmap (res_addr, stacksize + guardsize);
return -1;
}

/* We manage to get a stack. Protect the guard area pages if
necessary. */
Expand Down
1 change: 0 additions & 1 deletion linuxthreads/sysdeps/powerpc/pspinlock.c
Expand Up @@ -19,7 +19,6 @@

#include <errno.h>
#include <pthread.h>
#include <pt-machine.h>
#include "internals.h"

int
Expand Down

0 comments on commit 41b64fc

Please sign in to comment.