Use suword32/64 and fuword32/64 like elsewhere instead of inventing
suhword/fuhword.
This commit is contained in:
parent
92caa29d8e
commit
6e1f6045c0
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=98473
@ -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);
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user