libthr does not obey WITHOUT_SYSCALL_COMPAT

David Xu davidxu at freebsd.org
Sun Mar 8 22:11:06 PDT 2009


Daniel Eischen wrote:
> On Mon, 9 Mar 2009, David Xu wrote:
> 
>> Pawel Worach wrote:
>>> Hi,
>>>
>>> If libc is built using WITHOUT_SYSCALL_COMPAT applications linked with
>>> libthr end up having unresolved symbols since libthr references
>>> __fcntl_compat unconditionally.
>>> Here is a patch to make libthr also obey WITHOUT_SYSCALL_COMPAT
>>> http://www.vlakno.cz/~pwo/libthr.diff
>>>
>>> Regards
>>
>> Committed!
> 
> I never got around to replying to this...
> 
> I don't quite understand why __fcntl_compat is there.  We have
> F_GETFD, F_SETFD, F_DUPFD, F_DUP2FD, F_GETFL, F_SETFL, F_GETOWN,
> and F_SETOWN according to fcntl(2).  But thr_syscalls.c only
> handles F_DUPFD, F_SETFD, F_SETFL, F_GETFD, and F_GETFL, leaving
> F_DUP2FD, F_GETOWN, and F_SETOWN to be handled by the default
> case.  And the default case does nothing now if WITHOUT_SYSCALL_COMPAT
> is defined.  So how do F_DUP2FD, F_GETOWN, and F_SETOWN get
> handled?
> 
> Do we really need to call __sys_fcntl_compat() from libthr?
> When did the ABI change, before or after libc.so.7?
> 

I don't know when it appeared. Would this patch eliminate the shit ?

Index: thr_syscalls.c
===================================================================
--- thr_syscalls.c	(revision 189549)
+++ thr_syscalls.c	(working copy)
@@ -258,7 +258,7 @@
  #ifdef SYSCALL_COMPAT
  		ret = __fcntl_compat(fd, cmd, va_arg(ap, void *));
  #else
-		ret = EOPNOTSUPP;
+		ret = __sys_fcntl(fd, cmd, va_arg(ap, void *));
  #endif
  	}
  	va_end(ap);


More information about the freebsd-threads mailing list