[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] rombios: fix argument to PMM



The pointer to PMM function arguments must be converted to
protected-mode from real-mode.

Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx>

diff -r 2f993fde1dc6 tools/firmware/rombios/rombios.c
--- a/tools/firmware/rombios/rombios.c  Sun Jan 25 10:32:26 2009 +0000
+++ b/tools/firmware/rombios/rombios.c  Mon Jan 26 14:03:01 2009 +0900
@@ -10366,18 +10366,34 @@
   db 0,0,0,0,0 ;; reserved
 
 pmm_entry_point:
+  pushf
   pushad
-  mov   eax, esp
-  add   eax, #(8*4+2+2) ;; skip regs of pushad, ip, cs
-  push  eax ;; pointer to PMM function args
+; Calculate protected-mode address of PMM function args
+  xor  eax, eax
+  mov  ax, sp
+  xor  ebx, ebx
+  mov  bx, ss
+  shl  ebx, 4
+  lea  ebx, [eax+ebx+38] ;; ebx=(ss<<4)+sp+4(far call)+2(pushf)+32(pushad)
+  push ebx
+;
+; Stack layout at this point:
+;
+;        : +0x0    +0x2    +0x4    +0x6    +0x8    +0xa    +0xc    +0xe
+; -----------------------------------------------------------------------
+; sp     : [&arg1         ][edi           ][esi           ][ebp           ]
+; sp+0x10: [esp           ][ebx           ][edx           ][ecx           ]
+; sp+0x20: [eax           ][flags ][ip    ][cs    ][arg1  ][arg2, ...
+;
   call _pmm
-  mov   bx, sp
+  mov  bx, sp
 SEG SS
-  mov   [bx+(4+7*4)], ax
+  mov  [bx+0x20], ax
 SEG SS
-  mov   [bx+(4+5*4)], dx
-  pop   eax
+  mov  [bx+0x18], dx
+  pop  ebx
   popad
+  popf
   db 0xcb ;; lret
 #endif // BX_PMM
 
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.