mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 04:50:07 +00:00
hppa: Add _STACK_GROWS_* cases to pthread_attr_[sg]etstack.
This is one of a several NPTL patches to build glibc on hppa. The pthread_attr_[sg]etstack functions are defined by POSIX as taking a stackaddr that is the lowest addressable byte of the storage used for the stack. However, the internal iattr variable of the same name in NPTL is actually the final stack address as usable in the stack pointer for the machine. Therefore the NPTL implementation must add and subtract stacksize for _STACK_GROWS_DOWN architectures. HPPA is a _STACK_GROWS_UP architecture and doesn't need to add or subtract anything, the stack address *is* the lowest addressable byte of the storage. Tested on hppa-linux-gnu, with no regressions. Can't impact any other targets because of the conditionals. If nobody objects I'll check this in at the end of the week. I can't see there being any objections to this patch except that it introduces more code to maintain for an old architecture (perhaps we'll get another _S_G_U target in the future?).
This commit is contained in:
parent
43ca83ecc4
commit
2e03fae7b7
10
ChangeLog
10
ChangeLog
@ -1,3 +1,11 @@
|
|||||||
|
2014-03-13 Carlos O'Donell <carlos@redhat.com>
|
||||||
|
|
||||||
|
* nptl/pthread_attr_setstack.c (__pthread_attr_setstack)
|
||||||
|
[!_STACK_GROWS_DOWN]: Don't add stacksize to stackaddr.
|
||||||
|
(__old_pthread_attr_setstack): Likewise.
|
||||||
|
* nptl/pthread_attr_getstack.c (__pthread_attr_getstack)
|
||||||
|
[!_STACK_GROWS_DOWN]: Likewise.
|
||||||
|
|
||||||
2014-03-13 Mike Frysinger <vapier@gentoo.org>
|
2014-03-13 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
* config.make.in (have-bash2): Delete.
|
* config.make.in (have-bash2): Delete.
|
||||||
@ -86,7 +94,7 @@
|
|||||||
|
|
||||||
[BZ #16381]
|
[BZ #16381]
|
||||||
* elf/Makefile (tests): Add tst-pie2.
|
* elf/Makefile (tests): Add tst-pie2.
|
||||||
(tests-pie): Add tst-pie2.
|
(tests-pie): Add tst-pie2.
|
||||||
* elf/tst-pie2.c: New file.
|
* elf/tst-pie2.c: New file.
|
||||||
* elf/dl-load.c (_dl_map_object_from_fd): Assert correct l_type
|
* elf/dl-load.c (_dl_map_object_from_fd): Assert correct l_type
|
||||||
for ET_EXEC.
|
for ET_EXEC.
|
||||||
|
@ -32,7 +32,11 @@ __pthread_attr_getstack (attr, stackaddr, stacksize)
|
|||||||
iattr = (struct pthread_attr *) attr;
|
iattr = (struct pthread_attr *) attr;
|
||||||
|
|
||||||
/* Store the result. */
|
/* Store the result. */
|
||||||
|
#if _STACK_GROWS_DOWN
|
||||||
*stackaddr = (char *) iattr->stackaddr - iattr->stacksize;
|
*stackaddr = (char *) iattr->stackaddr - iattr->stacksize;
|
||||||
|
#else
|
||||||
|
*stackaddr = (char *) iattr->stackaddr;
|
||||||
|
#endif
|
||||||
*stacksize = iattr->stacksize;
|
*stacksize = iattr->stacksize;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -48,7 +48,11 @@ __pthread_attr_setstack (attr, stackaddr, stacksize)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
iattr->stacksize = stacksize;
|
iattr->stacksize = stacksize;
|
||||||
|
#if _STACK_GROWS_DOWN
|
||||||
iattr->stackaddr = (char *) stackaddr + stacksize;
|
iattr->stackaddr = (char *) stackaddr + stacksize;
|
||||||
|
#else
|
||||||
|
iattr->stackaddr = (char *) stackaddr;
|
||||||
|
#endif
|
||||||
iattr->flags |= ATTR_FLAG_STACKADDR;
|
iattr->flags |= ATTR_FLAG_STACKADDR;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -81,7 +85,11 @@ __old_pthread_attr_setstack (pthread_attr_t *attr, void *stackaddr,
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
iattr->stacksize = stacksize;
|
iattr->stacksize = stacksize;
|
||||||
|
#if _STACK_GROWS_DOWN
|
||||||
iattr->stackaddr = (char *) stackaddr + stacksize;
|
iattr->stackaddr = (char *) stackaddr + stacksize;
|
||||||
|
#else
|
||||||
|
iattr->stackaddr = (char *) stackaddr;
|
||||||
|
#endif
|
||||||
iattr->flags |= ATTR_FLAG_STACKADDR;
|
iattr->flags |= ATTR_FLAG_STACKADDR;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user