From 6e1f6045c04a88072f53b29d1acc441ecfd9cd4a Mon Sep 17 00:00:00 2001 From: Peter Wemm Date: Thu, 20 Jun 2002 06:45:43 +0000 Subject: [PATCH] Use suword32/64 and fuword32/64 like elsewhere instead of inventing suhword/fuhword. --- sys/ia64/ia32/imgact_ia32.c | 25 +++++++++++++------------ sys/ia64/ia64/support.S | 18 ++++++++++-------- sys/ia64/ia64/support.s | 18 ++++++++++-------- sys/ia64/ia64/trap.c | 8 ++++---- 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 @@ exec_elf32_imgact(struct image_params *imgp) 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 -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); } }