On 06/06/2012 04:27 PM, Gilles Chanteperdrix wrote:
On 06/06/2012 04:02 PM, Gilles Chanteperdrix wrote:
On 06/06/2012 03:55 PM, Gilles Chanteperdrix wrote:
On 06/06/2012 03:53 PM, Philippe Gerum wrote:
On 06/06/2012 03:41 PM, Gilles Chanteperdrix wrote:
On 06/06/2012 03:25 PM, Philippe Gerum wrote:
On 06/06/2012 03:18 PM, Gilles Chanteperdrix wrote:
On 06/06/2012 02:28 PM, Philippe Gerum wrote:
On 06/06/2012 11:48 AM, Philippe Gerum wrote:
On 06/06/2012 11:18 AM, ali hagigat wrote:
Much appreciate for the reply, Mr. Gerum. Here is the result of ldd
command:


http://www.xenomai.org/pipermail/xenomai-help/2011-12/msg00012.html

Alternatively, this patch may work as well (not tested, but this
looks like a former issue we had with aggressive optimizers):

diff --git a/src/skins/posix/init.c b/src/skins/posix/init.c
index 7a338a0..9c7849e 100644
--- a/src/skins/posix/init.c
+++ b/src/skins/posix/init.c
@@ -43,6 +43,7 @@ void pse51_clock_init(int);
    static __attribute__ ((constructor))
    void __init_posix_interface(void)
    {
+       volatile pthread_t tid = pthread_self();
    #ifndef CONFIG_XENO_LIBS_DLOPEN
        struct sched_param parm;
        int policy;
@@ -80,14 +81,14 @@ void __init_posix_interface(void)

        /* Don't use auto-shadowing if we are likely invoked from dlopen. */
    #ifndef CONFIG_XENO_LIBS_DLOPEN
-       err = __real_pthread_getschedparam(pthread_self(),&policy,&parm);
+       err = __real_pthread_getschedparam(tid,&policy,&parm);
        if (err) {
                fprintf(stderr, "Xenomai Posix skin init: "
                        "pthread_getschedparam: %s\n", strerror(err));
                exit(EXIT_FAILURE);
        }

-       err = __wrap_pthread_setschedparam(pthread_self(), policy,&parm);
+       err = __wrap_pthread_setschedparam(tid, policy,&parm);
        if (err) {
                fprintf(stderr, "Xenomai Posix skin init: "
                        "pthread_setschedparam: %s\n", strerror(err));

There should not be any issue here, as the pthread_self() is passed as
an argument to the called functions, the syscall is not inlined directly.


Did you get any disassembly of the faulty code when suggesting
-fno-omit-frame-pointer last time you did?

No, but I had experienced the problem first hand.


It would be interesting to know why we have to force a frame pointer in
there. I'm not comfortable with voodoo fixing, that bug might bite later
on as gcc's optimizer is unlikely to become less aggressive over time.

Ah this, I know. I have posted a mail where I explained the problem. I
am a bit in a short schedule here, will post the link tonight.

http://xenomai.org/pipermail/xenomai-core/2011-08/msg00029.html


In the mails following this one, I found how to fix the assembly to work
in the omit-frame-pointer case. The real problem is that, at compilation
time, we have no command-line #defined variable telling us whether
compiling with frame pointers enabled. And it does not seem easy to
write a configure test script, which tests whether frame pointers are
enabled or not.


has_bp= && echo "void whee(void) { }" | gcc -fno-omit-frame-pointer -S -xc - -o - | grep -q "push[lq]\?.*%[er]bp" && echo has_bp=y

?

Yeah, ok...

--
Philippe.

_______________________________________________
Xenomai mailing list
Xenomai@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to