diff options
Diffstat (limited to 'lib/libc/sparc64/sys')
-rw-r--r-- | lib/libc/sparc64/sys/Makefile.inc | 26 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/__sparc_sigtramp_setup.c | 46 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/__sparc_utrap.c | 141 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/__sparc_utrap_align.c | 117 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/__sparc_utrap_emul.c | 155 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/__sparc_utrap_fp_disabled.S | 36 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/__sparc_utrap_gen.S | 111 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/__sparc_utrap_install.c | 49 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/__sparc_utrap_private.h | 66 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/__sparc_utrap_setup.c | 58 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/assym.s | 39 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/brk.S | 65 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/cerror.S | 59 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/exect.S | 51 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/pipe.S | 57 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/ptrace.S | 57 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/sbrk.S | 71 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/setlogin.S | 55 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/sigaction.S | 49 | ||||
-rw-r--r-- | lib/libc/sparc64/sys/sigcode.S | 40 |
20 files changed, 1348 insertions, 0 deletions
diff --git a/lib/libc/sparc64/sys/Makefile.inc b/lib/libc/sparc64/sys/Makefile.inc new file mode 100644 index 0000000..43e4edb --- /dev/null +++ b/lib/libc/sparc64/sys/Makefile.inc @@ -0,0 +1,26 @@ +# $FreeBSD$ + +SRCS+= __sparc_sigtramp_setup.c \ + __sparc_utrap.c \ + __sparc_utrap_align.c \ + __sparc_utrap_emul.c \ + __sparc_utrap_fp_disabled.S \ + __sparc_utrap_gen.S \ + __sparc_utrap_install.c \ + __sparc_utrap_setup.c \ + sigcode.S + +CFLAGS+= -I${.CURDIR}/sparc64/fpu +.if ${MACHINE} == "sun4v" +CFLAGS+= -DSUN4V +.endif + +MDASM+= brk.S cerror.S exect.S pipe.S ptrace.S sbrk.S setlogin.S sigaction.S + +# Don't generate default code for these syscalls: +NOASM= break.o exit.o getlogin.o openbsd_poll.o sstk.o yield.o + +PSEUDO= _getlogin.o _exit.o +.if !defined(WITHOUT_SYSCALL_COMPAT) +PSEUDO+= _pread.o _pwrite.o _lseek.o _mmap.o _ftruncate.o _truncate.o +.endif diff --git a/lib/libc/sparc64/sys/__sparc_sigtramp_setup.c b/lib/libc/sparc64/sys/__sparc_sigtramp_setup.c new file mode 100644 index 0000000..4475c6d --- /dev/null +++ b/lib/libc/sparc64/sys/__sparc_sigtramp_setup.c @@ -0,0 +1,46 @@ +/*- + * Copyright (c) 2002 Jake Burkholder. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> + +#include <machine/utrap.h> +#include <machine/sysarch.h> + +#include <stdlib.h> + +extern char __sigtramp[]; + +static const struct sparc_sigtramp_install_args sia = { __sigtramp, NULL }; + +void +__sparc_sigtramp_setup(void) +{ + + sysarch(SPARC_SIGTRAMP_INSTALL, (void *)&sia); +} diff --git a/lib/libc/sparc64/sys/__sparc_utrap.c b/lib/libc/sparc64/sys/__sparc_utrap.c new file mode 100644 index 0000000..7a5dafa --- /dev/null +++ b/lib/libc/sparc64/sys/__sparc_utrap.c @@ -0,0 +1,141 @@ +/*- + * Copyright (c) 2001 Jake Burkholder. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> + +#include <machine/utrap.h> +#include <machine/sysarch.h> + +#include <errno.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "fpu_extern.h" +#include "__sparc_utrap_private.h" + +extern ssize_t __sys_write(int, const void *, size_t); +extern int __sys_kill(pid_t, int); +extern pid_t __sys_getpid(void); + +static const char *utrap_msg[] = { + "reserved", + "instruction access exception", + "instruction access error", + "instruction access protection", + "illtrap instruction", + "illegal instruction", + "privileged opcode", + "floating point disabled", + "floating point exception ieee 754", + "floating point exception other", + "tag overflow", + "division by zero", + "data access exception", + "data access error", + "data access protection", + "memory address not aligned", + "privileged action", + "async data error", + "trap instruction 16", + "trap instruction 17", + "trap instruction 18", + "trap instruction 19", + "trap instruction 20", + "trap instruction 21", + "trap instruction 22", + "trap instruction 23", + "trap instruction 24", + "trap instruction 25", + "trap instruction 26", + "trap instruction 27", + "trap instruction 28", + "trap instruction 29", + "trap instruction 30", + "trap instruction 31", +}; + +void +__sparc_utrap(struct utrapframe *uf) +{ + int sig; + + switch (uf->uf_type) { + case UT_FP_EXCEPTION_IEEE_754: + case UT_FP_EXCEPTION_OTHER: + sig = __fpu_exception(uf); + break; + case UT_ILLEGAL_INSTRUCTION: + sig = __emul_insn(uf); + break; + case UT_MEM_ADDRESS_NOT_ALIGNED: + sig = __unaligned_fixup(uf); + break; + default: + break; + } + if (sig) { + __utrap_write("__sparc_utrap: fatal "); + __utrap_write(utrap_msg[uf->uf_type]); + __utrap_write("\n"); + __utrap_kill_self(sig); + } + UF_DONE(uf); +} + +void +__utrap_write(const char *str) +{ + int berrno; + + berrno = errno; + __sys_write(STDERR_FILENO, str, strlen(str)); + errno = berrno; +} + +void +__utrap_kill_self(int sig) +{ + int berrno; + + berrno = errno; + __sys_kill(__sys_getpid(), sig); + errno = berrno; +} + +void +__utrap_panic(const char *msg) +{ + + __utrap_write(msg); + __utrap_write("\n"); + __utrap_kill_self(SIGKILL); +} diff --git a/lib/libc/sparc64/sys/__sparc_utrap_align.c b/lib/libc/sparc64/sys/__sparc_utrap_align.c new file mode 100644 index 0000000..9b59826 --- /dev/null +++ b/lib/libc/sparc64/sys/__sparc_utrap_align.c @@ -0,0 +1,117 @@ +/*- + * Copyright (c) 2002 Jake Burkholder. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <machine/cpufunc.h> +#include <machine/instr.h> + +#include <signal.h> + +#include "__sparc_utrap_private.h" + +static u_long +__unaligned_load(u_char *p, int size) +{ + u_long val; + int i; + + val = 0; + for (i = 0; i < size; i++) + val = (val << 8) | p[i]; + return (val); +} + +static void +__unaligned_store(u_char *p, u_long val, int size) +{ + int i; + + for (i = 0; i < size; i++) + p[i] = val >> ((size - i - 1) * 8); +} + +int +__unaligned_fixup(struct utrapframe *uf) +{ + u_char *addr; + u_long val; + u_int insn; + int sig; + + sig = 0; + addr = (u_char *)uf->uf_sfar; + insn = *(u_int *)uf->uf_pc; + flushw(); + switch (IF_OP(insn)) { + case IOP_LDST: + switch (IF_F3_OP3(insn)) { + case INS3_LDUH: + val = __unaligned_load(addr, 2); + __emul_store_reg(uf, IF_F3_RD(insn), val); + break; + case INS3_LDUW: + val = __unaligned_load(addr, 4); + __emul_store_reg(uf, IF_F3_RD(insn), val); + break; + case INS3_LDX: + val = __unaligned_load(addr, 8); + __emul_store_reg(uf, IF_F3_RD(insn), val); + break; + case INS3_LDSH: + val = __unaligned_load(addr, 2); + __emul_store_reg(uf, IF_F3_RD(insn), + IF_SEXT(val, 16)); + break; + case INS3_LDSW: + val = __unaligned_load(addr, 4); + __emul_store_reg(uf, IF_F3_RD(insn), + IF_SEXT(val, 32)); + break; + case INS3_STH: + val = __emul_fetch_reg(uf, IF_F3_RD(insn)); + __unaligned_store(addr, val, 2); + break; + case INS3_STW: + val = __emul_fetch_reg(uf, IF_F3_RD(insn)); + __unaligned_store(addr, val, 4); + break; + case INS3_STX: + val = __emul_fetch_reg(uf, IF_F3_RD(insn)); + __unaligned_store(addr, val, 8); + break; + default: + sig = SIGILL; + break; + } + break; + default: + sig = SIGILL; + break; + } + return (sig); +} diff --git a/lib/libc/sparc64/sys/__sparc_utrap_emul.c b/lib/libc/sparc64/sys/__sparc_utrap_emul.c new file mode 100644 index 0000000..6c6dd1b --- /dev/null +++ b/lib/libc/sparc64/sys/__sparc_utrap_emul.c @@ -0,0 +1,155 @@ +/*- + * Copyright (c) 2001 by Thomas Moestl <tmm@FreeBSD.org>. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> +#include <machine/cpufunc.h> +#include <machine/frame.h> +#include <machine/instr.h> + +#include <signal.h> + +#include "__sparc_utrap_private.h" +#include "fpu_reg.h" + +int +__emul_insn(struct utrapframe *uf) +{ + u_long reg, res; + u_long *addr; + u_int insn; + int sig; + int rd; + int i; + + sig = 0; + insn = *(u_int *)uf->uf_pc; + flushw(); + switch (IF_OP(insn)) { + case IOP_MISC: + switch (IF_F3_OP3(insn)) { + case INS2_POPC: + if (IF_F3_RS1(insn) != 0) { + sig = SIGILL; + break; + } + reg = __emul_f3_op2(uf, insn); + for (i = 0; i < 64; i++) + res += (reg >> i) & 1; + __emul_store_reg(uf, IF_F3_RD(insn), res); + break; + default: + sig = SIGILL; + break; + } + break; + case IOP_LDST: + switch (IF_F3_OP3(insn)) { + case INS3_LDQF: + rd = INSFPdq_RN(IF_F3_RD(insn)); + addr = (u_long *)__emul_f3_memop_addr(uf, insn); + __fpu_setreg64(rd, addr[0]); + __fpu_setreg64(rd + 2, addr[1]); + break; + case INS3_STQF: + rd = INSFPdq_RN(IF_F3_RD(insn)); + addr = (u_long *)__emul_f3_memop_addr(uf, insn); + addr[0] = __fpu_getreg64(rd); + addr[1] = __fpu_getreg64(rd + 2); + break; + default: + sig = SIGILL; + break; + } + break; + default: + sig = SIGILL; + break; + } + return (sig); +} + +u_long +__emul_fetch_reg(struct utrapframe *uf, int reg) +{ + struct frame *frm; + + if (reg == IREG_G0) + return (0); + else if (reg < IREG_O0) /* global */ + return (uf->uf_global[reg]); + else if (reg < IREG_L0) /* out */ + return (uf->uf_out[reg - IREG_O0]); + else { /* local, in */ + /* + * The in registers are immediately after the locals in + * the frame. + */ + frm = (struct frame *)(uf->uf_out[6] + SPOFF); + return (frm->fr_local[reg - IREG_L0]); + } +} + +void +__emul_store_reg(struct utrapframe *uf, int reg, u_long val) +{ + struct frame *frm; + + if (reg == IREG_G0) + return; + if (reg < IREG_O0) /* global */ + uf->uf_global[reg] = val; + else if (reg < IREG_L0) /* out */ + uf->uf_out[reg - IREG_O0] = val; + else { + /* + * The in registers are immediately after the locals in + * the frame. + */ + frm = (struct frame *)(uf->uf_out[6] + SPOFF); + frm->fr_local[reg - IREG_L0] = val; + } +} + +u_long +__emul_f3_op2(struct utrapframe *uf, u_int insn) +{ + + if (IF_F3_I(insn) != 0) + return (IF_SIMM(insn, 13)); + else + return (__emul_fetch_reg(uf, IF_F3_RS2(insn))); +} + +u_long +__emul_f3_memop_addr(struct utrapframe *uf, u_int insn) +{ + u_long addr; + + addr = __emul_f3_op2(uf, insn) + __emul_fetch_reg(uf, IF_F3_RS1(insn)); + return (addr); +} diff --git a/lib/libc/sparc64/sys/__sparc_utrap_fp_disabled.S b/lib/libc/sparc64/sys/__sparc_utrap_fp_disabled.S new file mode 100644 index 0000000..502f81a --- /dev/null +++ b/lib/libc/sparc64/sys/__sparc_utrap_fp_disabled.S @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 2001 Jake Burkholder. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include <machine/utrap.h> + +ENTRY(__sparc_utrap_fp_disabled) + ta %xcc, ST_FP_RESTORE + jmpl %l6, %g0 + return %l7 +END(__sparc_utrap_fp_disabled) diff --git a/lib/libc/sparc64/sys/__sparc_utrap_gen.S b/lib/libc/sparc64/sys/__sparc_utrap_gen.S new file mode 100644 index 0000000..4fb128d --- /dev/null +++ b/lib/libc/sparc64/sys/__sparc_utrap_gen.S @@ -0,0 +1,111 @@ +/*- + * Copyright (c) 2001 Jake Burkholder. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + + .register %g2, #ignore + .register %g3, #ignore + .register %g6, #ignore + .register %g7, #ignore + +#include <machine/tstate.h> +#include <machine/utrap.h> + +#include "assym.s" + +ENTRY(__sparc_utrap_gen) +#ifdef SUN4V + save + ta %xcc, ST_FPEMU_CONTEXT +#endif + sub %sp, UF_SIZEOF, %sp + + stx %o0, [%sp + SPOFF + CCFSZ + UF_TYPE] + stx %o3, [%sp + SPOFF + CCFSZ + UF_TAR] + stx %o4, [%sp + SPOFF + CCFSZ + UF_SFAR] + stx %o5, [%sp + SPOFF + CCFSZ + UF_SFSR] + + stx %l4, [%sp + SPOFF + CCFSZ + UF_FSR] + stx %l5, [%sp + SPOFF + CCFSZ + UF_STATE] + stx %l6, [%sp + SPOFF + CCFSZ + UF_PC] + stx %l7, [%sp + SPOFF + CCFSZ + UF_NPC] + + stx %g1, [%sp + SPOFF + CCFSZ + UF_G1] + stx %g2, [%sp + SPOFF + CCFSZ + UF_G2] + stx %g3, [%sp + SPOFF + CCFSZ + UF_G3] + stx %g4, [%sp + SPOFF + CCFSZ + UF_G4] + stx %g5, [%sp + SPOFF + CCFSZ + UF_G5] + stx %g6, [%sp + SPOFF + CCFSZ + UF_G6] + stx %g7, [%sp + SPOFF + CCFSZ + UF_G7] + + stx %i0, [%sp + SPOFF + CCFSZ + UF_O0] + stx %i1, [%sp + SPOFF + CCFSZ + UF_O1] + stx %i2, [%sp + SPOFF + CCFSZ + UF_O2] + stx %i3, [%sp + SPOFF + CCFSZ + UF_O3] + stx %i4, [%sp + SPOFF + CCFSZ + UF_O4] + stx %i5, [%sp + SPOFF + CCFSZ + UF_O5] + stx %i6, [%sp + SPOFF + CCFSZ + UF_O6] + stx %i7, [%sp + SPOFF + CCFSZ + UF_O7] + + rd %y, %l6 + + call __sparc_utrap + add %sp, SPOFF + CCFSZ, %o0 + + wr %l6, 0, %y + + ldx [%sp + SPOFF + CCFSZ + UF_G1], %g1 + ldx [%sp + SPOFF + CCFSZ + UF_G2], %g2 + ldx [%sp + SPOFF + CCFSZ + UF_G3], %g3 + ldx [%sp + SPOFF + CCFSZ + UF_G4], %g4 + ldx [%sp + SPOFF + CCFSZ + UF_G5], %g5 + ldx [%sp + SPOFF + CCFSZ + UF_G6], %g6 + ldx [%sp + SPOFF + CCFSZ + UF_G7], %g7 + + ldx [%sp + SPOFF + CCFSZ + UF_O0], %i0 + ldx [%sp + SPOFF + CCFSZ + UF_O1], %i1 + ldx [%sp + SPOFF + CCFSZ + UF_O2], %i2 + ldx [%sp + SPOFF + CCFSZ + UF_O3], %i3 + ldx [%sp + SPOFF + CCFSZ + UF_O4], %i4 + ldx [%sp + SPOFF + CCFSZ + UF_O5], %i5 + ldx [%sp + SPOFF + CCFSZ + UF_O6], %i6 + ldx [%sp + SPOFF + CCFSZ + UF_O7], %i7 + + ldx [%sp + SPOFF + CCFSZ + UF_STATE], %l5 + ! Restore %asi and %ccr from the passed tstate + srlx %l5, TSTATE_CCR_SHIFT, %l4 + and %l4, CCR_MASK, %l4 + wr %l4, 0, %ccr + srlx %l5, TSTATE_ASI_SHIFT, %l4 + and %l4, ASI_MASK, %l4 + wr %l4, 0, %asi + ldx [%sp + SPOFF + CCFSZ + UF_PC], %l6 + ldx [%sp + SPOFF + CCFSZ + UF_NPC], %l7 + + jmpl %l6, %g0 + return %l7 +END(__sparc_utrap_gen) diff --git a/lib/libc/sparc64/sys/__sparc_utrap_install.c b/lib/libc/sparc64/sys/__sparc_utrap_install.c new file mode 100644 index 0000000..7b1a5e7 --- /dev/null +++ b/lib/libc/sparc64/sys/__sparc_utrap_install.c @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2001 Jake Burkholder. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <machine/utrap.h> +#include <machine/sysarch.h> + +int +__sparc_utrap_install(utrap_entry_t type, utrap_handler_t new_precise, + utrap_handler_t new_deferred, utrap_handler_t *old_precise, + utrap_handler_t *old_deferred) +{ + struct sparc_utrap_install_args uia; + struct sparc_utrap_args ua[1]; + + ua[0].type = type; + ua[0].new_precise = new_precise; + ua[0].new_deferred = new_deferred; + ua[0].old_precise = old_precise; + ua[0].old_deferred = old_deferred; + uia.num = 1; + uia.handlers = ua; + return (sysarch(SPARC_UTRAP_INSTALL, &uia)); +} diff --git a/lib/libc/sparc64/sys/__sparc_utrap_private.h b/lib/libc/sparc64/sys/__sparc_utrap_private.h new file mode 100644 index 0000000..8b9ae9e --- /dev/null +++ b/lib/libc/sparc64/sys/__sparc_utrap_private.h @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2001 Jake Burkholder. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef ___SPARC_UTRAP_PRIVATE_H_ +#define ___SPARC_UTRAP_PRIVATE_H_ + +#define UF_DONE(uf) do { \ + uf->uf_pc = uf->uf_npc; \ + uf->uf_npc = uf->uf_pc + 4; \ +} while (0) + +struct utrapframe { + u_long uf_global[8]; + u_long uf_out[8]; + u_long uf_pc; + u_long uf_npc; + u_long uf_sfar; + u_long uf_sfsr; + u_long uf_tar; + u_long uf_type; + u_long uf_state; + u_long uf_fsr; +}; + +extern char __sparc_utrap_fp_disabled[]; +extern char __sparc_utrap_gen[]; + +int __emul_insn(struct utrapframe *uf); +u_long __emul_fetch_reg(struct utrapframe *uf, int reg); +void __emul_store_reg(struct utrapframe *uf, int reg, u_long val); +u_long __emul_f3_op2(struct utrapframe *uf, u_int insn); +u_long __emul_f3_memop_addr(struct utrapframe *uf, u_int insn); +int __unaligned_fixup(struct utrapframe *uf); + +void __sparc_utrap(struct utrapframe *); + +void __utrap_write(const char *); +void __utrap_kill_self(int); +void __utrap_panic(const char *); + +#endif diff --git a/lib/libc/sparc64/sys/__sparc_utrap_setup.c b/lib/libc/sparc64/sys/__sparc_utrap_setup.c new file mode 100644 index 0000000..f4a624b --- /dev/null +++ b/lib/libc/sparc64/sys/__sparc_utrap_setup.c @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 2001 Jake Burkholder. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/types.h> + +#include <machine/utrap.h> +#include <machine/sysarch.h> + +#include <stdlib.h> + +#include "__sparc_utrap_private.h" + +static const struct sparc_utrap_args ua[] = { + { UT_FP_DISABLED, __sparc_utrap_fp_disabled, NULL, NULL, NULL }, + { UT_FP_EXCEPTION_IEEE_754, __sparc_utrap_gen, NULL, NULL, NULL }, + { UT_FP_EXCEPTION_OTHER, __sparc_utrap_gen, NULL, NULL, NULL }, + { UT_ILLEGAL_INSTRUCTION, __sparc_utrap_gen, NULL, NULL, NULL }, + { UT_MEM_ADDRESS_NOT_ALIGNED, __sparc_utrap_gen, NULL, NULL, NULL }, +}; + +static const struct sparc_utrap_install_args uia[] = { + { sizeof (ua) / sizeof (*ua), ua } +}; + +void __sparc_utrap_setup(void) __attribute__((constructor)); + +void +__sparc_utrap_setup(void) +{ + + sysarch(SPARC_UTRAP_INSTALL, &uia); +} diff --git a/lib/libc/sparc64/sys/assym.s b/lib/libc/sparc64/sys/assym.s new file mode 100644 index 0000000..2e799f6 --- /dev/null +++ b/lib/libc/sparc64/sys/assym.s @@ -0,0 +1,39 @@ +/* + * Offsets into structures used from asm. Must be kept in sync with + * appropriate headers. + * + * $FreeBSD$ + */ + +#define FPRS_FEF 0x4 + +#define CCR_MASK 0xff +#define ASI_MASK 0xff + +#define UF_G0 0x0 +#define UF_G1 0x8 +#define UF_G2 0x10 +#define UF_G3 0x18 +#define UF_G4 0x20 +#define UF_G5 0x28 +#define UF_G6 0x30 +#define UF_G7 0x38 +#define UF_O0 0x40 +#define UF_O1 0x48 +#define UF_O2 0x50 +#define UF_O3 0x58 +#define UF_O4 0x60 +#define UF_O5 0x68 +#define UF_O6 0x70 +#define UF_O7 0x78 +#define UF_PC 0x80 +#define UF_NPC 0x88 +#define UF_SFAR 0x90 +#define UF_SFSR 0x98 +#define UF_TAR 0xa0 +#define UF_TYPE 0xa8 +#define UF_STATE 0xb0 +#define UF_FSR 0xb8 +#define UF_SIZEOF 0xc0 + +#define SF_UC 0x0 diff --git a/lib/libc/sparc64/sys/brk.S b/lib/libc/sparc64/sys/brk.S new file mode 100644 index 0000000..0167c4e --- /dev/null +++ b/lib/libc/sparc64/sys/brk.S @@ -0,0 +1,65 @@ +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: Header: brk.s,v 1.3 92/06/25 12:56:05 mccanne Exp + */ + +#if defined(SYSLIBC_SCCS) && !defined(lint) + .asciz "@(#)brk.s 8.1 (Berkeley) 6/4/93" +#if 0 + RCSID("$NetBSD: brk.S,v 1.9 2000/07/25 20:15:40 mycroft Exp $") +#endif +#endif /* SYSLIBC_SCCS and not lint */ +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + + .globl HIDENAME(curbrk) + .globl HIDENAME(minbrk) + +_SYSENTRY(brk) + PIC_PROLOGUE(%o3, %o2) + SET(HIDENAME(minbrk), %o2, %o3) + ldx [%o3], %o4 + cmp %o4, %o0 + movg %xcc, %o4, %o0 + mov %o0, %o4 + mov SYS_break, %g1 + ta %xcc, ST_SYSCALL + bcc,a,pt %xcc, 1f + nop + ERROR() +1: SET(HIDENAME(curbrk), %o2, %o3) + retl + stx %o4, [%o3] +_SYSEND(brk) diff --git a/lib/libc/sparc64/sys/cerror.S b/lib/libc/sparc64/sys/cerror.S new file mode 100644 index 0000000..9f903ea --- /dev/null +++ b/lib/libc/sparc64/sys/cerror.S @@ -0,0 +1,59 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * William Jolitz. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: FreeBSD: src/lib/libc/i386/sys/cerror.S,v 1.11 2001/08/13 + */ + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + + .text + .align 16 + .globl HIDENAME(cerror) + .type HIDENAME(cerror),@function + + /* + * The __error() function is thread aware. For non-threaded + * programs and the initial threaded in threaded programs, + * it returns a pointer to the global errno variable. + */ + .globl CNAME(__error) +HIDENAME(cerror): + save %sp, -CCFSZ, %sp + call CNAME(__error) + nop + stw %i0, [%o0] + mov -1, %i0 + ret + restore %g0, -1, %o1 +END(HIDENAME(cerror)) diff --git a/lib/libc/sparc64/sys/exect.S b/lib/libc/sparc64/sys/exect.S new file mode 100644 index 0000000..f6af223 --- /dev/null +++ b/lib/libc/sparc64/sys/exect.S @@ -0,0 +1,51 @@ +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: Header: exect.s,v 1.1 91/07/06 13:05:57 torek Exp + */ + +#if defined(LIBC_SCCS) && !defined(lint) + .asciz "@(#)exect.s 8.1 (Berkeley) 6/4/93" +#if 0 + RCSID("$NetBSD: exect.S,v 1.1 1998/09/11 04:56:34 eeh Exp $") +#endif +#endif /* LIBC_SCCS and not lint */ +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +_SYSENTRY(exect) + mov SYS_execve, %g1 + ta %xcc, ST_SYSCALL + ERROR() +_SYSEND(exect) diff --git a/lib/libc/sparc64/sys/pipe.S b/lib/libc/sparc64/sys/pipe.S new file mode 100644 index 0000000..8940544 --- /dev/null +++ b/lib/libc/sparc64/sys/pipe.S @@ -0,0 +1,57 @@ +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: Header: pipe.s,v 1.1 91/07/06 13:05:58 torek Exp + */ + +#if defined(SYSLIBC_SCCS) && !defined(lint) + .asciz "@(#)pipe.s 8.1 (Berkeley) 6/4/93" +#if 0 + RCSID("$NetBSD: pipe.S,v 1.3 2000/09/28 08:38:55 kleink Exp $") +#endif +#endif /* SYSLIBC_SCCS and not lint */ +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +_SYSENTRY(pipe) + mov %o0, %o2 + mov SYS_pipe, %g1 + ta %xcc, ST_SYSCALL + bcc,a,pt %xcc, 1f + stw %o0, [%o2] + ERROR() +1: stw %o1, [%o2 + 4] + retl + clr %o0 +_SYSEND(pipe) diff --git a/lib/libc/sparc64/sys/ptrace.S b/lib/libc/sparc64/sys/ptrace.S new file mode 100644 index 0000000..eb415cd --- /dev/null +++ b/lib/libc/sparc64/sys/ptrace.S @@ -0,0 +1,57 @@ +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: Header: ptrace.s,v 1.2 91/12/20 01:59:00 leres Exp + * from: NetBSD: ptrace.S,v 1.4 2000/07/24 00:11:10 mycroft Exp + */ + +#if defined(SYSLIBC_SCCS) && !defined(lint) + .asciz "@(#)ptrace.s 8.1 (Berkeley) 6/4/93" +#if 0 + RCSID("$NetBSD: ptrace.S,v 1.4 2000/07/24 00:11:10 mycroft Exp $") +#endif +#endif /* SYSLIBC_SCCS and not lint */ +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +_SYSENTRY(ptrace) + save %sp, -CCFSZ, %sp + call CNAME(__error) + nop + stw %g0, [%o0] + restore + _SYSCALL(ptrace) + retl + nop +_SYSEND(ptrace) diff --git a/lib/libc/sparc64/sys/sbrk.S b/lib/libc/sparc64/sys/sbrk.S new file mode 100644 index 0000000..c8c6e97 --- /dev/null +++ b/lib/libc/sparc64/sys/sbrk.S @@ -0,0 +1,71 @@ +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: Header: brk.s,v 1.3 92/06/25 12:56:05 mccanne Exp + */ + +#if defined(SYSLIBC_SCCS) && !defined(lint) + .asciz "@(#)sbrk.s 8.1 (Berkeley) 6/4/93" +#if 0 + RCSID("$NetBSD: sbrk.S,v 1.7 2000/07/25 15:14:46 mycroft Exp $") +#endif +#endif /* SYSLIBC_SCCS and not lint */ +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + + .data + .globl HIDENAME(curbrk) + .globl HIDENAME(minbrk) + .type HIDENAME(curbrk),@object + .type HIDENAME(minbrk),@object + .align 8 +HIDENAME(curbrk): + .xword CNAME(_end) +HIDENAME(minbrk): + .xword CNAME(_end) + +_SYSENTRY(sbrk) + PIC_PROLOGUE(%o3, %o2) + SET(HIDENAME(curbrk), %o2, %o3) + ldx [%o3], %o4 + add %o4, %o0, %o5 + mov %o5, %o0 + mov SYS_break, %g1 + ta %xcc, ST_SYSCALL + bcc,a,pt %xcc, 1f + mov %o4, %o0 + ERROR() +1: retl + stx %o5, [%o3] +_SYSEND(sbrk) diff --git a/lib/libc/sparc64/sys/setlogin.S b/lib/libc/sparc64/sys/setlogin.S new file mode 100644 index 0000000..d7595cf --- /dev/null +++ b/lib/libc/sparc64/sys/setlogin.S @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: Header: setlogin.s,v 1.1 91/07/06 13:06:00 torek Exp + */ + +#if defined(SYSLIBC_SCCS) && !defined(lint) + .asciz "@(#)setlogin.s 8.1 (Berkeley) 6/4/93" +#if 0 + RCSID("$NetBSD: setlogin.S,v 1.3 2000/07/21 03:14:15 eeh Exp $") +#endif +#endif /* SYSLIBC_SCCS and not lint */ +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + + .globl CNAME(_logname_valid) /* in _getlogin() */ + +_SYSENTRY(setlogin) + _SYSCALL(setlogin) + PIC_PROLOGUE(%o3, %o2) + SET(CNAME(_logname_valid), %o2, %o3) + retl + stw %g0, [%o3] +_SYSEND(setlogin) diff --git a/lib/libc/sparc64/sys/sigaction.S b/lib/libc/sparc64/sys/sigaction.S new file mode 100644 index 0000000..7d32f97 --- /dev/null +++ b/lib/libc/sparc64/sys/sigaction.S @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2002 Jake Burkholder. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "SYS.h" + +_SYSENTRY(sigaction) + PIC_PROLOGUE(%o3, %o4) + SET(sigcode_installed, %o4, %o3) + lduw [%o3], %o4 + brnz,a,pt %o4, 1f + nop + save %sp, -CCFSZ, %sp + call __sparc_sigtramp_setup + nop + restore + mov 1, %o4 + stw %o4, [%o3] +1: _SYSCALL(sigaction) + retl + nop +_SYSEND(sigaction) + + .comm sigcode_installed, 4, 4 diff --git a/lib/libc/sparc64/sys/sigcode.S b/lib/libc/sparc64/sys/sigcode.S new file mode 100644 index 0000000..be3cb45 --- /dev/null +++ b/lib/libc/sparc64/sys/sigcode.S @@ -0,0 +1,40 @@ +/*- + * Copyright (c) 2002 Jake Burkholder. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#include "assym.s" + +ENTRY(__sigtramp) + call %o4 + nop + call sigreturn + add %sp, SPOFF + CCFSZ + SF_UC, %o0 + call exit + mov 1, %o0 + illtrap +END(__sigtramp) |