From 975c11fe091caabfe2d9aae1c0a8df1c2e18b027 Mon Sep 17 00:00:00 2001 From: Stanislav Shwartsman Date: Mon, 30 Oct 2023 07:08:44 +0200 Subject: [PATCH] fix canonical address calculation broken with LASS merge --- bochs/cpu/access2.cc | 10 +++++----- bochs/cpu/paging.cc | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/bochs/cpu/access2.cc b/bochs/cpu/access2.cc index 3dba707c1..449c0eb90 100644 --- a/bochs/cpu/access2.cc +++ b/bochs/cpu/access2.cc @@ -315,12 +315,12 @@ BX_CPU_C::tickle_read_linear(unsigned s, bx_address laddr) } #if BX_SUPPORT_X86_64 - if (long64_mode()) { - if (! IsCanonical(laddr)) { - BX_ERROR(("tickle_read_linear(): canonical failure")); - exception(int_number(s), 0); - } + if (! IsCanonical(laddr)) { + BX_ERROR(("tickle_read_linear(): canonical failure")); + exception(int_number(s), 0); + } + if (long64_mode()) { if (BX_CPU_THIS_PTR cr4.get_LASS()) { // laddr[63] == 0 user, laddr[63] == 1 supervisor if ((laddr >> 63) == USER_PL) { diff --git a/bochs/cpu/paging.cc b/bochs/cpu/paging.cc index b9411b21e..e4ec41d19 100644 --- a/bochs/cpu/paging.cc +++ b/bochs/cpu/paging.cc @@ -2490,12 +2490,12 @@ int BX_CPU_C::access_write_linear(bx_address laddr, unsigned len, unsigned curr_ bx_TLB_entry *tlbEntry = BX_DTLB_ENTRY_OF(laddr, 0); #if BX_SUPPORT_X86_64 - if (long64_mode()) { - if (! IsCanonical(laddr)) { - BX_ERROR(("access_write_linear(): canonical failure")); - return -1; - } + if (! IsCanonical(laddr)) { + BX_ERROR(("access_write_linear(): canonical failure")); + return -1; + } + if (long64_mode()) { if (BX_CPU_THIS_PTR cr4.get_LASS()) { // laddr[63] == 0 user, laddr[63] == 1 supervisor if ((laddr >> 63) == user) { @@ -2613,12 +2613,12 @@ int BX_CPU_C::access_read_linear(bx_address laddr, unsigned len, unsigned curr_p bool user = (curr_pl == 3); #if BX_SUPPORT_X86_64 - if (long64_mode()) { - if (! IsCanonical(laddr)) { - BX_ERROR(("access_read_linear(): canonical failure")); - return -1; - } + if (! IsCanonical(laddr)) { + BX_ERROR(("access_read_linear(): canonical failure")); + return -1; + } + if (long64_mode()) { if (BX_CPU_THIS_PTR cr4.get_LASS()) { // laddr[63] == 0 user, laddr[63] == 1 supervisor if ((laddr >> 63) == user) {