RtlCopyRetpolineStubsUnwindInfo

INT64 __fastcall RtlCopyRetpolineStubsUnwindInfo(VOID *a1, INT64 a2, UINT64 *a3, INT64 a4){
  int v5; 
  INT64 RetpolineStubsFunctionTable; 
  unsigned int v9; 
  UINT8 *v10; 
  int v11; 
  unsigned int v12; 
  __int64 v13; 
  int v14[4]; 
  int v15; 
  INT64 v16; 
  v15 = a2;
  v14[0] = 0;
  LODWORD(v16) = 0;
  v5 = a4;
  RetpolineStubsFunctionTable = RtlpGetRetpolineStubsFunctionTable(a1, a2, a4, *(unsigned int *)a3, &v16);
  if( !RetpolineStubsFunctionTable )
    return 3221226021i64;
  v9 = 0;
  v10 = (UINT8 *)a3 + *(unsigned int *)a3;
  v11 = 0;
  if( !(_DWORD)v16 )
    return 0i64;
  while( 1 )
  {
    v12 = RtlCalculateUnwindInfoSizeForRetpoline((INT64)a1, RetpolineStubsFunctionTable, v14);
    v9 += v12;
    if( v9 > 0x1F4 )
      break;
    v13 = v12;
    memmove(v10, (UINT8 *)a1 + *(unsigned int *)(RetpolineStubsFunctionTable + 8), v12);
    if( v14[0] )
      *(_DWORD *)&v10[v14[0]] += v15 - v5;
    v10 += v13;
    RetpolineStubsFunctionTable += 12i64;
    if( ++v11 >= (unsigned int)v16 )
      return 0i64;
  }
  return 2147483653i64;
}

Referenced by:

MiApplyRetpolineFixupsToKernelAndHal