OpenBSD support.
This commit is contained in:
parent
cea10000c5
commit
52e6164443
7 changed files with 35 additions and 33 deletions
2
bin/9l
2
bin/9l
|
|
@ -169,7 +169,7 @@ case "$tag" in
|
||||||
*OpenBSD*)
|
*OpenBSD*)
|
||||||
ld=gcc
|
ld=gcc
|
||||||
userpath=true
|
userpath=true
|
||||||
extralibs="$extralibs -lutil -lpthread"
|
extralibs="$extralibs -lutil"
|
||||||
;;
|
;;
|
||||||
*FreeBSD*)
|
*FreeBSD*)
|
||||||
ld=gcc
|
ld=gcc
|
||||||
|
|
|
||||||
|
|
@ -638,7 +638,7 @@ extern void freenetconninfo(NetConnInfo*);
|
||||||
#define DMWRITE 0x2 /* mode bit for write permission */
|
#define DMWRITE 0x2 /* mode bit for write permission */
|
||||||
#define DMEXEC 0x1 /* mode bit for execute permission */
|
#define DMEXEC 0x1 /* mode bit for execute permission */
|
||||||
|
|
||||||
#if defined(__FreeBSD__)
|
#ifdef RFMEM /* FreeBSD, OpenBSD */
|
||||||
#undef RFFDG
|
#undef RFFDG
|
||||||
#undef RFNOTEG
|
#undef RFNOTEG
|
||||||
#undef RFPROC
|
#undef RFPROC
|
||||||
|
|
@ -832,6 +832,10 @@ extern int post9pservice(int, char*);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
#define sched_yield() syscall(302) /* what is this? */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* command line */
|
/* command line */
|
||||||
extern char *argv0;
|
extern char *argv0;
|
||||||
extern void __fixargv0(void);
|
extern void __fixargv0(void);
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,10 @@ typedef long p9jmp_buf[sizeof(sigjmp_buf)/sizeof(long)];
|
||||||
# undef _NEEDUSHORT
|
# undef _NEEDUSHORT
|
||||||
# undef _NEEDUINT
|
# undef _NEEDUINT
|
||||||
# undef _NEEDULONG
|
# undef _NEEDULONG
|
||||||
# undef PLAN9PORT_USING_PTHREADS
|
#elif defined(__OpenBSD__)
|
||||||
|
# undef _NEEDUSHORT
|
||||||
|
# undef _NEEDUINT
|
||||||
|
# undef _NEEDULONG
|
||||||
#else
|
#else
|
||||||
/* No idea what system this is -- try some defaults */
|
/* No idea what system this is -- try some defaults */
|
||||||
# include <pthread.h>
|
# include <pthread.h>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
../bin/mk: mkmk.sh
|
../bin/mk: mkmk.sh
|
||||||
SYSNAME=`uname` export SYSNAME; \
|
SYSNAME=`uname` export SYSNAME; \
|
||||||
OBJTYPE=`uname -m | sed 's;i.86;386;; s;amd64;x86_64;; s;/.*;;; s; ;;g; s/PowerMacintosh/power/; s/ppc64/power/g; s/ppc/power/g'` export OBJTYPE; \
|
OBJTYPE=`uname -m | sed 's;i.86;386;; s;amd64;x86_64;; s;/.*;;; s; ;;g; s/PowerMacintosh/power/; s/macppc/power/g; s/ppc64/power/g; s/ppc/power/g'` export OBJTYPE; \
|
||||||
PATH=`pwd`/../bin:$$PATH export PATH; \
|
PATH=`pwd`/../bin:$$PATH export PATH; \
|
||||||
PLAN9=`pwd`/.. export PLAN9; \
|
PLAN9=`pwd`/.. export PLAN9; \
|
||||||
sh -x mkmk.sh
|
sh -x mkmk.sh
|
||||||
|
|
|
||||||
|
|
@ -6,20 +6,15 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
typedef struct Sendfd Sendfd;
|
|
||||||
struct Sendfd {
|
|
||||||
struct cmsghdr cmsg;
|
|
||||||
int fd;
|
|
||||||
};
|
|
||||||
|
|
||||||
int
|
int
|
||||||
sendfd(int s, int fd)
|
sendfd(int s, int fd)
|
||||||
{
|
{
|
||||||
char buf[1];
|
char buf[1];
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
struct msghdr msg;
|
struct msghdr msg;
|
||||||
|
struct cmsghdr *cmsg;
|
||||||
int n;
|
int n;
|
||||||
Sendfd sfd;
|
char cms[CMSG_SPACE(sizeof(int))];
|
||||||
|
|
||||||
buf[0] = 0;
|
buf[0] = 0;
|
||||||
iov.iov_base = buf;
|
iov.iov_base = buf;
|
||||||
|
|
@ -28,14 +23,14 @@ sendfd(int s, int fd)
|
||||||
memset(&msg, 0, sizeof msg);
|
memset(&msg, 0, sizeof msg);
|
||||||
msg.msg_iov = &iov;
|
msg.msg_iov = &iov;
|
||||||
msg.msg_iovlen = 1;
|
msg.msg_iovlen = 1;
|
||||||
|
msg.msg_control = (caddr_t)cms;
|
||||||
|
msg.msg_controllen = CMSG_LEN(sizeof(int));
|
||||||
|
|
||||||
sfd.cmsg.cmsg_len = sizeof sfd;
|
cmsg = CMSG_FIRSTHDR(&msg);
|
||||||
sfd.cmsg.cmsg_level = SOL_SOCKET;
|
cmsg->cmsg_len = CMSG_LEN(sizeof(int));
|
||||||
sfd.cmsg.cmsg_type = SCM_RIGHTS;
|
cmsg->cmsg_level = SOL_SOCKET;
|
||||||
sfd.fd = fd;
|
cmsg->cmsg_type = SCM_RIGHTS;
|
||||||
|
*(int*)CMSG_DATA(cmsg) = fd;
|
||||||
msg.msg_control = (caddr_t)&sfd;
|
|
||||||
msg.msg_controllen = sizeof sfd;
|
|
||||||
|
|
||||||
if((n=sendmsg(s, &msg, 0)) != iov.iov_len)
|
if((n=sendmsg(s, &msg, 0)) != iov.iov_len)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -46,10 +41,12 @@ int
|
||||||
recvfd(int s)
|
recvfd(int s)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
int fd;
|
||||||
char buf[1];
|
char buf[1];
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
struct msghdr msg;
|
struct msghdr msg;
|
||||||
Sendfd sfd;
|
struct cmsghdr *cmsg;
|
||||||
|
char cms[CMSG_SPACE(sizeof(int))];
|
||||||
|
|
||||||
iov.iov_base = buf;
|
iov.iov_base = buf;
|
||||||
iov.iov_len = 1;
|
iov.iov_len = 1;
|
||||||
|
|
@ -60,20 +57,13 @@ recvfd(int s)
|
||||||
msg.msg_iov = &iov;
|
msg.msg_iov = &iov;
|
||||||
msg.msg_iovlen = 1;
|
msg.msg_iovlen = 1;
|
||||||
|
|
||||||
memset(&sfd, 0, sizeof sfd);
|
msg.msg_control = (caddr_t)cms;
|
||||||
sfd.fd = -1;
|
msg.msg_controllen = sizeof cms;
|
||||||
sfd.cmsg.cmsg_len = sizeof sfd;
|
|
||||||
sfd.cmsg.cmsg_level = SOL_SOCKET;
|
|
||||||
sfd.cmsg.cmsg_type = SCM_RIGHTS;
|
|
||||||
|
|
||||||
msg.msg_control = (caddr_t)&sfd;
|
|
||||||
msg.msg_controllen = sizeof sfd;
|
|
||||||
|
|
||||||
if((n=recvmsg(s, &msg, 0)) < 0)
|
if((n=recvmsg(s, &msg, 0)) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if(n==0 && sfd.fd==-1){
|
|
||||||
werrstr("eof in recvfd");
|
cmsg = CMSG_FIRSTHDR(&msg);
|
||||||
return -1;
|
fd = *(int*)CMSG_DATA(cmsg);
|
||||||
}
|
return fd;
|
||||||
return sfd.fd;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,10 @@
|
||||||
%.$O: %.s
|
%.$O: %.s
|
||||||
$AS $AFLAGS $stem.s
|
$AS $AFLAGS $stem.s
|
||||||
|
|
||||||
|
# OpenBSD needs this; sigh
|
||||||
|
%.$O: %.S
|
||||||
|
$CC $CFLAGS $stem.S
|
||||||
|
|
||||||
y.tab.h y.tab.c: $YFILES
|
y.tab.h y.tab.c: $YFILES
|
||||||
$YACC $YFLAGS $prereq
|
$YACC $YFLAGS $prereq
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ OBJTYPE=`uname -m | sed '
|
||||||
s;/.*;;;
|
s;/.*;;;
|
||||||
s; ;;g;
|
s; ;;g;
|
||||||
s;PowerMacintosh;power;g;
|
s;PowerMacintosh;power;g;
|
||||||
|
s;macppc;power;g;
|
||||||
s;ppc64;power;g;
|
s;ppc64;power;g;
|
||||||
s;ppc;power;g'`
|
s;ppc;power;g'`
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue