aboutsummaryrefslogtreecommitdiff
path: root/compiler-rt/lib/interception/interception_win.cpp
diff options
context:
space:
mode:
authorAlvin Wong <alvin@alvinhc.com>2023-04-22 19:26:08 +0800
committerAlvin Wong <alvin@alvinhc.com>2023-05-04 22:41:26 +0800
commitca40985ee96e213127ee3c6f0c76ada73cc56bfb (patch)
treee6622d97757ea4e2a956207a9596ebc212811346 /compiler-rt/lib/interception/interception_win.cpp
parentefc494aa4d84e120be5b36c4bc8127ff90958b25 (diff)
downloadllvm-ca40985ee96e213127ee3c6f0c76ada73cc56bfb.zip
llvm-ca40985ee96e213127ee3c6f0c76ada73cc56bfb.tar.gz
llvm-ca40985ee96e213127ee3c6f0c76ada73cc56bfb.tar.bz2
[compiler-rt][interception][win] Add more assembly patterns
These assembly patterns are needed to intercept some libc++ and libunwind functions built by Clang for i686-w64-windows-gnu target. Differential Revision: https://reviews.llvm.org/D148990
Diffstat (limited to 'compiler-rt/lib/interception/interception_win.cpp')
-rw-r--r--compiler-rt/lib/interception/interception_win.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/compiler-rt/lib/interception/interception_win.cpp b/compiler-rt/lib/interception/interception_win.cpp
index faaa8ee..7e8a78b 100644
--- a/compiler-rt/lib/interception/interception_win.cpp
+++ b/compiler-rt/lib/interception/interception_win.cpp
@@ -492,6 +492,7 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
case 0xFF8B: // 8B FF : mov edi, edi
case 0xEC8B: // 8B EC : mov ebp, esp
case 0xc889: // 89 C8 : mov eax, ecx
+ case 0xE589: // 89 E5 : mov ebp, esp
case 0xC18B: // 8B C1 : mov eax, ecx
case 0xC033: // 33 C0 : xor eax, eax
case 0xC933: // 33 C9 : xor ecx, ecx
@@ -641,6 +642,8 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
case 0x24448B: // 8B 44 24 XX : mov eax, dword ptr [esp + XX]
case 0x244C8B: // 8B 4C 24 XX : mov ecx, dword ptr [esp + XX]
case 0x24548B: // 8B 54 24 XX : mov edx, dword ptr [esp + XX]
+ case 0x245C8B: // 8B 5C 24 XX : mov ebx, dword ptr [esp + XX]
+ case 0x246C8B: // 8B 6C 24 XX : mov ebp, dword ptr [esp + XX]
case 0x24748B: // 8B 74 24 XX : mov esi, dword ptr [esp + XX]
case 0x247C8B: // 8B 7C 24 XX : mov edi, dword ptr [esp + XX]
return 4;