All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai] __rtdm_muxid symbol multipy defined in static libs
@ 2012-07-30 19:17 Jeff Weber
  2012-07-30 19:23 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 2+ messages in thread
From: Jeff Weber @ 2012-07-30 19:17 UTC (permalink / raw)
  To: Xenomai Mailing List

When I attempt to statically link my application, the linker complains the
symbol
__rtdm_muxid is multiply defined.:

c++  -o myapp myobjects  mylibs -static -lsqlite3 -lrtdm -L/usr/xenomai/lib
-lpthread_rt -lxenomai -lpthread -lrt -ldl
/usr/xenomai/lib/libpthread_rt.a(libpthread_rt_la-init.o):(.data+0x4):
multiple definition of `__rtdm_muxid'
/usr/xenomai/lib/librtdm.a(librtdm_la-init.o):(.data+0x0): first defined
here

(I have pre-linked a subset of object files with the posix.wrappers script
so I can control which application posix calls
bind to the Xenomai __wrap_ calls.)

Use of "nm" shows what the linker is complaining about:

 # nm --defined -o /usr/xenomai/lib/*.a | grep __rtdm_muxid
/usr/xenomai/lib/libpthread_rt.a:libpthread_rt_la-init.o:00000004 D
__rtdm_muxid
/usr/xenomai/lib/librtdm.a:librtdm_la-init.o:00000000 D __rtdm_muxid

I have no link errors when dynamically linking my application.

Am I statically linking incorrectly, or is this a bug?

my config:
architecture: x86 32-bit
Xenomai-2.6.1

Thanks,
Jeff

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Xenomai] __rtdm_muxid symbol multipy defined in static libs
  2012-07-30 19:17 [Xenomai] __rtdm_muxid symbol multipy defined in static libs Jeff Weber
@ 2012-07-30 19:23 ` Gilles Chanteperdrix
  0 siblings, 0 replies; 2+ messages in thread
From: Gilles Chanteperdrix @ 2012-07-30 19:23 UTC (permalink / raw)
  To: Jeff Weber; +Cc: Xenomai Mailing List

On 07/30/2012 09:17 PM, Jeff Weber wrote:

> When I attempt to statically link my application, the linker complains the
> symbol
> __rtdm_muxid is multiply defined.:
> 
> c++  -o myapp myobjects  mylibs -static -lsqlite3 -lrtdm -L/usr/xenomai/lib
> -lpthread_rt -lxenomai -lpthread -lrt -ldl
> /usr/xenomai/lib/libpthread_rt.a(libpthread_rt_la-init.o):(.data+0x4):
> multiple definition of `__rtdm_muxid'
> /usr/xenomai/lib/librtdm.a(librtdm_la-init.o):(.data+0x0): first defined
> here
> 
> (I have pre-linked a subset of object files with the posix.wrappers script
> so I can control which application posix calls
> bind to the Xenomai __wrap_ calls.)


You can use the scripts/wrap-link.sh to automate this task
When using it, everything passed on its command line after -lpthread_rt 
is not wrapped.

> 
> Use of "nm" shows what the linker is complaining about:
> 
>  # nm --defined -o /usr/xenomai/lib/*.a | grep __rtdm_muxid
> /usr/xenomai/lib/libpthread_rt.a:libpthread_rt_la-init.o:00000004 D
> __rtdm_muxid
> /usr/xenomai/lib/librtdm.a:librtdm_la-init.o:00000000 D __rtdm_muxid
> 
> I have no link errors when dynamically linking my application.
> 
> Am I statically linking incorrectly, or is this a bug?


It is a bug. Try the following (untested) patch.

diff --git a/src/skins/posix/init.c b/src/skins/posix/init.c
index 7a338a0..332081a 100644
--- a/src/skins/posix/init.c
+++ b/src/skins/posix/init.c
@@ -33,8 +33,8 @@
 #include <asm/xenomai/bits/bind.h>
 
 int __pse51_muxid = -1;
-int __rtdm_muxid = -1;
-int __rtdm_fd_start = INT_MAX;
+int __pse51_rtdm_muxid = -1;
+int __pse51_rtdm_fd_start = INT_MAX;
 static int fork_handler_registered;
 
 int __wrap_pthread_setschedparam(pthread_t, int, const struct sched_param *);
@@ -63,8 +63,8 @@ void __init_posix_interface(void)
 	muxid = XENOMAI_SYSBIND(RTDM_SKIN_MAGIC,
 				XENOMAI_FEAT_DEP, XENOMAI_ABI_REV, NULL);
 	if (muxid > 0) {
-		__rtdm_muxid = __xn_mux_shifted_id(muxid);
-		__rtdm_fd_start = FD_SETSIZE - XENOMAI_SKINCALL0(__rtdm_muxid,
+		__pse51_rtdm_muxid = __xn_mux_shifted_id(muxid);
+		__pse51_rtdm_fd_start = FD_SETSIZE - XENOMAI_SKINCALL0(__pse51_rtdm_muxid,
 								 __rtdm_fdcount);
 	}
 
diff --git a/src/skins/posix/rtdm.c b/src/skins/posix/rtdm.c
index d944a03..aa23737 100644
--- a/src/skins/posix/rtdm.c
+++ b/src/skins/posix/rtdm.c
@@ -27,8 +27,8 @@
 #include <rtdm/rtdm.h>
 #include <rtdm/syscall.h>
 
-extern int __rtdm_muxid;
-extern int __rtdm_fd_start;
+extern int __pse51_rtdm_muxid;
+extern int __pse51_rtdm_fd_start;
 
 static inline int set_errno(int ret)
 {
@@ -50,12 +50,12 @@ int __wrap_open(const char *path, int oflag, ...)
 	if (strncmp(path, "/dev/", 5) == 0)
 		rtdm_path += 5;
 
-	ret = XENOMAI_SKINCALL2(__rtdm_muxid, __rtdm_open, rtdm_path, oflag);
+	ret = XENOMAI_SKINCALL2(__pse51_rtdm_muxid, __rtdm_open, rtdm_path, oflag);
 
 	pthread_setcanceltype(oldtype, NULL);
 
 	if (ret >= 0)
-		ret += __rtdm_fd_start;
+		ret += __pse51_rtdm_fd_start;
 	else if (ret == -ENODEV || ret == -ENOSYS) {
 		va_list ap;
 
@@ -65,7 +65,7 @@ int __wrap_open(const char *path, int oflag, ...)
 
 		va_end(ap);
 
-		if (ret >= __rtdm_fd_start) {
+		if (ret >= __pse51_rtdm_fd_start) {
 			__real_close(ret);
 			errno = EMFILE;
 			ret = -1;
@@ -82,15 +82,15 @@ int __wrap_socket(int protocol_family, int socket_type, int protocol)
 {
 	int ret;
 
-	ret = XENOMAI_SKINCALL3(__rtdm_muxid,
+	ret = XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 				__rtdm_socket,
 				protocol_family, socket_type, protocol);
 	if (ret >= 0)
-		ret += __rtdm_fd_start;
+		ret += __pse51_rtdm_fd_start;
 	else if (ret == -EAFNOSUPPORT || ret == -ENOSYS) {
 		ret = __real_socket(protocol_family, socket_type, protocol);
 
-		if (ret >= __rtdm_fd_start) {
+		if (ret >= __pse51_rtdm_fd_start) {
 			__real_close(ret);
 			errno = -EMFILE;
 			ret = -1;
@@ -108,14 +108,14 @@ int __wrap_close(int fd)
 	extern int __shm_close(int fd);
 	int ret;
 
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		int oldtype;
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		ret = set_errno(XENOMAI_SKINCALL1(__rtdm_muxid,
+		ret = set_errno(XENOMAI_SKINCALL1(__pse51_rtdm_muxid,
 						  __rtdm_close,
-						  fd - __rtdm_fd_start));
+						  fd - __pse51_rtdm_fd_start));
 
 		pthread_setcanceltype(oldtype, NULL);
 
@@ -138,10 +138,10 @@ int __wrap_ioctl(int fd, unsigned long int request, ...)
 	arg = va_arg(ap, void *);
 	va_end(ap);
 
-	if (fd >= __rtdm_fd_start)
-		return set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+	if (fd >= __pse51_rtdm_fd_start)
+		return set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						   __rtdm_ioctl,
-						   fd - __rtdm_fd_start,
+						   fd - __pse51_rtdm_fd_start,
 						   request, arg));
 	else
 		return __real_ioctl(fd, request, arg);
@@ -149,14 +149,14 @@ int __wrap_ioctl(int fd, unsigned long int request, ...)
 
 ssize_t __wrap_read(int fd, void *buf, size_t nbyte)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		int ret, oldtype;
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		ret = set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		ret = set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						  __rtdm_read,
-						  fd - __rtdm_fd_start,
+						  fd - __pse51_rtdm_fd_start,
 						  buf, nbyte));
 
 		pthread_setcanceltype(oldtype, NULL);
@@ -168,14 +168,14 @@ ssize_t __wrap_read(int fd, void *buf, size_t nbyte)
 
 ssize_t __wrap_write(int fd, const void *buf, size_t nbyte)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		int ret, oldtype;
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		ret = set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		ret = set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						  __rtdm_write,
-						  fd - __rtdm_fd_start,
+						  fd - __pse51_rtdm_fd_start,
 						  buf, nbyte));
 
 		pthread_setcanceltype(oldtype, NULL);
@@ -187,14 +187,14 @@ ssize_t __wrap_write(int fd, const void *buf, size_t nbyte)
 
 ssize_t __wrap_recvmsg(int fd, struct msghdr * msg, int flags)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		int ret, oldtype;
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		ret = set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		ret = set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						  __rtdm_recvmsg,
-						  fd - __rtdm_fd_start,
+						  fd - __pse51_rtdm_fd_start,
 						  msg, flags));
 
 		pthread_setcanceltype(oldtype, NULL);
@@ -206,14 +206,14 @@ ssize_t __wrap_recvmsg(int fd, struct msghdr * msg, int flags)
 
 ssize_t __wrap_sendmsg(int fd, const struct msghdr * msg, int flags)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		int ret, oldtype;
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		ret = set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		ret = set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						  __rtdm_sendmsg,
-						  fd - __rtdm_fd_start,
+						  fd - __pse51_rtdm_fd_start,
 						  msg, flags));
 
 		pthread_setcanceltype(oldtype, NULL);
@@ -226,7 +226,7 @@ ssize_t __wrap_sendmsg(int fd, const struct msghdr * msg, int flags)
 ssize_t __wrap_recvfrom(int fd, void *buf, size_t len, int flags,
 			struct sockaddr * from, socklen_t * fromlen)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct iovec iov = { buf, len };
 		struct msghdr msg =
 		    { from, (from != NULL) ? *fromlen : 0, &iov, 1, NULL, 0 };
@@ -234,9 +234,9 @@ ssize_t __wrap_recvfrom(int fd, void *buf, size_t len, int flags,
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		ret = XENOMAI_SKINCALL3(__rtdm_muxid,
+		ret = XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 					__rtdm_recvmsg,
-					fd - __rtdm_fd_start, &msg, flags);
+					fd - __pse51_rtdm_fd_start, &msg, flags);
 
 		pthread_setcanceltype(oldtype, NULL);
 
@@ -253,7 +253,7 @@ ssize_t __wrap_recvfrom(int fd, void *buf, size_t len, int flags,
 ssize_t __wrap_sendto(int fd, const void *buf, size_t len, int flags,
 		      const struct sockaddr * to, socklen_t tolen)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct iovec iov = { (void *)buf, len };
 		struct msghdr msg =
 		    { (struct sockaddr *)to, tolen, &iov, 1, NULL, 0 };
@@ -261,9 +261,9 @@ ssize_t __wrap_sendto(int fd, const void *buf, size_t len, int flags,
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		ret = set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		ret = set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						  __rtdm_sendmsg,
-						  fd - __rtdm_fd_start,
+						  fd - __pse51_rtdm_fd_start,
 						  &msg, flags));
 
 		pthread_setcanceltype(oldtype, NULL);
@@ -275,16 +275,16 @@ ssize_t __wrap_sendto(int fd, const void *buf, size_t len, int flags,
 
 ssize_t __wrap_recv(int fd, void *buf, size_t len, int flags)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct iovec iov = { buf, len };
 		struct msghdr msg = { NULL, 0, &iov, 1, NULL, 0 };
 		int ret, oldtype;
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		ret = set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		ret = set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						  __rtdm_recvmsg,
-						  fd - __rtdm_fd_start,
+						  fd - __pse51_rtdm_fd_start,
 						  &msg, flags));
 
 		pthread_setcanceltype(oldtype, NULL);
@@ -296,16 +296,16 @@ ssize_t __wrap_recv(int fd, void *buf, size_t len, int flags)
 
 ssize_t __wrap_send(int fd, const void *buf, size_t len, int flags)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct iovec iov = { (void *)buf, len };
 		struct msghdr msg = { NULL, 0, &iov, 1, NULL, 0 };
 		int ret, oldtype;
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		ret = set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		ret = set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						  __rtdm_sendmsg,
-						  fd - __rtdm_fd_start,
+						  fd - __pse51_rtdm_fd_start,
 						  &msg, flags));
 
 		pthread_setcanceltype(oldtype, NULL);
@@ -318,13 +318,13 @@ ssize_t __wrap_send(int fd, const void *buf, size_t len, int flags)
 int __wrap_getsockopt(int fd, int level, int optname, void *optval,
 		      socklen_t * optlen)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct _rtdm_getsockopt_args args =
 		    { level, optname, optval, optlen };
 
-		return set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		return set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						   __rtdm_ioctl,
-						   fd - __rtdm_fd_start,
+						   fd - __pse51_rtdm_fd_start,
 						   _RTIOC_GETSOCKOPT, &args));
 	} else
 		return __real_getsockopt(fd, level, optname, optval, optlen);
@@ -333,13 +333,13 @@ int __wrap_getsockopt(int fd, int level, int optname, void *optval,
 int __wrap_setsockopt(int fd, int level, int optname, const void *optval,
 		      socklen_t optlen)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct _rtdm_setsockopt_args args =
 		    { level, optname, (void *)optval, optlen };
 
-		return set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		return set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						   __rtdm_ioctl,
-						   fd - __rtdm_fd_start,
+						   fd - __pse51_rtdm_fd_start,
 						   _RTIOC_SETSOCKOPT, &args));
 	} else
 		return __real_setsockopt(fd, level, optname, optval, optlen);
@@ -347,12 +347,12 @@ int __wrap_setsockopt(int fd, int level, int optname, const void *optval,
 
 int __wrap_bind(int fd, const struct sockaddr *my_addr, socklen_t addrlen)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct _rtdm_setsockaddr_args args = { my_addr, addrlen };
 
-		return set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		return set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						   __rtdm_ioctl,
-						   fd - __rtdm_fd_start,
+						   fd - __pse51_rtdm_fd_start,
 						   _RTIOC_BIND, &args));
 	} else
 		return __real_bind(fd, my_addr, addrlen);
@@ -360,15 +360,15 @@ int __wrap_bind(int fd, const struct sockaddr *my_addr, socklen_t addrlen)
 
 int __wrap_connect(int fd, const struct sockaddr *serv_addr, socklen_t addrlen)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct _rtdm_setsockaddr_args args = { serv_addr, addrlen };
 		int ret, oldtype;
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		ret = set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		ret = set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						  __rtdm_ioctl,
-						  fd - __rtdm_fd_start,
+						  fd - __pse51_rtdm_fd_start,
 						  _RTIOC_CONNECT, &args));
 
 		pthread_setcanceltype(oldtype, NULL);
@@ -380,10 +380,10 @@ int __wrap_connect(int fd, const struct sockaddr *serv_addr, socklen_t addrlen)
 
 int __wrap_listen(int fd, int backlog)
 {
-	if (fd >= __rtdm_fd_start) {
-		return set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+	if (fd >= __pse51_rtdm_fd_start) {
+		return set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						   __rtdm_ioctl,
-						   fd - __rtdm_fd_start,
+						   fd - __pse51_rtdm_fd_start,
 						   _RTIOC_LISTEN, backlog));
 	} else
 		return __real_listen(fd, backlog);
@@ -391,15 +391,15 @@ int __wrap_listen(int fd, int backlog)
 
 int __wrap_accept(int fd, struct sockaddr *addr, socklen_t * addrlen)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct _rtdm_getsockaddr_args args = { addr, addrlen };
 		int oldtype;
 
 		pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype);
 
-		fd = XENOMAI_SKINCALL3(__rtdm_muxid,
+		fd = XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 				       __rtdm_ioctl,
-				       fd - __rtdm_fd_start,
+				       fd - __pse51_rtdm_fd_start,
 				       _RTIOC_ACCEPT, &args);
 
 		pthread_setcanceltype(oldtype, NULL);
@@ -407,11 +407,11 @@ int __wrap_accept(int fd, struct sockaddr *addr, socklen_t * addrlen)
 		if (fd < 0)
 			return set_errno(fd);
 
-		return fd + __rtdm_fd_start;
+		return fd + __pse51_rtdm_fd_start;
 	} else {
 		fd = __real_accept(fd, addr, addrlen);
 
-		if (fd >= __rtdm_fd_start) {
+		if (fd >= __pse51_rtdm_fd_start) {
 			__real_close(fd);
 			errno = EMFILE;
 			fd = -1;
@@ -423,12 +423,12 @@ int __wrap_accept(int fd, struct sockaddr *addr, socklen_t * addrlen)
 
 int __wrap_getsockname(int fd, struct sockaddr *name, socklen_t * namelen)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct _rtdm_getsockaddr_args args = { name, namelen };
 
-		return set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		return set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						   __rtdm_ioctl,
-						   fd - __rtdm_fd_start,
+						   fd - __pse51_rtdm_fd_start,
 						   _RTIOC_GETSOCKNAME, &args));
 	} else
 		return __real_getsockname(fd, name, namelen);
@@ -436,12 +436,12 @@ int __wrap_getsockname(int fd, struct sockaddr *name, socklen_t * namelen)
 
 int __wrap_getpeername(int fd, struct sockaddr *name, socklen_t * namelen)
 {
-	if (fd >= __rtdm_fd_start) {
+	if (fd >= __pse51_rtdm_fd_start) {
 		struct _rtdm_getsockaddr_args args = { name, namelen };
 
-		return set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+		return set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						   __rtdm_ioctl,
-						   fd - __rtdm_fd_start,
+						   fd - __pse51_rtdm_fd_start,
 						   _RTIOC_GETPEERNAME, &args));
 	} else
 		return __real_getpeername(fd, name, namelen);
@@ -449,10 +449,10 @@ int __wrap_getpeername(int fd, struct sockaddr *name, socklen_t * namelen)
 
 int __wrap_shutdown(int fd, int how)
 {
-	if (fd >= __rtdm_fd_start) {
-		return set_errno(XENOMAI_SKINCALL3(__rtdm_muxid,
+	if (fd >= __pse51_rtdm_fd_start) {
+		return set_errno(XENOMAI_SKINCALL3(__pse51_rtdm_muxid,
 						   __rtdm_ioctl,
-						   fd - __rtdm_fd_start,
+						   fd - __pse51_rtdm_fd_start,
 						   _RTIOC_SHUTDOWN, how));
 	} else
 		return __real_shutdown(fd, how);


-- 
                                                                Gilles.


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-07-30 19:23 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-30 19:17 [Xenomai] __rtdm_muxid symbol multipy defined in static libs Jeff Weber
2012-07-30 19:23 ` Gilles Chanteperdrix

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.