libpthread_rt won't produce usable exec apps on ppc64 if it uses --wrap.
There seems to be no reason to use --wrap for building the lib itself.

-- Heikki Lindholm
diff -Nru fusion-cvs/skins/posix/lib/GNUmakefile.am 
fusion-cvs-ppc64-devel/skins/posix/lib/GNUmakefile.am
--- fusion-cvs/skins/posix/lib/GNUmakefile.am   2005-08-11 10:45:39.000000000 
+0300
+++ fusion-cvs-ppc64-devel/skins/posix/lib/GNUmakefile.am       2005-09-06 
13:43:47.000000000 +0300
@@ -2,10 +2,7 @@
 
 lib_LTLIBRARIES = libpthread_rt.la
 
-posix_wrappers := $(shell cat $(srcdir)/posix.wrappers | \
-                   while read symbol; do echo -n "-Wl,--wrap -Wl,$$symbol " ; 
done )
-
-libpthread_rt_la_LDFLAGS = $(posix_wrappers) -module -version-info 0:0:0
+libpthread_rt_la_LDFLAGS = -module -version-info 0:0:0
 
 libpthread_rt_la_SOURCES = \
        init.c \
diff -Nru fusion-cvs/skins/posix/lib/GNUmakefile.in 
fusion-cvs-ppc64-devel/skins/posix/lib/GNUmakefile.in
--- fusion-cvs/skins/posix/lib/GNUmakefile.in   2005-09-04 22:55:45.000000000 
+0300
+++ fusion-cvs-ppc64-devel/skins/posix/lib/GNUmakefile.in       2005-09-06 
13:18:35.000000000 +0300
@@ -310,8 +310,8 @@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
 lib_LTLIBRARIES = libpthread_rt.la
-posix_wrappers := $(shell cat $(srcdir)/posix.wrappers | \
-                   while read symbol; do echo -n "-Wl,--wrap -Wl,$$symbol " ; 
done )
+#posix_wrappers := $(shell cat $(srcdir)/posix.wrappers | \
+#                  while read symbol; do echo -n "-Wl,--wrap -Wl,$$symbol " ; 
done )
 
 libpthread_rt_la_LDFLAGS = $(posix_wrappers) -module -version-info 0:0:0
 libpthread_rt_la_SOURCES = \
diff -Nru fusion-cvs/skins/posix/lib/rtdm.c 
fusion-cvs-ppc64-devel/skins/posix/lib/rtdm.c
--- fusion-cvs/skins/posix/lib/rtdm.c   2005-09-04 22:55:45.000000000 +0300
+++ fusion-cvs-ppc64-devel/skins/posix/lib/rtdm.c       2005-09-06 
13:29:57.000000000 +0300
@@ -54,12 +54,12 @@
 
         va_start(ap, oflag);
 
-        ret = __real_open(path, oflag, va_arg(ap, mode_t));
+        ret = open(path, oflag, va_arg(ap, mode_t));
 
         va_end(ap);
 
         if (ret >= __rtdm_fd_start) {
-            __real_close(ret);
+            close(ret);
             errno = EMFILE;
             ret   = -1;
         }
@@ -85,10 +85,10 @@
     if (ret >= 0)
         ret += __rtdm_fd_start;
     else if (ret == -EAFNOSUPPORT || ret == -ENOSYS) {
-        ret = __real_socket(protocol_family, socket_type, protocol);
+        ret = socket(protocol_family, socket_type, protocol);
 
         if (ret >= __rtdm_fd_start) {
-            __real_close(ret);
+            close(ret);
             errno = -EMFILE;
             ret   = -1;
         }
@@ -108,7 +108,7 @@
                                            __rtdm_close,
                                            fd - __rtdm_fd_start));
     else
-        return __real_close(fd);
+        return close(fd);
 }
 
 
@@ -129,7 +129,7 @@
                                            request,
                                            arg));
     else
-        return __real_ioctl(fd, request, arg);
+        return ioctl(fd, request, arg);
 }
 
 
@@ -142,7 +142,7 @@
                                            buf,
                                            nbyte));
     else
-        return __real_read(fd, buf, nbyte);
+        return read(fd, buf, nbyte);
 }
 
 
@@ -155,7 +155,7 @@
                                            buf,
                                            nbyte));
     else
-        return __real_write(fd, buf, nbyte);
+        return write(fd, buf, nbyte);
 }
 
 
@@ -168,7 +168,7 @@
                                            msg,
                                            flags));
     else
-        return __real_recvmsg(fd, msg, flags);
+        return recvmsg(fd, msg, flags);
 }
 
 
@@ -181,7 +181,7 @@
                                            msg,
                                            flags));
     else
-        return __real_sendmsg(fd, msg, flags);
+        return sendmsg(fd, msg, flags);
 }
 
 
@@ -207,7 +207,7 @@
             *fromlen = msg.msg_namelen;
         return ret;
     } else
-        return __real_recvfrom(fd, buf, len, flags, from, fromlen);
+        return recvfrom(fd, buf, len, flags, from, fromlen);
 }
 
 
@@ -225,7 +225,7 @@
                                            &msg,
                                            flags));
     } else
-        return __real_sendto(fd, buf, len, flags, to, tolen);
+        return sendto(fd, buf, len, flags, to, tolen);
 }
 
 
@@ -241,7 +241,7 @@
                                            &msg,
                                            flags));
     } else
-        return __real_recv(fd, buf, len, flags);
+        return recv(fd, buf, len, flags);
 }
 
 
@@ -257,7 +257,7 @@
                                            &msg,
                                            flags));
     } else
-        return __real_send(fd, buf, len, flags);
+        return send(fd, buf, len, flags);
 }
 
 
@@ -273,7 +273,7 @@
                                            _RTIOC_GETSOCKOPT,
                                            &args));
     } else
-        return __real_getsockopt(fd, level, optname, optval, optlen);
+        return getsockopt(fd, level, optname, optval, optlen);
 }
 
 
@@ -290,7 +290,7 @@
                                            _RTIOC_SETSOCKOPT,
                                            &args));
     } else
-        return __real_setsockopt(fd, level, optname, optval, optlen);
+        return setsockopt(fd, level, optname, optval, optlen);
 }
 
 
@@ -305,7 +305,7 @@
                                            _RTIOC_BIND,
                                            &args));
     } else
-        return __real_bind(fd, my_addr, addrlen);
+        return bind(fd, my_addr, addrlen);
 }
 
 
@@ -321,7 +321,7 @@
                                            _RTIOC_CONNECT,
                                            &args));
     } else
-        return __real_connect(fd, serv_addr, addrlen);
+        return connect(fd, serv_addr, addrlen);
 }
 
 
@@ -334,7 +334,7 @@
                                            _RTIOC_LISTEN,
                                            backlog));
     } else
-        return __real_listen(fd, backlog);
+        return listen(fd, backlog);
 }
 
 
@@ -352,10 +352,10 @@
         if (fd >= 0)
             fd += __rtdm_fd_start;
     } else {
-        fd = __real_accept(fd, addr, addrlen);
+        fd = accept(fd, addr, addrlen);
 
         if (fd >= __rtdm_fd_start) {
-            __real_close(fd);
+            close(fd);
             fd = -EMFILE;
         }
     }       
@@ -376,7 +376,7 @@
                                            _RTIOC_GETSOCKNAME,
                                            &args));
     } else
-        return __real_getsockname(fd, name, namelen);
+        return getsockname(fd, name, namelen);
 }
 
 
@@ -392,7 +392,7 @@
                                            _RTIOC_GETPEERNAME,
                                            &args));
     } else
-        return __real_getpeername(fd, name, namelen);
+        return getpeername(fd, name, namelen);
 }
 
 
@@ -405,5 +405,5 @@
                                            _RTIOC_SHUTDOWN,
                                            how));
     } else
-        return __real_shutdown(fd, how);
+        return shutdown(fd, how);
 }
diff -Nru fusion-cvs/skins/posix/lib/thread.c 
fusion-cvs-ppc64-devel/skins/posix/lib/thread.c
--- fusion-cvs/skins/posix/lib/thread.c 2005-08-31 11:38:57.000000000 +0300
+++ fusion-cvs-ppc64-devel/skins/posix/lib/thread.c     2005-09-06 
13:41:07.000000000 +0300
@@ -53,7 +53,7 @@
        passed to pthread_create(3), so we force the scheduling policy
        once again here. */
     param.sched_priority = iargs->prio;
-    __real_pthread_setschedparam(tid,SCHED_FIFO,&param);
+    pthread_setschedparam(tid,SCHED_FIFO,&param);
 
     /* Do _not_ inline the call to pthread_self() in the syscall
        macro: this trashes the syscall regs on some archs. */
@@ -70,10 +70,11 @@
     start = iargs->start;
     cookie = iargs->arg;
 
-    __real_sem_post(&iargs->sync);
+    sem_post(&iargs->sync);
 
     if (!err)
        {
+
        XENOMAI_SYSCALL1(__xn_sys_migrate,XENOMAI_RTAI_DOMAIN);
        status = start(cookie);
        }
@@ -104,7 +105,7 @@
          (inherit == PTHREAD_INHERIT_SCHED &&
           !pthread_getschedparam(pthread_self(),&policy,&param) &&
           policy != SCHED_FIFO))))
-       return __real_pthread_create(tid,attr,start,arg);
+       return pthread_create(tid,attr,start,arg);
 
     /* Ok, we are about to create a new real-time thread. First start
        a native POSIX thread, then associate a RTAI/fusion shadow to
@@ -114,12 +115,12 @@
     iargs.arg = arg;
     iargs.prio = param.sched_priority;
     iargs.ret = EAGAIN;
-    __real_sem_init(&iargs.sync,0,0);
+    sem_init(&iargs.sync,0,0);
 
-    err = __real_pthread_create(tid,attr,&__pthread_trampoline,&iargs);
-    while (__real_sem_wait(&iargs.sync) && errno == EINTR)
+    err = pthread_create(tid,attr,&__pthread_trampoline,&iargs);
+    while (sem_wait(&iargs.sync) && errno == EINTR)
         ;
-    __real_sem_destroy(&iargs.sync);
+    sem_destroy(&iargs.sync);
 
     return err ?: iargs.ret;
 }

Reply via email to