summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>2002-05-26 16:03:13 +0000
committerdfr <dfr@FreeBSD.org>2002-05-26 16:03:13 +0000
commite8d149b2f764dc40d5530a9deac9d39ccfcb1d30 (patch)
tree747d067ea43b73a9967eed2f57e33a79f442340d /sys
parent82d31a36d4b510fecf30b24f498fefac37cd4240 (diff)
downloadFreeBSD-src-e8d149b2f764dc40d5530a9deac9d39ccfcb1d30.zip
FreeBSD-src-e8d149b2f764dc40d5530a9deac9d39ccfcb1d30.tar.gz
Add declarations of suword32 and suword64. Add implementations of one or
the other (or both) to all the platforms. Similar for fuword32 and fuword64.
Diffstat (limited to 'sys')
-rw-r--r--sys/alpha/alpha/support.s2
-rw-r--r--sys/amd64/amd64/support.S6
-rw-r--r--sys/amd64/amd64/support.s6
-rw-r--r--sys/i386/i386/support.s6
-rw-r--r--sys/powerpc/aim/copyinout.c13
-rw-r--r--sys/powerpc/powerpc/copyinout.c13
-rw-r--r--sys/sparc64/sparc64/support.S24
-rw-r--r--sys/sparc64/sparc64/support.s24
-rw-r--r--sys/sys/systm.h4
9 files changed, 98 insertions, 0 deletions
diff --git a/sys/alpha/alpha/support.s b/sys/alpha/alpha/support.s
index 497412d..47058e6 100644
--- a/sys/alpha/alpha/support.s
+++ b/sys/alpha/alpha/support.s
@@ -65,6 +65,7 @@
*/
LEAF(suword, 1)
+ XLEAF(suword64, 1)
LDGP(pv)
ldiq t0, VM_MAXUSER_ADDRESS /* verify address validity */
@@ -110,6 +111,7 @@
END(subyte)
LEAF(fuword, 1)
+ XLEAF(fuword64, 1)
LDGP(pv)
ldiq t0, VM_MAXUSER_ADDRESS /* verify address validity */
diff --git a/sys/amd64/amd64/support.S b/sys/amd64/amd64/support.S
index bc58672..ed699cf 100644
--- a/sys/amd64/amd64/support.S
+++ b/sys/amd64/amd64/support.S
@@ -1189,6 +1189,9 @@ ENTRY(fuword)
movl $0,PCB_ONFAULT(%ecx)
ret
+ENTRY(fuword32)
+ jmp fuword
+
/*
* These two routines are called from the profiling code, potentially
* at interrupt time. If they fail, that's okay, good things will
@@ -1286,6 +1289,9 @@ ENTRY(suword)
movl %eax,PCB_ONFAULT(%ecx)
ret
+ENTRY(suword32)
+ jmp suword
+
/*
* susword - MP SAFE (if not I386_CPU)
*/
diff --git a/sys/amd64/amd64/support.s b/sys/amd64/amd64/support.s
index bc58672..ed699cf 100644
--- a/sys/amd64/amd64/support.s
+++ b/sys/amd64/amd64/support.s
@@ -1189,6 +1189,9 @@ ENTRY(fuword)
movl $0,PCB_ONFAULT(%ecx)
ret
+ENTRY(fuword32)
+ jmp fuword
+
/*
* These two routines are called from the profiling code, potentially
* at interrupt time. If they fail, that's okay, good things will
@@ -1286,6 +1289,9 @@ ENTRY(suword)
movl %eax,PCB_ONFAULT(%ecx)
ret
+ENTRY(suword32)
+ jmp suword
+
/*
* susword - MP SAFE (if not I386_CPU)
*/
diff --git a/sys/i386/i386/support.s b/sys/i386/i386/support.s
index bc58672..ed699cf 100644
--- a/sys/i386/i386/support.s
+++ b/sys/i386/i386/support.s
@@ -1189,6 +1189,9 @@ ENTRY(fuword)
movl $0,PCB_ONFAULT(%ecx)
ret
+ENTRY(fuword32)
+ jmp fuword
+
/*
* These two routines are called from the profiling code, potentially
* at interrupt time. If they fail, that's okay, good things will
@@ -1286,6 +1289,9 @@ ENTRY(suword)
movl %eax,PCB_ONFAULT(%ecx)
ret
+ENTRY(suword32)
+ jmp suword
+
/*
* susword - MP SAFE (if not I386_CPU)
*/
diff --git a/sys/powerpc/aim/copyinout.c b/sys/powerpc/aim/copyinout.c
index cab274c..70789ac 100644
--- a/sys/powerpc/aim/copyinout.c
+++ b/sys/powerpc/aim/copyinout.c
@@ -265,6 +265,13 @@ suword(void *addr, long word)
}
int
+suword32(void *addr, u_int32_t word)
+{
+ return (suword(addr, word));
+}
+
+
+int
fubyte(const void *addr)
{
struct thread *td;
@@ -314,3 +321,9 @@ fuword(const void *addr)
td->td_pcb->pcb_onfault = NULL;
return (val);
}
+
+u_int32_t
+fuword32(const void *addr)
+{
+ return (fuword(addr));
+}
diff --git a/sys/powerpc/powerpc/copyinout.c b/sys/powerpc/powerpc/copyinout.c
index cab274c..70789ac 100644
--- a/sys/powerpc/powerpc/copyinout.c
+++ b/sys/powerpc/powerpc/copyinout.c
@@ -265,6 +265,13 @@ suword(void *addr, long word)
}
int
+suword32(void *addr, u_int32_t word)
+{
+ return (suword(addr, word));
+}
+
+
+int
fubyte(const void *addr)
{
struct thread *td;
@@ -314,3 +321,9 @@ fuword(const void *addr)
td->td_pcb->pcb_onfault = NULL;
return (val);
}
+
+u_int32_t
+fuword32(const void *addr)
+{
+ return (fuword(addr));
+}
diff --git a/sys/sparc64/sparc64/support.S b/sys/sparc64/sparc64/support.S
index a878cb6..1e0ab69 100644
--- a/sys/sparc64/sparc64/support.S
+++ b/sys/sparc64/sparc64/support.S
@@ -512,6 +512,18 @@ ENTRY(fuword)
END(fuword)
/*
+ * u_int64_t fuword64(const void *base)
+ */
+ENTRY(fuword64)
+#if KTR_COMPILE & KTR_CT1
+ CATR(KTR_CT1, "fuword64: base=%#lx", %g1, %g2, %g3, 7, 8, 9)
+ stx %o0, [%g1 + KTR_PARM1]
+9:
+#endif
+ FU_BYTES(ldxa, 8, .Lfsfault)
+END(fuword64)
+
+/*
* int subyte(const void *base, int byte)
*/
ENTRY(subyte)
@@ -571,6 +583,18 @@ ENTRY(suword)
SU_BYTES(stxa, 8, .Lfsfault)
END(suword)
+/*
+ * int suword64(const void *base, u_int64_t word)
+ */
+ENTRY(suword64)
+#if KTR_COMPILE & KTR_CT1
+ CATR(KTR_CT1, "suword64: base=%#lx", %g1, %g2, %g3, 7, 8, 9)
+ stx %o0, [%g1 + KTR_PARM1]
+9:
+#endif
+ SU_BYTES(stxa, 8, .Lfsfault)
+END(suword64)
+
.align 16
.Lfsalign:
#if KTR_COMPILE & KTR_CT1
diff --git a/sys/sparc64/sparc64/support.s b/sys/sparc64/sparc64/support.s
index a878cb6..1e0ab69 100644
--- a/sys/sparc64/sparc64/support.s
+++ b/sys/sparc64/sparc64/support.s
@@ -512,6 +512,18 @@ ENTRY(fuword)
END(fuword)
/*
+ * u_int64_t fuword64(const void *base)
+ */
+ENTRY(fuword64)
+#if KTR_COMPILE & KTR_CT1
+ CATR(KTR_CT1, "fuword64: base=%#lx", %g1, %g2, %g3, 7, 8, 9)
+ stx %o0, [%g1 + KTR_PARM1]
+9:
+#endif
+ FU_BYTES(ldxa, 8, .Lfsfault)
+END(fuword64)
+
+/*
* int subyte(const void *base, int byte)
*/
ENTRY(subyte)
@@ -571,6 +583,18 @@ ENTRY(suword)
SU_BYTES(stxa, 8, .Lfsfault)
END(suword)
+/*
+ * int suword64(const void *base, u_int64_t word)
+ */
+ENTRY(suword64)
+#if KTR_COMPILE & KTR_CT1
+ CATR(KTR_CT1, "suword64: base=%#lx", %g1, %g2, %g3, 7, 8, 9)
+ stx %o0, [%g1 + KTR_PARM1]
+9:
+#endif
+ SU_BYTES(stxa, 8, .Lfsfault)
+END(suword64)
+
.align 16
.Lfsalign:
#if KTR_COMPILE & KTR_CT1
diff --git a/sys/sys/systm.h b/sys/sys/systm.h
index 7f4e3af..1c3c31d5 100644
--- a/sys/sys/systm.h
+++ b/sys/sys/systm.h
@@ -180,8 +180,12 @@ int copyout(const void *kaddr, void *udaddr, size_t len);
int fubyte(const void *base);
int subyte(void *base, int byte);
int suibyte(void *base, int byte);
+int32_t fuword32(const void *base);
+int64_t fuword64(const void *base);
long fuword(const void *base);
int suword(void *base, long word);
+int suword32(void *base, int32_t word);
+int suword64(void *base, int64_t word);
int fusword(void *base);
int susword(void *base, int word);
OpenPOWER on IntegriCloud