linux_socket.c (276512) | linux_socket.c (283413) |
---|---|
1/*- 2 * Copyright (c) 1995 S��ren Schmidt 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 13 unchanged lines hidden (view full) --- 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1995 S��ren Schmidt 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 13 unchanged lines hidden (view full) --- 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#include <sys/cdefs.h> |
30__FBSDID("$FreeBSD: head/sys/compat/linux/linux_socket.c 276512 2015-01-01 20:53:38Z dchagin $"); | 30__FBSDID("$FreeBSD: head/sys/compat/linux/linux_socket.c 283413 2015-05-24 15:41:27Z dchagin $"); |
31 32/* XXX we use functions that might not exist. */ 33#include "opt_compat.h" 34#include "opt_inet6.h" 35 36#include <sys/param.h> 37#include <sys/proc.h> 38#include <sys/systm.h> --- 541 unchanged lines hidden (view full) --- 580 error = kern_getsockopt(td, s, IPPROTO_IP, IP_HDRINCL, 581 &optval, UIO_SYSSPACE, &size_val); 582 if (error) 583 return (error); 584 585 return (optval == 0); 586} 587 | 31 32/* XXX we use functions that might not exist. */ 33#include "opt_compat.h" 34#include "opt_inet6.h" 35 36#include <sys/param.h> 37#include <sys/proc.h> 38#include <sys/systm.h> --- 541 unchanged lines hidden (view full) --- 580 error = kern_getsockopt(td, s, IPPROTO_IP, IP_HDRINCL, 581 &optval, UIO_SYSSPACE, &size_val); 582 if (error) 583 return (error); 584 585 return (optval == 0); 586} 587 |
588struct linux_sendto_args { 589 int s; 590 l_uintptr_t msg; 591 int len; 592 int flags; 593 l_uintptr_t to; 594 int tolen; 595}; 596 | |
597/* 598 * Updated sendto() when IP_HDRINCL is set: 599 * tweak endian-dependent fields in the IP packet. 600 */ 601static int 602linux_sendto_hdrincl(struct thread *td, struct linux_sendto_args *linux_args) 603{ 604/* --- 35 unchanged lines hidden (view full) --- 640 aiov[0].iov_len = linux_args->len; 641 error = linux_sendit(td, linux_args->s, &msg, linux_args->flags, 642 NULL, UIO_SYSSPACE); 643goout: 644 free(packet, M_TEMP); 645 return (error); 646} 647 | 588/* 589 * Updated sendto() when IP_HDRINCL is set: 590 * tweak endian-dependent fields in the IP packet. 591 */ 592static int 593linux_sendto_hdrincl(struct thread *td, struct linux_sendto_args *linux_args) 594{ 595/* --- 35 unchanged lines hidden (view full) --- 631 aiov[0].iov_len = linux_args->len; 632 error = linux_sendit(td, linux_args->s, &msg, linux_args->flags, 633 NULL, UIO_SYSSPACE); 634goout: 635 free(packet, M_TEMP); 636 return (error); 637} 638 |
648struct linux_socket_args { 649 int domain; 650 int type; 651 int protocol; 652}; 653 654static int | 639int |
655linux_socket(struct thread *td, struct linux_socket_args *args) 656{ 657 struct socket_args /* { 658 int domain; 659 int type; 660 int protocol; 661 } */ bsd_args; 662 int retval_socket, socket_flags; --- 47 unchanged lines hidden (view full) --- 710 &v6only, UIO_SYSSPACE, sizeof(v6only)); 711 } 712#endif 713 714out: 715 return (retval_socket); 716} 717 | 640linux_socket(struct thread *td, struct linux_socket_args *args) 641{ 642 struct socket_args /* { 643 int domain; 644 int type; 645 int protocol; 646 } */ bsd_args; 647 int retval_socket, socket_flags; --- 47 unchanged lines hidden (view full) --- 695 &v6only, UIO_SYSSPACE, sizeof(v6only)); 696 } 697#endif 698 699out: 700 return (retval_socket); 701} 702 |
718struct linux_bind_args { 719 int s; 720 l_uintptr_t name; 721 int namelen; 722}; 723 724static int | 703int |
725linux_bind(struct thread *td, struct linux_bind_args *args) 726{ 727 struct sockaddr *sa; 728 int error; 729 730 error = linux_getsockaddr(&sa, PTRIN(args->name), 731 args->namelen); 732 if (error) 733 return (error); 734 735 error = kern_bindat(td, AT_FDCWD, args->s, sa); 736 free(sa, M_SONAME); 737 if (error == EADDRNOTAVAIL && args->namelen != sizeof(struct sockaddr_in)) 738 return (EINVAL); 739 return (error); 740} 741 | 704linux_bind(struct thread *td, struct linux_bind_args *args) 705{ 706 struct sockaddr *sa; 707 int error; 708 709 error = linux_getsockaddr(&sa, PTRIN(args->name), 710 args->namelen); 711 if (error) 712 return (error); 713 714 error = kern_bindat(td, AT_FDCWD, args->s, sa); 715 free(sa, M_SONAME); 716 if (error == EADDRNOTAVAIL && args->namelen != sizeof(struct sockaddr_in)) 717 return (EINVAL); 718 return (error); 719} 720 |
742struct linux_connect_args { 743 int s; 744 l_uintptr_t name; 745 int namelen; 746}; 747int linux_connect(struct thread *, struct linux_connect_args *); 748 | |
749int 750linux_connect(struct thread *td, struct linux_connect_args *args) 751{ 752 cap_rights_t rights; 753 struct socket *so; 754 struct sockaddr *sa; 755 u_int fflag; 756 int error; --- 28 unchanged lines hidden (view full) --- 785 so->so_emuldata = (void *)1; 786 SOCK_UNLOCK(so); 787 } 788 fputsock(so); 789 } 790 return (error); 791} 792 | 721int 722linux_connect(struct thread *td, struct linux_connect_args *args) 723{ 724 cap_rights_t rights; 725 struct socket *so; 726 struct sockaddr *sa; 727 u_int fflag; 728 int error; --- 28 unchanged lines hidden (view full) --- 757 so->so_emuldata = (void *)1; 758 SOCK_UNLOCK(so); 759 } 760 fputsock(so); 761 } 762 return (error); 763} 764 |
793struct linux_listen_args { 794 int s; 795 int backlog; 796}; 797 798static int | 765int |
799linux_listen(struct thread *td, struct linux_listen_args *args) 800{ 801 struct listen_args /* { 802 int s; 803 int backlog; 804 } */ bsd_args; 805 806 bsd_args.s = args->s; --- 44 unchanged lines hidden (view full) --- 851out: 852 if (error) { 853 (void)kern_close(td, td->td_retval[0]); 854 td->td_retval[0] = 0; 855 } 856 return (error); 857} 858 | 766linux_listen(struct thread *td, struct linux_listen_args *args) 767{ 768 struct listen_args /* { 769 int s; 770 int backlog; 771 } */ bsd_args; 772 773 bsd_args.s = args->s; --- 44 unchanged lines hidden (view full) --- 818out: 819 if (error) { 820 (void)kern_close(td, td->td_retval[0]); 821 td->td_retval[0] = 0; 822 } 823 return (error); 824} 825 |
859struct linux_accept_args { 860 int s; 861 l_uintptr_t addr; 862 l_uintptr_t namelen; 863}; 864 865static int | 826int |
866linux_accept(struct thread *td, struct linux_accept_args *args) 867{ 868 869 return (linux_accept_common(td, args->s, args->addr, 870 args->namelen, 0)); 871} 872 | 827linux_accept(struct thread *td, struct linux_accept_args *args) 828{ 829 830 return (linux_accept_common(td, args->s, args->addr, 831 args->namelen, 0)); 832} 833 |
873struct linux_accept4_args { 874 int s; 875 l_uintptr_t addr; 876 l_uintptr_t namelen; 877 int flags; 878}; 879 880static int | 834int |
881linux_accept4(struct thread *td, struct linux_accept4_args *args) 882{ 883 884 return (linux_accept_common(td, args->s, args->addr, 885 args->namelen, args->flags)); 886} 887 | 835linux_accept4(struct thread *td, struct linux_accept4_args *args) 836{ 837 838 return (linux_accept_common(td, args->s, args->addr, 839 args->namelen, args->flags)); 840} 841 |
888struct linux_getsockname_args { 889 int s; 890 l_uintptr_t addr; 891 l_uintptr_t namelen; 892}; 893 894static int | 842int |
895linux_getsockname(struct thread *td, struct linux_getsockname_args *args) 896{ 897 struct getsockname_args /* { 898 int fdes; 899 struct sockaddr * __restrict asa; 900 socklen_t * __restrict alen; 901 } */ bsd_args; 902 int error; --- 7 unchanged lines hidden (view full) --- 910 if (error) 911 return (error); 912 error = linux_sa_put(PTRIN(args->addr)); 913 if (error) 914 return (error); 915 return (0); 916} 917 | 843linux_getsockname(struct thread *td, struct linux_getsockname_args *args) 844{ 845 struct getsockname_args /* { 846 int fdes; 847 struct sockaddr * __restrict asa; 848 socklen_t * __restrict alen; 849 } */ bsd_args; 850 int error; --- 7 unchanged lines hidden (view full) --- 858 if (error) 859 return (error); 860 error = linux_sa_put(PTRIN(args->addr)); 861 if (error) 862 return (error); 863 return (0); 864} 865 |
918struct linux_getpeername_args { 919 int s; 920 l_uintptr_t addr; 921 l_uintptr_t namelen; 922}; 923 924static int | 866int |
925linux_getpeername(struct thread *td, struct linux_getpeername_args *args) 926{ 927 struct getpeername_args /* { 928 int fdes; 929 caddr_t asa; 930 int *alen; 931 } */ bsd_args; 932 int error; --- 6 unchanged lines hidden (view full) --- 939 if (error) 940 return (error); 941 error = linux_sa_put(PTRIN(args->addr)); 942 if (error) 943 return (error); 944 return (0); 945} 946 | 867linux_getpeername(struct thread *td, struct linux_getpeername_args *args) 868{ 869 struct getpeername_args /* { 870 int fdes; 871 caddr_t asa; 872 int *alen; 873 } */ bsd_args; 874 int error; --- 6 unchanged lines hidden (view full) --- 881 if (error) 882 return (error); 883 error = linux_sa_put(PTRIN(args->addr)); 884 if (error) 885 return (error); 886 return (0); 887} 888 |
947struct linux_socketpair_args { 948 int domain; 949 int type; 950 int protocol; 951 l_uintptr_t rsv; 952}; 953 954static int | 889int |
955linux_socketpair(struct thread *td, struct linux_socketpair_args *args) 956{ 957 struct socketpair_args /* { 958 int domain; 959 int type; 960 int protocol; 961 int *rsv; 962 } */ bsd_args; --- 39 unchanged lines hidden (view full) --- 1002out: 1003 if (error) { 1004 (void)kern_close(td, sv[0]); 1005 (void)kern_close(td, sv[1]); 1006 } 1007 return (error); 1008} 1009 | 890linux_socketpair(struct thread *td, struct linux_socketpair_args *args) 891{ 892 struct socketpair_args /* { 893 int domain; 894 int type; 895 int protocol; 896 int *rsv; 897 } */ bsd_args; --- 39 unchanged lines hidden (view full) --- 937out: 938 if (error) { 939 (void)kern_close(td, sv[0]); 940 (void)kern_close(td, sv[1]); 941 } 942 return (error); 943} 944 |
945#if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) |
|
1010struct linux_send_args { 1011 int s; 1012 l_uintptr_t msg; 1013 int len; 1014 int flags; 1015}; 1016 1017static int --- 39 unchanged lines hidden (view full) --- 1057 bsd_args.s = args->s; 1058 bsd_args.buf = (caddr_t)PTRIN(args->msg); 1059 bsd_args.len = args->len; 1060 bsd_args.flags = linux_to_bsd_msg_flags(args->flags); 1061 bsd_args.from = NULL; 1062 bsd_args.fromlenaddr = 0; 1063 return (sys_recvfrom(td, &bsd_args)); 1064} | 946struct linux_send_args { 947 int s; 948 l_uintptr_t msg; 949 int len; 950 int flags; 951}; 952 953static int --- 39 unchanged lines hidden (view full) --- 993 bsd_args.s = args->s; 994 bsd_args.buf = (caddr_t)PTRIN(args->msg); 995 bsd_args.len = args->len; 996 bsd_args.flags = linux_to_bsd_msg_flags(args->flags); 997 bsd_args.from = NULL; 998 bsd_args.fromlenaddr = 0; 999 return (sys_recvfrom(td, &bsd_args)); 1000} |
1001#endif /* __i386__ || (__amd64__ && COMPAT_LINUX32) */ |
|
1065 | 1002 |
1066static int | 1003int |
1067linux_sendto(struct thread *td, struct linux_sendto_args *args) 1068{ 1069 struct msghdr msg; 1070 struct iovec aiov; 1071 int error; 1072 1073 if (linux_check_hdrincl(td, args->s) == 0) 1074 /* IP_HDRINCL set, tweak the packet before sending */ --- 7 unchanged lines hidden (view full) --- 1082 msg.msg_flags = 0; 1083 aiov.iov_base = PTRIN(args->msg); 1084 aiov.iov_len = args->len; 1085 error = linux_sendit(td, args->s, &msg, args->flags, NULL, 1086 UIO_USERSPACE); 1087 return (error); 1088} 1089 | 1004linux_sendto(struct thread *td, struct linux_sendto_args *args) 1005{ 1006 struct msghdr msg; 1007 struct iovec aiov; 1008 int error; 1009 1010 if (linux_check_hdrincl(td, args->s) == 0) 1011 /* IP_HDRINCL set, tweak the packet before sending */ --- 7 unchanged lines hidden (view full) --- 1019 msg.msg_flags = 0; 1020 aiov.iov_base = PTRIN(args->msg); 1021 aiov.iov_len = args->len; 1022 error = linux_sendit(td, args->s, &msg, args->flags, NULL, 1023 UIO_USERSPACE); 1024 return (error); 1025} 1026 |
1090struct linux_recvfrom_args { 1091 int s; 1092 l_uintptr_t buf; 1093 int len; 1094 int flags; 1095 l_uintptr_t from; 1096 l_uintptr_t fromlen; 1097}; 1098 1099static int | 1027int |
1100linux_recvfrom(struct thread *td, struct linux_recvfrom_args *args) 1101{ 1102 struct recvfrom_args /* { 1103 int s; 1104 caddr_t buf; 1105 size_t len; 1106 int flags; 1107 struct sockaddr * __restrict from; --- 23 unchanged lines hidden (view full) --- 1131 error = linux_sa_put((struct osockaddr *) 1132 PTRIN(args->from)); 1133 if (error) 1134 return (error); 1135 } 1136 return (0); 1137} 1138 | 1028linux_recvfrom(struct thread *td, struct linux_recvfrom_args *args) 1029{ 1030 struct recvfrom_args /* { 1031 int s; 1032 caddr_t buf; 1033 size_t len; 1034 int flags; 1035 struct sockaddr * __restrict from; --- 23 unchanged lines hidden (view full) --- 1059 error = linux_sa_put((struct osockaddr *) 1060 PTRIN(args->from)); 1061 if (error) 1062 return (error); 1063 } 1064 return (0); 1065} 1066 |
1139struct linux_sendmsg_args { 1140 int s; 1141 l_uintptr_t msg; 1142 int flags; 1143}; 1144 1145static int | 1067int |
1146linux_sendmsg(struct thread *td, struct linux_sendmsg_args *args) 1147{ 1148 struct cmsghdr *cmsg; 1149 struct cmsgcred cmcred; 1150 struct mbuf *control; 1151 struct msghdr msg; 1152 struct l_cmsghdr linux_cmsg; 1153 struct l_cmsghdr *ptr_cmsg; --- 120 unchanged lines hidden (view full) --- 1274 1275bad: 1276 free(iov, M_IOV); 1277 if (cmsg) 1278 free(cmsg, M_TEMP); 1279 return (error); 1280} 1281 | 1068linux_sendmsg(struct thread *td, struct linux_sendmsg_args *args) 1069{ 1070 struct cmsghdr *cmsg; 1071 struct cmsgcred cmcred; 1072 struct mbuf *control; 1073 struct msghdr msg; 1074 struct l_cmsghdr linux_cmsg; 1075 struct l_cmsghdr *ptr_cmsg; --- 120 unchanged lines hidden (view full) --- 1196 1197bad: 1198 free(iov, M_IOV); 1199 if (cmsg) 1200 free(cmsg, M_TEMP); 1201 return (error); 1202} 1203 |
1282struct linux_recvmsg_args { 1283 int s; 1284 l_uintptr_t msg; 1285 int flags; 1286}; 1287 1288static int | 1204int |
1289linux_recvmsg(struct thread *td, struct linux_recvmsg_args *args) 1290{ 1291 struct cmsghdr *cm; 1292 struct cmsgcred *cmcred; 1293 struct msghdr msg; 1294 struct l_cmsghdr *linux_cmsg = NULL; 1295 struct l_ucred linux_ucred; 1296 socklen_t datalen, outlen; --- 150 unchanged lines hidden (view full) --- 1447bad: 1448 free(iov, M_IOV); 1449 m_freem(control); 1450 free(linux_cmsg, M_TEMP); 1451 1452 return (error); 1453} 1454 | 1205linux_recvmsg(struct thread *td, struct linux_recvmsg_args *args) 1206{ 1207 struct cmsghdr *cm; 1208 struct cmsgcred *cmcred; 1209 struct msghdr msg; 1210 struct l_cmsghdr *linux_cmsg = NULL; 1211 struct l_ucred linux_ucred; 1212 socklen_t datalen, outlen; --- 150 unchanged lines hidden (view full) --- 1363bad: 1364 free(iov, M_IOV); 1365 m_freem(control); 1366 free(linux_cmsg, M_TEMP); 1367 1368 return (error); 1369} 1370 |
1455struct linux_shutdown_args { 1456 int s; 1457 int how; 1458}; 1459 1460static int | 1371int |
1461linux_shutdown(struct thread *td, struct linux_shutdown_args *args) 1462{ 1463 struct shutdown_args /* { 1464 int s; 1465 int how; 1466 } */ bsd_args; 1467 1468 bsd_args.s = args->s; 1469 bsd_args.how = args->how; 1470 return (sys_shutdown(td, &bsd_args)); 1471} 1472 | 1372linux_shutdown(struct thread *td, struct linux_shutdown_args *args) 1373{ 1374 struct shutdown_args /* { 1375 int s; 1376 int how; 1377 } */ bsd_args; 1378 1379 bsd_args.s = args->s; 1380 bsd_args.how = args->how; 1381 return (sys_shutdown(td, &bsd_args)); 1382} 1383 |
1473struct linux_setsockopt_args { 1474 int s; 1475 int level; 1476 int optname; 1477 l_uintptr_t optval; 1478 int optlen; 1479}; 1480 1481static int | 1384int |
1482linux_setsockopt(struct thread *td, struct linux_setsockopt_args *args) 1483{ 1484 struct setsockopt_args /* { 1485 int s; 1486 int level; 1487 int name; 1488 caddr_t val; 1489 int valsize; --- 48 unchanged lines hidden (view full) --- 1538 error = sys_setsockopt(td, &bsd_args); 1539 bsd_to_linux_sockaddr((struct sockaddr *)bsd_args.val); 1540 } else 1541 error = sys_setsockopt(td, &bsd_args); 1542 1543 return (error); 1544} 1545 | 1385linux_setsockopt(struct thread *td, struct linux_setsockopt_args *args) 1386{ 1387 struct setsockopt_args /* { 1388 int s; 1389 int level; 1390 int name; 1391 caddr_t val; 1392 int valsize; --- 48 unchanged lines hidden (view full) --- 1441 error = sys_setsockopt(td, &bsd_args); 1442 bsd_to_linux_sockaddr((struct sockaddr *)bsd_args.val); 1443 } else 1444 error = sys_setsockopt(td, &bsd_args); 1445 1446 return (error); 1447} 1448 |
1546struct linux_getsockopt_args { 1547 int s; 1548 int level; 1549 int optname; 1550 l_uintptr_t optval; 1551 l_uintptr_t optlen; 1552}; 1553 1554static int | 1449int |
1555linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args) 1556{ 1557 struct getsockopt_args /* { 1558 int s; 1559 int level; 1560 int name; 1561 caddr_t val; 1562 int *avalsize; --- 86 unchanged lines hidden (view full) --- 1649 LINUX_AL(6) /* recvfrom */, LINUX_AL(2) /* shutdown */, 1650 LINUX_AL(5) /* setsockopt */, LINUX_AL(5) /* getsockopt */, 1651 LINUX_AL(3) /* sendmsg */, LINUX_AL(3) /* recvmsg */, 1652 LINUX_AL(4) /* accept4 */ 1653}; 1654 1655#define LINUX_AL_SIZE sizeof(lxs_args) / sizeof(lxs_args[0]) - 1 1656 | 1450linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args) 1451{ 1452 struct getsockopt_args /* { 1453 int s; 1454 int level; 1455 int name; 1456 caddr_t val; 1457 int *avalsize; --- 86 unchanged lines hidden (view full) --- 1544 LINUX_AL(6) /* recvfrom */, LINUX_AL(2) /* shutdown */, 1545 LINUX_AL(5) /* setsockopt */, LINUX_AL(5) /* getsockopt */, 1546 LINUX_AL(3) /* sendmsg */, LINUX_AL(3) /* recvmsg */, 1547 LINUX_AL(4) /* accept4 */ 1548}; 1549 1550#define LINUX_AL_SIZE sizeof(lxs_args) / sizeof(lxs_args[0]) - 1 1551 |
1552#if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) |
|
1657int 1658linux_socketcall(struct thread *td, struct linux_socketcall_args *args) 1659{ 1660 l_ulong a[6]; 1661 void *arg; 1662 int error; 1663 1664 if (args->what < LINUX_SOCKET || args->what > LINUX_AL_SIZE) --- 40 unchanged lines hidden (view full) --- 1705 return (linux_recvmsg(td, arg)); 1706 case LINUX_ACCEPT4: 1707 return (linux_accept4(td, arg)); 1708 } 1709 1710 uprintf("LINUX: 'socket' typ=%d not implemented\n", args->what); 1711 return (ENOSYS); 1712} | 1553int 1554linux_socketcall(struct thread *td, struct linux_socketcall_args *args) 1555{ 1556 l_ulong a[6]; 1557 void *arg; 1558 int error; 1559 1560 if (args->what < LINUX_SOCKET || args->what > LINUX_AL_SIZE) --- 40 unchanged lines hidden (view full) --- 1601 return (linux_recvmsg(td, arg)); 1602 case LINUX_ACCEPT4: 1603 return (linux_accept4(td, arg)); 1604 } 1605 1606 uprintf("LINUX: 'socket' typ=%d not implemented\n", args->what); 1607 return (ENOSYS); 1608} |
1609#endif /* __i386__ || (__amd64__ && COMPAT_LINUX32) */ |
|