cosmetic fixes.
This commit is contained in:
parent
a132b86864
commit
ff4eeac9d3
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: linux_errno.h,v 1.1 2001/01/19 12:27:13 manu Exp $ */
|
/* $NetBSD: linux_errno.h,v 1.2 2001/02/04 22:59:26 christos Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||||
|
@ -46,57 +46,57 @@
|
||||||
* From Linux's include/asm-ppc/errno.h
|
* From Linux's include/asm-ppc/errno.h
|
||||||
*/
|
*/
|
||||||
#define LINUX_ENAMETOOLONG 36
|
#define LINUX_ENAMETOOLONG 36
|
||||||
#define LINUX_ENOLCK 37
|
#define LINUX_ENOLCK 37
|
||||||
#define LINUX_ENOSYS 38
|
#define LINUX_ENOSYS 38
|
||||||
#define LINUX_ENOTEMPTY 39
|
#define LINUX_ENOTEMPTY 39
|
||||||
#define LINUX_ELOOP 40
|
#define LINUX_ELOOP 40
|
||||||
#define LINUX_EWOULDBLOCK LINUX_EAGAIN
|
#define LINUX_EWOULDBLOCK LINUX_EAGAIN
|
||||||
#define LINUX_ENOMSG 42
|
#define LINUX_ENOMSG 42
|
||||||
#define LINUX_EIDRM 43
|
#define LINUX_EIDRM 43
|
||||||
#define LINUX_ECHRNG 44
|
#define LINUX_ECHRNG 44
|
||||||
#define LINUX_EL2NSYNC 45
|
#define LINUX_EL2NSYNC 45
|
||||||
#define LINUX_EL3HLT 46
|
#define LINUX_EL3HLT 46
|
||||||
#define LINUX_EL3RST 47
|
#define LINUX_EL3RST 47
|
||||||
#define LINUX_ELNRNG 48
|
#define LINUX_ELNRNG 48
|
||||||
#define LINUX_EUNATCH 49
|
#define LINUX_EUNATCH 49
|
||||||
#define LINUX_ENOCSI 50
|
#define LINUX_ENOCSI 50
|
||||||
#define LINUX_EL2HLT 51
|
#define LINUX_EL2HLT 51
|
||||||
#define LINUX_EBADE 52
|
#define LINUX_EBADE 52
|
||||||
#define LINUX_EBADR 53
|
#define LINUX_EBADR 53
|
||||||
#define LINUX_EXFULL 54
|
#define LINUX_EXFULL 54
|
||||||
#define LINUX_ENOANO 55
|
#define LINUX_ENOANO 55
|
||||||
#define LINUX_EBADRQC 56
|
#define LINUX_EBADRQC 56
|
||||||
#define LINUX_EBADSLT 57
|
#define LINUX_EBADSLT 57
|
||||||
#define LINUX_EDEADLOCK 58
|
#define LINUX_EDEADLOCK 58
|
||||||
#define LINUX_EBFONT 59
|
#define LINUX_EBFONT 59
|
||||||
#define LINUX_ENOSTR 60
|
#define LINUX_ENOSTR 60
|
||||||
#define LINUX_ENODATA 61
|
#define LINUX_ENODATA 61
|
||||||
#define LINUX_ETIME 62
|
#define LINUX_ETIME 62
|
||||||
#define LINUX_ENOSR 63
|
#define LINUX_ENOSR 63
|
||||||
#define LINUX_ENONET 64
|
#define LINUX_ENONET 64
|
||||||
#define LINUX_ENOPKG 65
|
#define LINUX_ENOPKG 65
|
||||||
#define LINUX_EREMOTE 66
|
#define LINUX_EREMOTE 66
|
||||||
#define LINUX_ENOLINK 67
|
#define LINUX_ENOLINK 67
|
||||||
#define LINUX_EADV 68
|
#define LINUX_EADV 68
|
||||||
#define LINUX_ESRMNT 69
|
#define LINUX_ESRMNT 69
|
||||||
#define LINUX_ECOMM 70
|
#define LINUX_ECOMM 70
|
||||||
#define LINUX_EPROTO 71
|
#define LINUX_EPROTO 71
|
||||||
#define LINUX_EMULTIHOP 72
|
#define LINUX_EMULTIHOP 72
|
||||||
#define LINUX_EDOTDOT 73
|
#define LINUX_EDOTDOT 73
|
||||||
#define LINUX_EBADMSG 74
|
#define LINUX_EBADMSG 74
|
||||||
#define LINUX_EOVERFLOW 75
|
#define LINUX_EOVERFLOW 75
|
||||||
#define LINUX_ENOTUNIQ 76
|
#define LINUX_ENOTUNIQ 76
|
||||||
#define LINUX_EBADFD 77
|
#define LINUX_EBADFD 77
|
||||||
#define LINUX_EREMCHG 78
|
#define LINUX_EREMCHG 78
|
||||||
#define LINUX_ELIBACC 79
|
#define LINUX_ELIBACC 79
|
||||||
#define LINUX_ELIBBAD 80
|
#define LINUX_ELIBBAD 80
|
||||||
#define LINUX_ELIBSCN 81
|
#define LINUX_ELIBSCN 81
|
||||||
#define LINUX_ELIBMAX 82
|
#define LINUX_ELIBMAX 82
|
||||||
#define LINUX_ELIBEXEC 83
|
#define LINUX_ELIBEXEC 83
|
||||||
#define LINUX_EILSEQ 84
|
#define LINUX_EILSEQ 84
|
||||||
#define LINUX_ERESTART 85
|
#define LINUX_ERESTART 85
|
||||||
#define LINUX_ESTRPIPE 86
|
#define LINUX_ESTRPIPE 86
|
||||||
#define LINUX_EUSERS 87
|
#define LINUX_EUSERS 87
|
||||||
#define LINUX_ENOTSOCK 88
|
#define LINUX_ENOTSOCK 88
|
||||||
#define LINUX_EDESTADDRREQ 89
|
#define LINUX_EDESTADDRREQ 89
|
||||||
#define LINUX_EMSGSIZE 90
|
#define LINUX_EMSGSIZE 90
|
||||||
|
@ -104,10 +104,10 @@
|
||||||
#define LINUX_ENOPROTOOPT 92
|
#define LINUX_ENOPROTOOPT 92
|
||||||
#define LINUX_EPROTONOSUPPORT 93
|
#define LINUX_EPROTONOSUPPORT 93
|
||||||
#define LINUX_ESOCKTNOSUPPORT 94
|
#define LINUX_ESOCKTNOSUPPORT 94
|
||||||
#define LINUX_EOPNOTSUPP 95
|
#define LINUX_EOPNOTSUPP 95
|
||||||
#define LINUX_EPFNOSUPPORT 96
|
#define LINUX_EPFNOSUPPORT 96
|
||||||
#define LINUX_EAFNOSUPPORT 97
|
#define LINUX_EAFNOSUPPORT 97
|
||||||
#define LINUX_EADDRINUSE 98
|
#define LINUX_EADDRINUSE 98
|
||||||
#define LINUX_EADDRNOTAVAIL 99
|
#define LINUX_EADDRNOTAVAIL 99
|
||||||
#define LINUX_ENETDOWN 100
|
#define LINUX_ENETDOWN 100
|
||||||
#define LINUX_ENETUNREACH 101
|
#define LINUX_ENETUNREACH 101
|
||||||
|
@ -125,13 +125,13 @@
|
||||||
#define LINUX_EHOSTUNREACH 113
|
#define LINUX_EHOSTUNREACH 113
|
||||||
#define LINUX_EALREADY 114
|
#define LINUX_EALREADY 114
|
||||||
#define LINUX_EINPROGRESS 115
|
#define LINUX_EINPROGRESS 115
|
||||||
#define LINUX_ESTALE 116
|
#define LINUX_ESTALE 116
|
||||||
#define LINUX_EUCLEAN 117
|
#define LINUX_EUCLEAN 117
|
||||||
#define LINUX_ENOTNAM 118
|
#define LINUX_ENOTNAM 118
|
||||||
#define LINUX_ENAVAIL 119
|
#define LINUX_ENAVAIL 119
|
||||||
#define LINUX_EISNAM 120
|
#define LINUX_EISNAM 120
|
||||||
#define LINUX_EREMOTEIO 121
|
#define LINUX_EREMOTEIO 121
|
||||||
#define LINUX_EDQUOT 122
|
#define LINUX_EDQUOT 122
|
||||||
#define LINUX_ENOMEDIUM 123
|
#define LINUX_ENOMEDIUM 123
|
||||||
#define LINUX_EMEDIUMTYPE 124
|
#define LINUX_EMEDIUMTYPE 124
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: linux_exec.h,v 1.1 2001/01/19 01:31:23 manu Exp $ */
|
/* $NetBSD: linux_exec.h,v 1.2 2001/02/04 22:59:26 christos Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
|
* Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
|
||||||
|
@ -98,11 +98,11 @@
|
||||||
*/
|
*/
|
||||||
#ifdef LINUX_SP_WRAP
|
#ifdef LINUX_SP_WRAP
|
||||||
#define LINUX_ELF_AUX_ARGSIZ \
|
#define LINUX_ELF_AUX_ARGSIZ \
|
||||||
((howmany(ELF_AUX_ENTRIES * sizeof(LinuxAuxInfo), sizeof(Elf32_Addr))) + 16 \
|
((howmany(ELF_AUX_ENTRIES * sizeof(LinuxAuxInfo), sizeof(Elf32_Addr))) \
|
||||||
+ LINUX_SP_WRAP)
|
+ 16 + LINUX_SP_WRAP)
|
||||||
#else
|
#else
|
||||||
#define LINUX_ELF_AUX_ARGSIZ \
|
#define LINUX_ELF_AUX_ARGSIZ \
|
||||||
((howmany(ELF_AUX_ENTRIES * sizeof(LinuxAuxInfo), sizeof(Elf32_Addr))) + 16)
|
((howmany(ELF_AUX_ENTRIES * sizeof(LinuxAuxInfo), sizeof(Elf32_Addr))) + 16)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* XXX should use ELFNAME2 */
|
/* XXX should use ELFNAME2 */
|
||||||
|
@ -116,7 +116,8 @@ typedef struct {
|
||||||
|
|
||||||
#ifdef _KERNEL
|
#ifdef _KERNEL
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
void * linux_elf32_copyargs __P((struct exec_package *, struct ps_strings *, void *, void *));
|
void * linux_elf32_copyargs __P((struct exec_package *,
|
||||||
|
struct ps_strings *, void *, void *));
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
#endif /* _KERNEL */
|
#endif /* _KERNEL */
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: linux_exec_powerpc.c,v 1.1 2001/01/19 01:36:51 manu Exp $ */
|
/* $NetBSD: linux_exec_powerpc.c,v 1.2 2001/02/04 22:59:26 christos Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||||
|
@ -105,10 +105,10 @@ ELFNAME2(linux,copyargs)(pack, arginfo, stack, argp)
|
||||||
#ifdef LINUX_SHIFT
|
#ifdef LINUX_SHIFT
|
||||||
/*
|
/*
|
||||||
* From Linux's arch/ppc/kernel/process.c:shove_aux_table(). GNU ld.so
|
* From Linux's arch/ppc/kernel/process.c:shove_aux_table(). GNU ld.so
|
||||||
* expects the ELF auxiliary table to start on a 16 bytes boundary on the
|
* expects the ELF auxiliary table to start on a 16 bytes boundary on
|
||||||
* PowerPC.
|
* the PowerPC.
|
||||||
*/
|
*/
|
||||||
(unsigned long) stack = ((unsigned long) stack + LINUX_SHIFT) & ~LINUX_SHIFT;
|
stack = (void *)(((unsigned long) stack + LINUX_SHIFT) & ~LINUX_SHIFT);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
memset(ai, 0, sizeof(LinuxAuxInfo) * LINUX_ELF_AUX_ENTRIES);
|
memset(ai, 0, sizeof(LinuxAuxInfo) * LINUX_ELF_AUX_ENTRIES);
|
||||||
|
@ -133,9 +133,9 @@ ELFNAME2(linux,copyargs)(pack, arginfo, stack, argp)
|
||||||
#if 1
|
#if 1
|
||||||
/*
|
/*
|
||||||
* The exec_package doesn't have a proc pointer and it's not
|
* The exec_package doesn't have a proc pointer and it's not
|
||||||
* exactly trivial to add one since the credentials are changing.
|
* exactly trivial to add one since the credentials are
|
||||||
*
|
* changing. XXX Linux uses curproc's credentials.
|
||||||
* XXX Linux uses curproc's credentials. Why can't we use them too?
|
* Why can't we use them too?
|
||||||
*/
|
*/
|
||||||
a->a_type = LINUX_AT_EGID;
|
a->a_type = LINUX_AT_EGID;
|
||||||
a->a_v = p->p_ucred->cr_gid;
|
a->a_v = p->p_ucred->cr_gid;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: linux_fcntl.h,v 1.2 2001/01/21 22:19:26 manu Exp $ */
|
/* $NetBSD: linux_fcntl.h,v 1.3 2001/02/04 22:59:26 christos Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1995, 1998, 2001 The NetBSD Foundation, Inc.
|
* Copyright (c) 1995, 1998, 2001 The NetBSD Foundation, Inc.
|
||||||
|
@ -53,15 +53,15 @@
|
||||||
* Theses are octal values (remember 0100 != 100 in C)
|
* Theses are octal values (remember 0100 != 100 in C)
|
||||||
*/
|
*/
|
||||||
#define LINUX_O_CREAT 0100
|
#define LINUX_O_CREAT 0100
|
||||||
#define LINUX_O_EXCL 0200
|
#define LINUX_O_EXCL 0200
|
||||||
#define LINUX_O_NOCTTY 0400
|
#define LINUX_O_NOCTTY 0400
|
||||||
#define LINUX_O_TRUNC 01000
|
#define LINUX_O_TRUNC 01000
|
||||||
#define LINUX_O_APPEND 02000
|
#define LINUX_O_APPEND 02000
|
||||||
#define LINUX_O_NONBLOCK 04000
|
#define LINUX_O_NONBLOCK 04000
|
||||||
#define LINUX_O_NDELAY LINUX_O_NONBLOCK
|
#define LINUX_O_NDELAY LINUX_O_NONBLOCK
|
||||||
#define LINUX_O_SYNC 010000
|
#define LINUX_O_SYNC 010000
|
||||||
|
|
||||||
#define LINUX_FASYNC 020000
|
#define LINUX_FASYNC 020000
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fcntl(2) operations
|
* fcntl(2) operations
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: linux_machdep.c,v 1.3 2001/01/26 19:46:16 manu Exp $ */
|
/* $NetBSD: linux_machdep.c,v 1.4 2001/02/04 22:59:26 christos Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1995, 2000, 2001 The NetBSD Foundation, Inc.
|
* Copyright (c) 1995, 2000, 2001 The NetBSD Foundation, Inc.
|
||||||
|
@ -124,7 +124,7 @@ linux_sendsig(catcher, sig, mask, code) /* XXX Check me */
|
||||||
struct proc *p = curproc;
|
struct proc *p = curproc;
|
||||||
struct trapframe *tf;
|
struct trapframe *tf;
|
||||||
struct linux_sigregs *fp, frame;
|
struct linux_sigregs *fp, frame;
|
||||||
struct linux_pt_regs linux_regs;
|
struct linux_pt_regs linux_regs;
|
||||||
struct linux_sigcontext sc;
|
struct linux_sigcontext sc;
|
||||||
int onstack;
|
int onstack;
|
||||||
int i;
|
int i;
|
||||||
|
@ -147,11 +147,13 @@ linux_sendsig(catcher, sig, mask, code) /* XXX Check me */
|
||||||
/*
|
/*
|
||||||
* Allocate space for the signal handler context.
|
* Allocate space for the signal handler context.
|
||||||
*/
|
*/
|
||||||
if (onstack)
|
if (onstack) {
|
||||||
fp = (struct linux_sigregs *)((caddr_t)p->p_sigctx.ps_sigstk.ss_sp +
|
fp = (struct linux_sigregs *)
|
||||||
|
((caddr_t)p->p_sigctx.ps_sigstk.ss_sp +
|
||||||
p->p_sigctx.ps_sigstk.ss_size);
|
p->p_sigctx.ps_sigstk.ss_size);
|
||||||
else
|
} else {
|
||||||
fp = (struct linux_sigregs *)tf->fixreg[1];
|
fp = (struct linux_sigregs *)tf->fixreg[1];
|
||||||
|
}
|
||||||
fp = (struct linux_sigregs *)((int)(fp - 1) & ~0xf);
|
fp = (struct linux_sigregs *)((int)(fp - 1) & ~0xf);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -168,7 +170,7 @@ linux_sendsig(catcher, sig, mask, code) /* XXX Check me */
|
||||||
*
|
*
|
||||||
* Save register context.
|
* Save register context.
|
||||||
*/
|
*/
|
||||||
for (i=0; i<=31; i++)
|
for (i = 0; i < 32; i++)
|
||||||
linux_regs.lgpr[i] = tf->fixreg[i];
|
linux_regs.lgpr[i] = tf->fixreg[i];
|
||||||
linux_regs.lnip = tf->srr0;
|
linux_regs.lnip = tf->srr0;
|
||||||
linux_regs.lmsr = tf->srr1;
|
linux_regs.lmsr = tf->srr1;
|
||||||
|
@ -178,11 +180,11 @@ linux_sendsig(catcher, sig, mask, code) /* XXX Check me */
|
||||||
linux_regs.lxer = tf->xer;
|
linux_regs.lxer = tf->xer;
|
||||||
linux_regs.lccr = tf->cr;
|
linux_regs.lccr = tf->cr;
|
||||||
linux_regs.lmq = 0; /* Unused, 601 only */
|
linux_regs.lmq = 0; /* Unused, 601 only */
|
||||||
linux_regs.ltrap = 0; /* XXX What is ltrap counterpart in NetBSD ? */
|
linux_regs.ltrap = 0; /* XXX What is ltrap counterpart in NetBSD ? */
|
||||||
linux_regs.ldar = tf->dar;
|
linux_regs.ldar = tf->dar;
|
||||||
linux_regs.ldsisr = tf->dsisr;
|
linux_regs.ldsisr = tf->dsisr;
|
||||||
linux_regs.lresult = tf->exc;
|
linux_regs.lresult = tf->exc;
|
||||||
bcopy (&linux_regs, &frame.lgp_regs, sizeof (frame.lgp_regs));
|
memcpy(&frame.lgp_regs, &linux_regs, sizeof(frame.lgp_regs));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NetBSD does not uses the FPU in the kernel, so there is no
|
* NetBSD does not uses the FPU in the kernel, so there is no
|
||||||
|
@ -190,14 +192,14 @@ linux_sendsig(catcher, sig, mask, code) /* XXX Check me */
|
||||||
* them to be saved on the stack. Therefore we just keep a
|
* them to be saved on the stack. Therefore we just keep a
|
||||||
* gap of zero'ed data where the FP registers should be stored
|
* gap of zero'ed data where the FP registers should be stored
|
||||||
*/
|
*/
|
||||||
memset (&frame.lfp_regs, 0, sizeof (frame.lfp_regs));
|
memset(&frame.lfp_regs, 0, sizeof (frame.lfp_regs));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy Linux's signal trampoline on the user stack It should not be used,
|
* Copy Linux's signal trampoline on the user stack It should not
|
||||||
* but Linux binaries might expect him to be there.
|
* be used, but Linux binaries might expect him to be there.
|
||||||
*/
|
*/
|
||||||
frame.ltramp[0]=0x38997777; /* li r0, 0x7777 */
|
frame.ltramp[0] = 0x38997777; /* li r0, 0x7777 */
|
||||||
frame.ltramp[1]=0x44000002; /* sc */
|
frame.ltramp[1] = 0x44000002; /* sc */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Move it to the user stack
|
* Move it to the user stack
|
||||||
|
@ -206,7 +208,7 @@ linux_sendsig(catcher, sig, mask, code) /* XXX Check me */
|
||||||
* binaries. But the Linux kernel seems to do without it, and it
|
* binaries. But the Linux kernel seems to do without it, and it
|
||||||
* just skip it when building the stack frame. Hence the LINUX_ABIGAP.
|
* just skip it when building the stack frame. Hence the LINUX_ABIGAP.
|
||||||
*/
|
*/
|
||||||
if (copyout(&frame, fp, sizeof (frame) - LINUX_ABIGAP)) {
|
if (copyout(&frame, fp, sizeof (frame) - LINUX_ABIGAP) != 0) {
|
||||||
/*
|
/*
|
||||||
* Process has trashed its stack; give it an illegal
|
* Process has trashed its stack; give it an illegal
|
||||||
* instructoin to halt it in its tracks.
|
* instructoin to halt it in its tracks.
|
||||||
|
@ -218,17 +220,19 @@ linux_sendsig(catcher, sig, mask, code) /* XXX Check me */
|
||||||
/*
|
/*
|
||||||
* adjust stack pointer after the previous data copy
|
* adjust stack pointer after the previous data copy
|
||||||
*/
|
*/
|
||||||
(unsigned long)fp -= (sizeof (frame) - LINUX_ABIGAP);
|
fp = (struct linux_sigregs *)
|
||||||
|
((unsigned long)fp - (sizeof (frame) - LINUX_ABIGAP));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "Mind the gap" Linux expects a gap here.
|
* "Mind the gap" Linux expects a gap here.
|
||||||
*/
|
*/
|
||||||
(unsigned long)fp -= LINUX__SIGNAL_FRAMESIZE;
|
fp = (struct linux_sigregs *)
|
||||||
|
((unsigned long)fp - LINUX__SIGNAL_FRAMESIZE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add a sigcontext on the stack
|
* Add a sigcontext on the stack
|
||||||
*/
|
*/
|
||||||
if (copyout(&sc, fp, sizeof (struct linux_sigcontext))) {
|
if (copyout(&sc, fp, sizeof (struct linux_sigcontext)) != 0) {
|
||||||
/*
|
/*
|
||||||
* Process has trashed its stack; give it an illegal
|
* Process has trashed its stack; give it an illegal
|
||||||
* instructoin to halt it in its tracks.
|
* instructoin to halt it in its tracks.
|
||||||
|
@ -297,15 +301,15 @@ linux_sys_rt_sigreturn(p, v, retval)
|
||||||
scp = SCARG(uap, sfp);
|
scp = SCARG(uap, sfp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* It seems we need a 16 bytes alignement here (it just works with it, don't
|
* It seems we need a 16 bytes alignement here (it just works with it,
|
||||||
* ask me why
|
* don't ask me why
|
||||||
*/
|
*/
|
||||||
(unsigned long)scp = (unsigned long) scp & ~0xfUL;
|
scp = (linux_rt_sigframe *)((unsigned long)scp & ~0xfUL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the context from user stack
|
* Get the context from user stack
|
||||||
*/
|
*/
|
||||||
if (copyin((caddr_t)scp, &sigframe, sizeof(struct linux_rt_sigframe)) != 0)
|
if (copyin((caddr_t)scp, &sigframe, sizeof(*scp)) != 0)
|
||||||
return (EFAULT);
|
return (EFAULT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -326,7 +330,7 @@ linux_sys_rt_sigreturn(p, v, retval)
|
||||||
(tf->srr1 & PSL_USERSTATIC))
|
(tf->srr1 & PSL_USERSTATIC))
|
||||||
return (EINVAL);
|
return (EINVAL);
|
||||||
|
|
||||||
for (i=0; i<=31; i++)
|
for (i = 0; i < 32; i++)
|
||||||
tf->fixreg[i] = sigframe.luc.luc_context.lregs->lgpr[i];
|
tf->fixreg[i] = sigframe.luc.luc_context.lregs->lgpr[i];
|
||||||
tf->lr = sigframe.luc.luc_context.lregs->llink;
|
tf->lr = sigframe.luc.luc_context.lregs->llink;
|
||||||
tf->cr = sigframe.luc.luc_context.lregs->lccr;
|
tf->cr = sigframe.luc.luc_context.lregs->lccr;
|
||||||
|
@ -380,15 +384,15 @@ linux_sys_sigreturn(p, v, retval)
|
||||||
scp = SCARG(uap, scp);
|
scp = SCARG(uap, scp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* It seems we need a 16 bytes alignement here (it just works with it, don't
|
* It seems we need a 16 bytes alignement here (it just works with it,
|
||||||
* ask me why
|
* don't ask me why
|
||||||
*/
|
*/
|
||||||
(unsigned long)scp = (unsigned long) scp & ~0xfUL;
|
(unsigned long)scp = (unsigned long) scp & ~0xfUL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the context from user stack
|
* Get the context from user stack
|
||||||
*/
|
*/
|
||||||
if (copyin((caddr_t)scp, &context, sizeof(struct linux_sigcontext)) != 0)
|
if (copyin(scp, &context, sizeof(struct linux_sigcontext)) != 0)
|
||||||
return (EFAULT);
|
return (EFAULT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -400,10 +404,11 @@ linux_sys_sigreturn(p, v, retval)
|
||||||
(unsigned long)tf, (unsigned long)scp);
|
(unsigned long)tf, (unsigned long)scp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((context.lregs->lmsr & PSL_USERSTATIC) != (tf->srr1 & PSL_USERSTATIC))
|
if ((context.lregs->lmsr & PSL_USERSTATIC) !=
|
||||||
|
(tf->srr1 & PSL_USERSTATIC))
|
||||||
return (EINVAL);
|
return (EINVAL);
|
||||||
|
|
||||||
for (i=0; i<=31; i++)
|
for (i = 0; i < 32; i++)
|
||||||
tf->fixreg[i] = context.lregs->lgpr[i];
|
tf->fixreg[i] = context.lregs->lgpr[i];
|
||||||
tf->lr = context.lregs->llink;
|
tf->lr = context.lregs->llink;
|
||||||
tf->cr = context.lregs->lccr;
|
tf->cr = context.lregs->lccr;
|
||||||
|
@ -421,9 +426,11 @@ linux_sys_sigreturn(p, v, retval)
|
||||||
* XXX cannot find the onstack information in Linux sig context.
|
* XXX cannot find the onstack information in Linux sig context.
|
||||||
* Is signal stack really supported on Linux?
|
* Is signal stack really supported on Linux?
|
||||||
*/
|
*/
|
||||||
/* if (sc.sc_onstack & SS_ONSTACK)
|
#if 0
|
||||||
|
if (sc.sc_onstack & SS_ONSTACK)
|
||||||
p->p_sigctx.ps_sigstk.ss_flags |= SS_ONSTACK;
|
p->p_sigctx.ps_sigstk.ss_flags |= SS_ONSTACK;
|
||||||
else */
|
else
|
||||||
|
#endif
|
||||||
p->p_sigctx.ps_sigstk.ss_flags &= ~SS_ONSTACK;
|
p->p_sigctx.ps_sigstk.ss_flags &= ~SS_ONSTACK;
|
||||||
|
|
||||||
/* Restore signal mask. */
|
/* Restore signal mask. */
|
||||||
|
@ -441,7 +448,8 @@ linux_sys_modify_ldt(p, v, retval)
|
||||||
register_t *retval;
|
register_t *retval;
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* This syscall is not implemented in Linux/PowerPC: we should not be here
|
* This syscall is not implemented in Linux/PowerPC: we should not
|
||||||
|
* be here
|
||||||
*/
|
*/
|
||||||
#ifdef DEBUG_LINUX
|
#ifdef DEBUG_LINUX
|
||||||
printf("linux_sys_modify_ldt: should not be here.\n");
|
printf("linux_sys_modify_ldt: should not be here.\n");
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: linux_ptrace.c,v 1.2 2001/02/04 14:24:38 manu Exp $ */
|
/* $NetBSD: linux_ptrace.c,v 1.3 2001/02/04 22:59:26 christos Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1999, 2001 The NetBSD Foundation, Inc.
|
* Copyright (c) 1999, 2001 The NetBSD Foundation, Inc.
|
||||||
|
@ -94,7 +94,7 @@ struct linux_user {
|
||||||
unsigned long start_data;
|
unsigned long start_data;
|
||||||
unsigned long start_stack;
|
unsigned long start_stack;
|
||||||
long int signal;
|
long int signal;
|
||||||
struct linux_pt_regs *u_ar0; /* help gdb find registers */
|
struct linux_pt_regs *u_ar0; /* help gdb find registers */
|
||||||
unsigned long magic;
|
unsigned long magic;
|
||||||
char u_comm[32];
|
char u_comm[32];
|
||||||
};
|
};
|
||||||
|
@ -120,19 +120,22 @@ linux_sys_ptrace_arch(p, v, retval) /* XXX Check me! (From NetBSD/i386) */
|
||||||
struct reg *regs = NULL;
|
struct reg *regs = NULL;
|
||||||
struct fpreg *fpregs = NULL;
|
struct fpreg *fpregs = NULL;
|
||||||
struct linux_pt_regs *linux_regs = NULL;
|
struct linux_pt_regs *linux_regs = NULL;
|
||||||
double *linux_fpreg=NULL; /* it's an array, not a struct */
|
double *linux_fpreg = NULL; /* it's an array, not a struct */
|
||||||
int addr;
|
int addr;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
request = SCARG(uap, request);
|
|
||||||
|
|
||||||
if ((request != LINUX_PTRACE_PEEKUSR) &&
|
switch (request = SCARG(uap, request)) {
|
||||||
(request != LINUX_PTRACE_POKEUSR) &&
|
case LINUX_PTRACE_PEEKUSR:
|
||||||
(request != LINUX_PTRACE_GETREGS) &&
|
case LINUX_PTRACE_POKEUSR:
|
||||||
(request != LINUX_PTRACE_SETREGS) &&
|
case LINUX_PTRACE_GETREGS:
|
||||||
(request != LINUX_PTRACE_GETFPREGS) &&
|
case LINUX_PTRACE_SETREGS:
|
||||||
(request != LINUX_PTRACE_SETFPREGS))
|
case LINUX_PTRACE_GETFPREGS:
|
||||||
|
case LINUX_PTRACE_SETFPREGS:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
return EIO;
|
return EIO;
|
||||||
|
}
|
||||||
|
|
||||||
/* Find the process we're supposed to be operating on. */
|
/* Find the process we're supposed to be operating on. */
|
||||||
if ((t = pfind(SCARG(uap, pid))) == NULL)
|
if ((t = pfind(SCARG(uap, pid))) == NULL)
|
||||||
|
@ -169,7 +172,7 @@ linux_sys_ptrace_arch(p, v, retval) /* XXX Check me! (From NetBSD/i386) */
|
||||||
switch (request) {
|
switch (request) {
|
||||||
case LINUX_PTRACE_GETREGS:
|
case LINUX_PTRACE_GETREGS:
|
||||||
MALLOC(regs, struct reg*, sizeof(struct reg), M_TEMP, M_WAITOK);
|
MALLOC(regs, struct reg*, sizeof(struct reg), M_TEMP, M_WAITOK);
|
||||||
MALLOC(linux_regs, struct linux_pt_regs*, sizeof(struct linux_pt_regs),
|
MALLOC(linux_regs, struct linux_pt_regs*, sizeof(*linux_regs),
|
||||||
M_TEMP, M_WAITOK);
|
M_TEMP, M_WAITOK);
|
||||||
|
|
||||||
error = process_read_regs(t, regs);
|
error = process_read_regs(t, regs);
|
||||||
|
@ -180,7 +183,8 @@ linux_sys_ptrace_arch(p, v, retval) /* XXX Check me! (From NetBSD/i386) */
|
||||||
linux_regs->lgpr[i] = regs->fixreg[i];
|
linux_regs->lgpr[i] = regs->fixreg[i];
|
||||||
linux_regs->lnip = regs->pc;
|
linux_regs->lnip = regs->pc;
|
||||||
linux_regs->lmsr = 0;
|
linux_regs->lmsr = 0;
|
||||||
linux_regs->lorig_gpr3 = regs->fixreg[3]; /* XXX Is that right? */
|
/* XXX Is that right? */
|
||||||
|
linux_regs->lorig_gpr3 = regs->fixreg[3];
|
||||||
linux_regs->lctr = regs->ctr;
|
linux_regs->lctr = regs->ctr;
|
||||||
linux_regs->llink = regs->lr;
|
linux_regs->llink = regs->lr;
|
||||||
linux_regs->lxer = regs->xer;
|
linux_regs->lxer = regs->xer;
|
||||||
|
@ -197,7 +201,7 @@ linux_sys_ptrace_arch(p, v, retval) /* XXX Check me! (From NetBSD/i386) */
|
||||||
|
|
||||||
case LINUX_PTRACE_SETREGS:
|
case LINUX_PTRACE_SETREGS:
|
||||||
MALLOC(regs, struct reg*, sizeof(struct reg), M_TEMP, M_WAITOK);
|
MALLOC(regs, struct reg*, sizeof(struct reg), M_TEMP, M_WAITOK);
|
||||||
MALLOC(linux_regs, struct linux_pt_regs*, sizeof(struct linux_pt_regs),
|
MALLOC(linux_regs, struct linux_pt_regs*, sizeof(*linux_regs),
|
||||||
M_TEMP, M_WAITOK);
|
M_TEMP, M_WAITOK);
|
||||||
|
|
||||||
error = copyin((caddr_t)SCARG(uap, data), linux_regs,
|
error = copyin((caddr_t)SCARG(uap, data), linux_regs,
|
||||||
|
|
Loading…
Reference in New Issue