On 04/15/2011 06:27 AM, Nelson Elhage wrote:
This means that the truncation behavior in linearize needs to grow an additional slight piece of complexity: when fetching, truncation is dependent on the execution mode, instead of the current address size. diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index a5f63d4..d3d43a7 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c @@ -542,7 +542,7 @@ static int emulate_nm(struct x86_emulate_ctxt *ctxt) static int linearize(struct x86_emulate_ctxt *ctxt, struct segmented_address addr, - unsigned size, bool write, + unsigned size, bool write, bool fetch,
Calls to functions with strings of bool arguments are confusing. Please make this __linearize, and introduce a new linearize() which doesn't have a fetch argument.
ulong *linear) { struct decode_cache *c =&ctxt->decode; @@ -602,7 +602,7 @@ static int linearize(struct x86_emulate_ctxt *ctxt, } break; }
linearize() will currently fault on an unreadable code segment. Need to avoid that on instruction fetches.
- if (c->ad_bytes != 8) + if (fetch ? ctxt->mode != X86EMUL_MODE_PROT64 : c->ad_bytes != 8) la&= (u32)-1; *linear = la; return X86EMUL_CONTINUE;
-- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html