From 7acbbfafe0e9574d51fd75d2ac8c8602140486da Mon Sep 17 00:00:00 2001
From: clc5q <clc5q@git.zephyr-software.com>
Date: Tue, 23 Feb 2016 02:01:01 +0000
Subject: [PATCH] Improve function pointer shadowing analysis for the CODEPTR
 argument passing case.

Former-commit-id: 2f024cf5a76a36f7da08d98ab62026875f16ff2f
---
 include/base/SMPFunction.h                    |   1 +
 src/base/SMPFunction.cpp                      | 167 ++++++++++--------
 tests/commit/save-busybox.psexe.infoannot     |  78 ++++----
 ...save-ffmpeg.psexe.infoannot.REMOVED.git-id |   2 +-
 .../save-gimp.psexe.infoannot.REMOVED.git-id  |   2 +-
 tests/commit/save-lt-svn.psexe.infoannot      |   2 +
 tests/commit/save-nginx.psexe.infoannot       | 106 +++++------
 tests/commit/save-openssl.psexe.infoannot     | 108 +++++------
 8 files changed, 244 insertions(+), 222 deletions(-)

diff --git a/include/base/SMPFunction.h b/include/base/SMPFunction.h
index bbc9603c..9d14a673 100644
--- a/include/base/SMPFunction.h
+++ b/include/base/SMPFunction.h
@@ -693,6 +693,7 @@ private:
 	void EmitReturnTargetAnnotations(void); // Emit Indirect Branch Target destinations for return instructions in this func.
 	void EmitFuncPtrShadowingAnnotations(FILE *InfoAnnotFile); // Emit annotations for func ptr shadowing defense
 	bool IsAlreadyShadowed(const ShadowPoint &CriticalOp); // Is CriticalOp already represented in AlreadyShadowed set?
+	void EmitFuncPtrHelper(FILE *InfoAnnotFile, SMPInstr *CurrInst); // common code for different cases
 	void EmitFuncPtrShadowingAnnotations2(FILE *InfoAnnotFile); // Emit annotations for func ptr shadowing defense
 	int FindInArgNumFromCopyAddr(STARS_ea_t CopyInstAddr); // return -1 if not found in InArgPointerCopyAddrs, InArg position # otherwise
 	bool MDFindReturnTypes(void); // Fill ReturnRegTypes[]
diff --git a/src/base/SMPFunction.cpp b/src/base/SMPFunction.cpp
index 6a35111e..6e71fade 100644
--- a/src/base/SMPFunction.cpp
+++ b/src/base/SMPFunction.cpp
@@ -9583,7 +9583,7 @@ bool SMPFunction::FindShadowingPoint2(const ShadowPoint CriticalOp, ShadowSet &S
 				}
 #endif
 				// If we are starting a NewCriticalOps chain, we need to start with a USE of the same SSA name as the DEF.
-#if 0  // find memory corruption
+#if 1  // find memory corruption
 				STARSDefUseIter NewUseIter = CurrInst->FindUse(UseOp);
 				if (NewUseIter != CurrInst->GetLastUse()) {
 					// We have a starting point for a new shadowing operation.
@@ -11424,6 +11424,84 @@ int SMPFunction::FindFollowBlockNum(SMPBasicBlock *CurrBlock, bool StartAtLastIn
 	return FollowBlockNum;
 } // end of SMPFunction::FindFollowBlockNum()
 
+// common code for different cases in EmitFuncPtrShadowingAnnotations2()
+void SMPFunction::EmitFuncPtrHelper(FILE *InfoAnnotFile, SMPInstr *CurrInst) {
+	STARS_ea_t ShadowCheckAddr = CurrInst->GetAddr();
+	this->AlreadyShadowed.clear();
+	ShadowPoint CriticalOp(ShadowCheckAddr, 0); // Checking point before indirect call
+	list<ShadowPoint> WorkList;
+	WorkList.push_back(CriticalOp);
+
+	while (!WorkList.empty()) {
+		ShadowSet ShadowUses;      // set of addr+USE pairs to shadow values that will be checked at ShadowCheckAddr
+		ShadowSet NewCriticalOps;  // worklist of new shadow USEs and their addresses
+		CriticalOp = WorkList.front();
+		WorkList.pop_front();
+
+		bool UnsafeCodePointerChain = false;
+		bool ValidShadowing = this->FindShadowingPoint2(CriticalOp, ShadowUses, UnsafeCodePointerChain, NewCriticalOps);
+		if (ValidShadowing && UnsafeCodePointerChain) {
+			// Need to shadow ShadowDefs right before their addrs, validate CriticalOp USE at ShadowCheckAddr
+			unsigned int CurrentShadowID = global_STARS_program->GetShadowID();
+#if STARS_DEBUG_FPTR_SHADOW_LIST
+			SMP_msg("DEBUGINFO: ShadowUses cardinality is %zu\n", ShadowUses.size());
+#endif
+			for (ShadowSet::const_iterator ShadowIter = ShadowUses.cbegin(); ShadowIter != ShadowUses.cend(); ++ShadowIter) {
+				STARS_ea_t ShadowAddr = ShadowIter->first;
+				assert(STARS_BADADDR != ShadowAddr);
+#if STARS_DEBUG_FPTR_SHADOW_LIST
+				SMP_msg("DEBUGINFO: ShadowUses entry ShadowAddr: %llx\n", (uint64_t) ShadowAddr);
+#endif
+				STARSOpndTypePtr ShadowOp = this->TempShadowList.GetRefNum(ShadowIter->second)->GetOp();
+				assert((nullptr != ShadowOp) && (!ShadowOp->IsVoidOp()));
+				SMPInstr *ShadowInst = this->GetInstFromAddr(ShadowAddr);
+				STARSOpndTypePtr UnnormalizedUseOp = CloneIfNecessary(ShadowOp, this->UsesFramePointer());
+				if (ShadowOp->IsMemOp()) {
+					// Un-normalize stack ops for annotation printing.
+					ShadowInst->MDGetUnnormalizedOp(UnnormalizedUseOp);
+				}
+
+				// Emit the annotation to shadow the InArg value at the top of the function.
+				SMP_fprintf(InfoAnnotFile, "%18llx %6zu INSTR FPTRSHADOW ",
+					(unsigned long long) ShadowAddr, ShadowInst->GetSize());
+				AnnotPrintOperand(UnnormalizedUseOp, InfoAnnotFile, UseFP, ShadowInst->MDHas64BitOperands());
+				SMP_fprintf(InfoAnnotFile, " SHADOWID %u\n", CurrentShadowID);
+
+				// Emit the annotation to check the shadowed value before the INDIR_CALL.
+				SMP_fprintf(InfoAnnotFile, "%18llx %6zu INSTR FPTRCHECK ",
+					(unsigned long long) ShadowCheckAddr, CurrInst->GetSize());
+				STARSOpndTypePtr UseOp = CurrInst->GetFirstRightOperandNoNorm(); // for annotation printing
+				AnnotPrintOperand(UseOp, InfoAnnotFile, UseFP, CurrInst->MDHas64BitOperands());
+				SMP_fprintf(InfoAnnotFile, " SHADOWID %u\n", CurrentShadowID);
+
+				AlreadyShadowed.insert(*ShadowIter);
+			} // end for all ShadowUses
+
+			// Increment the unique shadowing index
+			if (!ShadowUses.empty()) { // we used the current ShadowID
+				global_STARS_program->IncrementShadowID();
+			}
+		} // end if (ValidShadowing && UnsafeCodePointerChain)
+
+		// Now we need to find shadowing points for the NewCriticalOps.
+		if (!NewCriticalOps.empty()) {
+			for (ShadowSet::const_iterator NewIter = NewCriticalOps.cbegin(); NewIter != NewCriticalOps.cend(); ++NewIter) {
+				ShadowPoint CurrPoint = *NewIter;
+				if (this->AlreadyShadowed.find(CurrPoint) == this->AlreadyShadowed.end()) {
+					// Only add to WorkList if not already shadowed.
+					WorkList.push_back(CurrPoint);
+				}
+			}
+			NewCriticalOps.clear();
+		}
+		ShadowUses.clear();
+		this->AlreadyShadowed.clear();
+		this->TempShadowList.clear();
+	} // end while (!WorkList.empty())
+
+	return;
+} // end of SMPFunction::EmitFuncPtrHelper()
+
 // Emit annotations for func ptr shadowing defense
 void SMPFunction::EmitFuncPtrShadowingAnnotations2(FILE *InfoAnnotFile) {
 	if (this->HasGoodRTLs() && this->HasUnsafeIndirectWrites && (!this->IsLeaf())) {
@@ -11442,83 +11520,10 @@ void SMPFunction::EmitFuncPtrShadowingAnnotations2(FILE *InfoAnnotFile) {
 						STARSOpndTypePtr UseOp = CurrInst->GetFirstRightOperand();
 						STARSDefUseIter UseIter = CurrInst->FindUse(UseOp);
 						assert(UseIter != CurrInst->GetLastUse());
-						STARS_ea_t ShadowCheckAddr = CurrInst->GetAddr();
-						this->AlreadyShadowed.clear();
 						this->TempShadowList.clear();
 						this->TempShadowList.SetRef(UseIter->GetOp(), UseIter->GetType(), UseIter->GetSSANum());
-						DefUseListIter UseListIter = this->TempShadowList.GetLastRef();
-						--UseListIter;
-						ShadowPoint CriticalOp(ShadowCheckAddr, 0); // Checking point before indirect call
-						list<ShadowPoint> WorkList;
-						WorkList.push_back(CriticalOp);
-
-						while (!WorkList.empty()) {
-							ShadowSet ShadowUses;      // set of addr+USE pairs to shadow values that will be checked at ShadowCheckAddr
-							ShadowSet NewCriticalOps;  // worklist of new shadow USEs and their addresses
-							CriticalOp = WorkList.front();
-							WorkList.pop_front();
-
-							bool UnsafeCodePointerChain = false;
-							bool ValidShadowing = this->FindShadowingPoint2(CriticalOp, ShadowUses, UnsafeCodePointerChain, NewCriticalOps);
-							if (ValidShadowing && UnsafeCodePointerChain) {
-								// Need to shadow ShadowDefs right before their addrs, validate CriticalOp USE at ShadowCheckAddr
-								unsigned int CurrentShadowID = global_STARS_program->GetShadowID();
-								assert(STARS_BADADDR != ShadowCheckAddr);
-#if STARS_DEBUG_FPTR_SHADOW_LIST
-								SMP_msg("DEBUGINFO: ShadowUses cardinality is %zu\n", ShadowUses.size());
-#endif
-								for (ShadowSet::const_iterator ShadowIter = ShadowUses.cbegin(); ShadowIter != ShadowUses.cend(); ++ShadowIter) {
-									STARS_ea_t ShadowAddr = ShadowIter->first;
-									assert(STARS_BADADDR != ShadowAddr);
-#if STARS_DEBUG_FPTR_SHADOW_LIST
-									SMP_msg("DEBUGINFO: ShadowUses entry ShadowAddr: %llx\n", (uint64_t) ShadowAddr);
-#endif
-									STARSOpndTypePtr ShadowOp = this->TempShadowList.GetRefNum(ShadowIter->second)->GetOp();
-									assert((nullptr != ShadowOp) && (!ShadowOp->IsVoidOp()));
-									SMPInstr *ShadowInst = this->GetInstFromAddr(ShadowAddr);
-									STARSOpndTypePtr UnnormalizedUseOp = CloneIfNecessary(ShadowOp, this->UsesFramePointer());
-									if (ShadowOp->IsMemOp()) {
-										// Un-normalize stack ops for annotation printing.
-										ShadowInst->MDGetUnnormalizedOp(UnnormalizedUseOp);
-									}
-
-									// Emit the annotation to shadow the InArg value at the top of the function.
-									SMP_fprintf(InfoAnnotFile, "%18llx %6zu INSTR FPTRSHADOW ",
-										(unsigned long long) ShadowAddr, ShadowInst->GetSize());
-									AnnotPrintOperand(UnnormalizedUseOp, InfoAnnotFile, UseFP, ShadowInst->MDHas64BitOperands());
-									SMP_fprintf(InfoAnnotFile, " SHADOWID %u\n", CurrentShadowID);
-
-									// Emit the annotation to check the shadowed value before the INDIR_CALL.
-									SMP_fprintf(InfoAnnotFile, "%18llx %6zu INSTR FPTRCHECK ",
-										(unsigned long long) ShadowCheckAddr, CurrInst->GetSize());
-									UseOp = CurrInst->GetFirstRightOperandNoNorm(); // for annotation printing
-									AnnotPrintOperand(UseOp, InfoAnnotFile, UseFP, CurrInst->MDHas64BitOperands());
-									SMP_fprintf(InfoAnnotFile, " SHADOWID %u\n", CurrentShadowID);
-
-									AlreadyShadowed.insert(*ShadowIter);
-								} // end for all ShadowUses
 
-								// Increment the unique shadowing index
-								if (!ShadowUses.empty()) { // we used the current ShadowID
-									global_STARS_program->IncrementShadowID();
-								}
-							} // end if (ValidShadowing && UnsafeCodePointerChain)
-
-							// Now we need to find shadowing points for the NewCriticalOps.
-							if (!NewCriticalOps.empty()) {
-								for (ShadowSet::const_iterator NewIter = NewCriticalOps.cbegin(); NewIter != NewCriticalOps.cend(); ++NewIter) {
-									ShadowPoint CurrPoint = *NewIter;
-									if (AlreadyShadowed.find(CurrPoint) == AlreadyShadowed.end()) {
-										// Only add to WorkList if not already shadowed.
-										WorkList.push_back(CurrPoint);
-									}
-								}
-								NewCriticalOps.clear();
-							}
-							ShadowUses.clear();
-							this->AlreadyShadowed.clear();
-							this->TempShadowList.clear();
-						} // end while (!WorkList.empty())
+						this->EmitFuncPtrHelper(InfoAnnotFile, CurrInst);
 					} // end if INDIR_CALL
 					else if (CALL == CurrInst->GetDataFlowType()) {
 						// Search for case 3: CODEPTR passed as outgoing arg.
@@ -11527,6 +11532,17 @@ void SMPFunction::EmitFuncPtrShadowingAnnotations2(FILE *InfoAnnotFile) {
 					else if (Case3Search && CurrInst->MDIsArgumentPass(ArgNum)) {
 						STARSDefUseIter ArgIter = CurrInst->GetFirstNonFlagsDef();
 						if ((ArgIter != CurrInst->GetLastDef()) && IsEqType(CODEPTR, ArgIter->GetType())) {
+							STARSOpndTypePtr ArgOp = nullptr;
+							if (CurrInst->MDIsMoveInstr()) {
+								ArgOp = CurrInst->GetMoveSource(); // Need a USE for FindShadowingPoint2()
+								assert((nullptr != ArgOp) && !ArgOp->IsVoidOp());
+								STARSDefUseIter UseIter = CurrInst->FindUse(ArgOp);
+								assert(UseIter != CurrInst->GetLastUse());
+								this->TempShadowList.clear();
+								this->TempShadowList.SetRef(ArgOp, UseIter->GetType(), UseIter->GetSSANum());
+								this->EmitFuncPtrHelper(InfoAnnotFile, CurrInst);
+							}
+#if 0
 							STARSOpndTypePtr DefOp = ArgIter->GetOp();
 							STARS_ea_t ShadowCheckAddr = CurrInst->GetAddr();
 							STARS_ea_t ShadowAddr;
@@ -11563,6 +11579,7 @@ void SMPFunction::EmitFuncPtrShadowingAnnotations2(FILE *InfoAnnotFile) {
 									global_STARS_program->IncrementShadowID();
 								} // end if UnsafeCodePointerChain
 							} // end if move inst
+#endif
 						} // end if CODEPTR ArgIter
 					} // end if INDIR_CALL elsif CALL elsif Case3 arg pass
 				} // end for all insts in reverse order
diff --git a/tests/commit/save-busybox.psexe.infoannot b/tests/commit/save-busybox.psexe.infoannot
index 0ae8aad1..af349637 100644
--- a/tests/commit/save-busybox.psexe.infoannot
+++ b/tests/commit/save-busybox.psexe.infoannot
@@ -2220,8 +2220,6 @@
             427834      6 INSTR CHECK OVERFLOW SIGNED 32 EDX ZZ imul    edx, ebx, 3E8h  ; timeout 
             42793d    272 FUNC RETURNTYPE RAX 0
             42793d    272 FUNC INARGS    6  ARG0 2 ARG1 1 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
-            42793d      2 INSTR FPTRSHADOW  RDI SHADOWID 2
-            4279d2      3 INSTR FPTRCHECK  R12 SHADOWID 2
             427a4d     60 FUNC RETURNTYPE RAX 0
             427a4d     60 FUNC INARGS    6  ARG0 1 ARG1 0 ARG2 0 ARG3 1 ARG4 0 ARG5 0 
             427a89    260 FUNC RETURNTYPE RAX 1
@@ -2494,17 +2492,17 @@
             42ed9e    355 FUNC RETURNTYPE RAX 96
             42ed9e    355 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 2 ARG3 1 ARG4 1 ARG5 0 
             42ed9e    355 FUNC PROBLEM sub_42ED9E CALLUNRESOLVED 
-            42ed9e      2 INSTR FPTRSHADOW  RDX SHADOWID 3
-            42eebc      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 3
+            42ed9e      2 INSTR FPTRSHADOW  RDX SHADOWID 2
+            42eebc      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 2
             42ef01    503 FUNC RETURNTYPE RAX 0
             42ef01    503 FUNC INARGS    6  ARG0 96 ARG1 2 ARG2 2 ARG3 1 ARG4 2 ARG5 1 
             42ef01    503 FUNC PROBLEM sub_42EF01 CALLUNRESOLVED 
             42ef9f      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RBP+56 ZZ IDIOM 18 MEMORYSINK lea     rsi, [rbp+38h]  ; src 
             42efbb      7 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RBP+184 ZZ IDIOM 18 MEMORYSINK lea     rsi, [rbp+0B8h] ; src 
-            42ef01      2 INSTR FPTRSHADOW  RDX SHADOWID 4
-            42f0b3      5 INSTR FPTRCHECK  RDX SHADOWID 4
-            42ef01      2 INSTR FPTRSHADOW  R8 SHADOWID 5
-            42f08e      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 5
+            42ef01      2 INSTR FPTRSHADOW  RDX SHADOWID 3
+            42f0b3      5 INSTR FPTRCHECK  [RSP+24] SHADOWID 3
+            42ef01      2 INSTR FPTRSHADOW  R8 SHADOWID 4
+            42f08e      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 4
             42f0f8    175 FUNC RETURNTYPE RAX 0
             42f0f8    175 FUNC PROBLEM sub_42F0F8 STACKANALYSIS 
             42f1a7     64 FUNC RETURNTYPE RAX 0
@@ -4401,14 +4399,14 @@
             4572fb   1167 FUNC PROBLEM sub_4572FB CALLUNRESOLVED 
             4574fd      6 INSTR CHECK OVERFLOW UNKNOWNSIGN 32  RSI ZZ add     esi, 101h 
             45751e      2 INSTR CHECK UNDERFLOW SIGNED 32  RDX ZZ sub     edx, eax        ; timeout 
+            4572fb      2 INSTR FPTRSHADOW  RDI SHADOWID 5
+            45761b      4 INSTR FPTRCHECK  [RSP+24] SHADOWID 5
             4572fb      2 INSTR FPTRSHADOW  RDI SHADOWID 6
-            45761b      4 INSTR FPTRCHECK  [RSP+24] SHADOWID 6
+            4576fe      4 INSTR FPTRCHECK  [RSP+24] SHADOWID 6
             4572fb      2 INSTR FPTRSHADOW  RDI SHADOWID 7
-            4576fe      4 INSTR FPTRCHECK  [RSP+24] SHADOWID 7
+            4576b8      4 INSTR FPTRCHECK  [RSP+24] SHADOWID 7
             4572fb      2 INSTR FPTRSHADOW  RDI SHADOWID 8
-            4576b8      4 INSTR FPTRCHECK  [RSP+24] SHADOWID 8
-            4572fb      2 INSTR FPTRSHADOW  RDI SHADOWID 9
-            4576c3      4 INSTR FPTRCHECK  [RSP+24] SHADOWID 9
+            4576c3      4 INSTR FPTRCHECK  [RSP+24] SHADOWID 8
             45778a    570 FUNC RETURNTYPE RAX 1
             45778a    570 FUNC INARGS    6  ARG0 0 ARG1 4 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             457864      7 INSTR CHECK OVERFLOW UNKNOWNSIGN 64  RSI ZZ IDIOM 18 GLOBALMEMSINK add     rsi, 6C9478h    ; bufp 
@@ -5183,10 +5181,10 @@
             468604    581 FUNC INARGS    6  ARG0 4 ARG1 2 ARG2 2 ARG3 96 ARG4 0 ARG5 0 
             468604    581 FUNC PROBLEM sub_468604 CALLUNRESOLVED 
             4687de      4 INSTR CHECK OVERFLOW UNSIGNED 64  R13 ZZ IDIOM 18 MEMORYSINK add     r13, 8 
-            468604      2 INSTR FPTRSHADOW  RDX SHADOWID 10
-            4686ae      3 INSTR FPTRCHECK  [RSP] SHADOWID 10
-            468604      2 INSTR FPTRSHADOW  RSI SHADOWID 11
-            46873b      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 11
+            468604      2 INSTR FPTRSHADOW  RDX SHADOWID 9
+            4686ae      3 INSTR FPTRCHECK  [RSP] SHADOWID 9
+            468604      2 INSTR FPTRSHADOW  RSI SHADOWID 10
+            46873b      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 10
             468849     88 FUNC RETURNTYPE RAX 0
             468849     88 FUNC INARGS    6  ARG0 0 ARG1 4 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             4688a1     88 FUNC RETURNTYPE RAX 0
@@ -5732,8 +5730,8 @@
             481108      2 INSTR CHECK TRUNCATION UNKNOWNSIGN 64 RAX 32 EAX ZZ mov     edi, eax 
             481185      2 INSTR CHECK TRUNCATION UNKNOWNSIGN 64 RAX 32 EAX ZZ mov     edi, eax 
             4811f4      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RBX+1 ZZ IDIOM 18 MEMORYSINK lea     rdi, [rbx+1]    ; s2 
-            480f24      9 INSTR FPTRSHADOW  4721960 SHADOWID 12
-            4811dc      4 INSTR FPTRCHECK  [RSP+16] SHADOWID 12
+            480f24      9 INSTR FPTRSHADOW  4721960 SHADOWID 11
+            4811dc      4 INSTR FPTRCHECK  [RSP+16] SHADOWID 11
             477063    229 FUNC RETURNTYPE RAX 0
             477063    229 FUNC INARGS    6  ARG0 0 ARG1 0 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             4770df      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RBX+2 ZZ IDIOM 18 STACKMEMSINK lea     rdx, [rbx+2] 
@@ -6111,8 +6109,8 @@
             47fdf3      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RAX+3 ZZ lea     rdi, [rax+3] 
             47fe1d      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RAX+1 ZZ IDIOM 18 MEMORYSINK lea     rdi, [rax+1]    ; s 
             47fe2c      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RAX+1 ZZ lea     rcx, [rax+1] 
-            47fdc8      2 INSTR FPTRSHADOW  RDX SHADOWID 13
-            47fe7e      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 13
+            47fdc8      2 INSTR FPTRSHADOW  RDX SHADOWID 12
+            47fe7e      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 12
             47feb3    150 FUNC RETURNTYPE RAX 1
             47feb3    150 FUNC INARGS    6  ARG0 0 ARG1 0 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             47feb3    150 FUNC PROBLEM sub_47FEB3 CALLUNRESOLVED 
@@ -7000,8 +6998,8 @@
             4947a5      4 INSTR CHECK OVERFLOW NOFLAGSIGNED 64 R15+1 ZZ lea     edi, [r15+1] 
             4947e3      6 INSTR CHECK OVERFLOW NOFLAGSIGNED 32 RAX+-384 ZZ IDIOM 18 MEMORYSINK lea     edx, [rax-180h] 
             494826      6 INSTR CHECK OVERFLOW SIGNED 32  RDI ZZ add     edi, 0FFh 
-            494707      6 INSTR FPTRSHADOW  RAX SHADOWID 14
-            494881      4 INSTR FPTRCHECK  [RSP+24] SHADOWID 14
+            494707      6 INSTR FPTRSHADOW  RAX SHADOWID 13
+            494881      4 INSTR FPTRCHECK  [RSP+24] SHADOWID 13
             4949eb    120 FUNC RETURNTYPE RAX 4
             4949eb    120 FUNC INARGS    6  ARG0 0 ARG1 0 ARG2 4 ARG3 0 ARG4 0 ARG5 0 
             494a63    296 FUNC RETURNTYPE RAX 4
@@ -7582,26 +7580,26 @@
             49eeb2      3 INSTR CHECK OVERFLOW NOFLAGUNKNOWNSIGN 32 RCX+-10 ZZ lea     edx, [rcx-0Ah] 
             49ef11      3 INSTR CHECK OVERFLOW NOFLAGUNKNOWNSIGN 32 RCX+42 ZZ lea     edx, [rcx+2Ah] 
             49ef83      5 INSTR MEMSET STACKOFFSET_ESP 96 SIZE 544 ZZ call    _memset 
-            49ebc0      9 INSTR FPTRSHADOW  4822364 SHADOWID 15
-            49ec5e      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 15
+            49ebc0      9 INSTR FPTRSHADOW  4822364 SHADOWID 14
+            49ec5e      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 14
+            49ebb7      9 INSTR FPTRSHADOW  4821426 SHADOWID 15
+            49ec2c      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 15
             49ebb7      9 INSTR FPTRSHADOW  4821426 SHADOWID 16
-            49ec2c      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 16
+            49ec04      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 16
             49ebb7      9 INSTR FPTRSHADOW  4821426 SHADOWID 17
-            49ec04      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 17
-            49ebb7      9 INSTR FPTRSHADOW  4821426 SHADOWID 18
-            49ece6      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 18
+            49ece6      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 17
+            49ebc0      9 INSTR FPTRSHADOW  4822364 SHADOWID 18
+            49ecd9      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 18
             49ebc0      9 INSTR FPTRSHADOW  4822364 SHADOWID 19
-            49ecd9      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 19
-            49ebc0      9 INSTR FPTRSHADOW  4822364 SHADOWID 20
-            49ed12      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 20
-            49ebb7      9 INSTR FPTRSHADOW  4821426 SHADOWID 21
-            49ed54      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 21
-            49ebc0      9 INSTR FPTRSHADOW  4822364 SHADOWID 22
-            49ed8e      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 22
-            49ebb7      9 INSTR FPTRSHADOW  4821426 SHADOWID 23
-            49edde      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 23
-            49ebc0      9 INSTR FPTRSHADOW  4822364 SHADOWID 24
-            49ee86      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 24
+            49ed12      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 19
+            49ebb7      9 INSTR FPTRSHADOW  4821426 SHADOWID 20
+            49ed54      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 20
+            49ebc0      9 INSTR FPTRSHADOW  4822364 SHADOWID 21
+            49ed8e      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 21
+            49ebb7      9 INSTR FPTRSHADOW  4821426 SHADOWID 22
+            49edde      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 22
+            49ebc0      9 INSTR FPTRSHADOW  4822364 SHADOWID 23
+            49ee86      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 23
             49efc8   1179 FUNC RETURNTYPE RAX 4
             49efc8   1179 FUNC INARGS    4  ARG0 4 ARG1 4 ARG2 4 ARG3 4 
             49effa      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RSI+8 ZZ IDIOM 18 STACKMEMSINK lea     rax, [rsi+8] 
diff --git a/tests/commit/save-ffmpeg.psexe.infoannot.REMOVED.git-id b/tests/commit/save-ffmpeg.psexe.infoannot.REMOVED.git-id
index 14036cbc..11950bb4 100644
--- a/tests/commit/save-ffmpeg.psexe.infoannot.REMOVED.git-id
+++ b/tests/commit/save-ffmpeg.psexe.infoannot.REMOVED.git-id
@@ -1 +1 @@
-af8dac4676b89e0d0e8711766b3015aa9d0f39b9
\ No newline at end of file
+9cdd293d4b8a94d1269207e0752a74219eb1e567
\ No newline at end of file
diff --git a/tests/commit/save-gimp.psexe.infoannot.REMOVED.git-id b/tests/commit/save-gimp.psexe.infoannot.REMOVED.git-id
index 2d3f9b95..45d8cdf4 100644
--- a/tests/commit/save-gimp.psexe.infoannot.REMOVED.git-id
+++ b/tests/commit/save-gimp.psexe.infoannot.REMOVED.git-id
@@ -1 +1 @@
-5a9208da92707e8a80bb16b2dcbf868d24ef3025
\ No newline at end of file
+6a7c1a09b8038ec9bcc2e44c38393aa62eaf17c3
\ No newline at end of file
diff --git a/tests/commit/save-lt-svn.psexe.infoannot b/tests/commit/save-lt-svn.psexe.infoannot
index 9f337cf2..bf8ae9b3 100644
--- a/tests/commit/save-lt-svn.psexe.infoannot
+++ b/tests/commit/save-lt-svn.psexe.infoannot
@@ -777,6 +777,8 @@
             41758b      4 INSTR CHECK OVERFLOW UNKNOWNSIGN 64  R13 ZZ add     r13d, 1 
             4176a0   1317 FUNC RETURNTYPE RAX 96
             4176a0   1317 FUNC INARGS    6  ARG0 0 ARG1 4 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
+            4178de      7 INSTR FPTRSHADOW  4289744 SHADOWID 1
+            417972      5 INSTR FPTRCHECK  [RSP+40] SHADOWID 1
             417bd0    251 FUNC RETURNTYPE RAX 1
             417bd0    251 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             417c40      5 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 R12+16 ZZ IDIOM 18 MEMORYSINK lea     rdx, [context+10h] 
diff --git a/tests/commit/save-nginx.psexe.infoannot b/tests/commit/save-nginx.psexe.infoannot
index 3c37aa1a..8b7810c1 100644
--- a/tests/commit/save-nginx.psexe.infoannot
+++ b/tests/commit/save-nginx.psexe.infoannot
@@ -12932,8 +12932,8 @@
             52ee50     60 FUNC INARGS    6  ARG0 0 ARG1 1 ARG2 16 ARG3 1 ARG4 0 ARG5 0 
             52ee90    236 FUNC RETURNTYPE RAX 0
             52ee90    236 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 1 ARG3 4 ARG4 1 ARG5 96 
-            52eeb6      4 INSTR FPTRSHADOW  EAX SHADOWID 45
-            52ef36      4 INSTR FPTRCHECK  ECX SHADOWID 45
+            52ee99      2 INSTR FPTRSHADOW  RAX SHADOWID 45
+            52ef36      4 INSTR FPTRCHECK  [ESP+20] SHADOWID 45
             52ef80    631 FUNC RETURNTYPE RAX 0
             52ef80    631 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 1 ARG3 4 ARG4 1 ARG5 96 
             52f09d      3 INSTR CHECK OVERFLOW UNKNOWNSIGN 64  RDI ZZ IDIOM 18 MEMORYSINK add     rdi, r12 
@@ -16119,11 +16119,13 @@
             580e61      4 INSTR CHECK OVERFLOW NOFLAGSIGNED 64 R10+2 ZZ lea     esi, [r10+2] 
             580ea0      3 INSTR CHECK OVERFLOW NOFLAGSIGNED 32 RAX+1 ZZ lea     esi, [rax+1] 
             580992      4 INSTR FPTRSHADOW  [R15+8] SHADOWID 48
-            580f16      4 INSTR FPTRCHECK  ECX SHADOWID 48
-            580ab2      4 INSTR FPTRSHADOW  EAX SHADOWID 49
-            580b4f      4 INSTR FPTRCHECK  ECX SHADOWID 49
+            580f16      4 INSTR FPTRCHECK  [ESP+104] SHADOWID 48
+            580ab2      4 INSTR FPTRSHADOW  RAX SHADOWID 49
+            580b4f      4 INSTR FPTRCHECK  [ESP+88] SHADOWID 49
             580992      4 INSTR FPTRSHADOW  [R15+8] SHADOWID 50
-            580ca1      4 INSTR FPTRCHECK  ECX SHADOWID 50
+            580b4f      4 INSTR FPTRCHECK  [ESP+88] SHADOWID 50
+            580992      4 INSTR FPTRSHADOW  [R15+8] SHADOWID 51
+            580ca1      4 INSTR FPTRCHECK  [ESP+104] SHADOWID 51
             580f60    672 FUNC RETURNTYPE RAX 1
             580f60    672 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 4 ARG3 96 ARG4 96 ARG5 96 
             581200   2198 FUNC RETURNTYPE RAX 4
@@ -16401,10 +16403,10 @@
             589d70   1061 FUNC PROBLEM BIO_dump_indent_cb CALLUNRESOLVED 
             58a003      3 INSTR CHECK TRUNCATION UNSIGNED 64 RCX 8 CL ZZ IDIOM 5 movzx   ecx, cl 
             58a0de      3 INSTR CHECK OVERFLOW SIGNED 64  R8 ZZ add     r8d, r14d 
-            589d70      2 INSTR FPTRSHADOW  RDI SHADOWID 51
-            58a08b      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 51
             589d70      2 INSTR FPTRSHADOW  RDI SHADOWID 52
-            58a126      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 52
+            58a08b      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 52
+            589d70      2 INSTR FPTRSHADOW  RDI SHADOWID 53
+            58a126      4 INSTR FPTRCHECK  [RSP+48] SHADOWID 53
             58a1a0      8 FUNC RETURNTYPE RAX 0
             58a1a0      8 FUNC INARGS    6  ARG0 0 ARG1 0 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             58a1b0     21 FUNC RETURNTYPE RAX 0
@@ -17020,32 +17022,32 @@
             59861d      4 INSTR CHECK OVERFLOW UNSIGNED 64  RDI ZZ IDIOM 18 MEMORYSINK add     rdi, 38h 
             5986a2      7 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RBP+152 ZZ IDIOM 18 MEMORYSINK lea     rdx, [rbp+98h] 
             5986c0      5 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 R12+8 ZZ IDIOM 18 MEMORYSINK lea     rdx, [r12+8] 
-            5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 53
-            598654      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 53
             5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 54
-            59835a      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 54
+            598654      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 54
             5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 55
-            5983bc      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 55
-            5982ca      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 56
-            59871f      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 56
-            5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 57
-            598409      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 57
+            59835a      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 55
+            5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 56
+            5983bc      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 56
+            5982ca      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 57
+            59871f      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 57
             5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 58
-            598423      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 58
-            5982ca      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 59
-            598444      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 59
+            598409      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 58
+            5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 59
+            598423      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 59
             5982ca      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 60
-            5987a5      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 60
-            5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 61
-            5984d1      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 61
-            5982ca      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 62
-            5984f0      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 62
-            5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 63
-            59854d      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 63
+            598444      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 60
+            5982ca      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 61
+            5987a5      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 61
+            5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 62
+            5984d1      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 62
+            5982ca      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 63
+            5984f0      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 63
             5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 64
-            598582      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 64
-            5982ca      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 65
-            5985dc      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 65
+            59854d      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 64
+            5982d1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 65
+            598582      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 65
+            5982ca      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 66
+            5985dc      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 66
             5987c0    537 FUNC RETURNTYPE RAX 1
             5987c0    537 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             5987c0    537 FUNC PROBLEM ec_GFp_simple_set_Jprojective_coordinates_GFp CALLUNRESOLVED 
@@ -17125,38 +17127,38 @@
             59a27d      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 R14+32 ZZ IDIOM 18 MEMORYSINK lea     rdi, [r14+20h] 
             59a2a3      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RBP+56 ZZ IDIOM 18 MEMORYSINK lea     rsi, [rbp+38h] 
             59a2e3      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 R14+56 ZZ IDIOM 18 MEMORYSINK lea     rdi, [r14+38h] 
-            599cc1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 66
-            599d68      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 66
-            599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 67
-            59a01c      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 67
+            599cc1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 67
+            599d68      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 67
             599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 68
-            59a03b      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 68
+            59a01c      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 68
             599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 69
-            59a05b      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 69
-            599cc1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 70
-            599f8c      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 70
-            599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 71
-            599fb4      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 71
+            59a03b      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 69
+            599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 70
+            59a05b      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 70
+            599cc1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 71
+            599f8c      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 71
             599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 72
-            599fd3      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 72
+            599fb4      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 72
             599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 73
-            599ff3      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 73
+            599fd3      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 73
             599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 74
-            59a2cd      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 74
+            599ff3      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 74
             599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 75
-            59a10a      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 75
-            599cc1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 76
-            59a136      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 76
+            59a2cd      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 75
+            599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 76
+            59a10a      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 76
             599cc1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 77
-            59a15a      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 77
-            599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 78
-            59a17b      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 78
+            59a136      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 77
+            599cc1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 78
+            59a15a      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 78
             599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 79
-            59a1f6      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 79
+            59a17b      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 79
             599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 80
-            59a215      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 80
+            59a1f6      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 80
             599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 81
-            59a236      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 81
+            59a215      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 81
+            599cba      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 82
+            59a236      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 82
             59a330    174 FUNC RETURNTYPE RAX 96
             59a330    174 FUNC INARGS    6  ARG0 4 ARG1 0 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             59a3e0    548 FUNC RETURNTYPE RAX 1
diff --git a/tests/commit/save-openssl.psexe.infoannot b/tests/commit/save-openssl.psexe.infoannot
index 9cd4f63e..76b449fb 100644
--- a/tests/commit/save-openssl.psexe.infoannot
+++ b/tests/commit/save-openssl.psexe.infoannot
@@ -4219,8 +4219,8 @@
             4b9b40   1292 FUNC PROBLEM BN_is_prime_fasttest_ex CALLUNRESOLVED 
             4ba050    236 FUNC RETURNTYPE RAX 0
             4ba050    236 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 1 ARG3 4 ARG4 1 ARG5 96 
-            4ba076      4 INSTR FPTRSHADOW  EAX SHADOWID 26
-            4ba0f6      4 INSTR FPTRCHECK  ECX SHADOWID 26
+            4ba059      2 INSTR FPTRSHADOW  RAX SHADOWID 26
+            4ba0f6      4 INSTR FPTRCHECK  [ESP+20] SHADOWID 26
             4ba140    631 FUNC RETURNTYPE RAX 0
             4ba140    631 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 1 ARG3 4 ARG4 1 ARG5 96 
             4ba25d      3 INSTR CHECK OVERFLOW UNKNOWNSIGN 64  RDI ZZ IDIOM 18 MEMORYSINK add     rdi, r12 
@@ -8751,7 +8751,7 @@
             50e1a0   1748 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 2 ARG3 96 ARG4 96 ARG5 96 
             50e742      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RBX+24 ZZ IDIOM 18 MEMORYSINK lea     rsi, [rbx+18h] 
             50e1a0      2 INSTR FPTRSHADOW  RDX SHADOWID 32
-            50e561      5 INSTR FPTRCHECK  RCX SHADOWID 32
+            50e561      5 INSTR FPTRCHECK  [RSP+32] SHADOWID 32
             50e880    179 FUNC RETURNTYPE RAX 4
             50e880    179 FUNC INARGS    6  ARG0 0 ARG1 4 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             50e940    672 FUNC RETURNTYPE RAX 96
@@ -13217,11 +13217,13 @@
             570371      4 INSTR CHECK OVERFLOW NOFLAGSIGNED 64 R10+2 ZZ lea     esi, [r10+2] 
             5703b0      3 INSTR CHECK OVERFLOW NOFLAGSIGNED 32 RAX+1 ZZ lea     esi, [rax+1] 
             56fea2      4 INSTR FPTRSHADOW  [R15+8] SHADOWID 50
-            570426      4 INSTR FPTRCHECK  ECX SHADOWID 50
-            56ffc2      4 INSTR FPTRSHADOW  EAX SHADOWID 51
-            57005f      4 INSTR FPTRCHECK  ECX SHADOWID 51
+            570426      4 INSTR FPTRCHECK  [ESP+104] SHADOWID 50
+            56ffc2      4 INSTR FPTRSHADOW  RAX SHADOWID 51
+            57005f      4 INSTR FPTRCHECK  [ESP+88] SHADOWID 51
             56fea2      4 INSTR FPTRSHADOW  [R15+8] SHADOWID 52
-            5701b1      4 INSTR FPTRCHECK  ECX SHADOWID 52
+            57005f      4 INSTR FPTRCHECK  [ESP+88] SHADOWID 52
+            56fea2      4 INSTR FPTRSHADOW  [R15+8] SHADOWID 53
+            5701b1      4 INSTR FPTRCHECK  [ESP+104] SHADOWID 53
             570470    508 FUNC RETURNTYPE RAX 4
             570470    508 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 4 ARG3 4 ARG4 4 ARG5 0 
             570549      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RBX+40 ZZ IDIOM 18 MEMORYSINK lea     rdi, [rbx+28h] 
@@ -14009,10 +14011,10 @@
             582d60    801 FUNC RETURNTYPE RAX 0
             582d60    801 FUNC INARGS    6  ARG0 0 ARG1 4 ARG2 4 ARG3 0 ARG4 0 ARG5 0 
             582d60    801 FUNC PROBLEM ASN1_sign CALLUNRESOLVED 
-            582d60      2 INSTR FPTRSHADOW  RDI SHADOWID 53
-            582e6d      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 53
             582d60      2 INSTR FPTRSHADOW  RDI SHADOWID 54
-            582f46      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 54
+            582e6d      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 54
+            582d60      2 INSTR FPTRSHADOW  RDI SHADOWID 55
+            582f46      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 55
             583090    870 FUNC RETURNTYPE RAX 0
             583090    870 FUNC INARGS    6  ARG0 16 ARG1 4 ARG2 4 ARG3 0 ARG4 4 ARG5 4 
             583090    870 FUNC PROBLEM ASN1_item_sign_ctx CALLUNRESOLVED 
@@ -14863,32 +14865,32 @@
             599c4d      4 INSTR CHECK OVERFLOW UNSIGNED 64  RDI ZZ IDIOM 18 MEMORYSINK add     rdi, 38h 
             599cd2      7 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RBP+152 ZZ IDIOM 18 MEMORYSINK lea     rdx, [rbp+98h] 
             599cf0      5 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 R12+8 ZZ IDIOM 18 MEMORYSINK lea     rdx, [r12+8] 
-            599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 55
-            599c84      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 55
             599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 56
-            59998a      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 56
+            599c84      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 56
             599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 57
-            5999ec      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 57
-            5998fa      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 58
-            599d4f      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 58
-            599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 59
-            599a39      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 59
+            59998a      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 57
+            599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 58
+            5999ec      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 58
+            5998fa      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 59
+            599d4f      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 59
             599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 60
-            599a53      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 60
-            5998fa      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 61
-            599a74      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 61
+            599a39      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 60
+            599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 61
+            599a53      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 61
             5998fa      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 62
-            599dd5      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 62
-            599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 63
-            599b01      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 63
-            5998fa      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 64
-            599b20      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 64
-            599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 65
-            599b7d      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 65
+            599a74      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 62
+            5998fa      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 63
+            599dd5      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 63
+            599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 64
+            599b01      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 64
+            5998fa      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 65
+            599b20      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 65
             599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 66
-            599bb2      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 66
-            5998fa      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 67
-            599c0c      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 67
+            599b7d      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 66
+            599901      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 67
+            599bb2      4 INSTR FPTRCHECK  [RSP+8] SHADOWID 67
+            5998fa      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 68
+            599c0c      4 INSTR FPTRCHECK  [RSP+56] SHADOWID 68
             599df0    537 FUNC RETURNTYPE RAX 1
             599df0    537 FUNC INARGS    6  ARG0 4 ARG1 4 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             599df0    537 FUNC PROBLEM ec_GFp_simple_set_Jprojective_coordinates_GFp CALLUNRESOLVED 
@@ -14968,38 +14970,38 @@
             59b8ad      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 R14+32 ZZ IDIOM 18 MEMORYSINK lea     rdi, [r14+20h] 
             59b8d3      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 RBP+56 ZZ IDIOM 18 MEMORYSINK lea     rsi, [rbp+38h] 
             59b913      4 INSTR CHECK OVERFLOW NOFLAGUNSIGNED 64 R14+56 ZZ IDIOM 18 MEMORYSINK lea     rdi, [r14+38h] 
-            59b2f1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 68
-            59b398      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 68
-            59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 69
-            59b64c      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 69
+            59b2f1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 69
+            59b398      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 69
             59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 70
-            59b66b      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 70
+            59b64c      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 70
             59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 71
-            59b68b      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 71
-            59b2f1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 72
-            59b5bc      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 72
-            59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 73
-            59b5e4      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 73
+            59b66b      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 71
+            59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 72
+            59b68b      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 72
+            59b2f1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 73
+            59b5bc      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 73
             59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 74
-            59b603      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 74
+            59b5e4      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 74
             59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 75
-            59b623      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 75
+            59b603      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 75
             59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 76
-            59b8fd      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 76
+            59b623      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 76
             59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 77
-            59b73a      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 77
-            59b2f1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 78
-            59b766      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 78
+            59b8fd      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 77
+            59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 78
+            59b73a      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 78
             59b2f1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 79
-            59b78a      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 79
-            59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 80
-            59b7ab      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 80
+            59b766      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 79
+            59b2f1      7 INSTR FPTRSHADOW  [RAX+264] SHADOWID 80
+            59b78a      4 INSTR FPTRCHECK  [RSP+40] SHADOWID 80
             59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 81
-            59b826      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 81
+            59b7ab      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 81
             59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 82
-            59b845      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 82
+            59b826      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 82
             59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 83
-            59b866      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 83
+            59b845      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 83
+            59b2ea      7 INSTR FPTRSHADOW  [RAX+256] SHADOWID 84
+            59b866      4 INSTR FPTRCHECK  [RSP+72] SHADOWID 84
             59b960    174 FUNC RETURNTYPE RAX 96
             59b960    174 FUNC INARGS    6  ARG0 4 ARG1 0 ARG2 0 ARG3 0 ARG4 0 ARG5 0 
             59ba10    548 FUNC RETURNTYPE RAX 1
-- 
GitLab