From: "Alex Bennée" <alex.bennee@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Riku Voipio <riku.voipio@iki.fi>,
qemu-devel@nongnu.org, patches@linaro.org,
Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH 06/15] linux-user/vm86.c: Use cpu_ldl_data &c rather than plain ldl &c
Date: Thu, 15 Jan 2015 15:58:51 +0000 [thread overview]
Message-ID: <87vbk811dw.fsf@linaro.org> (raw)
In-Reply-To: <1421334118-3287-7-git-send-email-peter.maydell@linaro.org>
Peter Maydell <peter.maydell@linaro.org> writes:
> Use the cpu_ld*_data and cpu_st*_data family of functions to access
> guest memory in vm86.c rather than the very short-named ldl/stl functions.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> linux-user/vm86.c | 57 ++++++++++++++++++++++++++++++-------------------------
> 1 file changed, 31 insertions(+), 26 deletions(-)
>
> diff --git a/linux-user/vm86.c b/linux-user/vm86.c
> index 45ef559..22a4eb9 100644
> --- a/linux-user/vm86.c
> +++ b/linux-user/vm86.c
> @@ -45,29 +45,34 @@ static inline int is_revectored(int nr, struct target_revectored_struct *bitmap)
> return (((uint8_t *)bitmap)[nr >> 3] >> (nr & 7)) & 1;
> }
>
> -static inline void vm_putw(uint32_t segptr, unsigned int reg16, unsigned int val)
> +static inline void vm_putw(CPUX86State *env, uint32_t segptr,
> + unsigned int reg16, unsigned int val)
> {
> - stw(segptr + (reg16 & 0xffff), val);
> + cpu_stw_data(env, segptr + (reg16 & 0xffff), val);
> }
>
> -static inline void vm_putl(uint32_t segptr, unsigned int reg16, unsigned int val)
> +static inline void vm_putl(CPUX86State *env, uint32_t segptr,
> + unsigned int reg16, unsigned int val)
> {
> - stl(segptr + (reg16 & 0xffff), val);
> + cpu_stl_data(env, segptr + (reg16 & 0xffff), val);
> }
>
> -static inline unsigned int vm_getb(uint32_t segptr, unsigned int reg16)
> +static inline unsigned int vm_getb(CPUX86State *env,
> + uint32_t segptr, unsigned int reg16)
> {
> - return ldub(segptr + (reg16 & 0xffff));
> + return cpu_ldub_data(env, segptr + (reg16 & 0xffff));
> }
>
> -static inline unsigned int vm_getw(uint32_t segptr, unsigned int reg16)
> +static inline unsigned int vm_getw(CPUX86State *env,
> + uint32_t segptr, unsigned int reg16)
> {
> - return lduw(segptr + (reg16 & 0xffff));
> + return cpu_lduw_data(env, segptr + (reg16 & 0xffff));
> }
>
> -static inline unsigned int vm_getl(uint32_t segptr, unsigned int reg16)
> +static inline unsigned int vm_getl(CPUX86State *env,
> + uint32_t segptr, unsigned int reg16)
> {
> - return ldl(segptr + (reg16 & 0xffff));
> + return cpu_ldl_data(env, segptr + (reg16 & 0xffff));
> }
>
> void save_v86_state(CPUX86State *env)
> @@ -221,7 +226,7 @@ static void do_int(CPUX86State *env, int intno)
> &ts->vm86plus.int21_revectored))
> goto cannot_handle;
> int_addr = (intno << 2);
> - segoffs = ldl(int_addr);
> + segoffs = cpu_ldl_data(env, int_addr);
> if ((segoffs >> 16) == TARGET_BIOSSEG)
> goto cannot_handle;
> LOG_VM86("VM86: emulating int 0x%x. CS:IP=%04x:%04x\n",
> @@ -229,9 +234,9 @@ static void do_int(CPUX86State *env, int intno)
> /* save old state */
> ssp = env->segs[R_SS].selector << 4;
> sp = env->regs[R_ESP] & 0xffff;
> - vm_putw(ssp, sp - 2, get_vflags(env));
> - vm_putw(ssp, sp - 4, env->segs[R_CS].selector);
> - vm_putw(ssp, sp - 6, env->eip);
> + vm_putw(env, ssp, sp - 2, get_vflags(env));
> + vm_putw(env, ssp, sp - 4, env->segs[R_CS].selector);
> + vm_putw(env, ssp, sp - 6, env->eip);
> ADD16(env->regs[R_ESP], -6);
> /* goto interrupt handler */
> env->eip = segoffs & 0xffff;
> @@ -285,7 +290,7 @@ void handle_vm86_fault(CPUX86State *env)
> data32 = 0;
> pref_done = 0;
> do {
> - opcode = vm_getb(csp, ip);
> + opcode = vm_getb(env, csp, ip);
> ADD16(ip, 1);
> switch (opcode) {
> case 0x66: /* 32-bit data */ data32=1; break;
> @@ -306,10 +311,10 @@ void handle_vm86_fault(CPUX86State *env)
> switch(opcode) {
> case 0x9c: /* pushf */
> if (data32) {
> - vm_putl(ssp, sp - 4, get_vflags(env));
> + vm_putl(env, ssp, sp - 4, get_vflags(env));
> ADD16(env->regs[R_ESP], -4);
> } else {
> - vm_putw(ssp, sp - 2, get_vflags(env));
> + vm_putw(env, ssp, sp - 2, get_vflags(env));
> ADD16(env->regs[R_ESP], -2);
> }
> env->eip = ip;
> @@ -317,10 +322,10 @@ void handle_vm86_fault(CPUX86State *env)
>
> case 0x9d: /* popf */
> if (data32) {
> - newflags = vm_getl(ssp, sp);
> + newflags = vm_getl(env, ssp, sp);
> ADD16(env->regs[R_ESP], 4);
> } else {
> - newflags = vm_getw(ssp, sp);
> + newflags = vm_getw(env, ssp, sp);
> ADD16(env->regs[R_ESP], 2);
> }
> env->eip = ip;
> @@ -335,7 +340,7 @@ void handle_vm86_fault(CPUX86State *env)
> VM86_FAULT_RETURN;
>
> case 0xcd: /* int */
> - intno = vm_getb(csp, ip);
> + intno = vm_getb(env, csp, ip);
> ADD16(ip, 1);
> env->eip = ip;
> if (ts->vm86plus.vm86plus.flags & TARGET_vm86dbg_active) {
> @@ -350,14 +355,14 @@ void handle_vm86_fault(CPUX86State *env)
>
> case 0xcf: /* iret */
> if (data32) {
> - newip = vm_getl(ssp, sp) & 0xffff;
> - newcs = vm_getl(ssp, sp + 4) & 0xffff;
> - newflags = vm_getl(ssp, sp + 8);
> + newip = vm_getl(env, ssp, sp) & 0xffff;
> + newcs = vm_getl(env, ssp, sp + 4) & 0xffff;
> + newflags = vm_getl(env, ssp, sp + 8);
> ADD16(env->regs[R_ESP], 12);
> } else {
> - newip = vm_getw(ssp, sp);
> - newcs = vm_getw(ssp, sp + 2);
> - newflags = vm_getw(ssp, sp + 4);
> + newip = vm_getw(env, ssp, sp);
> + newcs = vm_getw(env, ssp, sp + 2);
> + newflags = vm_getw(env, ssp, sp + 4);
> ADD16(env->regs[R_ESP], 6);
> }
> env->eip = newip;
--
Alex Bennée
next prev parent reply other threads:[~2015-01-15 15:58 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-15 15:01 [Qemu-devel] [PATCH 00/15] Clean up cpu-ldst ld/st memory accessors Peter Maydell
2015-01-15 15:01 ` [Qemu-devel] [PATCH 01/15] cpu_ldst.h: Remove unused ldul_ macros Peter Maydell
2015-01-15 15:01 ` [Qemu-devel] [PATCH 02/15] monitor.c: Use ld*_p() instead of ld*_raw() Peter Maydell
2015-01-15 15:54 ` Alex Bennée
2015-01-15 15:01 ` [Qemu-devel] [PATCH 03/15] target-sparc: Don't use {ld, st}*_raw functions Peter Maydell
2015-01-15 15:55 ` Alex Bennée
2015-01-15 15:01 ` [Qemu-devel] [PATCH 04/15] linux-user/elfload.c: Don't use _raw accessor functions Peter Maydell
2015-01-15 15:56 ` Alex Bennée
2015-01-15 15:01 ` [Qemu-devel] [PATCH 05/15] bsd-user/elfload.c: Don't use ldl() or ldq_raw() Peter Maydell
2015-01-15 15:57 ` Alex Bennée
2015-01-15 15:01 ` [Qemu-devel] [PATCH 06/15] linux-user/vm86.c: Use cpu_ldl_data &c rather than plain ldl &c Peter Maydell
2015-01-15 15:58 ` Alex Bennée [this message]
2015-01-15 15:01 ` [Qemu-devel] [PATCH 07/15] linux-user/main.c (m68k): Use get_user_u16 rather than lduw in cpu_loop Peter Maydell
2015-01-15 16:03 ` Alex Bennée
2015-01-15 15:01 ` [Qemu-devel] [PATCH 08/15] target-mips: Don't use _raw load/store accessors Peter Maydell
2015-01-19 9:05 ` Alex Bennée
2015-01-19 10:29 ` Peter Maydell
2015-01-19 15:09 ` Alex Bennée
2015-01-15 15:01 ` [Qemu-devel] [PATCH 09/15] cpu_ldst.h: Drop unused ld/st*_kernel defines Peter Maydell
2015-01-19 9:09 ` Alex Bennée
2015-01-15 15:01 ` [Qemu-devel] [PATCH 10/15] cpu_ldst.h: Remove unused very short ld*/st* defines Peter Maydell
2015-01-19 9:09 ` Alex Bennée
2015-01-15 15:01 ` [Qemu-devel] [PATCH 11/15] cpu_ldst.h: Use inline functions for usermode cpu_ld/st accessors Peter Maydell
2015-01-15 15:01 ` [Qemu-devel] [PATCH 12/15] cpu_ldst_template.h: Use ld*_p directly rather than via ld*_raw macros Peter Maydell
2015-01-15 15:01 ` [Qemu-devel] [PATCH 13/15] cpu_ldst.h: Drop unused _raw macros, saddr() and laddr() Peter Maydell
2015-01-15 15:01 ` [Qemu-devel] [PATCH 14/15] cpu_ldst_template.h: Drop unused cpu_ldfq/stfq/ldfl/stfl accessors Peter Maydell
2015-01-15 15:01 ` [Qemu-devel] [PATCH 15/15] cpu_ldst.h, cpu-all.h, bswap.h: Update documentation on ld/st accessors Peter Maydell
2015-01-15 15:32 ` [Qemu-devel] [PATCH 00/15] Clean up cpu-ldst ld/st memory accessors Lluís Vilanova
2015-01-15 18:24 ` Peter Maydell
2015-01-15 19:10 ` Lluís Vilanova
2015-01-15 20:01 ` Paolo Bonzini
2015-01-16 18:50 ` Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87vbk811dw.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=patches@linaro.org \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.