On 22/01/2020 20:23, Wei Liu wrote:
> These functions will be used later to make hypercalls to Hyper-V.
>
> Signed-off-by: Wei Liu <li...@microsoft.com>

After some experimentation,

diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
index cbc5701214..3708a60b5c 100644
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -329,6 +329,8 @@ SECTIONS
   efi = .;
 #endif
 
+  hv_hcall_page = ABSOLUTE(0xffff82d0bfffe000);
+
   /* Sections to be discarded */
   /DISCARD/ : {
        *(.exit.text)

in the linker script lets direct calls work correctly:

ffff82d080637935:       b9 01 00 00 40          mov    $0x40000001,%ecx
ffff82d08063793a:       0f 30                   wrmsr 
ffff82d08063793c:       ba 21 03 00 00          mov    $0x321,%edx
ffff82d080637941:       bf 01 00 00 00          mov    $0x1,%edi
ffff82d080637946:       e8 ac 4f c7 ff          callq  ffff82d0802ac8f7
<__set_fixmap_x>
ffff82d08063794b:       41 b8 00 00 00 00       mov    $0x0,%r8d
ffff82d080637951:       b9 ff ff 00 00          mov    $0xffff,%ecx
ffff82d080637956:       ba 00 00 00 00          mov    $0x0,%edx
ffff82d08063795b:       e8 a0 66 9c 3f          callq  ffff82d0bfffe000
<hv_hcall_page>
ffff82d080637960:       66 83 f8 02             cmp    $0x2,%ax

but it does throw:

Difference at .init:00032edf is 0xc0000000 (expected 0x40000000)
Difference at .init:00032edf is 0xc0000000 (expected 0x40000000)

as a diagnostic presumably from the final link  (both with a standard
Debian 2.28 binutils, and upstream 2.33 build).  I'm not sure what its
trying to complain about, as both xen.gz and xen.efi have correctly
generated code.

Depending on whether they are benign or not, a linker-friendly
fix_to_virt() should be all we need to keep these strictly as direct calls.

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to