* [Xenomai-core] [bug?] set pthread stack size broken
@ 2005-12-08 22:53 Jan Kiszka
2005-12-09 7:24 ` Jan Kiszka
0 siblings, 1 reply; 6+ messages in thread
From: Jan Kiszka @ 2005-12-08 22:53 UTC (permalink / raw)
To: xenomai-core
[-- Attachment #1.1: Type: text/plain, Size: 846 bytes --]
Hi,
something for the night: Can someone explain why normal pthreads can be
restricted to initially use only the stack size provided via
pthread_attr_setstacksize() while any rt-mapped thread (posix and
native) refuse to accept this? For a simple test, compile the attached
program one time as normal
gcc -lpthread -o stacksize stacksize.c
and the other time against xeno's posix skin
gcc `xeno-config --posix-cflags` `xeno-config --posix-ldflags` \
-o stacksize.o stacksize.c
Then compare the memory requirements of both processes - they should
differ by 2M, the stack size when pthread_attr_setstacksize is not used.
Strange - and also critical when considering larger applications...
So far I only tested against 2.1, but I don't see a reason why 2.0.x
should behave different. Will get checked, though.
Any ideas?
Jan
[-- Attachment #1.2: stacksize.c --]
[-- Type: text/plain, Size: 450 bytes --]
#include <sys/mman.h>
#include <unistd.h>
#include <limits.h>
#include <pthread.h>
static void *simple_thread(void *arg)
{
sleep(30);
return 0;
}
int main (int ac, char **av)
{
pthread_t pth;
pthread_attr_t attr;
mlockall(MCL_CURRENT | MCL_FUTURE);
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN);
pthread_create(&pth, &attr, simple_thread, NULL);
sleep(30);
return 0;
}
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai-core] [bug?] set pthread stack size broken
2005-12-08 22:53 [Xenomai-core] [bug?] set pthread stack size broken Jan Kiszka
@ 2005-12-09 7:24 ` Jan Kiszka
2005-12-09 16:19 ` Jan Kiszka
0 siblings, 1 reply; 6+ messages in thread
From: Jan Kiszka @ 2005-12-09 7:24 UTC (permalink / raw)
To: xenomai-core
[-- Attachment #1: Type: text/plain, Size: 1457 bytes --]
Jan Kiszka wrote:
> Hi,
>
> something for the night: Can someone explain why normal pthreads can be
> restricted to initially use only the stack size provided via
> pthread_attr_setstacksize() while any rt-mapped thread (posix and
> native) refuse to accept this? For a simple test, compile the attached
> program one time as normal
>
> gcc -lpthread -o stacksize stacksize.c
>
> and the other time against xeno's posix skin
>
> gcc `xeno-config --posix-cflags` `xeno-config --posix-ldflags` \
> -o stacksize.o stacksize.c
>
> Then compare the memory requirements of both processes - they should
> differ by 2M, the stack size when pthread_attr_setstacksize is not used.
> Strange - and also critical when considering larger applications...
This has been nailed down now to be some strange linker problem: while
the standard version of the stacksize demo calls the latest
pthread_create (__pthread_create_2_1 in glibc-2.3.x), the wrapped
real-time version and likely also applications linked against libnative
call an older pthread_create (__pthread_create_2_0). That variant
assumes that pthread_attr_t does not yet contain things like the stack
size and fills in the standard value again. :(
Can anyone with another build environment than my SuSE 10 confirm this?
>
> So far I only tested against 2.1, but I don't see a reason why 2.0.x
> should behave different. Will get checked, though.
>
Same behaviour on 2.0.x (SVN).
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 254 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai-core] [bug?] set pthread stack size broken
2005-12-09 7:24 ` Jan Kiszka
@ 2005-12-09 16:19 ` Jan Kiszka
2005-12-09 16:44 ` Philippe Gerum
0 siblings, 1 reply; 6+ messages in thread
From: Jan Kiszka @ 2005-12-09 16:19 UTC (permalink / raw)
To: xenomai-core
[-- Attachment #1.1: Type: text/plain, Size: 2026 bytes --]
Jan Kiszka wrote:
> Jan Kiszka wrote:
>> Hi,
>>
>> something for the night: Can someone explain why normal pthreads can be
>> restricted to initially use only the stack size provided via
>> pthread_attr_setstacksize() while any rt-mapped thread (posix and
>> native) refuse to accept this? For a simple test, compile the attached
>> program one time as normal
>>
>> gcc -lpthread -o stacksize stacksize.c
>>
>> and the other time against xeno's posix skin
>>
>> gcc `xeno-config --posix-cflags` `xeno-config --posix-ldflags` \
>> -o stacksize.o stacksize.c
>>
>> Then compare the memory requirements of both processes - they should
>> differ by 2M, the stack size when pthread_attr_setstacksize is not used.
>> Strange - and also critical when considering larger applications...
>
> This has been nailed down now to be some strange linker problem: while
> the standard version of the stacksize demo calls the latest
> pthread_create (__pthread_create_2_1 in glibc-2.3.x), the wrapped
> real-time version and likely also applications linked against libnative
> call an older pthread_create (__pthread_create_2_0). That variant
> assumes that pthread_attr_t does not yet contain things like the stack
> size and fills in the standard value again. :(
>
> Can anyone with another build environment than my SuSE 10 confirm this?
>
>> So far I only tested against 2.1, but I don't see a reason why 2.0.x
>> should behave different. Will get checked, though.
>>
>
> Same behaviour on 2.0.x (SVN).
>
> Jan
>
The attached patch fixes this issue for 2.1-SVN. A similar patch should
be applied to 2.0.x as well. And maybe it also hits the UVM, but this is
something I cannot assess ATM.
Well, you know, the smaller the bug... :-/
Jan
PS: For those you are interested why we need this, read
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=145941
Found via google:"pthread_create NOTYPE" after I noticed the differences
in "readelf -s libnative.so".
[-- Attachment #1.2: setstacksize.patch --]
[-- Type: text/plain, Size: 846 bytes --]
Index: src/skins/native/Makefile.am
===================================================================
--- src/skins/native/Makefile.am (revision 243)
+++ src/skins/native/Makefile.am (working copy)
@@ -1,6 +1,6 @@
lib_LTLIBRARIES = libnative.la
-libnative_la_LDFLAGS = -module -version-info 0:0:0
+libnative_la_LDFLAGS = -module -version-info 0:0:0 -pthread
libnative_la_SOURCES = \
alarm.c \
Index: src/skins/posix/Makefile.am
===================================================================
--- src/skins/posix/Makefile.am (revision 243)
+++ src/skins/posix/Makefile.am (working copy)
@@ -2,7 +2,7 @@
lib_LTLIBRARIES = libpthread_rt.la
-libpthread_rt_la_LDFLAGS = -module -version-info 0:0:0
+libpthread_rt_la_LDFLAGS = -module -version-info 0:0:0 -lpthread
libpthread_rt_la_SOURCES = \
init.c \
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 250 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai-core] [bug?] set pthread stack size broken
2005-12-09 16:19 ` Jan Kiszka
@ 2005-12-09 16:44 ` Philippe Gerum
2005-12-09 19:58 ` Jan Kiszka
0 siblings, 1 reply; 6+ messages in thread
From: Philippe Gerum @ 2005-12-09 16:44 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai-core
Jan Kiszka wrote:
> Jan Kiszka wrote:
>
>>Jan Kiszka wrote:
>>
>>>Hi,
>>>
>>>something for the night: Can someone explain why normal pthreads can be
>>>restricted to initially use only the stack size provided via
>>>pthread_attr_setstacksize() while any rt-mapped thread (posix and
>>>native) refuse to accept this? For a simple test, compile the attached
>>>program one time as normal
>>>
>>> gcc -lpthread -o stacksize stacksize.c
>>>
>>>and the other time against xeno's posix skin
>>>
>>> gcc `xeno-config --posix-cflags` `xeno-config --posix-ldflags` \
>>> -o stacksize.o stacksize.c
>>>
>>>Then compare the memory requirements of both processes - they should
>>>differ by 2M, the stack size when pthread_attr_setstacksize is not used.
>>>Strange - and also critical when considering larger applications...
>>
>>This has been nailed down now to be some strange linker problem: while
>>the standard version of the stacksize demo calls the latest
>>pthread_create (__pthread_create_2_1 in glibc-2.3.x), the wrapped
>>real-time version and likely also applications linked against libnative
>>call an older pthread_create (__pthread_create_2_0). That variant
>>assumes that pthread_attr_t does not yet contain things like the stack
>>size and fills in the standard value again. :(
>>
>>Can anyone with another build environment than my SuSE 10 confirm this?
>>
>>
>>>So far I only tested against 2.1, but I don't see a reason why 2.0.x
>>>should behave different. Will get checked, though.
>>>
>>
>>Same behaviour on 2.0.x (SVN).
>>
>>Jan
>>
>
>
> The attached patch fixes this issue for 2.1-SVN. A similar patch should
> be applied to 2.0.x as well. And maybe it also hits the UVM, but this is
> something I cannot assess ATM.
>
> Well, you know, the smaller the bug... :-/
>
> Jan
>
>
> PS: For those you are interested why we need this, read
>
> https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=145941
>
> Found via google:"pthread_create NOTYPE" after I noticed the differences
> in "readelf -s libnative.so".
>
>
> ------------------------------------------------------------------------
>
> Index: src/skins/native/Makefile.am
> ===================================================================
> --- src/skins/native/Makefile.am (revision 243)
> +++ src/skins/native/Makefile.am (working copy)
> @@ -1,6 +1,6 @@
> lib_LTLIBRARIES = libnative.la
>
> -libnative_la_LDFLAGS = -module -version-info 0:0:0
> +libnative_la_LDFLAGS = -module -version-info 0:0:0 -pthread
>
> libnative_la_SOURCES = \
> alarm.c \
> Index: src/skins/posix/Makefile.am
> ===================================================================
> --- src/skins/posix/Makefile.am (revision 243)
> +++ src/skins/posix/Makefile.am (working copy)
> @@ -2,7 +2,7 @@
>
> lib_LTLIBRARIES = libpthread_rt.la
>
> -libpthread_rt_la_LDFLAGS = -module -version-info 0:0:0
> +libpthread_rt_la_LDFLAGS = -module -version-info 0:0:0 -lpthread
>
> libpthread_rt_la_SOURCES = \
> init.c \
Applied (with -pthread everywhere), thanks.
--
Philippe.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai-core] [bug?] set pthread stack size broken
2005-12-09 16:44 ` Philippe Gerum
@ 2005-12-09 19:58 ` Jan Kiszka
2005-12-10 10:45 ` Philippe Gerum
0 siblings, 1 reply; 6+ messages in thread
From: Jan Kiszka @ 2005-12-09 19:58 UTC (permalink / raw)
To: Philippe Gerum; +Cc: xenomai-core
[-- Attachment #1: Type: text/plain, Size: 3375 bytes --]
Philippe Gerum wrote:
> Jan Kiszka wrote:
>
>> Jan Kiszka wrote:
>>
>>> Jan Kiszka wrote:
>>>
>>>> Hi,
>>>>
>>>> something for the night: Can someone explain why normal pthreads can be
>>>> restricted to initially use only the stack size provided via
>>>> pthread_attr_setstacksize() while any rt-mapped thread (posix and
>>>> native) refuse to accept this? For a simple test, compile the attached
>>>> program one time as normal
>>>>
>>>> gcc -lpthread -o stacksize stacksize.c
>>>>
>>>> and the other time against xeno's posix skin
>>>>
>>>> gcc `xeno-config --posix-cflags` `xeno-config --posix-ldflags` \
>>>> -o stacksize.o stacksize.c
>>>>
>>>> Then compare the memory requirements of both processes - they should
>>>> differ by 2M, the stack size when pthread_attr_setstacksize is not
>>>> used.
>>>> Strange - and also critical when considering larger applications...
>>>
>>>
>>> This has been nailed down now to be some strange linker problem: while
>>> the standard version of the stacksize demo calls the latest
>>> pthread_create (__pthread_create_2_1 in glibc-2.3.x), the wrapped
>>> real-time version and likely also applications linked against libnative
>>> call an older pthread_create (__pthread_create_2_0). That variant
>>> assumes that pthread_attr_t does not yet contain things like the stack
>>> size and fills in the standard value again. :(
>>>
>>> Can anyone with another build environment than my SuSE 10 confirm this?
>>>
>>>
>>>> So far I only tested against 2.1, but I don't see a reason why 2.0.x
>>>> should behave different. Will get checked, though.
>>>>
>>>
>>> Same behaviour on 2.0.x (SVN).
>>>
>>> Jan
>>>
>>
>>
>> The attached patch fixes this issue for 2.1-SVN. A similar patch should
>> be applied to 2.0.x as well. And maybe it also hits the UVM, but this is
>> something I cannot assess ATM.
>>
>> Well, you know, the smaller the bug... :-/
>>
>> Jan
>>
>>
>> PS: For those you are interested why we need this, read
>>
>> https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=145941
>>
>> Found via google:"pthread_create NOTYPE" after I noticed the differences
>> in "readelf -s libnative.so".
>>
>>
>> ------------------------------------------------------------------------
>>
>> Index: src/skins/native/Makefile.am
>> ===================================================================
>> --- src/skins/native/Makefile.am (revision 243)
>> +++ src/skins/native/Makefile.am (working copy)
>> @@ -1,6 +1,6 @@
>> lib_LTLIBRARIES = libnative.la
>>
>> -libnative_la_LDFLAGS = -module -version-info 0:0:0
>> +libnative_la_LDFLAGS = -module -version-info 0:0:0 -pthread
>>
>> libnative_la_SOURCES = \
>> alarm.c \
>> Index: src/skins/posix/Makefile.am
>> ===================================================================
>> --- src/skins/posix/Makefile.am (revision 243)
>> +++ src/skins/posix/Makefile.am (working copy)
>> @@ -2,7 +2,7 @@
>>
>> lib_LTLIBRARIES = libpthread_rt.la
>>
>> -libpthread_rt_la_LDFLAGS = -module -version-info 0:0:0
>> +libpthread_rt_la_LDFLAGS = -module -version-info 0:0:0 -lpthread
>>
>> libpthread_rt_la_SOURCES = \
>> init.c \
>
>
> Applied (with -pthread everywhere), thanks.
>
Hmm, shouldn't is spell -lpthread? Seems like the autotools resolve this
because it works with both versions for me (current posix/Makefile.in
still has "-lpthread").
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai-core] [bug?] set pthread stack size broken
2005-12-09 19:58 ` Jan Kiszka
@ 2005-12-10 10:45 ` Philippe Gerum
0 siblings, 0 replies; 6+ messages in thread
From: Philippe Gerum @ 2005-12-10 10:45 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai-core
Jan Kiszka wrote:
> Philippe Gerum wrote:
>
>>Jan Kiszka wrote:
>>
>>
>>>Jan Kiszka wrote:
>>>
>>>
>>>>Jan Kiszka wrote:
>>>>
>>>>
>>>>>Hi,
>>>>>
>>>>>something for the night: Can someone explain why normal pthreads can be
>>>>>restricted to initially use only the stack size provided via
>>>>>pthread_attr_setstacksize() while any rt-mapped thread (posix and
>>>>>native) refuse to accept this? For a simple test, compile the attached
>>>>>program one time as normal
>>>>>
>>>>> gcc -lpthread -o stacksize stacksize.c
>>>>>
>>>>>and the other time against xeno's posix skin
>>>>>
>>>>> gcc `xeno-config --posix-cflags` `xeno-config --posix-ldflags` \
>>>>> -o stacksize.o stacksize.c
>>>>>
>>>>>Then compare the memory requirements of both processes - they should
>>>>>differ by 2M, the stack size when pthread_attr_setstacksize is not
>>>>>used.
>>>>>Strange - and also critical when considering larger applications...
>>>>
>>>>
>>>>This has been nailed down now to be some strange linker problem: while
>>>>the standard version of the stacksize demo calls the latest
>>>>pthread_create (__pthread_create_2_1 in glibc-2.3.x), the wrapped
>>>>real-time version and likely also applications linked against libnative
>>>>call an older pthread_create (__pthread_create_2_0). That variant
>>>>assumes that pthread_attr_t does not yet contain things like the stack
>>>>size and fills in the standard value again. :(
>>>>
>>>>Can anyone with another build environment than my SuSE 10 confirm this?
>>>>
>>>>
>>>>
>>>>>So far I only tested against 2.1, but I don't see a reason why 2.0.x
>>>>>should behave different. Will get checked, though.
>>>>>
>>>>
>>>>Same behaviour on 2.0.x (SVN).
>>>>
>>>>Jan
>>>>
>>>
>>>
>>>The attached patch fixes this issue for 2.1-SVN. A similar patch should
>>>be applied to 2.0.x as well. And maybe it also hits the UVM, but this is
>>>something I cannot assess ATM.
>>>
>>>Well, you know, the smaller the bug... :-/
>>>
>>>Jan
>>>
>>>
>>>PS: For those you are interested why we need this, read
>>>
>>>https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=145941
>>>
>>>Found via google:"pthread_create NOTYPE" after I noticed the differences
>>>in "readelf -s libnative.so".
>>>
>>>
>>>------------------------------------------------------------------------
>>>
>>>Index: src/skins/native/Makefile.am
>>>===================================================================
>>>--- src/skins/native/Makefile.am (revision 243)
>>>+++ src/skins/native/Makefile.am (working copy)
>>>@@ -1,6 +1,6 @@
>>> lib_LTLIBRARIES = libnative.la
>>>
>>>-libnative_la_LDFLAGS = -module -version-info 0:0:0
>>>+libnative_la_LDFLAGS = -module -version-info 0:0:0 -pthread
>>>
>>> libnative_la_SOURCES = \
>>> alarm.c \
>>>Index: src/skins/posix/Makefile.am
>>>===================================================================
>>>--- src/skins/posix/Makefile.am (revision 243)
>>>+++ src/skins/posix/Makefile.am (working copy)
>>>@@ -2,7 +2,7 @@
>>>
>>> lib_LTLIBRARIES = libpthread_rt.la
>>>
>>>-libpthread_rt_la_LDFLAGS = -module -version-info 0:0:0
>>>+libpthread_rt_la_LDFLAGS = -module -version-info 0:0:0 -lpthread
>>>
>>> libpthread_rt_la_SOURCES = \
>>> init.c \
>>
>>
>>Applied (with -pthread everywhere), thanks.
>>
>
>
> Hmm, shouldn't is spell -lpthread? Seems like the autotools resolve this
> because it works with both versions for me (current posix/Makefile.in
> still has "-lpthread").
>
gcc supports this actually, as a way to specify "whatever the platform
needs to support POSIX threads". But, well, since not all platforms
support this feature using the same option, I need to further check for
the existing ports.
--
Philippe.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2005-12-10 10:45 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-12-08 22:53 [Xenomai-core] [bug?] set pthread stack size broken Jan Kiszka
2005-12-09 7:24 ` Jan Kiszka
2005-12-09 16:19 ` Jan Kiszka
2005-12-09 16:44 ` Philippe Gerum
2005-12-09 19:58 ` Jan Kiszka
2005-12-10 10:45 ` Philippe Gerum
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.