Changeset 743 in vbox
- Timestamp:
- Feb 7, 2007 10:37:06 AM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 18395
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PATM/PATMA.asm
r739 r743 38 38 %include "PATMA.mac" 39 39 40 %ifdef DEBUG 41 ; Noisy, but useful for debugging certain problems 42 ;;;%define PATM_LOG_PATCHINSTR 43 %endif 40 44 41 45 BEGINCODE … … 275 279 mov dword [ss:PATM_INTERRUPTFLAG], 0 276 280 pushf 277 %ifdef PATM_LOG_ IF_CHANGES281 %ifdef PATM_LOG_PATCHINSTR 278 282 push eax 279 283 push ecx … … 304 308 DD 0 305 309 DD PATMCliEnd - PATMCliStart 306 %ifdef PATM_LOG_ IF_CHANGES310 %ifdef PATM_LOG_PATCHINSTR 307 311 DD 4 308 312 %else … … 311 315 DD PATM_INTERRUPTFLAG 312 316 DD 0 313 %ifdef PATM_LOG_ IF_CHANGES317 %ifdef PATM_LOG_PATCHINSTR 314 318 DD PATM_PENDINGACTION 315 319 DD 0 … … 327 331 mov dword [ss:PATM_INHIBITIRQADDR], PATM_NEXTINSTRADDR 328 332 pushf 329 %ifdef PATM_LOG_ IF_CHANGES333 %ifdef PATM_LOG_PATCHINSTR 330 334 push eax 331 335 push ecx … … 350 354 DD 0 351 355 DD PATMStiEnd - PATMStiStart 352 %ifdef PATM_LOG_ IF_CHANGES356 %ifdef PATM_LOG_PATCHINSTR 353 357 DD 6 354 358 %else … … 361 365 DD PATM_NEXTINSTRADDR 362 366 DD 0 363 %ifdef PATM_LOG_ IF_CHANGES367 %ifdef PATM_LOG_PATCHINSTR 364 368 DD PATM_PENDINGACTION 365 369 DD 0 … … 594 598 PATMPopf32Start: 595 599 mov dword [ss:PATM_INTERRUPTFLAG], 0 596 %ifdef PATM_LOG_ IF_CHANGES600 %ifdef PATM_LOG_PATCHINSTR 597 601 push eax 598 602 push ecx … … 654 658 DD 0 655 659 DD PATMPopf32End - PATMPopf32Start 656 %ifdef PATM_LOG_ IF_CHANGES660 %ifdef PATM_LOG_PATCHINSTR 657 661 DD 13 658 662 %else … … 661 665 DD PATM_INTERRUPTFLAG 662 666 DD 0 663 %ifdef PATM_LOG_ IF_CHANGES667 %ifdef PATM_LOG_PATCHINSTR 664 668 DD PATM_PENDINGACTION 665 669 DD 0 … … 693 697 PATMPopf32_NoExitStart: 694 698 mov dword [ss:PATM_INTERRUPTFLAG], 0 695 %ifdef PATM_LOG_ IF_CHANGES699 %ifdef PATM_LOG_PATCHINSTR 696 700 push eax 697 701 push ecx … … 748 752 DD 0 749 753 DD PATMPopf32_NoExitEnd - PATMPopf32_NoExitStart 750 %ifdef PATM_LOG_ IF_CHANGES754 %ifdef PATM_LOG_PATCHINSTR 751 755 DD 14 752 756 %else … … 755 759 DD PATM_INTERRUPTFLAG 756 760 DD 0 757 %ifdef PATM_LOG_ IF_CHANGES761 %ifdef PATM_LOG_PATCHINSTR 758 762 DD PATM_PENDINGACTION 759 763 DD 0 … … 917 921 mov dword [ss:PATM_INTERRUPTFLAG], 0 918 922 pushfd 919 %ifdef PATM_LOG_ IF_CHANGES923 %ifdef PATM_LOG_PATCHINSTR 920 924 push eax 921 925 push ecx … … 948 952 DD 0 949 953 DD PATMPushf32End - PATMPushf32Start 950 %ifdef PATM_LOG_ IF_CHANGES954 %ifdef PATM_LOG_PATCHINSTR 951 955 DD 4 952 956 %else … … 955 959 DD PATM_INTERRUPTFLAG 956 960 DD 0 957 %ifdef PATM_LOG_ IF_CHANGES961 %ifdef PATM_LOG_PATCHINSTR 958 962 DD PATM_PENDINGACTION 959 963 DD 0 … … 1066 1070 pushfd 1067 1071 1068 %ifdef PATM_LOG_ IF_CHANGES1072 %ifdef PATM_LOG_PATCHINSTR 1069 1073 push eax 1070 1074 push ecx … … 1213 1217 DD 0 1214 1218 DD PATMIretEnd- PATMIretStart 1215 %ifdef PATM_LOG_ IF_CHANGES1219 %ifdef PATM_LOG_PATCHINSTR 1216 1220 DD 22 1217 1221 %else … … 1220 1224 DD PATM_INTERRUPTFLAG 1221 1225 DD 0 1222 %ifdef PATM_LOG_ IF_CHANGES1226 %ifdef PATM_LOG_PATCHINSTR 1223 1227 DD PATM_PENDINGACTION 1224 1228 DD 0 … … 1601 1605 push ecx 1602 1606 1607 mov eax, dword [esp+16+4] ; guest return address 1608 mov dword [ss:PATM_CALL_RETURN_ADDR], eax ; temporary storage 1609 1603 1610 mov edx, dword [esp+16+20] ; pushed target address 1604 1611 … … 1667 1674 mov dword [ss:edi], eax 1668 1675 1669 push ecx ; temporarily store the target address on the stack 1670 add esp, 4 1676 mov dword [ss:PATM_CALL_PATCH_TARGET_ADDR], ecx ; temporarily store the target address 1671 1677 pop ecx 1672 1678 pop edi … … 1675 1681 add esp, 24 ; parameters + return address pushed by caller (changes the flags, but that shouldn't matter) 1676 1682 1677 %ifdef PATM_LOG_ IF_CHANGES1683 %ifdef PATM_LOG_PATCHINSTR 1678 1684 push eax 1679 push ebx1680 1685 push ecx 1681 push edx1682 mov ebx, dword [esp - 20 - 16] ; original guest return address1683 mov edx, dword [esp - 40 + 4 - 16] ; duplicated patch function1684 1686 lock or dword [ss:PATM_PENDINGACTION], PATM_ACTION_LOG_CALL 1685 1687 mov eax, PATM_ACTION_LOG_CALL 1686 1688 mov ecx, PATM_ACTION_MAGIC 1687 1689 db 0fh, 0bh ; illegal instr (hardcoded assumption in PATMHandleIllegalInstrTrap) 1688 pop edx1689 1690 pop ecx 1690 pop ebx1691 1691 pop eax 1692 1692 %endif 1693 1693 1694 push dword [ esp - 20]; push original guest return address1694 push dword [ss:PATM_CALL_RETURN_ADDR] ; push original guest return address 1695 1695 1696 1696 ; the called function will set PATM_INTERRUPTFLAG (!!) 1697 jmp dword [ esp-40] ; call duplicated patch function1697 jmp dword [ss:PATM_CALL_PATCH_TARGET_ADDR] 1698 1698 1699 1699 PATMLookupAndCallEnd: … … 1708 1708 DD 0 1709 1709 DD PATMLookupAndCallEnd - PATMLookupAndCallStart 1710 %ifdef PATM_LOG_ IF_CHANGES1711 DD 61710 %ifdef PATM_LOG_PATCHINSTR 1711 DD 10 1712 1712 %else 1713 DD 5 1714 %endif 1713 DD 9 1714 %endif 1715 DD PATM_CALL_RETURN_ADDR 1716 DD 0 1715 1717 DD PATM_PENDINGACTION 1716 1718 DD 0 … … 1723 1725 DD PATM_STACKBASE_GUEST 1724 1726 DD 0 1725 %ifdef PATM_LOG_IF_CHANGES 1727 DD PATM_CALL_PATCH_TARGET_ADDR 1728 DD 0 1729 %ifdef PATM_LOG_PATCHINSTR 1726 1730 DD PATM_PENDINGACTION 1727 1731 DD 0 1728 1732 %endif 1733 DD PATM_CALL_RETURN_ADDR 1734 DD 0 1735 DD PATM_CALL_PATCH_TARGET_ADDR 1736 DD 0 1729 1737 DD 0ffffffffh 1730 1738 … … 2121 2129 add eax, PATM_PATCHBASE 2122 2130 2123 %ifdef PATM_LOG_ IF_CHANGES2131 %ifdef PATM_LOG_PATCHINSTR 2124 2132 push eax 2125 2133 push ecx … … 2180 2188 add eax, PATM_PATCHBASE 2181 2189 2182 %ifdef PATM_LOG_ IF_CHANGES2190 %ifdef PATM_LOG_PATCHINSTR 2183 2191 push eax 2184 2192 push ecx … … 2216 2224 DD 0 2217 2225 DD PATMRetFunction_End - PATMRetFunction_Start 2218 %ifdef PATM_LOG_ IF_CHANGES2226 %ifdef PATM_LOG_PATCHINSTR 2219 2227 DD 9 2220 2228 %else … … 2231 2239 DD PATM_PATCHBASE 2232 2240 DD 0 2233 %ifdef PATM_LOG_ IF_CHANGES2241 %ifdef PATM_LOG_PATCHINSTR 2234 2242 DD PATM_PENDINGACTION 2235 2243 DD 0 … … 2239 2247 DD PATM_PATCHBASE 2240 2248 DD 0 2241 %ifdef PATM_LOG_ IF_CHANGES2249 %ifdef PATM_LOG_PATCHINSTR 2242 2250 DD PATM_PENDINGACTION 2243 2251 DD 0 … … 2266 2274 mov dword [ss:PATM_STACKPTR], PATM_STACK_SIZE 2267 2275 2268 %ifdef PATM_LOG_ IF_CHANGES2276 %ifdef PATM_LOG_PATCHINSTR 2269 2277 push eax 2270 2278 push ecx … … 2292 2300 DD 0 2293 2301 DD PATMCheckIF_End - PATMCheckIF_Start 2294 %ifdef PATM_LOG_ IF_CHANGES2302 %ifdef PATM_LOG_PATCHINSTR 2295 2303 DD 6 2296 2304 %else … … 2305 2313 DD PATM_STACKPTR 2306 2314 DD 0 2307 %ifdef PATM_LOG_ IF_CHANGES2315 %ifdef PATM_LOG_PATCHINSTR 2308 2316 DD PATM_PENDINGACTION 2309 2317 DD 0
Note:
See TracChangeset
for help on using the changeset viewer.