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 \

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to