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,¶m);
+ pthread_setschedparam(tid,SCHED_FIFO,¶m);
/* 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,¶m) &&
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;
}