aboutsummaryrefslogtreecommitdiff
path: root/sys/ia64
diff options
context:
space:
mode:
authorPeter Wemm <peter@FreeBSD.org>2002-06-20 06:45:43 +0000
committerPeter Wemm <peter@FreeBSD.org>2002-06-20 06:45:43 +0000
commit6e1f6045c04a88072f53b29d1acc441ecfd9cd4a (patch)
tree45b7ed697bab7ad06b6f08bc572d678c4bc25d4f /sys/ia64
parent92caa29d8e687c3f3b2eff995f60f46bbc669f89 (diff)
downloadsrc-6e1f6045c04a88072f53b29d1acc441ecfd9cd4a.tar.gz
src-6e1f6045c04a88072f53b29d1acc441ecfd9cd4a.zip
Use suword32/64 and fuword32/64 like elsewhere instead of inventing
suhword/fuhword.
Notes
Notes: svn path=/head/; revision=98473
Diffstat (limited to 'sys/ia64')
-rw-r--r--sys/ia64/ia32/imgact_ia32.c25
-rw-r--r--sys/ia64/ia64/support.S18
-rw-r--r--sys/ia64/ia64/support.s18
-rw-r--r--sys/ia64/ia64/trap.c8
4 files changed, 37 insertions, 32 deletions
diff --git a/sys/ia64/ia32/imgact_ia32.c b/sys/ia64/ia32/imgact_ia32.c
index 1eb88c7df6c3..3230e6af9738 100644
--- a/sys/ia64/ia32/imgact_ia32.c
+++ b/sys/ia64/ia32/imgact_ia32.c
@@ -75,8 +75,6 @@ __ElfType(Auxargs);
#define IA32_USRSTACK (3L*1024*1024*1024)
#define IA32_PS_STRINGS (IA32_USRSTACK - sizeof(struct ia32_ps_strings))
-extern int suhword(void *p, u_int32_t v);
-
static int elf32_check_header(const Elf32_Ehdr *hdr);
static int elf32_freebsd_fixup(register_t **stack_base,
struct image_params *imgp);
@@ -802,7 +800,10 @@ fail:
return error;
}
-#define AUXARGS32_ENTRY(pos, id, val) {suhword(pos++, id); suhword(pos++, val);}
+#define AUXARGS32_ENTRY(pos, id, val) { \
+ suword32(pos++, id); \
+ suword32(pos++, val); \
+}
static int
elf32_freebsd_fixup(register_t **stack_base, struct image_params *imgp)
@@ -831,7 +832,7 @@ elf32_freebsd_fixup(register_t **stack_base, struct image_params *imgp)
imgp->auxargs = NULL;
(*(u_int32_t **)stack_base)--;
- suhword(*stack_base, (long) imgp->argc);
+ suword32(*stack_base, (long) imgp->argc);
return 0;
}
@@ -1264,37 +1265,37 @@ elf32_copyout_strings(struct image_params *imgp)
/*
* Fill in "ps_strings" struct for ps, w, etc.
*/
- suhword(&arginfo->ps_argvstr, (u_int32_t)(intptr_t)vectp);
- suhword(&arginfo->ps_nargvstr, argc);
+ suword32(&arginfo->ps_argvstr, (u_int32_t)(intptr_t)vectp);
+ suword32(&arginfo->ps_nargvstr, argc);
/*
* Fill in argument portion of vector table.
*/
for (; argc > 0; --argc) {
- suhword(vectp++, (u_int32_t)(intptr_t)destp);
+ suword32(vectp++, (u_int32_t)(intptr_t)destp);
while (*stringp++ != 0)
destp++;
destp++;
}
/* a null vector table pointer separates the argp's from the envp's */
- suhword(vectp++, 0);
+ suword32(vectp++, 0);
- suhword(&arginfo->ps_envstr, (u_int32_t)(intptr_t)vectp);
- suhword(&arginfo->ps_nenvstr, envc);
+ suword32(&arginfo->ps_envstr, (u_int32_t)(intptr_t)vectp);
+ suword32(&arginfo->ps_nenvstr, envc);
/*
* Fill in environment portion of vector table.
*/
for (; envc > 0; --envc) {
- suhword(vectp++, (u_int32_t)(intptr_t)destp);
+ suword32(vectp++, (u_int32_t)(intptr_t)destp);
while (*stringp++ != 0)
destp++;
destp++;
}
/* end of vector table is a null pointer */
- suhword(vectp, 0);
+ suword32(vectp, 0);
return ((register_t *)stack_base);
}
diff --git a/sys/ia64/ia64/support.S b/sys/ia64/ia64/support.S
index 7e6d137f112f..7df700e4666f 100644
--- a/sys/ia64/ia64/support.S
+++ b/sys/ia64/ia64/support.S
@@ -192,7 +192,8 @@ END(ia64_call_efi_physical)
* fu{byte,word} : fetch a byte (word) from user memory
*/
-ENTRY(suword, 2)
+ENTRY(suword64, 2)
+XENTRY(suword)
movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok
cmp.geu p6,p0=in0,r14
@@ -218,9 +219,9 @@ ENTRY(suword, 2)
mov ret0=r0
br.ret.sptk.few rp
-END(suword)
+END(suword64)
-ENTRY(suhword, 2)
+ENTRY(suword32, 2)
movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok
cmp.geu p6,p0=in0,r14
@@ -246,7 +247,7 @@ ENTRY(suhword, 2)
mov ret0=r0
br.ret.sptk.few rp
-END(suhword)
+END(suword32)
ENTRY(subyte, 2)
@@ -276,7 +277,8 @@ ENTRY(subyte, 2)
END(subyte)
-ENTRY(fuword, 1)
+ENTRY(fuword64, 1)
+XENTRY(fuword)
movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok
cmp.geu p6,p0=in0,r14
@@ -301,9 +303,9 @@ ENTRY(fuword, 1)
br.ret.sptk.few rp
-END(fuword)
+END(fuword64)
-ENTRY(fuhword, 1)
+ENTRY(fuword32, 1)
movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok
cmp.geu p6,p0=in0,r14
@@ -328,7 +330,7 @@ ENTRY(fuhword, 1)
br.ret.sptk.few rp
-END(fuhword)
+END(fuword32)
ENTRY(fubyte, 1)
diff --git a/sys/ia64/ia64/support.s b/sys/ia64/ia64/support.s
index 7e6d137f112f..7df700e4666f 100644
--- a/sys/ia64/ia64/support.s
+++ b/sys/ia64/ia64/support.s
@@ -192,7 +192,8 @@ END(ia64_call_efi_physical)
* fu{byte,word} : fetch a byte (word) from user memory
*/
-ENTRY(suword, 2)
+ENTRY(suword64, 2)
+XENTRY(suword)
movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok
cmp.geu p6,p0=in0,r14
@@ -218,9 +219,9 @@ ENTRY(suword, 2)
mov ret0=r0
br.ret.sptk.few rp
-END(suword)
+END(suword64)
-ENTRY(suhword, 2)
+ENTRY(suword32, 2)
movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok
cmp.geu p6,p0=in0,r14
@@ -246,7 +247,7 @@ ENTRY(suhword, 2)
mov ret0=r0
br.ret.sptk.few rp
-END(suhword)
+END(suword32)
ENTRY(subyte, 2)
@@ -276,7 +277,8 @@ ENTRY(subyte, 2)
END(subyte)
-ENTRY(fuword, 1)
+ENTRY(fuword64, 1)
+XENTRY(fuword)
movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok
cmp.geu p6,p0=in0,r14
@@ -301,9 +303,9 @@ ENTRY(fuword, 1)
br.ret.sptk.few rp
-END(fuword)
+END(fuword64)
-ENTRY(fuhword, 1)
+ENTRY(fuword32, 1)
movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok
cmp.geu p6,p0=in0,r14
@@ -328,7 +330,7 @@ ENTRY(fuhword, 1)
br.ret.sptk.few rp
-END(fuhword)
+END(fuword32)
ENTRY(fubyte, 1)
diff --git a/sys/ia64/ia64/trap.c b/sys/ia64/ia64/trap.c
index 0ae02d73138a..1542a3745125 100644
--- a/sys/ia64/ia64/trap.c
+++ b/sys/ia64/ia64/trap.c
@@ -909,8 +909,6 @@ syscall(int code, u_int64_t *args, struct trapframe *framep)
#include <i386/include/psl.h>
-extern long fuhword(const void *base);
-
static void
ia32_syscall(struct trapframe *framep)
{
@@ -956,14 +954,16 @@ ia32_syscall(struct trapframe *framep)
/*
* Code is first argument, followed by actual args.
*/
- code = fuhword(params);
+ code = fuword32(params);
params += sizeof(int);
} else if (code == SYS___syscall) {
/*
* Like syscall, but code is a quad, so as to maintain
* quad alignment for the rest of the arguments.
+ * We use a 32-bit fetch in case params is not
+ * aligned.
*/
- code = fuword(params);
+ code = fuword32(params);
params += sizeof(quad_t);
}
}