From: Stefan Kisdaroczi <kisda@domain.hid>
To: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Cc: xenomai@xenomai.org
Subject: Re: [Xenomai-help] native skin 2.5.0: rt_task_create() segfaults if stacksize parameter too small
Date: Fri, 08 Jan 2010 14:41:08 +0100 [thread overview]
Message-ID: <4B4735F4.6060503@domain.hid> (raw)
In-Reply-To: <4B47338E.9080304@domain.hid>
[-- Attachment #1.1: Type: text/plain, Size: 3083 bytes --]
Am 08.01.2010 14:30, schrieb Gilles Chanteperdrix:
> Stefan Kisdaroczi wrote:
>> Am 08.01.2010 12:57, schrieb Gilles Chanteperdrix:
>>> Stefan Kisdaroczi wrote:
>>>> Am 07.01.2010 17:57, schrieb Gilles Chanteperdrix:
>>>>> Stefan Kisdaroczi wrote:
>>>>>> Am 07.01.2010 15:36, schrieb Gilles Chanteperdrix:
>>>>>>> Stefan Kisdaroczi wrote:
>>>>>>>> hi,
>>>>>>>>
>>>>>>>> i have upgraded xenomai to 2.5.0 (x86,32bit). My application segfaults when I
>>>>>>>> try to create a task with stacksize 2048, this worked with 2.4.10.
>>>>>>>> Because my app is written in pascal i have reproduced the problem with the
>>>>>>>> xenomai trivial-periodic.c example:
>>>>>>>>
>>>>>>>> - rt_task_create(&demo_task, "trivial", 0, 99, 0);
>>>>>>>> + rt_task_create(&demo_task, "trivial",16911, 99, 0);
>>>>>>>>
>>>>>>>> Stacksize 0 -> default stack size : ok
>>>>>>>> Stacksize > 0 and <= 16911 : Segmentation fault
>>>>>>>> Stacksize >= 16912 : ok
>>>>>>>>
>>>>>>>> Any hints ?
>>>>>>> What does the task do? If it uses printf, printf needs a lot of room on
>>>>>>> the stack.
>>>>>>>
>>>>>> To clarify:
>>>>>> It does not depend on the task body, the task is not even started.
>>>>>> The segfault happens when calling rt_task_create(), before rt_task_start()
>>>>>> is called.
>>>>> Actually, when calling rt_task_create, the thread is created, under the
>>>>> hood, and waits to be started. So the segmentation fault is most
>>>>> certainly due to a stack overflow in the newly created thread.
>>>>>
>>>>> And I am afraid I know why it happens: the newly merged user-space
>>>>> signals support requires roughly 16 * sizeof(struct siginfo) on stack.
>>>>> But this amounts to two Kbytes here. Could you run the following program
>>>>> on your target ?
>>>> salut gilles,
>>>>
>>>> as the stacksize is already checked and increased to PTHREAD_STACK_MIN if
>>>> the value is too small, i suggest to take the stacksize needed by xenomai
>>>> into account too. The attached patch is clearly wrong, but it solved the
>>>> problem for me.
>>> PTHREAD_STACK_MIN varies a lot depending on architectures and even
>>> depending on the glibc versions. Which is why we took 32 Kb as the
>>> default stack size. Since the default is enough even for struct xnsig,
>>> if you are asking a smaller size, you may have good reasons to do so. We
>>> should check that the size is at least sizeof(struct xnsig), but since
>>> PTHREAD_STACK_MIN is larger than struct xnsig, it should work as is.
>>>
>>> The point is that your system seems to require 16 Kb whereas
>>> sizeof(struct xnsig) is only 2Kb. So, there is something wrong somewhere
>>> else.
>>>
>>> Could you run the segfaulting program inside gdb, and print the frames
>>> infos ?
>>
>> gdb logfile attached
>
> Ok. Could you get the value of the "esp" register at the time of the
> failure, as well as the contents of /proc/<pid>/smaps where <pid> is the
> pid of the failing application ? You can run the cat /proc/<pid>/smaps
> when the process is stopped in gdb.
attached.
kisda
[-- Attachment #1.2: registers.txt --]
[-- Type: text/plain, Size: 1320 bytes --]
Starting program: /home/ski/src/xenotest/trivial-periodic
[Thread debugging using libthread_db enabled]
[New Thread 0xb75806c0 (LWP 21383)]
[New Thread 0xb757fb90 (LWP 21386)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb757fb90 (LWP 21386)]
0xb7719783 in ?? () from /lib/ld-linux.so.2
#0 0xb7719783 in ?? () from /lib/ld-linux.so.2
#1 0xb771f2e0 in ?? () from /lib/ld-linux.so.2
#2 0xb76e57fd in xeno_sigwinch_handler () from /usr/lib/libnative.so.3
#3 0xb76e58a6 in xeno_sigshadow_handler () from /usr/lib/libnative.so.3
#4 <signal handler called>
#5 0xb76e41e0 in ?? () from /usr/lib/libnative.so.3
#6 0xb757f3b8 in ?? ()
#7 0xb76e7208 in ?? () from /usr/lib/libnative.so.3
#8 0xb76e73c0 in ?? () from /usr/lib/libnative.so.3
#9 0xb76e5700 in ?? () from /usr/lib/libnative.so.3
#10 0x00000000 in ?? ()
eax 0xb77012a8 -1217391960
ecx 0xb757d9dc -1218979364
edx 0xd0 208
ebx 0xb76e7208 -1217498616
esp 0xb757d000 0xb757d000
ebp 0xb757d000 0xb757d000
esi 0x63 99
edi 0x1c 28
eip 0xb7719783 0xb7719783
eflags 0x10206 [ PF IF RF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
[-- Attachment #1.3: smaps.txt --]
[-- Type: text/plain, Size: 7816 bytes --]
08048000-08049000 r-xp 00000000 08:01 1976845 /home/ski/src/xenotest/trivial-periodic
Size: 4 kB
Rss: 4 kB
Pss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 4 kB
Private_Dirty: 0 kB
Referenced: 4 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
08049000-0804a000 rw-p 00000000 08:01 1976845 /home/ski/src/xenotest/trivial-periodic
Size: 4 kB
Rss: 4 kB
Pss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 4 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
09e52000-09e73000 rw-p 00000000 00:00 0 [heap]
Size: 132 kB
Rss: 132 kB
Pss: 132 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 132 kB
Referenced: 132 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b757c000-b757d000 ---p 00000000 00:00 0
Size: 4 kB
Rss: 4 kB
Pss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 4 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b757d000-b7581000 rw-p 00000000 00:00 0
Size: 16 kB
Rss: 16 kB
Pss: 16 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 16 kB
Referenced: 16 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b7581000-b76d6000 r-xp 00000000 08:01 4810048 /lib/i686/cmov/libc-2.7.so
Size: 1364 kB
Rss: 1364 kB
Pss: 419 kB
Shared_Clean: 1364 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 1364 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b76d6000-b76d7000 r--p 00155000 08:01 4810048 /lib/i686/cmov/libc-2.7.so
Size: 4 kB
Rss: 4 kB
Pss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 4 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b76d7000-b76d9000 rw-p 00156000 08:01 4810048 /lib/i686/cmov/libc-2.7.so
Size: 8 kB
Rss: 8 kB
Pss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
Referenced: 8 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b76d9000-b76dc000 rw-p 00000000 00:00 0
Size: 12 kB
Rss: 12 kB
Pss: 12 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 12 kB
Referenced: 12 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b76dc000-b76e7000 r-xp 00000000 08:01 958534 /usr/lib/libnative.so.3.0.0
Size: 44 kB
Rss: 44 kB
Pss: 44 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 12 kB
Private_Dirty: 32 kB
Referenced: 44 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b76e7000-b76e8000 rw-p 0000a000 08:01 958534 /usr/lib/libnative.so.3.0.0
Size: 4 kB
Rss: 4 kB
Pss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 4 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b76e8000-b76fd000 r-xp 00000000 08:01 4810062 /lib/i686/cmov/libpthread-2.7.so
Size: 84 kB
Rss: 84 kB
Pss: 27 kB
Shared_Clean: 80 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 84 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b76fd000-b76ff000 rw-p 00014000 08:01 4810062 /lib/i686/cmov/libpthread-2.7.so
Size: 8 kB
Rss: 8 kB
Pss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
Referenced: 8 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b76ff000-b7702000 rw-p 00000000 00:00 0
Size: 12 kB
Rss: 12 kB
Pss: 12 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 12 kB
Referenced: 12 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b7704000-b7707000 rw-s 00000000 00:0d 1551 /dev/rtheap
Size: 12 kB
Rss: 12 kB
Pss: 6 kB
Shared_Clean: 12 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 12 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b7707000-b770a000 rw-s 00000000 00:0d 1551 /dev/rtheap
Size: 12 kB
Rss: 12 kB
Pss: 12 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 12 kB
Private_Dirty: 0 kB
Referenced: 12 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b770a000-b770b000 rw-p 00000000 00:00 0
Size: 4 kB
Rss: 4 kB
Pss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 4 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b770b000-b770c000 r-xp 00000000 00:00 0 [vdso]
Size: 4 kB
Rss: 4 kB
Pss: 0 kB
Shared_Clean: 4 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 4 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b770c000-b7726000 r-xp 00000000 08:01 4800514 /lib/ld-2.7.so
Size: 104 kB
Rss: 104 kB
Pss: 11 kB
Shared_Clean: 100 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 104 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b7726000-b7728000 rw-p 0001a000 08:01 4800514 /lib/ld-2.7.so
Size: 8 kB
Rss: 8 kB
Pss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
Referenced: 8 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
bfd96000-bfdab000 rw-p 00000000 00:00 0 [stack]
Size: 84 kB
Rss: 84 kB
Pss: 84 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 84 kB
Referenced: 84 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 251 bytes --]
next prev parent reply other threads:[~2010-01-08 13:41 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-07 14:32 [Xenomai-help] native skin 2.5.0: rt_task_create() segfaults if stacksize parameter too small Stefan Kisdaroczi
2010-01-07 14:36 ` Gilles Chanteperdrix
2010-01-07 14:55 ` Stefan Kisdaroczi
2010-01-07 15:48 ` Stefan Kisdaroczi
2010-01-07 16:57 ` Gilles Chanteperdrix
2010-01-07 17:26 ` Stefan Kisdaroczi
2010-01-08 11:47 ` Stefan Kisdaroczi
2010-01-08 11:57 ` Gilles Chanteperdrix
2010-01-08 13:24 ` Stefan Kisdaroczi
2010-01-08 13:30 ` Gilles Chanteperdrix
2010-01-08 13:41 ` Stefan Kisdaroczi [this message]
2010-01-08 13:52 ` Gilles Chanteperdrix
2010-01-08 14:07 ` Stefan Kisdaroczi
2010-01-08 13:54 ` Gilles Chanteperdrix
2010-01-08 13:59 ` Stefan Kisdaroczi
2010-01-08 15:57 ` Stefan Kisdaroczi
2010-01-08 17:12 ` Gilles Chanteperdrix
2010-01-08 22:37 ` Gilles Chanteperdrix
2010-01-11 10:53 ` Stefan Kisdaroczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B4735F4.6060503@domain.hid \
--to=kisda@domain.hid \
--cc=gilles.chanteperdrix@xenomai.org \
--cc=xenomai@xenomai.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.