LdrProcessRelocationBlockLongLong

_IMAGE_BASE_RELOCATION *__fastcall LdrProcessRelocationBlockLongLong(
        UINT16 ImageMachine,
        UINT64 Va,
        UINT64 SizeOfBlock,
        UINT16 *RelocationPtr,
        INT64 Diff){
  UINT16 *v5; 
  int v7; 
  UINT16 *v8; 
  unsigned int v9; 
  v5 = RelocationPtr;
  v7 = ImageMachine;
  v8 = &RelocationPtr[(unsigned int)SizeOfBlock];
  if( RelocationPtr >= v8 )
    return(_IMAGE_BASE_RELOCATION *)v5;
  while( 1 )
  {
    if( ((1 << (*v5 >> 12)) & 0x3A0) == 0 )
    {
      v9 = LdrpGenericProcessRelocation(v5, Va, Diff);
      goto LABEL_9;
    }
    if( v7 != 448 )
      break;
    v9 = LdrpArmProcessRelocation(v5, Va, Diff);
LABEL_9:
    if( !v9 )
      return 0i64;
    v5 += v9;
    if( v5 >= v8 )
      return(_IMAGE_BASE_RELOCATION *)v5;
  }
  if( v7 == 450 || v7 == 452 )
  {
    v9 = LdrpThumbProcessRelocation(v5, Va, Diff);
    goto LABEL_9;
  }
  return 0i64;
}

Referenced by:

LdrRelocateImageWithBias