The MI/MD split wasn't perfect and the MI files need hacks for the

AlphaLinux compat bits.  This will be better cleaned up soon.

Agreed to what ever was necessary by:	marcel
This commit is contained in:
David E. O'Brien 2000-11-01 19:48:35 +00:00
parent ab3240e198
commit 5231fb2059
10 changed files with 156 additions and 26 deletions

View file

@ -45,9 +45,14 @@
#include <sys/tty.h>
#include <machine/../linux/linux.h>
#ifdef __alpha__
#include <linux_proto.h>
#else
#include <machine/../linux/linux_proto.h>
#endif
#include <compat/linux/linux_util.h>
#ifndef __alpha__
int
linux_creat(struct proc *p, struct linux_creat_args *args)
{
@ -70,6 +75,7 @@ linux_creat(struct proc *p, struct linux_creat_args *args)
bsd_open_args.flags = O_WRONLY | O_CREAT | O_TRUNC;
return open(p, &bsd_open_args);
}
#endif /*!__alpha__*/
int
linux_open(struct proc *p, struct linux_open_args *args)
@ -254,7 +260,7 @@ linux_fcntl(struct proc *p, struct linux_fcntl_args *args)
return error;
linux_to_bsd_flock(&linux_flock, bsd_flock);
fcntl_args.cmd = F_GETLK;
fcntl_args.arg = (int)bsd_flock;
fcntl_args.arg = (long)bsd_flock;
error = fcntl(p, &fcntl_args);
if (error)
return error;
@ -268,7 +274,7 @@ linux_fcntl(struct proc *p, struct linux_fcntl_args *args)
return error;
linux_to_bsd_flock(&linux_flock, bsd_flock);
fcntl_args.cmd = F_SETLK;
fcntl_args.arg = (int)bsd_flock;
fcntl_args.arg = (long)bsd_flock;
return fcntl(p, &fcntl_args);
case LINUX_F_SETLKW:
@ -277,7 +283,7 @@ linux_fcntl(struct proc *p, struct linux_fcntl_args *args)
return error;
linux_to_bsd_flock(&linux_flock, bsd_flock);
fcntl_args.cmd = F_SETLKW;
fcntl_args.arg = (int)bsd_flock;
fcntl_args.arg = (long)bsd_flock;
return fcntl(p, &fcntl_args);
case LINUX_F_GETOWN:
@ -315,6 +321,7 @@ linux_lseek(struct proc *p, struct linux_lseek_args *args)
return error;
}
#ifndef __alpha__
int
linux_llseek(struct proc *p, struct linux_llseek_args *args)
{
@ -341,6 +348,7 @@ linux_llseek(struct proc *p, struct linux_llseek_args *args)
p->p_retval[0] = 0;
return 0;
}
#endif /*!__alpha__*/
struct linux_dirent {
@ -353,6 +361,7 @@ struct linux_dirent {
#define LINUX_RECLEN(de,namlen) \
ALIGN((((char *)&(de)->dname - (char *)de) + (namlen) + 1))
#ifndef __alpha__
int
linux_readdir(struct proc *p, struct linux_readdir_args *args)
{
@ -363,6 +372,7 @@ linux_readdir(struct proc *p, struct linux_readdir_args *args)
lda.count = 1;
return linux_getdents(p, &lda);
}
#endif /*!__alpha__*/
int
linux_getdents(struct proc *p, struct linux_getdents_args *args)
@ -819,6 +829,7 @@ linux_getcwd(struct proc *p, struct linux_getcwd_args *args)
return (error);
}
#ifndef __alpha__
int
linux_fdatasync(p, uap)
struct proc *p;
@ -829,6 +840,7 @@ linux_fdatasync(p, uap)
bsd.fd = uap->fd;
return fsync(p, &bsd);
}
#endif /*!__alpha__*/
int
linux_pread(p, uap)

View file

@ -51,8 +51,18 @@
#include <sys/disklabel.h>
#include <machine/../linux/linux.h>
#ifdef __alpha__
#include <linux_proto.h>
#else
#include <machine/../linux/linux_proto.h>
#endif
#include <linux_proto.h>
#ifdef __alpha__
#include <machine/../linux/linux_ioctl.h>
#else
#include <compat/linux/linux_ioctl.h>
#endif
#include <compat/linux/linux_mib.h>
#include <compat/linux/linux_util.h>
@ -120,8 +130,15 @@ struct linux_termio {
unsigned short c_oflag;
unsigned short c_cflag;
unsigned short c_lflag;
#ifdef __alpha__
unsigned char c_cc[LINUX_NCCS];
unsigned char c_line;
unsigned int c_ispeed;
unsigned int c_ospeed;
#else
unsigned char c_line;
unsigned char c_cc[LINUX_NCC];
#endif
};
struct linux_termios {
@ -966,7 +983,7 @@ linux_ioctl_cdrom(struct proc *p, struct linux_ioctl_args *args)
* Sound related ioctls
*/
static unsigned dirbits[4] = { IOC_VOID, IOC_IN, IOC_OUT, IOC_INOUT };
static u_int32_t dirbits[4] = { IOC_VOID, IOC_IN, IOC_OUT, IOC_INOUT };
#define SETDIR(c) (((c) & ~IOC_DIRMASK) | dirbits[args->cmd >> 30])

View file

@ -36,7 +36,11 @@
#include <sys/shm.h>
#include <machine/../linux/linux.h>
#ifdef __alpha__
#include <linux_proto.h>
#else
#include <machine/../linux/linux_proto.h>
#endif
#include <compat/linux/linux_ipc.h>
#include <compat/linux/linux_util.h>

View file

@ -31,6 +31,7 @@
#ifndef _LINUX_IPC_H_
#define _LINUX_IPC_H_
#ifndef __alpha__
int linux_msgctl __P((struct proc *, struct linux_ipc_args *));
int linux_msgget __P((struct proc *, struct linux_ipc_args *));
int linux_msgrcv __P((struct proc *, struct linux_ipc_args *));
@ -44,5 +45,6 @@ int linux_shmat __P((struct proc *, struct linux_ipc_args *));
int linux_shmctl __P((struct proc *, struct linux_ipc_args *));
int linux_shmdt __P((struct proc *, struct linux_ipc_args *));
int linux_shmget __P((struct proc *, struct linux_ipc_args *));
#endif /*!__alpha__*/
#endif /* _LINUX_IPC_H_ */

View file

@ -59,29 +59,42 @@
#include <machine/limits.h>
#include <machine/psl.h>
#include <machine/sysarch.h>
#ifdef __i386__
#include <machine/segments.h>
#endif
#include <posix4/sched.h>
#include <machine/../linux/linux.h>
#ifdef __alpha__
#include <linux_proto.h>
#else
#include <machine/../linux/linux_proto.h>
#endif
#include <compat/linux/linux_mib.h>
#include <compat/linux/linux_util.h>
#ifdef __alpha__
#define BSD_TO_LINUX_SIGNAL(sig) (sig)
#else
#define BSD_TO_LINUX_SIGNAL(sig) \
(((sig) <= LINUX_SIGTBLSZ) ? bsd_to_linux_signal[_SIG_IDX(sig)] : sig)
#endif
struct linux_rlimit {
unsigned long rlim_cur;
unsigned long rlim_max;
};
#ifndef __alpha__
static unsigned int linux_to_bsd_resource[LINUX_RLIM_NLIMITS] =
{ RLIMIT_CPU, RLIMIT_FSIZE, RLIMIT_DATA, RLIMIT_STACK,
RLIMIT_CORE, RLIMIT_RSS, RLIMIT_NPROC, RLIMIT_NOFILE,
RLIMIT_MEMLOCK, -1
};
#endif /*!__alpha__*/
#ifndef __alpha__
int
linux_alarm(struct proc *p, struct linux_alarm_args *args)
{
@ -117,6 +130,7 @@ linux_alarm(struct proc *p, struct linux_alarm_args *args)
}
return 0;
}
#endif /*!__alpha__*/
int
linux_brk(struct proc *p, struct linux_brk_args *args)
@ -160,9 +174,9 @@ linux_brk(struct proc *p, struct linux_brk_args *args)
new = (vm_offset_t)args->dsend;
tmp.nsize = (char *) new;
if (((caddr_t)new > vm->vm_daddr) && !obreak(p, &tmp))
p->p_retval[0] = (int)new;
p->p_retval[0] = (long)new;
else
p->p_retval[0] = (int)old;
p->p_retval[0] = (long)old;
return 0;
#endif
@ -391,7 +405,7 @@ printf("uselib: Page aligned binary %lu\n", file_offset);
goto cleanup;
}
#ifdef DEBUG
printf("mem=%08x = %08x %08x\n", vmaddr, ((int*)vmaddr)[0], ((int*)vmaddr)[1]);
printf("mem=%08lx = %08lx %08lx\n", vmaddr, ((long*)vmaddr)[0], ((long*)vmaddr)[1]);
#endif
if (bss_size != 0) {
/*
@ -552,9 +566,11 @@ linux_mremap(struct proc *p, struct linux_mremap_args *args)
int error = 0;
#ifdef DEBUG
printf("Linux-emul(%ld): mremap(%p, %08x, %08x, %08x)\n",
(long)p->p_pid, (void *)args->addr, args->old_len, args->new_len,
args->flags);
printf("Linux-emul(%ld): mremap(%p, %08lx, %08lx, %08lx)\n",
(long)p->p_pid, (void *)args->addr,
(unsigned long)args->old_len,
(unsigned long)args->new_len,
(unsigned long)args->flags);
#endif
args->new_len = round_page(args->new_len);
args->old_len = round_page(args->old_len);
@ -570,7 +586,7 @@ linux_mremap(struct proc *p, struct linux_mremap_args *args)
error = munmap(p, &bsd_args);
}
p->p_retval[0] = error ? 0 : (int)args->addr;
p->p_retval[0] = error ? 0 : (u_long)args->addr;
return error;
}
@ -586,6 +602,7 @@ linux_msync(struct proc *p, struct linux_msync_args *args)
return msync(p, &bsd_args);
}
#ifndef __alpha__
int
linux_time(struct proc *p, struct linux_time_args *args)
{
@ -603,6 +620,7 @@ linux_time(struct proc *p, struct linux_time_args *args)
p->p_retval[0] = tm;
return 0;
}
#endif /*!__alpha__*/
struct linux_times_argv {
long tms_utime;
@ -713,6 +731,7 @@ linux_utime(struct proc *p, struct linux_utime_args *args)
#define __WCLONE 0x80000000
#ifndef __alpha__
int
linux_waitpid(struct proc *p, struct linux_waitpid_args *args)
{
@ -753,6 +772,7 @@ linux_waitpid(struct proc *p, struct linux_waitpid_args *args)
} else
return 0;
}
#endif /*!__alpha__*/
int
linux_wait4(struct proc *p, struct linux_wait4_args *args)
@ -836,8 +856,10 @@ linux_personality(struct proc *p, struct linux_personality_args *args)
printf("Linux-emul(%ld): personality(%d)\n",
(long)p->p_pid, args->per);
#endif
#ifndef __alpha__
if (args->per != 0)
return EINVAL;
#endif
/* Yes Jim, it's still a Linux... */
p->p_retval[0] = 0;
@ -888,6 +910,7 @@ linux_getitimer(struct proc *p, struct linux_getitimer_args *args)
return getitimer(p, &bsa);
}
#ifndef __alpha__
int
linux_nice(struct proc *p, struct linux_nice_args *args)
{
@ -898,6 +921,7 @@ linux_nice(struct proc *p, struct linux_nice_args *args)
bsd_args.prio = args->inc;
return setpriority(p, &bsd_args);
}
#endif /*!__alpha__*/
int
linux_setgroups(p, uap)
@ -989,6 +1013,7 @@ linux_getgroups(p, uap)
return (0);
}
#ifndef __alpha__
int
linux_setrlimit(p, uap)
struct proc *p;
@ -1056,6 +1081,7 @@ linux_getrlimit(p, uap)
rlim.rlim_max = LONG_MAX;
return (copyout(&rlim, uap->rlim, sizeof(rlim)));
}
#endif /*!__alpha__*/
int
linux_sched_setscheduler(p, uap)

View file

@ -35,7 +35,11 @@
#include <sys/signalvar.h>
#include <machine/../linux/linux.h>
#ifdef __alpha__
#include <linux_proto.h>
#else
#include <machine/../linux/linux_proto.h>
#endif
#include <compat/linux/linux_signal.h>
#include <compat/linux/linux_util.h>
@ -49,7 +53,11 @@ linux_to_bsd_sigset(linux_sigset_t *lss, sigset_t *bss)
bss->__bits[1] = lss->__bits[1];
for (l = 1; l <= LINUX_SIGTBLSZ; l++) {
if (LINUX_SIGISMEMBER(*lss, l)) {
#ifdef __alpha__
b = _SIG_IDX(l);
#else
b = linux_to_bsd_signal[_SIG_IDX(l)];
#endif
if (b)
SIGADDSET(*bss, b);
}
@ -66,7 +74,11 @@ bsd_to_linux_sigset(sigset_t *bss, linux_sigset_t *lss)
lss->__bits[1] = bss->__bits[1];
for (b = 1; b <= LINUX_SIGTBLSZ; b++) {
if (SIGISMEMBER(*bss, b)) {
#if __alpha__
l = _SIG_IDX(b);
#else
l = bsd_to_linux_signal[_SIG_IDX(b)];
#endif
if (l)
LINUX_SIGADDSET(*lss, l);
}
@ -144,9 +156,11 @@ linux_do_sigaction(struct proc *p, int linux_sig, linux_sigaction_t *linux_nsa,
else
nsa = NULL;
#ifndef __alpha__
if (linux_sig <= LINUX_SIGTBLSZ)
sa_args.sig = linux_to_bsd_signal[_SIG_IDX(linux_sig)];
else
#endif
sa_args.sig = linux_sig;
sa_args.act = nsa;
@ -161,6 +175,8 @@ linux_do_sigaction(struct proc *p, int linux_sig, linux_sigaction_t *linux_nsa,
return (0);
}
#ifndef __alpha__
int
linux_signal(struct proc *p, struct linux_signal_args *args)
{
@ -181,6 +197,7 @@ linux_signal(struct proc *p, struct linux_signal_args *args)
return (error);
}
#endif /*!__alpha__*/
int
linux_rt_sigaction(struct proc *p, struct linux_rt_sigaction_args *args)
@ -189,9 +206,9 @@ linux_rt_sigaction(struct proc *p, struct linux_rt_sigaction_args *args)
int error;
#ifdef DEBUG
printf("Linux-emul(%ld): rt_sigaction(%d, %p, %p, %d)\n",
(long)p->p_pid, args->sig, (void *)args->act,
(void *)args->oact, args->sigsetsize);
printf("Linux-emul(%ld): rt_sigaction(%ld, %p, %p, %ld)\n",
(long)p->p_pid, (long)args->sig, (void *)args->act,
(void *)args->oact, (long)args->sigsetsize);
#endif
if (args->sigsetsize != sizeof(linux_sigset_t))
@ -255,6 +272,7 @@ linux_do_sigprocmask(struct proc *p, int how, linux_sigset_t *new,
return (error);
}
#ifndef __alpha__
int
linux_sigprocmask(struct proc *p, struct linux_sigprocmask_args *args)
{
@ -285,6 +303,7 @@ linux_sigprocmask(struct proc *p, struct linux_sigprocmask_args *args)
return (error);
}
#endif /*!__alpha__*/
int
linux_rt_sigprocmask(struct proc *p, struct linux_rt_sigprocmask_args *args)
@ -293,9 +312,9 @@ linux_rt_sigprocmask(struct proc *p, struct linux_rt_sigprocmask_args *args)
int error;
#ifdef DEBUG
printf("Linux-emul(%ld): rt_sigprocmask(%d, %p, %p, %d)\n",
printf("Linux-emul(%ld): rt_sigprocmask(%d, %p, %p, %ld)\n",
(long)p->p_pid, args->how, (void *)args->mask,
(void *)args->omask, args->sigsetsize);
(void *)args->omask, (long)args->sigsetsize);
#endif
if (args->sigsetsize != sizeof(linux_sigset_t))
@ -318,6 +337,7 @@ linux_rt_sigprocmask(struct proc *p, struct linux_rt_sigprocmask_args *args)
return (error);
}
#ifndef __alpha__
int
linux_siggetmask(struct proc *p, struct linux_siggetmask_args *args)
{
@ -373,6 +393,7 @@ linux_sigpending(struct proc *p, struct linux_sigpending_args *args)
mask = lset.__bits[0];
return (copyout(&mask, args->mask, sizeof(mask)));
}
#endif /*!__alpha__*/
int
linux_kill(struct proc *p, struct linux_kill_args *args)
@ -393,9 +414,11 @@ linux_kill(struct proc *p, struct linux_kill_args *args)
if (args->signum < 0 || args->signum > LINUX_NSIG)
return EINVAL;
#ifndef __alpha__
if (args->signum > 0 && args->signum <= LINUX_SIGTBLSZ)
tmp.signum = linux_to_bsd_signal[_SIG_IDX(args->signum)];
else
#endif
tmp.signum = args->signum;
tmp.pid = args->pid;

View file

@ -32,7 +32,7 @@
#define _LINUX_SIGNAL_H_
void linux_to_bsd_sigset __P((linux_sigset_t *, sigset_t *));
void bsd_to_linux_sigset __P((sigset_t *, linux_sigset_t *));
int linux_do_sigaction __P((struct proc *, int, linux_sigaction_t *,
linux_sigaction_t *));

View file

@ -48,9 +48,14 @@
#include <netinet/ip.h>
#include <machine/../linux/linux.h>
#ifdef __alpha__
#include <linux_proto.h>
#else
#include <machine/../linux/linux_proto.h>
#endif
#include <compat/linux/linux_util.h>
#ifndef __alpha__
static int
linux_to_bsd_domain(int domain)
{
@ -902,3 +907,4 @@ linux_socketcall(struct proc *p, struct linux_socketcall_args *args)
uprintf("LINUX: 'socket' typ=%d not implemented\n", args->what);
return (ENOSYS);
}
#endif /*!__alpha__*/

View file

@ -41,10 +41,31 @@
#include <sys/vnode.h>
#include <machine/../linux/linux.h>
#ifdef __alpha__
#include <linux_proto.h>
#else
#include <machine/../linux/linux_proto.h>
#endif
#include <compat/linux/linux_util.h>
struct linux_newstat {
#ifdef __alpha__
u_int stat_dev;
u_int stat_ino;
u_int stat_mode;
u_int stat_nlink;
u_int stat_uid;
u_int stat_gid;
u_int stat_rdev;
long stat_size;
u_long stat_atime;
u_long stat_mtime;
u_long stat_ctime;
u_int stat_blksize;
int stat_blocks;
u_int stat_flags;
u_int stat_gen;
#else
u_short stat_dev;
u_short __pad1;
u_long stat_ino;
@ -65,8 +86,10 @@ struct linux_newstat {
u_long __unused3;
u_long __unused4;
u_long __unused5;
#endif
};
struct linux_ustat
{
int f_tfree;
@ -192,16 +215,16 @@ linux_newfstat(struct proc *p, struct linux_newfstat_args *args)
}
struct linux_statfs_buf {
long ftype;
long fbsize;
long fblocks;
long fbfree;
long fbavail;
long ffiles;
long fffree;
int ftype;
int fbsize;
int fblocks;
int fbfree;
int fbavail;
int ffiles;
int fffree;
linux_fsid_t ffsid;
long fnamelen;
long fspare[6];
int fnamelen;
int fspare[6];
};
#ifndef VT_NWFS

View file

@ -92,4 +92,21 @@ int linux_emul_find __P((struct proc *, caddr_t *, const char *, char *,
#define CHECKALTEXIST(p, sgp, path) CHECKALT(p, sgp, path, 0)
#define CHECKALTCREAT(p, sgp, path) CHECKALT(p, sgp, path, 1)
#define DUMMY(s) \
int \
linux_ ## s(struct proc *p, struct linux_ ## s ## _args *args) \
{ \
return (unsupported_msg(p, #s)); \
} \
struct __hack
static __inline int
unsupported_msg(struct proc *p, const char *fname)
{
printf("linux: syscall %s is obsoleted or not implemented (pid=%ld)\n",
fname, (long)p->p_pid);
return (ENOSYS);
}
#endif /* !_LINUX_UTIL_H_ */