Use suword32/64 and fuword32/64 like elsewhere instead of inventing

suhword/fuhword.
This commit is contained in:
Peter Wemm 2002-06-20 06:45:43 +00:00
parent 92caa29d8e
commit 6e1f6045c0
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=98473
4 changed files with 37 additions and 32 deletions

View File

@ -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);
}

View File

@ -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)

View File

@ -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)

View File

@ -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);
}
}