[SPARC]: Remove SunOS and Solaris binary support.
As per Documentation/feature-removal-schedule.txt Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -9,9 +9,9 @@ EXTRA_AFLAGS := -ansi
|
||||
IRQ_OBJS := irq.o sun4m_irq.o sun4c_irq.o sun4d_irq.o
|
||||
obj-y := entry.o wof.o wuf.o etrap.o rtrap.o traps.o $(IRQ_OBJS) \
|
||||
process.o signal.o ioport.o setup.o idprom.o \
|
||||
sys_sparc.o sunos_asm.o systbls.o \
|
||||
time.o windows.o cpu.o devices.o sclow.o \
|
||||
tadpole.o tick14.o ptrace.o sys_solaris.o \
|
||||
sys_sparc.o systbls.o \
|
||||
time.o windows.o cpu.o devices.o \
|
||||
tadpole.o tick14.o ptrace.o \
|
||||
unaligned.o una_asm.o muldiv.o \
|
||||
prom.o of_device.o devres.o
|
||||
|
||||
@@ -25,7 +25,3 @@ obj-$(CONFIG_PCI) += ebus.o
|
||||
obj-$(CONFIG_SUN_PM) += apc.o pmc.o
|
||||
obj-$(CONFIG_MODULES) += module.o sparc_ksyms.o
|
||||
obj-$(CONFIG_SPARC_LED) += led.o
|
||||
|
||||
ifdef CONFIG_SUNOS_EMUL
|
||||
obj-y += sys_sunos.o sunos_ioctl.o
|
||||
endif
|
||||
|
@@ -1186,36 +1186,6 @@ srmmu_fault:
|
||||
|
||||
RESTORE_ALL
|
||||
|
||||
#ifdef CONFIG_SUNOS_EMUL
|
||||
/* SunOS uses syscall zero as the 'indirect syscall' it looks
|
||||
* like indir_syscall(scall_num, arg0, arg1, arg2...); etc.
|
||||
* This is complete brain damage.
|
||||
*/
|
||||
.globl sunos_indir
|
||||
sunos_indir:
|
||||
mov %o7, %l4
|
||||
cmp %o0, NR_SYSCALLS
|
||||
blu,a 1f
|
||||
sll %o0, 0x2, %o0
|
||||
|
||||
sethi %hi(sunos_nosys), %l6
|
||||
b 2f
|
||||
or %l6, %lo(sunos_nosys), %l6
|
||||
|
||||
1:
|
||||
set sunos_sys_table, %l7
|
||||
ld [%l7 + %o0], %l6
|
||||
|
||||
2:
|
||||
mov %o1, %o0
|
||||
mov %o2, %o1
|
||||
mov %o3, %o2
|
||||
mov %o4, %o3
|
||||
mov %o5, %o4
|
||||
call %l6
|
||||
mov %l4, %o7
|
||||
#endif
|
||||
|
||||
.align 4
|
||||
.globl sys_nis_syscall
|
||||
sys_nis_syscall:
|
||||
@@ -1232,6 +1202,16 @@ sys_execve:
|
||||
call sparc_execve
|
||||
mov %l5, %o7
|
||||
|
||||
.globl sunos_execv
|
||||
sunos_execv:
|
||||
st %g0, [%sp + STACKFRAME_SZ + PT_I2]
|
||||
|
||||
call sparc_execve
|
||||
add %sp, STACKFRAME_SZ, %o0
|
||||
|
||||
b ret_sys_call
|
||||
ld [%sp + STACKFRAME_SZ + PT_I0], %o0
|
||||
|
||||
.align 4
|
||||
.globl sys_pipe
|
||||
sys_pipe:
|
||||
@@ -1394,7 +1374,7 @@ ret_from_fork:
|
||||
b ret_sys_call
|
||||
ld [%sp + STACKFRAME_SZ + PT_I0], %o0
|
||||
|
||||
/* Linux native and SunOS system calls enter here... */
|
||||
/* Linux native system calls enter here... */
|
||||
.align 4
|
||||
.globl linux_sparc_syscall
|
||||
linux_sparc_syscall:
|
||||
@@ -1472,170 +1452,6 @@ linux_syscall_trace2:
|
||||
st %l2, [%sp + STACKFRAME_SZ + PT_NPC]
|
||||
|
||||
|
||||
/*
|
||||
* Solaris system calls and indirect system calls enter here.
|
||||
*
|
||||
* I have named the solaris indirect syscalls like that because
|
||||
* it seems like Solaris has some fast path syscalls that can
|
||||
* be handled as indirect system calls. - mig
|
||||
*/
|
||||
|
||||
linux_syscall_for_solaris:
|
||||
sethi %hi(sys_call_table), %l7
|
||||
b linux_sparc_syscall
|
||||
or %l7, %lo(sys_call_table), %l7
|
||||
|
||||
.align 4
|
||||
.globl solaris_syscall
|
||||
solaris_syscall:
|
||||
cmp %g1,59
|
||||
be linux_syscall_for_solaris
|
||||
cmp %g1,2
|
||||
be linux_syscall_for_solaris
|
||||
cmp %g1,42
|
||||
be linux_syscall_for_solaris
|
||||
cmp %g1,119
|
||||
be,a linux_syscall_for_solaris
|
||||
mov 2, %g1
|
||||
1:
|
||||
SAVE_ALL_HEAD
|
||||
rd %wim, %l3
|
||||
|
||||
wr %l0, PSR_ET, %psr
|
||||
nop
|
||||
nop
|
||||
mov %i0, %l5
|
||||
|
||||
call do_solaris_syscall
|
||||
add %sp, STACKFRAME_SZ, %o0
|
||||
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I0]
|
||||
set PSR_C, %g2
|
||||
cmp %o0, -ERESTART_RESTARTBLOCK
|
||||
bgeu 1f
|
||||
ld [%sp + STACKFRAME_SZ + PT_PSR], %g3
|
||||
|
||||
/* System call success, clear Carry condition code. */
|
||||
andn %g3, %g2, %g3
|
||||
clr %l6
|
||||
b 2f
|
||||
st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
|
||||
|
||||
1:
|
||||
/* System call failure, set Carry condition code.
|
||||
* Also, get abs(errno) to return to the process.
|
||||
*/
|
||||
sub %g0, %o0, %o0
|
||||
mov 1, %l6
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I0]
|
||||
or %g3, %g2, %g3
|
||||
st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
|
||||
|
||||
/* Advance the pc and npc over the trap instruction.
|
||||
* If the npc is unaligned (has a 1 in the lower byte), it means
|
||||
* the kernel does not want us to play magic (ie, skipping over
|
||||
* traps). Mainly when the Solaris code wants to set some PC and
|
||||
* nPC (setcontext).
|
||||
*/
|
||||
2:
|
||||
ld [%sp + STACKFRAME_SZ + PT_NPC], %l1 /* pc = npc */
|
||||
andcc %l1, 1, %g0
|
||||
bne 1f
|
||||
add %l1, 0x4, %l2 /* npc = npc+4 */
|
||||
st %l1, [%sp + STACKFRAME_SZ + PT_PC]
|
||||
b ret_trap_entry
|
||||
st %l2, [%sp + STACKFRAME_SZ + PT_NPC]
|
||||
|
||||
/* kernel knows what it is doing, fixup npc and continue */
|
||||
1:
|
||||
sub %l1, 1, %l1
|
||||
b ret_trap_entry
|
||||
st %l1, [%sp + STACKFRAME_SZ + PT_NPC]
|
||||
|
||||
#ifndef CONFIG_SUNOS_EMUL
|
||||
.align 4
|
||||
.globl sunos_syscall
|
||||
sunos_syscall:
|
||||
SAVE_ALL_HEAD
|
||||
rd %wim, %l3
|
||||
wr %l0, PSR_ET, %psr
|
||||
nop
|
||||
nop
|
||||
mov %i0, %l5
|
||||
call do_sunos_syscall
|
||||
add %sp, STACKFRAME_SZ, %o0
|
||||
#endif
|
||||
|
||||
/* {net, open}bsd system calls enter here... */
|
||||
.align 4
|
||||
.globl bsd_syscall
|
||||
bsd_syscall:
|
||||
/* Direct access to user regs, must faster. */
|
||||
cmp %g1, NR_SYSCALLS
|
||||
blu,a 1f
|
||||
sll %g1, 2, %l4
|
||||
|
||||
set sys_ni_syscall, %l7
|
||||
b bsd_is_too_hard
|
||||
nop
|
||||
|
||||
1:
|
||||
ld [%l7 + %l4], %l7
|
||||
|
||||
.globl bsd_is_too_hard
|
||||
bsd_is_too_hard:
|
||||
rd %wim, %l3
|
||||
SAVE_ALL
|
||||
|
||||
wr %l0, PSR_ET, %psr
|
||||
WRITE_PAUSE
|
||||
|
||||
2:
|
||||
mov %i0, %o0
|
||||
mov %i1, %o1
|
||||
mov %i2, %o2
|
||||
mov %i0, %l5
|
||||
mov %i3, %o3
|
||||
mov %i4, %o4
|
||||
call %l7
|
||||
mov %i5, %o5
|
||||
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I0]
|
||||
set PSR_C, %g2
|
||||
cmp %o0, -ERESTART_RESTARTBLOCK
|
||||
bgeu 1f
|
||||
ld [%sp + STACKFRAME_SZ + PT_PSR], %g3
|
||||
|
||||
/* System call success, clear Carry condition code. */
|
||||
andn %g3, %g2, %g3
|
||||
clr %l6
|
||||
b 2f
|
||||
st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
|
||||
|
||||
1:
|
||||
/* System call failure, set Carry condition code.
|
||||
* Also, get abs(errno) to return to the process.
|
||||
*/
|
||||
sub %g0, %o0, %o0
|
||||
#if 0 /* XXX todo XXX */
|
||||
sethi %hi(bsd_xlatb_rorl), %o3
|
||||
or %o3, %lo(bsd_xlatb_rorl), %o3
|
||||
sll %o0, 2, %o0
|
||||
ld [%o3 + %o0], %o0
|
||||
#endif
|
||||
mov 1, %l6
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I0]
|
||||
or %g3, %g2, %g3
|
||||
st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
|
||||
|
||||
/* Advance the pc and npc over the trap instruction. */
|
||||
2:
|
||||
ld [%sp + STACKFRAME_SZ + PT_NPC], %l1 /* pc = npc */
|
||||
add %l1, 0x4, %l2 /* npc = npc+4 */
|
||||
st %l1, [%sp + STACKFRAME_SZ + PT_PC]
|
||||
b ret_trap_entry
|
||||
st %l2, [%sp + STACKFRAME_SZ + PT_NPC]
|
||||
|
||||
/* Saving and restoring the FPU state is best done from lowlevel code.
|
||||
*
|
||||
* void fpsave(unsigned long *fpregs, unsigned long *fsr,
|
||||
|
@@ -1,144 +0,0 @@
|
||||
/* errtbls.c: Error number conversion tables.
|
||||
*
|
||||
* Copyright (C) 1995, 2007 David S. Miller (davem@davemloft.net)
|
||||
*
|
||||
* Based upon preliminary work which is:
|
||||
*
|
||||
* Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu)
|
||||
*/
|
||||
|
||||
#include <asm/solerrno.h> /* Solaris errnos */
|
||||
|
||||
/* Here is the table which converts between Linux error number values
|
||||
* to the equivalent under Solaris. Note that since the Linux ones
|
||||
* have been set up to match exactly those of SunOS, no translation
|
||||
* table is needed for that OS.
|
||||
*/
|
||||
|
||||
int solaris_errno[] = {
|
||||
0,
|
||||
SOL_EPERM,
|
||||
SOL_ENOENT,
|
||||
SOL_ESRCH,
|
||||
SOL_EINTR,
|
||||
SOL_EIO,
|
||||
SOL_ENXIO,
|
||||
SOL_E2BIG,
|
||||
SOL_ENOEXEC,
|
||||
SOL_EBADF,
|
||||
SOL_ECHILD,
|
||||
SOL_EAGAIN,
|
||||
SOL_ENOMEM,
|
||||
SOL_EACCES,
|
||||
SOL_EFAULT,
|
||||
SOL_NOTBLK,
|
||||
SOL_EBUSY,
|
||||
SOL_EEXIST,
|
||||
SOL_EXDEV,
|
||||
SOL_ENODEV,
|
||||
SOL_ENOTDIR,
|
||||
SOL_EISDIR,
|
||||
SOL_EINVAL,
|
||||
SOL_ENFILE,
|
||||
SOL_EMFILE,
|
||||
SOL_ENOTTY,
|
||||
SOL_ETXTBSY,
|
||||
SOL_EFBIG,
|
||||
SOL_ENOSPC,
|
||||
SOL_ESPIPE,
|
||||
SOL_EROFS,
|
||||
SOL_EMLINK,
|
||||
SOL_EPIPE,
|
||||
SOL_EDOM,
|
||||
SOL_ERANGE,
|
||||
SOL_EWOULDBLOCK,
|
||||
SOL_EINPROGRESS,
|
||||
SOL_EALREADY,
|
||||
SOL_ENOTSOCK,
|
||||
SOL_EDESTADDRREQ,
|
||||
SOL_EMSGSIZE,
|
||||
SOL_EPROTOTYPE,
|
||||
SOL_ENOPROTOOPT,
|
||||
SOL_EPROTONOSUPPORT,
|
||||
SOL_ESOCKTNOSUPPORT,
|
||||
SOL_EOPNOTSUPP,
|
||||
SOL_EPFNOSUPPORT,
|
||||
SOL_EAFNOSUPPORT,
|
||||
SOL_EADDRINUSE,
|
||||
SOL_EADDRNOTAVAIL,
|
||||
SOL_ENETDOWN,
|
||||
SOL_ENETUNREACH,
|
||||
SOL_ENETRESET,
|
||||
SOL_ECONNABORTED,
|
||||
SOL_ECONNRESET,
|
||||
SOL_ENOBUFS,
|
||||
SOL_EISCONN,
|
||||
SOL_ENOTONN,
|
||||
SOL_ESHUTDOWN,
|
||||
SOL_ETOOMANYREFS,
|
||||
SOL_ETIMEDOUT,
|
||||
SOL_ECONNREFUSED,
|
||||
SOL_ELOOP,
|
||||
SOL_ENAMETOOLONG,
|
||||
SOL_EHOSTDOWN,
|
||||
SOL_EHOSTUNREACH,
|
||||
SOL_ENOTEMPTY,
|
||||
SOL_EPROCLIM,
|
||||
SOL_EUSERS,
|
||||
SOL_EDQUOT,
|
||||
SOL_ESTALE,
|
||||
SOL_EREMOTE,
|
||||
SOL_ENOSTR,
|
||||
SOL_ETIME,
|
||||
SOL_ENOSR,
|
||||
SOL_ENOMSG,
|
||||
SOL_EBADMSG,
|
||||
SOL_IDRM,
|
||||
SOL_EDEADLK,
|
||||
SOL_ENOLCK,
|
||||
SOL_ENONET,
|
||||
SOL_ERREMOTE,
|
||||
SOL_ENOLINK,
|
||||
SOL_EADV,
|
||||
SOL_ESRMNT,
|
||||
SOL_ECOMM,
|
||||
SOL_EPROTO,
|
||||
SOL_EMULTIHOP,
|
||||
SOL_EINVAL, /* EDOTDOT XXX??? */
|
||||
SOL_REMCHG,
|
||||
SOL_NOSYS,
|
||||
SOL_STRPIPE,
|
||||
SOL_EOVERFLOW,
|
||||
SOL_EBADFD,
|
||||
SOL_ECHRNG,
|
||||
SOL_EL2NSYNC,
|
||||
SOL_EL3HLT,
|
||||
SOL_EL3RST,
|
||||
SOL_NRNG,
|
||||
SOL_EUNATCH,
|
||||
SOL_ENOCSI,
|
||||
SOL_EL2HLT,
|
||||
SOL_EBADE,
|
||||
SOL_EBADR,
|
||||
SOL_EXFULL,
|
||||
SOL_ENOANO,
|
||||
SOL_EBADRQC,
|
||||
SOL_EBADSLT,
|
||||
SOL_EDEADLOCK,
|
||||
SOL_EBFONT,
|
||||
SOL_ELIBEXEC,
|
||||
SOL_ENODATA,
|
||||
SOL_ELIBBAD,
|
||||
SOL_ENOPKG,
|
||||
SOL_ELIBACC,
|
||||
SOL_ENOTUNIQ,
|
||||
SOL_ERESTART,
|
||||
SOL_EUCLEAN,
|
||||
SOL_ENOTNAM,
|
||||
SOL_ENAVAIL,
|
||||
SOL_EISNAM,
|
||||
SOL_EREMOTEIO,
|
||||
SOL_EILSEQ,
|
||||
SOL_ELIBMAX,
|
||||
SOL_ELIBSCN,
|
||||
};
|
@@ -78,11 +78,6 @@ sun4e_notsup:
|
||||
.asciz "Sparc-Linux sun4e support does not exist\n\n"
|
||||
.align 4
|
||||
|
||||
#ifndef CONFIG_SUNOS_EMUL
|
||||
#undef SUNOS_SYSCALL_TRAP
|
||||
#define SUNOS_SYSCALL_TRAP SUNOS_NO_SYSCALL_TRAP
|
||||
#endif
|
||||
|
||||
/* The Sparc trap table, bootloader gives us control at _start. */
|
||||
.text
|
||||
.globl start, _stext, _start, __stext
|
||||
@@ -158,7 +153,7 @@ t_bad6f:BAD_TRAP(0x6f) BAD_TRAP(0x70) BAD_TRAP(0x71) BAD_TRAP(0x72) BAD_TRAP(0x7
|
||||
t_bad74:BAD_TRAP(0x74) BAD_TRAP(0x75) BAD_TRAP(0x76) BAD_TRAP(0x77) BAD_TRAP(0x78)
|
||||
t_bad79:BAD_TRAP(0x79) BAD_TRAP(0x7a) BAD_TRAP(0x7b) BAD_TRAP(0x7c) BAD_TRAP(0x7d)
|
||||
t_bad7e:BAD_TRAP(0x7e) BAD_TRAP(0x7f)
|
||||
t_sunos:SUNOS_SYSCALL_TRAP /* SunOS System Call */
|
||||
t_bad80:BAD_TRAP(0x80) /* SunOS System Call */
|
||||
t_sbkpt:BREAKPOINT_TRAP /* Software Breakpoint/KGDB */
|
||||
t_divz: TRAP_ENTRY(0x82, do_hw_divzero) /* Divide by zero trap */
|
||||
t_flwin:TRAP_ENTRY(0x83, do_flush_windows) /* Flush Windows Trap */
|
||||
@@ -166,8 +161,8 @@ t_clwin:BAD_TRAP(0x84) /* Clean Windows Trap */
|
||||
t_rchk: BAD_TRAP(0x85) /* Range Check */
|
||||
t_funal:BAD_TRAP(0x86) /* Fix Unaligned Access Trap */
|
||||
t_iovf: BAD_TRAP(0x87) /* Integer Overflow Trap */
|
||||
t_slowl:SOLARIS_SYSCALL_TRAP /* Slowaris System Call */
|
||||
t_netbs:NETBSD_SYSCALL_TRAP /* Net-B.S. System Call */
|
||||
t_bad88:BAD_TRAP(0x88) /* Slowaris System Call */
|
||||
t_bad89:BAD_TRAP(0x89) /* Net-B.S. System Call */
|
||||
t_bad8a:BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c) BAD_TRAP(0x8d) BAD_TRAP(0x8e)
|
||||
t_bad8f:BAD_TRAP(0x8f)
|
||||
t_linux:LINUX_SYSCALL_TRAP /* Linux System Call */
|
||||
@@ -178,7 +173,7 @@ t_getcc:GETCC_TRAP /* Get Condition Codes */
|
||||
t_setcc:SETCC_TRAP /* Set Condition Codes */
|
||||
t_getpsr:GETPSR_TRAP /* Get PSR Register */
|
||||
t_bada3:BAD_TRAP(0xa3) BAD_TRAP(0xa4) BAD_TRAP(0xa5) BAD_TRAP(0xa6)
|
||||
t_slowi:INDIRECT_SOLARIS_SYSCALL(156)
|
||||
t_bada7:BAD_TRAP(0xa7)
|
||||
t_bada8:BAD_TRAP(0xa8) BAD_TRAP(0xa9) BAD_TRAP(0xaa) BAD_TRAP(0xab)
|
||||
t_badac:BAD_TRAP(0xac) BAD_TRAP(0xad) BAD_TRAP(0xae) BAD_TRAP(0xaf) BAD_TRAP(0xb0)
|
||||
t_badb1:BAD_TRAP(0xb1) BAD_TRAP(0xb2) BAD_TRAP(0xb3) BAD_TRAP(0xb4) BAD_TRAP(0xb5)
|
||||
@@ -243,19 +238,19 @@ trapbase_cpu1:
|
||||
BAD_TRAP(0x74) BAD_TRAP(0x75) BAD_TRAP(0x76) BAD_TRAP(0x77) BAD_TRAP(0x78)
|
||||
BAD_TRAP(0x79) BAD_TRAP(0x7a) BAD_TRAP(0x7b) BAD_TRAP(0x7c) BAD_TRAP(0x7d)
|
||||
BAD_TRAP(0x7e) BAD_TRAP(0x7f)
|
||||
SUNOS_SYSCALL_TRAP
|
||||
BAD_TRAP(0x80)
|
||||
BREAKPOINT_TRAP
|
||||
TRAP_ENTRY(0x82, do_hw_divzero)
|
||||
TRAP_ENTRY(0x83, do_flush_windows) BAD_TRAP(0x84) BAD_TRAP(0x85)
|
||||
BAD_TRAP(0x86) BAD_TRAP(0x87) SOLARIS_SYSCALL_TRAP
|
||||
NETBSD_SYSCALL_TRAP BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c)
|
||||
BAD_TRAP(0x86) BAD_TRAP(0x87) BAD_TRAP(0x88)
|
||||
BAD_TRAP(0x89) BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c)
|
||||
BAD_TRAP(0x8d) BAD_TRAP(0x8e) BAD_TRAP(0x8f)
|
||||
LINUX_SYSCALL_TRAP BAD_TRAP(0x91) BAD_TRAP(0x92) BAD_TRAP(0x93) BAD_TRAP(0x94)
|
||||
BAD_TRAP(0x95) BAD_TRAP(0x96) BAD_TRAP(0x97) BAD_TRAP(0x98) BAD_TRAP(0x99)
|
||||
BAD_TRAP(0x9a) BAD_TRAP(0x9b) BAD_TRAP(0x9c) BAD_TRAP(0x9d) BAD_TRAP(0x9e)
|
||||
BAD_TRAP(0x9f) GETCC_TRAP SETCC_TRAP GETPSR_TRAP
|
||||
BAD_TRAP(0xa3) BAD_TRAP(0xa4) BAD_TRAP(0xa5) BAD_TRAP(0xa6)
|
||||
INDIRECT_SOLARIS_SYSCALL(156) BAD_TRAP(0xa8) BAD_TRAP(0xa9) BAD_TRAP(0xaa) BAD_TRAP(0xab)
|
||||
BAD_TRAP(0xa7) BAD_TRAP(0xa8) BAD_TRAP(0xa9) BAD_TRAP(0xaa) BAD_TRAP(0xab)
|
||||
BAD_TRAP(0xac) BAD_TRAP(0xad) BAD_TRAP(0xae) BAD_TRAP(0xaf) BAD_TRAP(0xb0)
|
||||
BAD_TRAP(0xb1) BAD_TRAP(0xb2) BAD_TRAP(0xb3) BAD_TRAP(0xb4) BAD_TRAP(0xb5)
|
||||
BAD_TRAP(0xb6) BAD_TRAP(0xb7) BAD_TRAP(0xb8) BAD_TRAP(0xb9) BAD_TRAP(0xba)
|
||||
@@ -311,19 +306,19 @@ trapbase_cpu2:
|
||||
BAD_TRAP(0x74) BAD_TRAP(0x75) BAD_TRAP(0x76) BAD_TRAP(0x77) BAD_TRAP(0x78)
|
||||
BAD_TRAP(0x79) BAD_TRAP(0x7a) BAD_TRAP(0x7b) BAD_TRAP(0x7c) BAD_TRAP(0x7d)
|
||||
BAD_TRAP(0x7e) BAD_TRAP(0x7f)
|
||||
SUNOS_SYSCALL_TRAP
|
||||
BAD_TRAP(0x80)
|
||||
BREAKPOINT_TRAP
|
||||
TRAP_ENTRY(0x82, do_hw_divzero)
|
||||
TRAP_ENTRY(0x83, do_flush_windows) BAD_TRAP(0x84) BAD_TRAP(0x85)
|
||||
BAD_TRAP(0x86) BAD_TRAP(0x87) SOLARIS_SYSCALL_TRAP
|
||||
NETBSD_SYSCALL_TRAP BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c)
|
||||
BAD_TRAP(0x86) BAD_TRAP(0x87) BAD_TRAP(0x88)
|
||||
BAD_TRAP(0x89) BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c)
|
||||
BAD_TRAP(0x8d) BAD_TRAP(0x8e) BAD_TRAP(0x8f)
|
||||
LINUX_SYSCALL_TRAP BAD_TRAP(0x91) BAD_TRAP(0x92) BAD_TRAP(0x93) BAD_TRAP(0x94)
|
||||
BAD_TRAP(0x95) BAD_TRAP(0x96) BAD_TRAP(0x97) BAD_TRAP(0x98) BAD_TRAP(0x99)
|
||||
BAD_TRAP(0x9a) BAD_TRAP(0x9b) BAD_TRAP(0x9c) BAD_TRAP(0x9d) BAD_TRAP(0x9e)
|
||||
BAD_TRAP(0x9f) GETCC_TRAP SETCC_TRAP GETPSR_TRAP
|
||||
BAD_TRAP(0xa3) BAD_TRAP(0xa4) BAD_TRAP(0xa5) BAD_TRAP(0xa6)
|
||||
INDIRECT_SOLARIS_SYSCALL(156) BAD_TRAP(0xa8) BAD_TRAP(0xa9) BAD_TRAP(0xaa) BAD_TRAP(0xab)
|
||||
BAD_TRAP(0xa7) BAD_TRAP(0xa8) BAD_TRAP(0xa9) BAD_TRAP(0xaa) BAD_TRAP(0xab)
|
||||
BAD_TRAP(0xac) BAD_TRAP(0xad) BAD_TRAP(0xae) BAD_TRAP(0xaf) BAD_TRAP(0xb0)
|
||||
BAD_TRAP(0xb1) BAD_TRAP(0xb2) BAD_TRAP(0xb3) BAD_TRAP(0xb4) BAD_TRAP(0xb5)
|
||||
BAD_TRAP(0xb6) BAD_TRAP(0xb7) BAD_TRAP(0xb8) BAD_TRAP(0xb9) BAD_TRAP(0xba)
|
||||
@@ -379,19 +374,19 @@ trapbase_cpu3:
|
||||
BAD_TRAP(0x74) BAD_TRAP(0x75) BAD_TRAP(0x76) BAD_TRAP(0x77) BAD_TRAP(0x78)
|
||||
BAD_TRAP(0x79) BAD_TRAP(0x7a) BAD_TRAP(0x7b) BAD_TRAP(0x7c) BAD_TRAP(0x7d)
|
||||
BAD_TRAP(0x7e) BAD_TRAP(0x7f)
|
||||
SUNOS_SYSCALL_TRAP
|
||||
BAD_TRAP(0x80)
|
||||
BREAKPOINT_TRAP
|
||||
TRAP_ENTRY(0x82, do_hw_divzero)
|
||||
TRAP_ENTRY(0x83, do_flush_windows) BAD_TRAP(0x84) BAD_TRAP(0x85)
|
||||
BAD_TRAP(0x86) BAD_TRAP(0x87) SOLARIS_SYSCALL_TRAP
|
||||
NETBSD_SYSCALL_TRAP BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c)
|
||||
BAD_TRAP(0x86) BAD_TRAP(0x87) BAD_TRAP(0x88)
|
||||
BAD_TRAP(0x89) BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c)
|
||||
BAD_TRAP(0x8d) BAD_TRAP(0x8e) BAD_TRAP(0x8f)
|
||||
LINUX_SYSCALL_TRAP BAD_TRAP(0x91) BAD_TRAP(0x92) BAD_TRAP(0x93) BAD_TRAP(0x94)
|
||||
BAD_TRAP(0x95) BAD_TRAP(0x96) BAD_TRAP(0x97) BAD_TRAP(0x98) BAD_TRAP(0x99)
|
||||
BAD_TRAP(0x9a) BAD_TRAP(0x9b) BAD_TRAP(0x9c) BAD_TRAP(0x9d) BAD_TRAP(0x9e)
|
||||
BAD_TRAP(0x9f) GETCC_TRAP SETCC_TRAP GETPSR_TRAP
|
||||
BAD_TRAP(0xa3) BAD_TRAP(0xa4) BAD_TRAP(0xa5) BAD_TRAP(0xa6)
|
||||
INDIRECT_SOLARIS_SYSCALL(156) BAD_TRAP(0xa8) BAD_TRAP(0xa9) BAD_TRAP(0xaa) BAD_TRAP(0xab)
|
||||
BAD_TRAP(0xa7) BAD_TRAP(0xa8) BAD_TRAP(0xa9) BAD_TRAP(0xaa) BAD_TRAP(0xab)
|
||||
BAD_TRAP(0xac) BAD_TRAP(0xad) BAD_TRAP(0xae) BAD_TRAP(0xaf) BAD_TRAP(0xb0)
|
||||
BAD_TRAP(0xb1) BAD_TRAP(0xb2) BAD_TRAP(0xb3) BAD_TRAP(0xb4) BAD_TRAP(0xb5)
|
||||
BAD_TRAP(0xb6) BAD_TRAP(0xb7) BAD_TRAP(0xb8) BAD_TRAP(0xb9) BAD_TRAP(0xba)
|
||||
|
@@ -1,86 +0,0 @@
|
||||
/* sclow.S: Low level special syscall handling.
|
||||
* Basically these are cases where we can completely
|
||||
* handle the system call without saving any state
|
||||
* because we know that the process will not sleep.
|
||||
*
|
||||
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
|
||||
*/
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/winmacro.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/psr.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
#define CC_AND_RETT \
|
||||
set PSR_C, %l4; \
|
||||
andn %l0, %l4, %l4; \
|
||||
wr %l4, 0x0, %psr; \
|
||||
nop; nop; nop; \
|
||||
jmp %l2; \
|
||||
rett %l2 + 4;
|
||||
|
||||
#define SC_AND_RETT \
|
||||
set PSR_C, %l4; \
|
||||
or %l0, %l4, %l4; \
|
||||
wr %l4, 0x0, %psr; \
|
||||
nop; nop; nop; \
|
||||
jmp %l2; \
|
||||
rett %l2 + 4;
|
||||
|
||||
#define LABEL(func) func##_low
|
||||
|
||||
.globl LABEL(sunosnop)
|
||||
LABEL(sunosnop):
|
||||
CC_AND_RETT
|
||||
|
||||
#if (ASIZ_task_uid == 2 && ASIZ_task_euid == 2)
|
||||
.globl LABEL(sunosgetuid)
|
||||
LABEL(sunosgetuid):
|
||||
LOAD_CURRENT(l4, l5)
|
||||
ld [%l4 + TI_TASK], %l4
|
||||
lduh [%l4 + AOFF_task_uid], %i0
|
||||
lduh [%l4 + AOFF_task_euid], %i1
|
||||
CC_AND_RETT
|
||||
#endif
|
||||
|
||||
#if (ASIZ_task_gid == 2 && ASIZ_task_egid == 2)
|
||||
.globl LABEL(sunosgetgid)
|
||||
LABEL(sunosgetgid):
|
||||
LOAD_CURRENT(l4, l5)
|
||||
ld [%l4 + TI_TASK], %l4
|
||||
lduh [%l4 + AOFF_task_gid], %i0
|
||||
lduh [%l4 + AOFF_task_egid], %i1
|
||||
CC_AND_RETT
|
||||
#endif
|
||||
|
||||
.globl LABEL(sunosmctl)
|
||||
LABEL(sunosmctl):
|
||||
mov 0, %i0
|
||||
CC_AND_RETT
|
||||
|
||||
.globl LABEL(sunosgdtsize)
|
||||
LABEL(sunosgdtsize):
|
||||
mov 256, %i0
|
||||
CC_AND_RETT
|
||||
|
||||
.globl LABEL(getpagesize)
|
||||
LABEL(getpagesize):
|
||||
set PAGE_SIZE, %i0
|
||||
CC_AND_RETT
|
||||
|
||||
/* XXX sys_nice() XXX */
|
||||
/* XXX sys_setpriority() XXX */
|
||||
/* XXX sys_getpriority() XXX */
|
||||
/* XXX sys_setregid() XXX */
|
||||
/* XXX sys_setgid() XXX */
|
||||
/* XXX sys_setreuid() XXX */
|
||||
/* XXX sys_setuid() XXX */
|
||||
/* XXX sys_setfsuid() XXX */
|
||||
/* XXX sys_setfsgid() XXX */
|
||||
/* XXX sys_setpgid() XXX */
|
||||
/* XXX sys_getpgid() XXX */
|
||||
/* XXX sys_setsid() XXX */
|
||||
/* XXX sys_getsid() XXX */
|
@@ -22,7 +22,6 @@
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/svr4.h>
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/cacheflush.h> /* flush_sig_insns */
|
||||
@@ -454,7 +453,6 @@ setup_frame(struct sigaction *sa, struct pt_regs *regs, int signr, sigset_t *old
|
||||
break;
|
||||
case SIGSYS:
|
||||
if (info->si_code == (__SI_FAULT|0x100)) {
|
||||
/* See sys_sunos.c */
|
||||
sig_code = info->si_trapno;
|
||||
break;
|
||||
}
|
||||
@@ -676,291 +674,17 @@ sigsegv:
|
||||
force_sigsegv(signo, current);
|
||||
}
|
||||
|
||||
/* Setup a Solaris stack frame */
|
||||
static inline void
|
||||
setup_svr4_frame(struct sigaction *sa, unsigned long pc, unsigned long npc,
|
||||
struct pt_regs *regs, int signr, sigset_t *oldset)
|
||||
{
|
||||
svr4_signal_frame_t __user *sfp;
|
||||
svr4_gregset_t __user *gr;
|
||||
svr4_siginfo_t __user *si;
|
||||
svr4_mcontext_t __user *mc;
|
||||
svr4_gwindows_t __user *gw;
|
||||
svr4_ucontext_t __user *uc;
|
||||
svr4_sigset_t setv;
|
||||
struct thread_info *tp = current_thread_info();
|
||||
int window = 0, err;
|
||||
|
||||
synchronize_user_stack();
|
||||
sfp = (svr4_signal_frame_t __user *)
|
||||
get_sigframe(sa, regs, SVR4_SF_ALIGNED + sizeof(struct reg_window));
|
||||
|
||||
if (invalid_frame_pointer(sfp, sizeof(*sfp)))
|
||||
goto sigill_and_return;
|
||||
|
||||
/* Start with a clean frame pointer and fill it */
|
||||
err = __clear_user(sfp, sizeof(*sfp));
|
||||
|
||||
/* Setup convenience variables */
|
||||
si = &sfp->si;
|
||||
uc = &sfp->uc;
|
||||
gw = &sfp->gw;
|
||||
mc = &uc->mcontext;
|
||||
gr = &mc->greg;
|
||||
|
||||
/* FIXME: where am I supposed to put this?
|
||||
* sc->sigc_onstack = old_status;
|
||||
* anyways, it does not look like it is used for anything at all.
|
||||
*/
|
||||
setv.sigbits[0] = oldset->sig[0];
|
||||
setv.sigbits[1] = oldset->sig[1];
|
||||
if (_NSIG_WORDS >= 4) {
|
||||
setv.sigbits[2] = oldset->sig[2];
|
||||
setv.sigbits[3] = oldset->sig[3];
|
||||
err |= __copy_to_user(&uc->sigmask, &setv, sizeof(svr4_sigset_t));
|
||||
} else
|
||||
err |= __copy_to_user(&uc->sigmask, &setv,
|
||||
2 * sizeof(unsigned int));
|
||||
|
||||
/* Store registers */
|
||||
err |= __put_user(regs->pc, &((*gr)[SVR4_PC]));
|
||||
err |= __put_user(regs->npc, &((*gr)[SVR4_NPC]));
|
||||
err |= __put_user(regs->psr, &((*gr)[SVR4_PSR]));
|
||||
err |= __put_user(regs->y, &((*gr)[SVR4_Y]));
|
||||
|
||||
/* Copy g[1..7] and o[0..7] registers */
|
||||
err |= __copy_to_user(&(*gr)[SVR4_G1], ®s->u_regs[UREG_G1],
|
||||
sizeof(long) * 7);
|
||||
err |= __copy_to_user(&(*gr)[SVR4_O0], ®s->u_regs[UREG_I0],
|
||||
sizeof(long) * 8);
|
||||
|
||||
/* Setup sigaltstack */
|
||||
err |= __put_user(current->sas_ss_sp, &uc->stack.sp);
|
||||
err |= __put_user(sas_ss_flags(regs->u_regs[UREG_FP]), &uc->stack.flags);
|
||||
err |= __put_user(current->sas_ss_size, &uc->stack.size);
|
||||
|
||||
/* Save the currently window file: */
|
||||
|
||||
/* 1. Link sfp->uc->gwins to our windows */
|
||||
err |= __put_user(gw, &mc->gwin);
|
||||
|
||||
/* 2. Number of windows to restore at setcontext(): */
|
||||
err |= __put_user(tp->w_saved, &gw->count);
|
||||
|
||||
/* 3. Save each valid window
|
||||
* Currently, it makes a copy of the windows from the kernel copy.
|
||||
* David's code for SunOS, makes the copy but keeps the pointer to
|
||||
* the kernel. My version makes the pointer point to a userland
|
||||
* copy of those. Mhm, I wonder if I shouldn't just ignore those
|
||||
* on setcontext and use those that are on the kernel, the signal
|
||||
* handler should not be modyfing those, mhm.
|
||||
*
|
||||
* These windows are just used in case synchronize_user_stack failed
|
||||
* to flush the user windows.
|
||||
*/
|
||||
for (window = 0; window < tp->w_saved; window++) {
|
||||
err |= __put_user((int __user *) &(gw->win[window]), &gw->winptr[window]);
|
||||
err |= __copy_to_user(&gw->win[window],
|
||||
&tp->reg_window[window],
|
||||
sizeof(svr4_rwindow_t));
|
||||
err |= __put_user(0, gw->winptr[window]);
|
||||
}
|
||||
|
||||
/* 4. We just pay attention to the gw->count field on setcontext */
|
||||
tp->w_saved = 0; /* So process is allowed to execute. */
|
||||
|
||||
/* Setup the signal information. Solaris expects a bunch of
|
||||
* information to be passed to the signal handler, we don't provide
|
||||
* that much currently, should use siginfo.
|
||||
*/
|
||||
err |= __put_user(signr, &si->siginfo.signo);
|
||||
err |= __put_user(SVR4_SINOINFO, &si->siginfo.code);
|
||||
if (err)
|
||||
goto sigsegv;
|
||||
|
||||
regs->u_regs[UREG_FP] = (unsigned long) sfp;
|
||||
regs->pc = (unsigned long) sa->sa_handler;
|
||||
regs->npc = (regs->pc + 4);
|
||||
|
||||
/* Arguments passed to signal handler */
|
||||
if (regs->u_regs[14]){
|
||||
struct reg_window __user *rw = (struct reg_window __user *)
|
||||
regs->u_regs[14];
|
||||
|
||||
err |= __put_user(signr, &rw->ins[0]);
|
||||
err |= __put_user(si, &rw->ins[1]);
|
||||
err |= __put_user(uc, &rw->ins[2]);
|
||||
err |= __put_user(sfp, &rw->ins[6]); /* frame pointer */
|
||||
if (err)
|
||||
goto sigsegv;
|
||||
|
||||
regs->u_regs[UREG_I0] = signr;
|
||||
regs->u_regs[UREG_I1] = (unsigned long) si;
|
||||
regs->u_regs[UREG_I2] = (unsigned long) uc;
|
||||
}
|
||||
return;
|
||||
|
||||
sigill_and_return:
|
||||
do_exit(SIGILL);
|
||||
sigsegv:
|
||||
force_sigsegv(signr, current);
|
||||
}
|
||||
|
||||
asmlinkage int svr4_getcontext(svr4_ucontext_t __user *uc, struct pt_regs *regs)
|
||||
{
|
||||
svr4_gregset_t __user *gr;
|
||||
svr4_mcontext_t __user *mc;
|
||||
svr4_sigset_t setv;
|
||||
int err = 0;
|
||||
|
||||
synchronize_user_stack();
|
||||
|
||||
if (current_thread_info()->w_saved)
|
||||
return -EFAULT;
|
||||
|
||||
err = clear_user(uc, sizeof(*uc));
|
||||
if (err)
|
||||
return -EFAULT;
|
||||
|
||||
/* Setup convenience variables */
|
||||
mc = &uc->mcontext;
|
||||
gr = &mc->greg;
|
||||
|
||||
setv.sigbits[0] = current->blocked.sig[0];
|
||||
setv.sigbits[1] = current->blocked.sig[1];
|
||||
if (_NSIG_WORDS >= 4) {
|
||||
setv.sigbits[2] = current->blocked.sig[2];
|
||||
setv.sigbits[3] = current->blocked.sig[3];
|
||||
err |= __copy_to_user(&uc->sigmask, &setv, sizeof(svr4_sigset_t));
|
||||
} else
|
||||
err |= __copy_to_user(&uc->sigmask, &setv,
|
||||
2 * sizeof(unsigned int));
|
||||
|
||||
/* Store registers */
|
||||
err |= __put_user(regs->pc, &uc->mcontext.greg[SVR4_PC]);
|
||||
err |= __put_user(regs->npc, &uc->mcontext.greg[SVR4_NPC]);
|
||||
err |= __put_user(regs->psr, &uc->mcontext.greg[SVR4_PSR]);
|
||||
err |= __put_user(regs->y, &uc->mcontext.greg[SVR4_Y]);
|
||||
|
||||
/* Copy g[1..7] and o[0..7] registers */
|
||||
err |= __copy_to_user(&(*gr)[SVR4_G1], ®s->u_regs[UREG_G1],
|
||||
sizeof(uint) * 7);
|
||||
err |= __copy_to_user(&(*gr)[SVR4_O0], ®s->u_regs[UREG_I0],
|
||||
sizeof(uint) * 8);
|
||||
|
||||
/* Setup sigaltstack */
|
||||
err |= __put_user(current->sas_ss_sp, &uc->stack.sp);
|
||||
err |= __put_user(sas_ss_flags(regs->u_regs[UREG_FP]), &uc->stack.flags);
|
||||
err |= __put_user(current->sas_ss_size, &uc->stack.size);
|
||||
|
||||
/* The register file is not saved
|
||||
* we have already stuffed all of it with sync_user_stack
|
||||
*/
|
||||
return (err ? -EFAULT : 0);
|
||||
}
|
||||
|
||||
/* Set the context for a svr4 application, this is Solaris way to sigreturn */
|
||||
asmlinkage int svr4_setcontext(svr4_ucontext_t __user *c, struct pt_regs *regs)
|
||||
{
|
||||
svr4_gregset_t __user *gr;
|
||||
unsigned long pc, npc, psr;
|
||||
mm_segment_t old_fs;
|
||||
sigset_t set;
|
||||
svr4_sigset_t setv;
|
||||
int err;
|
||||
stack_t st;
|
||||
|
||||
/* Fixme: restore windows, or is this already taken care of in
|
||||
* svr4_setup_frame when sync_user_windows is done?
|
||||
*/
|
||||
flush_user_windows();
|
||||
|
||||
if (current_thread_info()->w_saved)
|
||||
goto sigsegv_and_return;
|
||||
|
||||
if (((unsigned long) c) & 3)
|
||||
goto sigsegv_and_return;
|
||||
|
||||
if (!__access_ok((unsigned long)c, sizeof(*c)))
|
||||
goto sigsegv_and_return;
|
||||
|
||||
/* Check for valid PC and nPC */
|
||||
gr = &c->mcontext.greg;
|
||||
err = __get_user(pc, &((*gr)[SVR4_PC]));
|
||||
err |= __get_user(npc, &((*gr)[SVR4_NPC]));
|
||||
|
||||
if ((pc | npc) & 3)
|
||||
goto sigsegv_and_return;
|
||||
|
||||
/* Retrieve information from passed ucontext */
|
||||
/* note that nPC is ored a 1, this is used to inform entry.S */
|
||||
/* that we don't want it to mess with our PC and nPC */
|
||||
|
||||
/* This is pretty much atomic, no amount locking would prevent
|
||||
* the races which exist anyways.
|
||||
*/
|
||||
err |= __copy_from_user(&setv, &c->sigmask, sizeof(svr4_sigset_t));
|
||||
|
||||
err |= __get_user(st.ss_sp, &c->stack.sp);
|
||||
err |= __get_user(st.ss_flags, &c->stack.flags);
|
||||
err |= __get_user(st.ss_size, &c->stack.size);
|
||||
|
||||
if (err)
|
||||
goto sigsegv_and_return;
|
||||
|
||||
/* It is more difficult to avoid calling this function than to
|
||||
call it and ignore errors. */
|
||||
old_fs = get_fs();
|
||||
set_fs(KERNEL_DS);
|
||||
do_sigaltstack((const stack_t __user *) &st, NULL,
|
||||
regs->u_regs[UREG_I6]);
|
||||
set_fs(old_fs);
|
||||
|
||||
set.sig[0] = setv.sigbits[0];
|
||||
set.sig[1] = setv.sigbits[1];
|
||||
if (_NSIG_WORDS >= 4) {
|
||||
set.sig[2] = setv.sigbits[2];
|
||||
set.sig[3] = setv.sigbits[3];
|
||||
}
|
||||
sigdelsetmask(&set, ~_BLOCKABLE);
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
current->blocked = set;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
regs->pc = pc;
|
||||
regs->npc = npc | 1;
|
||||
err |= __get_user(regs->y, &((*gr)[SVR4_Y]));
|
||||
err |= __get_user(psr, &((*gr)[SVR4_PSR]));
|
||||
regs->psr &= ~(PSR_ICC);
|
||||
regs->psr |= (psr & PSR_ICC);
|
||||
|
||||
/* Restore g[1..7] and o[0..7] registers */
|
||||
err |= __copy_from_user(®s->u_regs[UREG_G1], &(*gr)[SVR4_G1],
|
||||
sizeof(long) * 7);
|
||||
err |= __copy_from_user(®s->u_regs[UREG_I0], &(*gr)[SVR4_O0],
|
||||
sizeof(long) * 8);
|
||||
return (err ? -EFAULT : 0);
|
||||
|
||||
sigsegv_and_return:
|
||||
force_sig(SIGSEGV, current);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
static inline void
|
||||
handle_signal(unsigned long signr, struct k_sigaction *ka,
|
||||
siginfo_t *info, sigset_t *oldset, struct pt_regs *regs,
|
||||
int svr4_signal)
|
||||
siginfo_t *info, sigset_t *oldset, struct pt_regs *regs)
|
||||
{
|
||||
if (svr4_signal)
|
||||
setup_svr4_frame(&ka->sa, regs->pc, regs->npc, regs, signr, oldset);
|
||||
else {
|
||||
if (ka->sa.sa_flags & SA_SIGINFO)
|
||||
new_setup_rt_frame(ka, regs, signr, oldset, info);
|
||||
else if (current->thread.new_signal)
|
||||
new_setup_frame(ka, regs, signr, oldset);
|
||||
else
|
||||
setup_frame(&ka->sa, regs, signr, oldset, info);
|
||||
}
|
||||
if (ka->sa.sa_flags & SA_SIGINFO)
|
||||
new_setup_rt_frame(ka, regs, signr, oldset, info);
|
||||
else if (current->thread.new_signal)
|
||||
new_setup_frame(ka, regs, signr, oldset);
|
||||
else
|
||||
setup_frame(&ka->sa, regs, signr, oldset, info);
|
||||
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask);
|
||||
if (!(ka->sa.sa_flags & SA_NOMASK))
|
||||
@@ -1002,17 +726,6 @@ asmlinkage void do_signal(struct pt_regs * regs, unsigned long orig_i0, int rest
|
||||
int signr;
|
||||
sigset_t *oldset;
|
||||
|
||||
/*
|
||||
* XXX Disable svr4 signal handling until solaris emulation works.
|
||||
* It is buggy - Anton
|
||||
*/
|
||||
#define SVR4_SIGNAL_BROKEN 1
|
||||
#ifdef SVR4_SIGNAL_BROKEN
|
||||
int svr4_signal = 0;
|
||||
#else
|
||||
int svr4_signal = current->personality == PER_SVR4;
|
||||
#endif
|
||||
|
||||
cookie.restart_syscall = restart_syscall;
|
||||
cookie.orig_i0 = orig_i0;
|
||||
|
||||
@@ -1025,8 +738,8 @@ asmlinkage void do_signal(struct pt_regs * regs, unsigned long orig_i0, int rest
|
||||
if (signr > 0) {
|
||||
if (cookie.restart_syscall)
|
||||
syscall_restart(cookie.orig_i0, regs, &ka.sa);
|
||||
handle_signal(signr, &ka, &info, oldset,
|
||||
regs, svr4_signal);
|
||||
handle_signal(signr, &ka, &info, oldset, regs);
|
||||
|
||||
/* a signal was successfully delivered; the saved
|
||||
* sigmask will have been stored in the signal frame,
|
||||
* and will be restored by sigreturn, so we can simply
|
||||
|
@@ -36,12 +36,10 @@
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/idprom.h>
|
||||
#include <asm/svr4.h>
|
||||
#include <asm/head.h>
|
||||
#include <asm/smp.h>
|
||||
#include <asm/mostek.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/user.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/checksum.h>
|
||||
#ifdef CONFIG_SBUS
|
||||
@@ -62,8 +60,6 @@ struct poll {
|
||||
short revents;
|
||||
};
|
||||
|
||||
extern int svr4_getcontext (svr4_ucontext_t *, struct pt_regs *);
|
||||
extern int svr4_setcontext (svr4_ucontext_t *, struct pt_regs *);
|
||||
extern void (*__copy_1page)(void *, const void *);
|
||||
extern void __memmove(void *, const void *, __kernel_size_t);
|
||||
extern void (*bzero_1page)(void *);
|
||||
@@ -204,10 +200,6 @@ EXPORT_SYMBOL(kmap_atomic);
|
||||
EXPORT_SYMBOL(kunmap_atomic);
|
||||
#endif
|
||||
|
||||
/* Solaris/SunOS binary compatibility */
|
||||
EXPORT_SYMBOL(svr4_setcontext);
|
||||
EXPORT_SYMBOL(svr4_getcontext);
|
||||
|
||||
/* prom symbols */
|
||||
EXPORT_SYMBOL(idprom);
|
||||
EXPORT_SYMBOL(prom_root_node);
|
||||
|
@@ -1,67 +0,0 @@
|
||||
/* $Id: sunos_asm.S,v 1.15 2000/01/11 17:33:21 jj Exp $
|
||||
* sunos_asm.S: SunOS system calls which must have a low-level
|
||||
* entry point to operate correctly.
|
||||
*
|
||||
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
|
||||
*
|
||||
* Based upon preliminary work which is:
|
||||
*
|
||||
* Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu)
|
||||
*/
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
.text
|
||||
.align 4
|
||||
|
||||
/* When calling ret_sys_call, %o0 should contain the same
|
||||
* value as in [%sp + STACKFRAME_SZ + PT_I0] */
|
||||
|
||||
/* SunOS getpid() returns pid in %o0 and ppid in %o1 */
|
||||
.globl sunos_getpid
|
||||
sunos_getpid:
|
||||
call sys_getppid
|
||||
nop
|
||||
|
||||
call sys_getpid
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I1]
|
||||
|
||||
b ret_sys_call
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I0]
|
||||
|
||||
/* SunOS getuid() returns uid in %o0 and euid in %o1 */
|
||||
.globl sunos_getuid
|
||||
sunos_getuid:
|
||||
call sys_geteuid16
|
||||
nop
|
||||
|
||||
call sys_getuid16
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I1]
|
||||
|
||||
b ret_sys_call
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I0]
|
||||
|
||||
/* SunOS getgid() returns gid in %o0 and egid in %o1 */
|
||||
.globl sunos_getgid
|
||||
sunos_getgid:
|
||||
call sys_getegid16
|
||||
nop
|
||||
|
||||
call sys_getgid16
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I1]
|
||||
|
||||
b ret_sys_call
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I0]
|
||||
|
||||
/* SunOS's execv() call only specifies the argv argument, the
|
||||
* environment settings are the same as the calling processes.
|
||||
*/
|
||||
.globl sunos_execv
|
||||
sunos_execv:
|
||||
st %g0, [%sp + STACKFRAME_SZ + PT_I2]
|
||||
|
||||
call sparc_execve
|
||||
add %sp, STACKFRAME_SZ, %o0
|
||||
|
||||
b ret_sys_call
|
||||
ld [%sp + STACKFRAME_SZ + PT_I0], %o0
|
@@ -1,230 +0,0 @@
|
||||
/* $Id: sunos_ioctl.c,v 1.34 2000/09/03 14:10:56 anton Exp $
|
||||
* sunos_ioctl.c: The Linux Operating system: SunOS ioctl compatibility.
|
||||
*
|
||||
* Copyright (C) 1995 Miguel de Icaza (miguel@nuclecu.unam.mx)
|
||||
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
|
||||
*/
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/termios.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/route.h>
|
||||
#include <linux/sockios.h>
|
||||
#include <linux/if.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/if_arp.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/file.h>
|
||||
|
||||
#if 0
|
||||
extern char sunkbd_type;
|
||||
extern char sunkbd_layout;
|
||||
#endif
|
||||
|
||||
/* NR_OPEN is now larger and dynamic in recent kernels. */
|
||||
#define SUNOS_NR_OPEN 256
|
||||
|
||||
asmlinkage int sunos_ioctl (int fd, unsigned long cmd, unsigned long arg)
|
||||
{
|
||||
int ret = -EBADF;
|
||||
|
||||
if (fd >= SUNOS_NR_OPEN || !fcheck(fd))
|
||||
goto out;
|
||||
|
||||
/* First handle an easy compat. case for tty ldisc. */
|
||||
if (cmd == TIOCSETD) {
|
||||
int __user *p;
|
||||
int ntty = N_TTY, tmp;
|
||||
mm_segment_t oldfs;
|
||||
|
||||
p = (int __user *) arg;
|
||||
ret = -EFAULT;
|
||||
if (get_user(tmp, p))
|
||||
goto out;
|
||||
if (tmp == 2) {
|
||||
oldfs = get_fs();
|
||||
set_fs(KERNEL_DS);
|
||||
ret = sys_ioctl(fd, cmd, (unsigned long) &ntty);
|
||||
set_fs(oldfs);
|
||||
ret = (ret == -EINVAL ? -EOPNOTSUPP : ret);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
/* Binary compatibility is good American knowhow fuckin' up. */
|
||||
if (cmd == TIOCNOTTY) {
|
||||
ret = sys_setsid();
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* SunOS networking ioctls. */
|
||||
switch (cmd) {
|
||||
case _IOW('r', 10, struct rtentry):
|
||||
ret = sys_ioctl(fd, SIOCADDRT, arg);
|
||||
goto out;
|
||||
case _IOW('r', 11, struct rtentry):
|
||||
ret = sys_ioctl(fd, SIOCDELRT, arg);
|
||||
goto out;
|
||||
case _IOW('i', 12, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCSIFADDR, arg);
|
||||
goto out;
|
||||
case _IOWR('i', 13, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCGIFADDR, arg);
|
||||
goto out;
|
||||
case _IOW('i', 14, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCSIFDSTADDR, arg);
|
||||
goto out;
|
||||
case _IOWR('i', 15, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCGIFDSTADDR, arg);
|
||||
goto out;
|
||||
case _IOW('i', 16, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCSIFFLAGS, arg);
|
||||
goto out;
|
||||
case _IOWR('i', 17, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCGIFFLAGS, arg);
|
||||
goto out;
|
||||
case _IOW('i', 18, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCSIFMEM, arg);
|
||||
goto out;
|
||||
case _IOWR('i', 19, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCGIFMEM, arg);
|
||||
goto out;
|
||||
case _IOWR('i', 20, struct ifconf):
|
||||
ret = sys_ioctl(fd, SIOCGIFCONF, arg);
|
||||
goto out;
|
||||
case _IOW('i', 21, struct ifreq): /* SIOCSIFMTU */
|
||||
ret = sys_ioctl(fd, SIOCSIFMTU, arg);
|
||||
goto out;
|
||||
case _IOWR('i', 22, struct ifreq): /* SIOCGIFMTU */
|
||||
ret = sys_ioctl(fd, SIOCGIFMTU, arg);
|
||||
goto out;
|
||||
|
||||
case _IOWR('i', 23, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCGIFBRDADDR, arg);
|
||||
goto out;
|
||||
case _IOW('i', 24, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCSIFBRDADDR, arg);
|
||||
goto out;
|
||||
case _IOWR('i', 25, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCGIFNETMASK, arg);
|
||||
goto out;
|
||||
case _IOW('i', 26, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCSIFNETMASK, arg);
|
||||
goto out;
|
||||
case _IOWR('i', 27, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCGIFMETRIC, arg);
|
||||
goto out;
|
||||
case _IOW('i', 28, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCSIFMETRIC, arg);
|
||||
goto out;
|
||||
|
||||
case _IOW('i', 30, struct arpreq):
|
||||
ret = sys_ioctl(fd, SIOCSARP, arg);
|
||||
goto out;
|
||||
case _IOWR('i', 31, struct arpreq):
|
||||
ret = sys_ioctl(fd, SIOCGARP, arg);
|
||||
goto out;
|
||||
case _IOW('i', 32, struct arpreq):
|
||||
ret = sys_ioctl(fd, SIOCDARP, arg);
|
||||
goto out;
|
||||
|
||||
case _IOW('i', 40, struct ifreq): /* SIOCUPPER */
|
||||
case _IOW('i', 41, struct ifreq): /* SIOCLOWER */
|
||||
case _IOW('i', 44, struct ifreq): /* SIOCSETSYNC */
|
||||
case _IOW('i', 45, struct ifreq): /* SIOCGETSYNC */
|
||||
case _IOW('i', 46, struct ifreq): /* SIOCSSDSTATS */
|
||||
case _IOW('i', 47, struct ifreq): /* SIOCSSESTATS */
|
||||
case _IOW('i', 48, struct ifreq): /* SIOCSPROMISC */
|
||||
ret = -EOPNOTSUPP;
|
||||
goto out;
|
||||
|
||||
case _IOW('i', 49, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCADDMULTI, arg);
|
||||
goto out;
|
||||
case _IOW('i', 50, struct ifreq):
|
||||
ret = sys_ioctl(fd, SIOCDELMULTI, arg);
|
||||
goto out;
|
||||
|
||||
/* FDDI interface ioctls, unsupported. */
|
||||
|
||||
case _IOW('i', 51, struct ifreq): /* SIOCFDRESET */
|
||||
case _IOW('i', 52, struct ifreq): /* SIOCFDSLEEP */
|
||||
case _IOW('i', 53, struct ifreq): /* SIOCSTRTFMWAR */
|
||||
case _IOW('i', 54, struct ifreq): /* SIOCLDNSTRTFW */
|
||||
case _IOW('i', 55, struct ifreq): /* SIOCGETFDSTAT */
|
||||
case _IOW('i', 56, struct ifreq): /* SIOCFDNMIINT */
|
||||
case _IOW('i', 57, struct ifreq): /* SIOCFDEXUSER */
|
||||
case _IOW('i', 58, struct ifreq): /* SIOCFDGNETMAP */
|
||||
case _IOW('i', 59, struct ifreq): /* SIOCFDGIOCTL */
|
||||
printk("FDDI ioctl, returning EOPNOTSUPP\n");
|
||||
ret = -EOPNOTSUPP;
|
||||
goto out;
|
||||
|
||||
case _IOW('t', 125, int):
|
||||
/* More stupid tty sunos ioctls, just
|
||||
* say it worked.
|
||||
*/
|
||||
ret = 0;
|
||||
goto out;
|
||||
/* Non posix grp */
|
||||
case _IOW('t', 118, int): {
|
||||
int oldval, newval, __user *ptr;
|
||||
|
||||
cmd = TIOCSPGRP;
|
||||
ptr = (int __user *) arg;
|
||||
ret = -EFAULT;
|
||||
if (get_user(oldval, ptr))
|
||||
goto out;
|
||||
ret = sys_ioctl(fd, cmd, arg);
|
||||
__get_user(newval, ptr);
|
||||
if (newval == -1) {
|
||||
__put_user(oldval, ptr);
|
||||
ret = -EIO;
|
||||
}
|
||||
if (ret == -ENOTTY)
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
case _IOR('t', 119, int): {
|
||||
int oldval, newval, __user *ptr;
|
||||
|
||||
cmd = TIOCGPGRP;
|
||||
ptr = (int __user *) arg;
|
||||
ret = -EFAULT;
|
||||
if (get_user(oldval, ptr))
|
||||
goto out;
|
||||
ret = sys_ioctl(fd, cmd, arg);
|
||||
__get_user(newval, ptr);
|
||||
if (newval == -1) {
|
||||
__put_user(oldval, ptr);
|
||||
ret = -EIO;
|
||||
}
|
||||
if (ret == -ENOTTY)
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
if ((cmd & 0xff00) == ('k' << 8)) {
|
||||
printk ("[[KBIO: %8.8x\n", (unsigned int) cmd);
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = sys_ioctl(fd, cmd, arg);
|
||||
/* so stupid... */
|
||||
ret = (ret == -EINVAL ? -EOPNOTSUPP : ret);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@@ -1,35 +0,0 @@
|
||||
/*
|
||||
* linux/arch/sparc/kernel/sys_solaris.c
|
||||
*
|
||||
* Copyright (C) 1996 Miguel de Icaza (miguel@nuclecu.unam.mx)
|
||||
*/
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/personality.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
asmlinkage int
|
||||
do_solaris_syscall (struct pt_regs *regs)
|
||||
{
|
||||
static int cnt = 0;
|
||||
if (++cnt < 10) printk ("No solaris handler\n");
|
||||
force_sig(SIGSEGV, current);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_SUNOS_EMUL
|
||||
asmlinkage int
|
||||
do_sunos_syscall (struct pt_regs *regs)
|
||||
{
|
||||
static int cnt = 0;
|
||||
if (++cnt < 10) printk ("SunOS binary emulation not compiled in\n");
|
||||
force_sig (SIGSEGV, current);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
@@ -81,124 +81,3 @@ sys_call_table:
|
||||
/*305*/ .long sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait
|
||||
/*310*/ .long sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate
|
||||
/*315*/ .long sys_timerfd_settime, sys_timerfd_gettime
|
||||
|
||||
#ifdef CONFIG_SUNOS_EMUL
|
||||
/* Now the SunOS syscall table. */
|
||||
|
||||
.align 4
|
||||
.globl sunos_sys_table
|
||||
sunos_sys_table:
|
||||
/*0*/ .long sunos_indir, sys_exit, sys_fork
|
||||
.long sunos_read, sunos_write, sys_open
|
||||
.long sys_close, sunos_wait4, sys_creat
|
||||
.long sys_link, sys_unlink, sunos_execv
|
||||
.long sys_chdir, sunos_nosys, sys_mknod
|
||||
.long sys_chmod, sys_lchown16, sunos_brk
|
||||
.long sunos_nosys, sys_lseek, sunos_getpid
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_getuid, sunos_nosys, sys_ptrace
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sys_access, sunos_nosys, sunos_nosys
|
||||
.long sys_sync, sys_kill, sys_newstat
|
||||
.long sunos_nosys, sys_newlstat, sys_dup
|
||||
.long sys_pipe, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_getgid
|
||||
.long sunos_nosys, sunos_nosys
|
||||
/*50*/ .long sunos_nosys, sys_acct, sunos_nosys
|
||||
.long sunos_mctl, sunos_ioctl, sys_reboot
|
||||
.long sunos_nosys, sys_symlink, sys_readlink
|
||||
.long sys_execve, sys_umask, sys_chroot
|
||||
.long sys_newfstat, sunos_nosys, sys_getpagesize
|
||||
.long sys_msync, sys_vfork, sunos_nosys
|
||||
.long sunos_nosys, sunos_sbrk, sunos_sstk
|
||||
.long sunos_mmap, sunos_vadvise, sys_munmap
|
||||
.long sys_mprotect, sys_madvise, sys_vhangup
|
||||
.long sunos_nosys, sys_mincore, sys_getgroups16
|
||||
.long sys_setgroups16, sys_getpgrp, sunos_setpgrp
|
||||
.long sys_setitimer, sunos_nosys, sys_swapon
|
||||
.long sys_getitimer, sys_gethostname, sys_sethostname
|
||||
.long sunos_getdtablesize, sys_dup2, sunos_nop
|
||||
.long sys_fcntl, sunos_select, sunos_nop
|
||||
.long sys_fsync, sys_setpriority, sys_socket
|
||||
.long sys_connect, sunos_accept
|
||||
/*100*/ .long sys_getpriority, sunos_send, sunos_recv
|
||||
.long sunos_nosys, sys_bind, sunos_setsockopt
|
||||
.long sys_listen, sunos_nosys, sunos_sigaction
|
||||
.long sunos_sigblock, sunos_sigsetmask, sys_sigpause
|
||||
.long sys_sigstack, sys_recvmsg, sys_sendmsg
|
||||
.long sunos_nosys, sys_gettimeofday, sys_getrusage
|
||||
.long sunos_getsockopt, sunos_nosys, sunos_readv
|
||||
.long sunos_writev, sys_settimeofday, sys_fchown16
|
||||
.long sys_fchmod, sys_recvfrom, sys_setreuid16
|
||||
.long sys_setregid16, sys_rename, sys_truncate
|
||||
.long sys_ftruncate, sys_flock, sunos_nosys
|
||||
.long sys_sendto, sys_shutdown, sys_socketpair
|
||||
.long sys_mkdir, sys_rmdir, sys_utimes
|
||||
.long sys_sigreturn, sunos_nosys, sys_getpeername
|
||||
.long sunos_gethostid, sunos_nosys, sys_getrlimit
|
||||
.long sys_setrlimit, sunos_killpg, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys
|
||||
/*150*/ .long sys_getsockname, sunos_nosys, sunos_nosys
|
||||
.long sys_poll, sunos_nosys, sunos_nosys
|
||||
.long sunos_getdirentries, sys_statfs, sys_fstatfs
|
||||
.long sys_oldumount, sunos_nosys, sunos_nosys
|
||||
.long sys_getdomainname, sys_setdomainname
|
||||
.long sunos_nosys, sys_quotactl, sunos_nosys
|
||||
.long sunos_mount, sys_ustat, sunos_semsys
|
||||
.long sunos_msgsys, sunos_shmsys, sunos_audit
|
||||
.long sunos_nosys, sunos_getdents, sys_setsid
|
||||
.long sys_fchdir, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sys_sigpending, sunos_nosys
|
||||
.long sys_setpgid, sunos_pathconf, sunos_fpathconf
|
||||
.long sunos_sysconf, sunos_uname, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
/*200*/ .long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys
|
||||
/*250*/ .long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys
|
||||
/*260*/ .long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys
|
||||
/*270*/ .long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys
|
||||
/*280*/ .long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys
|
||||
/*290*/ .long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys
|
||||
/*300*/ .long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys
|
||||
/*310*/ .long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys, sunos_nosys, sunos_nosys
|
||||
.long sunos_nosys
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user