
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* DWARF original prototype: void do_readv(File_read * this, off_t base, Read_multiple * rm, size_t
   start, size_t count) */

void __thiscall
gold::File_read::do_readv(File_read *this,off_t base,Read_multiple *rm,size_t start,size_t count)

{
  uint uVar1;
  int iVar2;
  longlong lVar3;
  longlong lVar4;
  pointer pRVar5;
  uint uVar6;
  ssize_t sVar7;
  int *piVar8;
  char *pcVar9;
  char *pcVar10;
  uint uVar11;
  int iVar12;
  int iVar13;
  uchar **ppuVar14;
  pointer pcVar15;
  uint uVar16;
  __off64_t _Var17;
  size_t local_284c;
  uint local_2840;
  int local_283c;
  iovec iov [256];
  uchar discard [8192];
  
  pRVar5 = (rm->
           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::Read_multiple_entry>_>
           )._M_impl._M_start + start;
  uVar16 = (uint)pRVar5->file_offset;
  iVar13 = *(int *)((int)&pRVar5->file_offset + 4);
  lVar4 = pRVar5->file_offset;
  lVar3 = pRVar5->file_offset;
  if (count == 0) {
    reopen_descriptor(this);
    local_2840 = 0;
    local_283c = 0;
  }
  else {
    ppuVar14 = &pRVar5->buffer;
    local_283c = 0;
    local_284c = 0;
    uVar6 = 0;
    while( true ) {
      local_2840 = uVar6 + 1;
      iov[uVar6].iov_base = *ppuVar14;
      uVar1 = (uint)ppuVar14[-1];
      local_283c = local_283c + uVar1;
      iov[uVar6].iov_len = uVar1;
      uVar11 = uVar1 + uVar16;
      iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16);
      local_284c = local_284c + 1;
      if (count == local_284c) break;
      uVar16 = (uint)pRVar5[local_284c].file_offset;
      iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4);
      uVar1 = (uint)(uVar11 < uVar16);
      iVar2 = iVar12 - iVar13;
      if ((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0) {
        uVar11 = uVar16 - uVar11;
        if (0x2000 < uVar11) {
                    /* WARNING: Subroutine does not return */
          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");
        }
        local_283c = local_283c + uVar11;
        iov[local_2840].iov_base = discard;
        iov[local_2840].iov_len = uVar11;
        local_2840 = uVar6 + 2;
      }
      ppuVar14 = ppuVar14 + 4;
      uVar6 = local_2840;
    }
    reopen_descriptor(this);
    if (0xff < local_2840) {
                    /* WARNING: Subroutine does not return */
      do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv");
    }
  }
  lVar4 = base + lVar4;
  _Var17 = lseek64(this->descriptor_,base + lVar3,0);
  if (_Var17 < 0) {
    piVar8 = __errno_location();
    pcVar9 = strerror(*piVar8);
    pcVar15 = (this->name_)._M_dataplus._M_p;
    pcVar10 = "%s: lseek failed: %s";
  }
  else {
    sVar7 = readv(this->descriptor_,(iovec *)iov,local_2840);
    if (-1 < sVar7) {
      if (sVar7 != local_283c) {
        pcVar15 = (this->name_)._M_dataplus._M_p;
        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");
                    /* WARNING: Subroutine does not return */
        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));
      }
      return;
    }
    piVar8 = __errno_location();
    pcVar9 = strerror(*piVar8);
    pcVar15 = (this->name_)._M_dataplus._M_p;
    pcVar10 = "%s: readv failed: %s";
  }
  pcVar10 = (char *)gettext(pcVar10);
                    /* WARNING: Subroutine does not return */
  gold_fatal(pcVar10,pcVar15,pcVar9);
}



/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void FUN_00066de0(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint *puVar4;
  uint uVar5;
  ssize_t sVar6;
  int *piVar7;
  char *pcVar8;
  char *pcVar9;
  undefined4 uVar10;
  uint uVar11;
  int iVar12;
  uint uVar13;
  uint *puVar14;
  undefined4 uVar15;
  uint uVar16;
  __off64_t _Var17;
  int local_284c;
  uint local_2840;
  int local_283c;
  iovec local_281c [256];
  undefined1 local_201c [8204];
  
  puVar4 = (uint *)(param_5 * 0x10 + *param_4);
  uVar1 = *puVar4;
  uVar2 = puVar4[1];
  if (param_6 == 0) {
    FUN_00066930(param_1);
    local_2840 = 0;
    local_283c = 0;
  }
  else {
    puVar14 = puVar4 + 3;
    local_283c = 0;
    local_284c = 0;
    uVar5 = 0;
    uVar13 = uVar2;
    uVar16 = uVar1;
    while( true ) {
      local_2840 = uVar5 + 1;
      local_281c[uVar5].iov_base = (void *)*puVar14;
      uVar3 = puVar14[-1];
      local_283c = local_283c + uVar3;
      local_281c[uVar5].iov_len = uVar3;
      uVar11 = uVar3 + uVar16;
      iVar12 = uVar13 + CARRY4(uVar3,uVar16);
      local_284c = local_284c + 1;
      if (param_6 == local_284c) break;
      uVar16 = puVar4[local_284c * 4];
      uVar13 = (puVar4 + local_284c * 4)[1];
      uVar3 = (uint)(uVar11 < uVar16);
      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=
          (int)((iVar12 - uVar13) - uVar3) < 0) {
        uVar11 = uVar16 - uVar11;
        if (0x2000 < uVar11) {
                    /* WARNING: Subroutine does not return */
          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");
        }
        local_283c = local_283c + uVar11;
        local_281c[local_2840].iov_base = local_201c;
        local_281c[local_2840].iov_len = uVar11;
        local_2840 = uVar5 + 2;
      }
      puVar14 = puVar14 + 4;
      uVar5 = local_2840;
    }
    FUN_00066930(param_1);
    if (0xff < local_2840) {
                    /* WARNING: Subroutine does not return */
      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);
    }
  }
  iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);
  _Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);
  if (_Var17 < 0) {
    piVar7 = __errno_location();
    pcVar8 = strerror(*piVar7);
    uVar15 = *param_1;
    pcVar9 = "%s: lseek failed: %s";
  }
  else {
    sVar6 = readv(param_1[6],local_281c,local_2840);
    if (-1 < sVar6) {
      if (sVar6 != local_283c) {
        uVar15 = *param_1;
        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");
                    /* WARNING: Subroutine does not return */
        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);
      }
      return;
    }
    piVar7 = __errno_location();
    pcVar8 = strerror(*piVar7);
    uVar15 = *param_1;
    pcVar9 = "%s: readv failed: %s";
  }
  uVar10 = gettext(pcVar9);
                    /* WARNING: Subroutine does not return */
  FUN_00065450(uVar10,uVar15,pcVar8);
}


CALL 0x000559e6
ADD EAX,0x32821b
PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x283c
MOV EDX,dword ptr [ESP + 0x2858]
MOV dword ptr [ESP + 0x1c],EAX
MOV EAX,dword ptr [ESP + 0x2854]
MOV ESI,dword ptr [ESP + 0x2864]
MOV dword ptr [ESP + 0x2c],EDX
MOV EDX,dword ptr [ESP + 0x285c]
MOV dword ptr [ESP + 0x28],EAX
MOV EAX,dword ptr [ESP + 0x2860]
SHL EAX,0x4
ADD EAX,dword ptr [EDX]
MOV EDI,dword ptr [EAX]
MOV EBP,dword ptr [EAX + 0x4]
MOV dword ptr [ESP + 0x14],EAX
MOV dword ptr [ESP + 0x20],EDI
MOV dword ptr [ESP + 0x24],EBP
TEST ESI,ESI
JZ 0x00066f76
XOR EDX,EDX
LEA EBX,[ESP + 0x830]
LEA ESI,[EAX + 0xc]
MOV dword ptr [ESP + 0x10],0x0
XOR EAX,EAX
MOV dword ptr [ESP + 0x18],EBX
MOV dword ptr [ESP],EDX
JMP 0x00066e8c
MOV EDX,EDI
SUB EDX,ECX
MOV ECX,EDX
CMP EDX,0x2000
JA 0x00066f9d
MOV EDX,dword ptr [ESP + 0xc]
MOV EBX,dword ptr [ESP + 0x18]
ADD EAX,0x2
ADD dword ptr [ESP + 0x10],ECX
MOV dword ptr [ESP + EDX*0x8 + 0x30],EBX
MOV dword ptr [ESP + EDX*0x8 + 0x34],ECX
ADD ESI,0x10
MOV ECX,dword ptr [ESI]
LEA EBX,[EAX + 0x1]
MOV dword ptr [ESP + 0xc],EBX
XOR EBX,EBX
MOV dword ptr [ESP + EAX*0x8 + 0x30],ECX
MOV ECX,dword ptr [ESI + -0x4]
ADD dword ptr [ESP + 0x10],ECX
MOV dword ptr [ESP + EAX*0x8 + 0x34],ECX
ADD ECX,EDI
ADC EBX,EBP
ADD dword ptr [ESP],0x1
MOV EDX,dword ptr [ESP]
CMP dword ptr [ESP + 0x2864],EDX
JZ 0x00066ee0
MOV EDI,dword ptr [ESP]
MOV EBP,dword ptr [ESP + 0x14]
MOV EDX,EBX
SHL EDI,0x4
ADD EBP,EDI
MOV EDI,dword ptr [EBP]
MOV EBP,dword ptr [EBP + 0x4]
CMP ECX,EDI
SBB EDX,EBP
JL 0x00066e60
MOV EAX,dword ptr [ESP + 0xc]
JMP 0x00066e89
SUB ESP,0xc
PUSH dword ptr [ESP + 0x285c]
CALL 0x00066930
ADD ESP,0x10
CMP dword ptr [ESP + 0xc],0xff
JA 0x00066fbc
MOV EAX,dword ptr [ESP + 0x20]
MOV EDX,dword ptr [ESP + 0x24]
ADD EAX,dword ptr [ESP + 0x28]
ADC EDX,dword ptr [ESP + 0x2c]
MOV dword ptr [ESP],EAX
MOV dword ptr [ESP + 0x4],EDX
PUSH 0x0
PUSH EDX
PUSH EAX
MOV EAX,dword ptr [ESP + 0x285c]
PUSH dword ptr [EAX + 0x18]
MOV EBX,dword ptr [ESP + 0x2c]
CALL 0x000292e0
ADD ESP,0x10
TEST EDX,EDX
JS 0x00067046
SUB ESP,0x4
PUSH dword ptr [ESP + 0x10]
LEA EAX,[ESP + 0x38]
PUSH EAX
MOV EAX,dword ptr [ESP + 0x285c]
PUSH dword ptr [EAX + 0x18]
MOV EBX,dword ptr [ESP + 0x2c]
CALL 0x00029ae0
ADD ESP,0x10
MOV ESI,EAX
TEST EAX,EAX
JS 0x00066fd9
CMP EAX,dword ptr [ESP + 0x10]
JNZ 0x00067012
ADD ESP,0x283c
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0xc
PUSH dword ptr [ESP + 0x285c]
CALL 0x00066930
ADD ESP,0x10
MOV dword ptr [ESP + 0xc],0x0
MOV dword ptr [ESP + 0x10],0x0
JMP 0x00066f00
SUB ESP,0x4
MOV EBX,dword ptr [ESP + 0x20]
LEA EAX,[EBX + 0xffef860c]
PUSH EAX
LEA EAX,[EBX + 0xffef8354]
PUSH 0x290
PUSH EAX
CALL 0x00069d00
PUSH EBX
MOV EBX,dword ptr [ESP + 0x20]
LEA EAX,[EBX + 0xffef860c]
PUSH EAX
LEA EAX,[EBX + 0xffef8354]
PUSH 0x2a4
PUSH EAX
CALL 0x00069d00
MOV EBP,dword ptr [ESP + 0x1c]
MOV EBX,EBP
CALL 0x00029090
SUB ESP,0xc
PUSH dword ptr [EAX]
CALL 0x00029100
MOV EDI,EAX
MOV EAX,dword ptr [ESP + 0x2860]
MOV ESI,dword ptr [EAX]
LEA EAX,[EBP + 0xffef8404]
MOV dword ptr [ESP],EAX
CALL 0x000293b0
ADD ESP,0xc
PUSH EDI
PUSH ESI
PUSH EAX
CALL 0x00065450
MOV EAX,dword ptr [ESP + 0x2850]
SUB ESP,0xc
MOV EBP,dword ptr [ESP + 0x28]
MOV EDI,dword ptr [EAX]
LEA EAX,[EBP + 0xffef84cc]
MOV EBX,EBP
PUSH EAX
CALL 0x000293b0
POP EDX
POP ECX
PUSH dword ptr [ESP + 0xc]
PUSH dword ptr [ESP + 0xc]
PUSH dword ptr [ESP + 0x20]
PUSH ESI
PUSH EDI
PUSH EAX
CALL 0x00065450
MOV EBP,dword ptr [ESP + 0x1c]
MOV EBX,EBP
CALL 0x00029090
SUB ESP,0xc
PUSH dword ptr [EAX]
CALL 0x00029100
MOV EDI,EAX
MOV EAX,dword ptr [ESP + 0x2860]
MOV ESI,dword ptr [EAX]
LEA EAX,[EBP + 0xffef83ef]
JMP 0x00066fff
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nvoid FUN_00066de0(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint uVar5;\n  ssize_t sVar6;\n  int *piVar7;\n  char *pcVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  uint uVar11;\n  int iVar12;\n  uint uVar13;\n  uint *puVar14;\n  undefined4 uVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  int local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec local_281c [256];\n  undefined1 local_201c [8204];\n  \n  puVar4 = (uint *)(param_5 * 0x10 + *param_4);\n  uVar1 = *puVar4;\n  uVar2 = puVar4[1];\n  if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }\n  iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);\n  _Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);\n  if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }\n  uVar10 = gettext(pcVar9);\n                    /* WARNING: Subroutine does not return */\n  FUN_00065450(uVar10,uVar15,pcVar8);\n}\n\n" comment (function_definition "void FUN_00066de0(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint uVar5;\n  ssize_t sVar6;\n  int *piVar7;\n  char *pcVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  uint uVar11;\n  int iVar12;\n  uint uVar13;\n  uint *puVar14;\n  undefined4 uVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  int local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec local_281c [256];\n  undefined1 local_201c [8204];\n  \n  puVar4 = (uint *)(param_5 * 0x10 + *param_4);\n  uVar1 = *puVar4;\n  uVar2 = puVar4[1];\n  if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }\n  iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);\n  _Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);\n  if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }\n  uVar10 = gettext(pcVar9);\n                    /* WARNING: Subroutine does not return */\n  FUN_00065450(uVar10,uVar15,pcVar8);\n}" primitive_type (function_declarator "FUN_00066de0(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)" identifier (parameter_list "(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int param_6" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint uVar5;\n  ssize_t sVar6;\n  int *piVar7;\n  char *pcVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  uint uVar11;\n  int iVar12;\n  uint uVar13;\n  uint *puVar14;\n  undefined4 uVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  int local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec local_281c [256];\n  undefined1 local_201c [8204];\n  \n  puVar4 = (uint *)(param_5 * 0x10 + *param_4);\n  uVar1 = *puVar4;\n  uVar2 = puVar4[1];\n  if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }\n  iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);\n  _Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);\n  if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }\n  uVar10 = gettext(pcVar9);\n                    /* WARNING: Subroutine does not return */\n  FUN_00065450(uVar10,uVar15,pcVar8);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ssize_t sVar6;" primitive_type identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "undefined4 uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "undefined4 uVar15;" type_identifier identifier ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "__off64_t _Var17;" type_identifier identifier ;) (declaration "int local_284c;" primitive_type identifier ;) (declaration "uint local_2840;" type_identifier identifier ;) (declaration "int local_283c;" primitive_type identifier ;) (declaration "iovec local_281c [256];" type_identifier (array_declarator "local_281c [256]" identifier [ number_literal ]) ;) (declaration "undefined1 local_201c [8204];" type_identifier (array_declarator "local_201c [8204]" identifier [ number_literal ]) ;) (expression_statement "puVar4 = (uint *)(param_5 * 0x10 + *param_4);" (assignment_expression "puVar4 = (uint *)(param_5 * 0x10 + *param_4)" identifier = (cast_expression "(uint *)(param_5 * 0x10 + *param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_5 * 0x10 + *param_4)" ( (binary_expression "param_5 * 0x10 + *param_4" (binary_expression "param_5 * 0x10" identifier * number_literal) + (pointer_expression "*param_4" * identifier)) )))) ;) (expression_statement "uVar1 = *puVar4;" (assignment_expression "uVar1 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "uVar2 = puVar4[1];" (assignment_expression "uVar2 = puVar4[1]" identifier = (subscript_expression "puVar4[1]" identifier [ number_literal ])) ;) (if_statement "if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }" if (parenthesized_expression "(param_6 == 0)" ( (binary_expression "param_6 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }" { (expression_statement "FUN_00066930(param_1);" (call_expression "FUN_00066930(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "local_2840 = 0;" (assignment_expression "local_2840 = 0" identifier = number_literal) ;) (expression_statement "local_283c = 0;" (assignment_expression "local_283c = 0" identifier = number_literal) ;) }) (else_clause "else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }" else (compound_statement "{\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }" { (expression_statement "puVar14 = puVar4 + 3;" (assignment_expression "puVar14 = puVar4 + 3" identifier = (binary_expression "puVar4 + 3" identifier + number_literal)) ;) (expression_statement "local_283c = 0;" (assignment_expression "local_283c = 0" identifier = number_literal) ;) (expression_statement "local_284c = 0;" (assignment_expression "local_284c = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = uVar2;" (assignment_expression "uVar13 = uVar2" identifier = identifier) ;) (expression_statement "uVar16 = uVar1;" (assignment_expression "uVar16 = uVar1" identifier = identifier) ;) (while_statement "while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }" { (expression_statement "local_2840 = uVar5 + 1;" (assignment_expression "local_2840 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) (expression_statement "local_281c[uVar5].iov_base = (void *)*puVar14;" (assignment_expression "local_281c[uVar5].iov_base = (void *)*puVar14" (field_expression "local_281c[uVar5].iov_base" (subscript_expression "local_281c[uVar5]" identifier [ identifier ]) . field_identifier) = (cast_expression "(void *)*puVar14" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar14" * identifier))) ;) (expression_statement "uVar3 = puVar14[-1];" (assignment_expression "uVar3 = puVar14[-1]" identifier = (subscript_expression "puVar14[-1]" identifier [ number_literal ])) ;) (expression_statement "local_283c = local_283c + uVar3;" (assignment_expression "local_283c = local_283c + uVar3" identifier = (binary_expression "local_283c + uVar3" identifier + identifier)) ;) (expression_statement "local_281c[uVar5].iov_len = uVar3;" (assignment_expression "local_281c[uVar5].iov_len = uVar3" (field_expression "local_281c[uVar5].iov_len" (subscript_expression "local_281c[uVar5]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "uVar11 = uVar3 + uVar16;" (assignment_expression "uVar11 = uVar3 + uVar16" identifier = (binary_expression "uVar3 + uVar16" identifier + identifier)) ;) (expression_statement "iVar12 = uVar13 + CARRY4(uVar3,uVar16);" (assignment_expression "iVar12 = uVar13 + CARRY4(uVar3,uVar16)" identifier = (binary_expression "uVar13 + CARRY4(uVar3,uVar16)" identifier + (call_expression "CARRY4(uVar3,uVar16)" identifier (argument_list "(uVar3,uVar16)" ( identifier , identifier ))))) ;) (expression_statement "local_284c = local_284c + 1;" (assignment_expression "local_284c = local_284c + 1" identifier = (binary_expression "local_284c + 1" identifier + number_literal)) ;) (if_statement "if (param_6 == local_284c) break;" if (parenthesized_expression "(param_6 == local_284c)" ( (binary_expression "param_6 == local_284c" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar16 = puVar4[local_284c * 4];" (assignment_expression "uVar16 = puVar4[local_284c * 4]" identifier = (subscript_expression "puVar4[local_284c * 4]" identifier [ (binary_expression "local_284c * 4" identifier * number_literal) ])) ;) (expression_statement "uVar13 = (puVar4 + local_284c * 4)[1];" (assignment_expression "uVar13 = (puVar4 + local_284c * 4)[1]" identifier = (subscript_expression "(puVar4 + local_284c * 4)[1]" (parenthesized_expression "(puVar4 + local_284c * 4)" ( (binary_expression "puVar4 + local_284c * 4" identifier + (binary_expression "local_284c * 4" identifier * number_literal)) )) [ number_literal ])) ;) (expression_statement "uVar3 = (uint)(uVar11 < uVar16);" (assignment_expression "uVar3 = (uint)(uVar11 < uVar16)" identifier = (call_expression "(uint)(uVar11 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar11 < uVar16)" ( (binary_expression "uVar11 < uVar16" identifier < identifier) )))) ;) (if_statement "if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }" if (parenthesized_expression "((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0)" ( (binary_expression "(SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0" (parenthesized_expression "(SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3))" ( (binary_expression "SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)" (call_expression "SBORROW4(iVar12,uVar13)" identifier (argument_list "(iVar12,uVar13)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar12 - uVar13,uVar3)" identifier (argument_list "(iVar12 - uVar13,uVar3)" ( (binary_expression "iVar12 - uVar13" identifier - identifier) , identifier )))) )) != (binary_expression "(int)((iVar12 - uVar13) - uVar3) < 0" (cast_expression "(int)((iVar12 - uVar13) - uVar3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar12 - uVar13) - uVar3)" ( (binary_expression "(iVar12 - uVar13) - uVar3" (parenthesized_expression "(iVar12 - uVar13)" ( (binary_expression "iVar12 - uVar13" identifier - identifier) )) - identifier) ))) < number_literal)) )) (compound_statement "{\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }" { (expression_statement "uVar11 = uVar16 - uVar11;" (assignment_expression "uVar11 = uVar16 - uVar11" identifier = (binary_expression "uVar16 - uVar11" identifier - identifier)) ;) (if_statement "if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }" if (parenthesized_expression "(0x2000 < uVar11)" ( (binary_expression "0x2000 < uVar11" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }" { comment (expression_statement "FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");" (call_expression "FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv")" identifier (argument_list "("../../gold/fileread.cc",0x290,"do_readv")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""do_readv"" " string_content ") ))) ;) })) (expression_statement "local_283c = local_283c + uVar11;" (assignment_expression "local_283c = local_283c + uVar11" identifier = (binary_expression "local_283c + uVar11" identifier + identifier)) ;) (expression_statement "local_281c[local_2840].iov_base = local_201c;" (assignment_expression "local_281c[local_2840].iov_base = local_201c" (field_expression "local_281c[local_2840].iov_base" (subscript_expression "local_281c[local_2840]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "local_281c[local_2840].iov_len = uVar11;" (assignment_expression "local_281c[local_2840].iov_len = uVar11" (field_expression "local_281c[local_2840].iov_len" (subscript_expression "local_281c[local_2840]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "local_2840 = uVar5 + 2;" (assignment_expression "local_2840 = uVar5 + 2" identifier = (binary_expression "uVar5 + 2" identifier + number_literal)) ;) })) (expression_statement "puVar14 = puVar14 + 4;" (assignment_expression "puVar14 = puVar14 + 4" identifier = (binary_expression "puVar14 + 4" identifier + number_literal)) ;) (expression_statement "uVar5 = local_2840;" (assignment_expression "uVar5 = local_2840" identifier = identifier) ;) })) (expression_statement "FUN_00066930(param_1);" (call_expression "FUN_00066930(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (if_statement "if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }" if (parenthesized_expression "(0xff < local_2840)" ( (binary_expression "0xff < local_2840" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }" { comment (expression_statement "FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);" (call_expression "FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12)" identifier (argument_list "("../../gold/fileread.cc",0x2a4,"do_readv",iVar12)" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""do_readv"" " string_content ") , identifier ))) ;) })) }))) (expression_statement "iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);" (assignment_expression "iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2)" identifier = (binary_expression "uVar2 + param_3 + (uint)CARRY4(uVar1,param_2)" (binary_expression "uVar2 + param_3" identifier + identifier) + (cast_expression "(uint)CARRY4(uVar1,param_2)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,param_2)" identifier (argument_list "(uVar1,param_2)" ( identifier , identifier )))))) ;) (expression_statement "_Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);" (assignment_expression "_Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0)" identifier = (call_expression "lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0)" identifier (argument_list "(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0)" ( (subscript_expression "param_1[6]" identifier [ number_literal ]) , (call_expression "CONCAT44(iVar12,uVar1 + param_2)" identifier (argument_list "(iVar12,uVar1 + param_2)" ( identifier , (binary_expression "uVar1 + param_2" identifier + identifier) ))) , number_literal )))) ;) (if_statement "if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }" if (parenthesized_expression "(_Var17 < 0)" ( (binary_expression "_Var17 < 0" identifier < number_literal) )) (compound_statement "{\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }" { (expression_statement "piVar7 = __errno_location();" (assignment_expression "piVar7 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "pcVar8 = strerror(*piVar7);" (assignment_expression "pcVar8 = strerror(*piVar7)" identifier = (call_expression "strerror(*piVar7)" identifier (argument_list "(*piVar7)" ( (pointer_expression "*piVar7" * identifier) )))) ;) (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: lseek failed: %s";" (assignment_expression "pcVar9 = "%s: lseek failed: %s"" identifier = (string_literal ""%s: lseek failed: %s"" " string_content ")) ;) }) (else_clause "else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }" else (compound_statement "{\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }" { (expression_statement "sVar6 = readv(param_1[6],local_281c,local_2840);" (assignment_expression "sVar6 = readv(param_1[6],local_281c,local_2840)" identifier = (call_expression "readv(param_1[6],local_281c,local_2840)" identifier (argument_list "(param_1[6],local_281c,local_2840)" ( (subscript_expression "param_1[6]" identifier [ number_literal ]) , identifier , identifier )))) ;) (if_statement "if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }" if (parenthesized_expression "(-1 < sVar6)" ( (binary_expression "-1 < sVar6" number_literal < identifier) )) (compound_statement "{\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }" { (if_statement "if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }" if (parenthesized_expression "(sVar6 != local_283c)" ( (binary_expression "sVar6 != local_283c" identifier != identifier) )) (compound_statement "{\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }" { (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");" (assignment_expression "uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld")" identifier = (call_expression "gettext("%s: file too short: read only %zd of %zd bytes at %lld")" identifier (argument_list "("%s: file too short: read only %zd of %zd bytes at %lld")" ( (string_literal ""%s: file too short: read only %zd of %zd bytes at %lld"" " string_content ") )))) ;) comment (expression_statement "FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);" (call_expression "FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12)" identifier (argument_list "(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12)" ( identifier , identifier , identifier , identifier , (binary_expression "uVar1 + param_2" identifier + identifier) , identifier ))) ;) })) (return_statement "return;" return ;) })) (expression_statement "piVar7 = __errno_location();" (assignment_expression "piVar7 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "pcVar8 = strerror(*piVar7);" (assignment_expression "pcVar8 = strerror(*piVar7)" identifier = (call_expression "strerror(*piVar7)" identifier (argument_list "(*piVar7)" ( (pointer_expression "*piVar7" * identifier) )))) ;) (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: readv failed: %s";" (assignment_expression "pcVar9 = "%s: readv failed: %s"" identifier = (string_literal ""%s: readv failed: %s"" " string_content ")) ;) }))) (expression_statement "uVar10 = gettext(pcVar9);" (assignment_expression "uVar10 = gettext(pcVar9)" identifier = (call_expression "gettext(pcVar9)" identifier (argument_list "(pcVar9)" ( identifier )))) ;) comment (expression_statement "FUN_00065450(uVar10,uVar15,pcVar8);" (call_expression "FUN_00065450(uVar10,uVar15,pcVar8)" identifier (argument_list "(uVar10,uVar15,pcVar8)" ( identifier , identifier , identifier ))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n/* DWARF original prototype: void do_readv(File_read * this, off_t base, Read_multiple * rm, size_t\n   start, size_t count) */\n\nvoid __thiscall\ngold::File_read::do_readv(File_read *this,off_t base,Read_multiple *rm,size_t start,size_t count)\n\n{\n  uint uVar1;\n  int iVar2;\n  longlong lVar3;\n  longlong lVar4;\n  pointer pRVar5;\n  uint uVar6;\n  ssize_t sVar7;\n  int *piVar8;\n  char *pcVar9;\n  char *pcVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uchar **ppuVar14;\n  pointer pcVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  size_t local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec iov [256];\n  uchar discard [8192];\n  \n  pRVar5 = (rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::Read_multiple_entry>_>\n           )._M_impl._M_start + start;\n  uVar16 = (uint)pRVar5->file_offset;\n  iVar13 = *(int *)((int)&pRVar5->file_offset + 4);\n  lVar4 = pRVar5->file_offset;\n  lVar3 = pRVar5->file_offset;\n  if (count == 0) {\n    reopen_descriptor(this);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    ppuVar14 = &pRVar5->buffer;\n    local_283c = 0;\n    local_284c = 0;\n    uVar6 = 0;\n    while( true ) {\n      local_2840 = uVar6 + 1;\n      iov[uVar6].iov_base = *ppuVar14;\n      uVar1 = (uint)ppuVar14[-1];\n      local_283c = local_283c + uVar1;\n      iov[uVar6].iov_len = uVar1;\n      uVar11 = uVar1 + uVar16;\n      iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16);\n      local_284c = local_284c + 1;\n      if (count == local_284c) break;\n      uVar16 = (uint)pRVar5[local_284c].file_offset;\n      iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4);\n      uVar1 = (uint)(uVar11 < uVar16);\n      iVar2 = iVar12 - iVar13;\n      if ((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        iov[local_2840].iov_base = discard;\n        iov[local_2840].iov_len = uVar11;\n        local_2840 = uVar6 + 2;\n      }\n      ppuVar14 = ppuVar14 + 4;\n      uVar6 = local_2840;\n    }\n    reopen_descriptor(this);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv");\n    }\n  }\n  lVar4 = base + lVar4;\n  _Var17 = lseek64(this->descriptor_,base + lVar3,0);\n  if (_Var17 < 0) {\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar7 = readv(this->descriptor_,(iovec *)iov,local_2840);\n    if (-1 < sVar7) {\n      if (sVar7 != local_283c) {\n        pcVar15 = (this->name_)._M_dataplus._M_p;\n        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));\n      }\n      return;\n    }\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: readv failed: %s";\n  }\n  pcVar10 = (char *)gettext(pcVar10);\n                    /* WARNING: Subroutine does not return */\n  gold_fatal(pcVar10,pcVar15,pcVar9);\n}\n\n" comment comment (function_definition "void __thiscall\ngold::File_read::do_readv(File_read *this,off_t base,Read_multiple *rm,size_t start,size_t count)\n\n{\n  uint uVar1;\n  int iVar2;\n  longlong lVar3;\n  longlong lVar4;\n  pointer pRVar5;\n  uint uVar6;\n  ssize_t sVar7;\n  int *piVar8;\n  char *pcVar9;\n  char *pcVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uchar **ppuVar14;\n  pointer pcVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  size_t local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec iov [256];\n  uchar discard [8192];\n  \n  pRVar5 = (rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::Read_multiple_entry>_>\n           )._M_impl._M_start + start;\n  uVar16 = (uint)pRVar5->file_offset;\n  iVar13 = *(int *)((int)&pRVar5->file_offset + 4);\n  lVar4 = pRVar5->file_offset;\n  lVar3 = pRVar5->file_offset;\n  if (count == 0) {\n    reopen_descriptor(this);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    ppuVar14 = &pRVar5->buffer;\n    local_283c = 0;\n    local_284c = 0;\n    uVar6 = 0;\n    while( true ) {\n      local_2840 = uVar6 + 1;\n      iov[uVar6].iov_base = *ppuVar14;\n      uVar1 = (uint)ppuVar14[-1];\n      local_283c = local_283c + uVar1;\n      iov[uVar6].iov_len = uVar1;\n      uVar11 = uVar1 + uVar16;\n      iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16);\n      local_284c = local_284c + 1;\n      if (count == local_284c) break;\n      uVar16 = (uint)pRVar5[local_284c].file_offset;\n      iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4);\n      uVar1 = (uint)(uVar11 < uVar16);\n      iVar2 = iVar12 - iVar13;\n      if ((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        iov[local_2840].iov_base = discard;\n        iov[local_2840].iov_len = uVar11;\n        local_2840 = uVar6 + 2;\n      }\n      ppuVar14 = ppuVar14 + 4;\n      uVar6 = local_2840;\n    }\n    reopen_descriptor(this);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv");\n    }\n  }\n  lVar4 = base + lVar4;\n  _Var17 = lseek64(this->descriptor_,base + lVar3,0);\n  if (_Var17 < 0) {\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar7 = readv(this->descriptor_,(iovec *)iov,local_2840);\n    if (-1 < sVar7) {\n      if (sVar7 != local_283c) {\n        pcVar15 = (this->name_)._M_dataplus._M_p;\n        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));\n      }\n      return;\n    }\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: readv failed: %s";\n  }\n  pcVar10 = (char *)gettext(pcVar10);\n                    /* WARNING: Subroutine does not return */\n  gold_fatal(pcVar10,pcVar15,pcVar9);\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::File_read::" identifier : : identifier : :) (function_declarator "do_readv(File_read *this,off_t base,Read_multiple *rm,size_t start,size_t count)" identifier (parameter_list "(File_read *this,off_t base,Read_multiple *rm,size_t start,size_t count)" ( (parameter_declaration "File_read *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "off_t base" type_identifier identifier) , (parameter_declaration "Read_multiple *rm" type_identifier (pointer_declarator "*rm" * identifier)) , (parameter_declaration "size_t start" primitive_type identifier) , (parameter_declaration "size_t count" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  longlong lVar3;\n  longlong lVar4;\n  pointer pRVar5;\n  uint uVar6;\n  ssize_t sVar7;\n  int *piVar8;\n  char *pcVar9;\n  char *pcVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uchar **ppuVar14;\n  pointer pcVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  size_t local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec iov [256];\n  uchar discard [8192];\n  \n  pRVar5 = (rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::Read_multiple_entry>_>\n           )._M_impl._M_start + start;\n  uVar16 = (uint)pRVar5->file_offset;\n  iVar13 = *(int *)((int)&pRVar5->file_offset + 4);\n  lVar4 = pRVar5->file_offset;\n  lVar3 = pRVar5->file_offset;\n  if (count == 0) {\n    reopen_descriptor(this);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    ppuVar14 = &pRVar5->buffer;\n    local_283c = 0;\n    local_284c = 0;\n    uVar6 = 0;\n    while( true ) {\n      local_2840 = uVar6 + 1;\n      iov[uVar6].iov_base = *ppuVar14;\n      uVar1 = (uint)ppuVar14[-1];\n      local_283c = local_283c + uVar1;\n      iov[uVar6].iov_len = uVar1;\n      uVar11 = uVar1 + uVar16;\n      iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16);\n      local_284c = local_284c + 1;\n      if (count == local_284c) break;\n      uVar16 = (uint)pRVar5[local_284c].file_offset;\n      iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4);\n      uVar1 = (uint)(uVar11 < uVar16);\n      iVar2 = iVar12 - iVar13;\n      if ((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        iov[local_2840].iov_base = discard;\n        iov[local_2840].iov_len = uVar11;\n        local_2840 = uVar6 + 2;\n      }\n      ppuVar14 = ppuVar14 + 4;\n      uVar6 = local_2840;\n    }\n    reopen_descriptor(this);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv");\n    }\n  }\n  lVar4 = base + lVar4;\n  _Var17 = lseek64(this->descriptor_,base + lVar3,0);\n  if (_Var17 < 0) {\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar7 = readv(this->descriptor_,(iovec *)iov,local_2840);\n    if (-1 < sVar7) {\n      if (sVar7 != local_283c) {\n        pcVar15 = (this->name_)._M_dataplus._M_p;\n        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));\n      }\n      return;\n    }\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: readv failed: %s";\n  }\n  pcVar10 = (char *)gettext(pcVar10);\n                    /* WARNING: Subroutine does not return */\n  gold_fatal(pcVar10,pcVar15,pcVar9);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "longlong lVar3;" type_identifier identifier ;) (declaration "longlong lVar4;" type_identifier identifier ;) (declaration "pointer pRVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "ssize_t sVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "uchar **ppuVar14;" type_identifier (pointer_declarator "**ppuVar14" * (pointer_declarator "*ppuVar14" * identifier)) ;) (declaration "pointer pcVar15;" type_identifier identifier ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "__off64_t _Var17;" type_identifier identifier ;) (declaration "size_t local_284c;" primitive_type identifier ;) (declaration "uint local_2840;" type_identifier identifier ;) (declaration "int local_283c;" primitive_type identifier ;) (declaration "iovec iov [256];" type_identifier (array_declarator "iov [256]" identifier [ number_literal ]) ;) (declaration "uchar discard [8192];" type_identifier (array_declarator "discard [8192]" identifier [ number_literal ]) ;) (expression_statement "pRVar5 = (rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::Read_multiple_entry>_>\n           )._M_impl._M_start + start;" (assignment_expression "pRVar5 = (rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::Read_multiple_entry>_>\n           )._M_impl._M_start + start" identifier = (binary_expression "(rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::Read_multiple_entry>_>\n           )._M_impl._M_start + start" (field_expression "(rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::Read_multiple_entry>_>\n           )._M_impl._M_start" (field_expression "(rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::Read_multiple_entry>_>\n           )._M_impl" (parenthesized_expression "(rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::Read_multiple_entry>_>\n           )" ( (ERROR "rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std::allocator<gold::File_read::" (comma_expression "rm->\n           super__Vector_base<gold::File_read::Read_multiple_entry,_std" (binary_expression "rm->\n           super__Vector_base<gold" (field_expression "rm->\n           super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::File_read::Read_multiple_entry" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Read_multiple_entry>_>" (binary_expression "Read_multiple_entry>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier) + identifier)) ;) (expression_statement "uVar16 = (uint)pRVar5->file_offset;" (assignment_expression "uVar16 = (uint)pRVar5->file_offset" identifier = (cast_expression "(uint)pRVar5->file_offset" ( (type_descriptor "uint" type_identifier) ) (field_expression "pRVar5->file_offset" identifier -> field_identifier))) ;) (expression_statement "iVar13 = *(int *)((int)&pRVar5->file_offset + 4);" (assignment_expression "iVar13 = *(int *)((int)&pRVar5->file_offset + 4)" identifier = (pointer_expression "*(int *)((int)&pRVar5->file_offset + 4)" * (cast_expression "(int *)((int)&pRVar5->file_offset + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&pRVar5->file_offset + 4)" ( (binary_expression "(int)&pRVar5->file_offset + 4" (cast_expression "(int)&pRVar5->file_offset" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&pRVar5->file_offset" & (field_expression "pRVar5->file_offset" identifier -> field_identifier))) + number_literal) ))))) ;) (expression_statement "lVar4 = pRVar5->file_offset;" (assignment_expression "lVar4 = pRVar5->file_offset" identifier = (field_expression "pRVar5->file_offset" identifier -> field_identifier)) ;) (expression_statement "lVar3 = pRVar5->file_offset;" (assignment_expression "lVar3 = pRVar5->file_offset" identifier = (field_expression "pRVar5->file_offset" identifier -> field_identifier)) ;) (if_statement "if (count == 0) {\n    reopen_descriptor(this);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    ppuVar14 = &pRVar5->buffer;\n    local_283c = 0;\n    local_284c = 0;\n    uVar6 = 0;\n    while( true ) {\n      local_2840 = uVar6 + 1;\n      iov[uVar6].iov_base = *ppuVar14;\n      uVar1 = (uint)ppuVar14[-1];\n      local_283c = local_283c + uVar1;\n      iov[uVar6].iov_len = uVar1;\n      uVar11 = uVar1 + uVar16;\n      iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16);\n      local_284c = local_284c + 1;\n      if (count == local_284c) break;\n      uVar16 = (uint)pRVar5[local_284c].file_offset;\n      iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4);\n      uVar1 = (uint)(uVar11 < uVar16);\n      iVar2 = iVar12 - iVar13;\n      if ((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        iov[local_2840].iov_base = discard;\n        iov[local_2840].iov_len = uVar11;\n        local_2840 = uVar6 + 2;\n      }\n      ppuVar14 = ppuVar14 + 4;\n      uVar6 = local_2840;\n    }\n    reopen_descriptor(this);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv");\n    }\n  }" if (parenthesized_expression "(count == 0)" ( (binary_expression "count == 0" identifier == number_literal) )) (compound_statement "{\n    reopen_descriptor(this);\n    local_2840 = 0;\n    local_283c = 0;\n  }" { (expression_statement "reopen_descriptor(this);" (call_expression "reopen_descriptor(this)" identifier (argument_list "(this)" ( identifier ))) ;) (expression_statement "local_2840 = 0;" (assignment_expression "local_2840 = 0" identifier = number_literal) ;) (expression_statement "local_283c = 0;" (assignment_expression "local_283c = 0" identifier = number_literal) ;) }) (else_clause "else {\n    ppuVar14 = &pRVar5->buffer;\n    local_283c = 0;\n    local_284c = 0;\n    uVar6 = 0;\n    while( true ) {\n      local_2840 = uVar6 + 1;\n      iov[uVar6].iov_base = *ppuVar14;\n      uVar1 = (uint)ppuVar14[-1];\n      local_283c = local_283c + uVar1;\n      iov[uVar6].iov_len = uVar1;\n      uVar11 = uVar1 + uVar16;\n      iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16);\n      local_284c = local_284c + 1;\n      if (count == local_284c) break;\n      uVar16 = (uint)pRVar5[local_284c].file_offset;\n      iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4);\n      uVar1 = (uint)(uVar11 < uVar16);\n      iVar2 = iVar12 - iVar13;\n      if ((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        iov[local_2840].iov_base = discard;\n        iov[local_2840].iov_len = uVar11;\n        local_2840 = uVar6 + 2;\n      }\n      ppuVar14 = ppuVar14 + 4;\n      uVar6 = local_2840;\n    }\n    reopen_descriptor(this);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv");\n    }\n  }" else (compound_statement "{\n    ppuVar14 = &pRVar5->buffer;\n    local_283c = 0;\n    local_284c = 0;\n    uVar6 = 0;\n    while( true ) {\n      local_2840 = uVar6 + 1;\n      iov[uVar6].iov_base = *ppuVar14;\n      uVar1 = (uint)ppuVar14[-1];\n      local_283c = local_283c + uVar1;\n      iov[uVar6].iov_len = uVar1;\n      uVar11 = uVar1 + uVar16;\n      iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16);\n      local_284c = local_284c + 1;\n      if (count == local_284c) break;\n      uVar16 = (uint)pRVar5[local_284c].file_offset;\n      iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4);\n      uVar1 = (uint)(uVar11 < uVar16);\n      iVar2 = iVar12 - iVar13;\n      if ((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        iov[local_2840].iov_base = discard;\n        iov[local_2840].iov_len = uVar11;\n        local_2840 = uVar6 + 2;\n      }\n      ppuVar14 = ppuVar14 + 4;\n      uVar6 = local_2840;\n    }\n    reopen_descriptor(this);\n    if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv");\n    }\n  }" { (expression_statement "ppuVar14 = &pRVar5->buffer;" (assignment_expression "ppuVar14 = &pRVar5->buffer" identifier = (pointer_expression "&pRVar5->buffer" & (field_expression "pRVar5->buffer" identifier -> field_identifier))) ;) (expression_statement "local_283c = 0;" (assignment_expression "local_283c = 0" identifier = number_literal) ;) (expression_statement "local_284c = 0;" (assignment_expression "local_284c = 0" identifier = number_literal) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (while_statement "while( true ) {\n      local_2840 = uVar6 + 1;\n      iov[uVar6].iov_base = *ppuVar14;\n      uVar1 = (uint)ppuVar14[-1];\n      local_283c = local_283c + uVar1;\n      iov[uVar6].iov_len = uVar1;\n      uVar11 = uVar1 + uVar16;\n      iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16);\n      local_284c = local_284c + 1;\n      if (count == local_284c) break;\n      uVar16 = (uint)pRVar5[local_284c].file_offset;\n      iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4);\n      uVar1 = (uint)(uVar11 < uVar16);\n      iVar2 = iVar12 - iVar13;\n      if ((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        iov[local_2840].iov_base = discard;\n        iov[local_2840].iov_len = uVar11;\n        local_2840 = uVar6 + 2;\n      }\n      ppuVar14 = ppuVar14 + 4;\n      uVar6 = local_2840;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      local_2840 = uVar6 + 1;\n      iov[uVar6].iov_base = *ppuVar14;\n      uVar1 = (uint)ppuVar14[-1];\n      local_283c = local_283c + uVar1;\n      iov[uVar6].iov_len = uVar1;\n      uVar11 = uVar1 + uVar16;\n      iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16);\n      local_284c = local_284c + 1;\n      if (count == local_284c) break;\n      uVar16 = (uint)pRVar5[local_284c].file_offset;\n      iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4);\n      uVar1 = (uint)(uVar11 < uVar16);\n      iVar2 = iVar12 - iVar13;\n      if ((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        iov[local_2840].iov_base = discard;\n        iov[local_2840].iov_len = uVar11;\n        local_2840 = uVar6 + 2;\n      }\n      ppuVar14 = ppuVar14 + 4;\n      uVar6 = local_2840;\n    }" { (expression_statement "local_2840 = uVar6 + 1;" (assignment_expression "local_2840 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (expression_statement "iov[uVar6].iov_base = *ppuVar14;" (assignment_expression "iov[uVar6].iov_base = *ppuVar14" (field_expression "iov[uVar6].iov_base" (subscript_expression "iov[uVar6]" identifier [ identifier ]) . field_identifier) = (pointer_expression "*ppuVar14" * identifier)) ;) (expression_statement "uVar1 = (uint)ppuVar14[-1];" (assignment_expression "uVar1 = (uint)ppuVar14[-1]" identifier = (cast_expression "(uint)ppuVar14[-1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "ppuVar14[-1]" identifier [ number_literal ]))) ;) (expression_statement "local_283c = local_283c + uVar1;" (assignment_expression "local_283c = local_283c + uVar1" identifier = (binary_expression "local_283c + uVar1" identifier + identifier)) ;) (expression_statement "iov[uVar6].iov_len = uVar1;" (assignment_expression "iov[uVar6].iov_len = uVar1" (field_expression "iov[uVar6].iov_len" (subscript_expression "iov[uVar6]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "uVar11 = uVar1 + uVar16;" (assignment_expression "uVar11 = uVar1 + uVar16" identifier = (binary_expression "uVar1 + uVar16" identifier + identifier)) ;) (expression_statement "iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16);" (assignment_expression "iVar12 = iVar13 + (uint)CARRY4(uVar1,uVar16)" identifier = (binary_expression "iVar13 + (uint)CARRY4(uVar1,uVar16)" identifier + (cast_expression "(uint)CARRY4(uVar1,uVar16)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,uVar16)" identifier (argument_list "(uVar1,uVar16)" ( identifier , identifier )))))) ;) (expression_statement "local_284c = local_284c + 1;" (assignment_expression "local_284c = local_284c + 1" identifier = (binary_expression "local_284c + 1" identifier + number_literal)) ;) (if_statement "if (count == local_284c) break;" if (parenthesized_expression "(count == local_284c)" ( (binary_expression "count == local_284c" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar16 = (uint)pRVar5[local_284c].file_offset;" (assignment_expression "uVar16 = (uint)pRVar5[local_284c].file_offset" identifier = (cast_expression "(uint)pRVar5[local_284c].file_offset" ( (type_descriptor "uint" type_identifier) ) (field_expression "pRVar5[local_284c].file_offset" (subscript_expression "pRVar5[local_284c]" identifier [ identifier ]) . field_identifier))) ;) (expression_statement "iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4);" (assignment_expression "iVar13 = *(int *)((int)&pRVar5[local_284c].file_offset + 4)" identifier = (pointer_expression "*(int *)((int)&pRVar5[local_284c].file_offset + 4)" * (cast_expression "(int *)((int)&pRVar5[local_284c].file_offset + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&pRVar5[local_284c].file_offset + 4)" ( (binary_expression "(int)&pRVar5[local_284c].file_offset + 4" (cast_expression "(int)&pRVar5[local_284c].file_offset" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&pRVar5[local_284c].file_offset" & (field_expression "pRVar5[local_284c].file_offset" (subscript_expression "pRVar5[local_284c]" identifier [ identifier ]) . field_identifier))) + number_literal) ))))) ;) (expression_statement "uVar1 = (uint)(uVar11 < uVar16);" (assignment_expression "uVar1 = (uint)(uVar11 < uVar16)" identifier = (call_expression "(uint)(uVar11 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar11 < uVar16)" ( (binary_expression "uVar11 < uVar16" identifier < identifier) )))) ;) (expression_statement "iVar2 = iVar12 - iVar13;" (assignment_expression "iVar2 = iVar12 - iVar13" identifier = (binary_expression "iVar12 - iVar13" identifier - identifier)) ;) (if_statement "if ((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        iov[local_2840].iov_base = discard;\n        iov[local_2840].iov_len = uVar11;\n        local_2840 = uVar6 + 2;\n      }" if (parenthesized_expression "((SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0)" ( (binary_expression "(SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)) != (int)(iVar2 - uVar1) < 0" (parenthesized_expression "(SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1))" ( (binary_expression "SBORROW4(iVar12,iVar13) != SBORROW4(iVar2,uVar1)" (call_expression "SBORROW4(iVar12,iVar13)" identifier (argument_list "(iVar12,iVar13)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar2,uVar1)" identifier (argument_list "(iVar2,uVar1)" ( identifier , identifier )))) )) != (binary_expression "(int)(iVar2 - uVar1) < 0" (cast_expression "(int)(iVar2 - uVar1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iVar2 - uVar1)" ( (binary_expression "iVar2 - uVar1" identifier - identifier) ))) < number_literal)) )) (compound_statement "{\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        iov[local_2840].iov_base = discard;\n        iov[local_2840].iov_len = uVar11;\n        local_2840 = uVar6 + 2;\n      }" { (expression_statement "uVar11 = uVar16 - uVar11;" (assignment_expression "uVar11 = uVar16 - uVar11" identifier = (binary_expression "uVar16 - uVar11" identifier - identifier)) ;) (if_statement "if (0x2000 < uVar11) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }" if (parenthesized_expression "(0x2000 < uVar11)" ( (binary_expression "0x2000 < uVar11" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");\n        }" { comment (expression_statement "do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv");" (call_expression "do_gold_unreachable("../../gold/fileread.cc",0x290,"do_readv")" identifier (argument_list "("../../gold/fileread.cc",0x290,"do_readv")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""do_readv"" " string_content ") ))) ;) })) (expression_statement "local_283c = local_283c + uVar11;" (assignment_expression "local_283c = local_283c + uVar11" identifier = (binary_expression "local_283c + uVar11" identifier + identifier)) ;) (expression_statement "iov[local_2840].iov_base = discard;" (assignment_expression "iov[local_2840].iov_base = discard" (field_expression "iov[local_2840].iov_base" (subscript_expression "iov[local_2840]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "iov[local_2840].iov_len = uVar11;" (assignment_expression "iov[local_2840].iov_len = uVar11" (field_expression "iov[local_2840].iov_len" (subscript_expression "iov[local_2840]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "local_2840 = uVar6 + 2;" (assignment_expression "local_2840 = uVar6 + 2" identifier = (binary_expression "uVar6 + 2" identifier + number_literal)) ;) })) (expression_statement "ppuVar14 = ppuVar14 + 4;" (assignment_expression "ppuVar14 = ppuVar14 + 4" identifier = (binary_expression "ppuVar14 + 4" identifier + number_literal)) ;) (expression_statement "uVar6 = local_2840;" (assignment_expression "uVar6 = local_2840" identifier = identifier) ;) })) (expression_statement "reopen_descriptor(this);" (call_expression "reopen_descriptor(this)" identifier (argument_list "(this)" ( identifier ))) ;) (if_statement "if (0xff < local_2840) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv");\n    }" if (parenthesized_expression "(0xff < local_2840)" ( (binary_expression "0xff < local_2840" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv");\n    }" { comment (expression_statement "do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv");" (call_expression "do_gold_unreachable("../../gold/fileread.cc",0x2a4,"do_readv")" identifier (argument_list "("../../gold/fileread.cc",0x2a4,"do_readv")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""do_readv"" " string_content ") ))) ;) })) }))) (expression_statement "lVar4 = base + lVar4;" (assignment_expression "lVar4 = base + lVar4" identifier = (binary_expression "base + lVar4" identifier + identifier)) ;) (expression_statement "_Var17 = lseek64(this->descriptor_,base + lVar3,0);" (assignment_expression "_Var17 = lseek64(this->descriptor_,base + lVar3,0)" identifier = (call_expression "lseek64(this->descriptor_,base + lVar3,0)" identifier (argument_list "(this->descriptor_,base + lVar3,0)" ( (field_expression "this->descriptor_" identifier -> field_identifier) , (binary_expression "base + lVar3" identifier + identifier) , number_literal )))) ;) (if_statement "if (_Var17 < 0) {\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar7 = readv(this->descriptor_,(iovec *)iov,local_2840);\n    if (-1 < sVar7) {\n      if (sVar7 != local_283c) {\n        pcVar15 = (this->name_)._M_dataplus._M_p;\n        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));\n      }\n      return;\n    }\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: readv failed: %s";\n  }" if (parenthesized_expression "(_Var17 < 0)" ( (binary_expression "_Var17 < 0" identifier < number_literal) )) (compound_statement "{\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: lseek failed: %s";\n  }" { (expression_statement "piVar8 = __errno_location();" (assignment_expression "piVar8 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "pcVar9 = strerror(*piVar8);" (assignment_expression "pcVar9 = strerror(*piVar8)" identifier = (call_expression "strerror(*piVar8)" identifier (argument_list "(*piVar8)" ( (pointer_expression "*piVar8" * identifier) )))) ;) (expression_statement "pcVar15 = (this->name_)._M_dataplus._M_p;" (assignment_expression "pcVar15 = (this->name_)._M_dataplus._M_p" identifier = (field_expression "(this->name_)._M_dataplus._M_p" (field_expression "(this->name_)._M_dataplus" (parenthesized_expression "(this->name_)" ( (field_expression "this->name_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "pcVar10 = "%s: lseek failed: %s";" (assignment_expression "pcVar10 = "%s: lseek failed: %s"" identifier = (string_literal ""%s: lseek failed: %s"" " string_content ")) ;) }) (else_clause "else {\n    sVar7 = readv(this->descriptor_,(iovec *)iov,local_2840);\n    if (-1 < sVar7) {\n      if (sVar7 != local_283c) {\n        pcVar15 = (this->name_)._M_dataplus._M_p;\n        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));\n      }\n      return;\n    }\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: readv failed: %s";\n  }" else (compound_statement "{\n    sVar7 = readv(this->descriptor_,(iovec *)iov,local_2840);\n    if (-1 < sVar7) {\n      if (sVar7 != local_283c) {\n        pcVar15 = (this->name_)._M_dataplus._M_p;\n        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));\n      }\n      return;\n    }\n    piVar8 = __errno_location();\n    pcVar9 = strerror(*piVar8);\n    pcVar15 = (this->name_)._M_dataplus._M_p;\n    pcVar10 = "%s: readv failed: %s";\n  }" { (expression_statement "sVar7 = readv(this->descriptor_,(iovec *)iov,local_2840);" (assignment_expression "sVar7 = readv(this->descriptor_,(iovec *)iov,local_2840)" identifier = (call_expression "readv(this->descriptor_,(iovec *)iov,local_2840)" identifier (argument_list "(this->descriptor_,(iovec *)iov,local_2840)" ( (field_expression "this->descriptor_" identifier -> field_identifier) , (cast_expression "(iovec *)iov" ( (type_descriptor "iovec *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (-1 < sVar7) {\n      if (sVar7 != local_283c) {\n        pcVar15 = (this->name_)._M_dataplus._M_p;\n        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));\n      }\n      return;\n    }" if (parenthesized_expression "(-1 < sVar7)" ( (binary_expression "-1 < sVar7" number_literal < identifier) )) (compound_statement "{\n      if (sVar7 != local_283c) {\n        pcVar15 = (this->name_)._M_dataplus._M_p;\n        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));\n      }\n      return;\n    }" { (if_statement "if (sVar7 != local_283c) {\n        pcVar15 = (this->name_)._M_dataplus._M_p;\n        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));\n      }" if (parenthesized_expression "(sVar7 != local_283c)" ( (binary_expression "sVar7 != local_283c" identifier != identifier) )) (compound_statement "{\n        pcVar15 = (this->name_)._M_dataplus._M_p;\n        pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    /* WARNING: Subroutine does not return */\n        gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));\n      }" { (expression_statement "pcVar15 = (this->name_)._M_dataplus._M_p;" (assignment_expression "pcVar15 = (this->name_)._M_dataplus._M_p" identifier = (field_expression "(this->name_)._M_dataplus._M_p" (field_expression "(this->name_)._M_dataplus" (parenthesized_expression "(this->name_)" ( (field_expression "this->name_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld");" (assignment_expression "pcVar10 = (char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld")" identifier = (cast_expression "(char *)gettext("%s: file too short: read only %zd of %zd bytes at %lld")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("%s: file too short: read only %zd of %zd bytes at %lld")" identifier (argument_list "("%s: file too short: read only %zd of %zd bytes at %lld")" ( (string_literal ""%s: file too short: read only %zd of %zd bytes at %lld"" " string_content ") ))))) ;) comment (expression_statement "gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20));" (call_expression "gold_fatal(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20))" identifier (argument_list "(pcVar10,pcVar15,sVar7,local_283c,(int)lVar4,(int)((ulonglong)lVar4 >> 0x20))" ( identifier , identifier , identifier , identifier , (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier) , (cast_expression "(int)((ulonglong)lVar4 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar4 >> 0x20)" ( (binary_expression "(ulonglong)lVar4 >> 0x20" (cast_expression "(ulonglong)lVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) ))) ;) })) (return_statement "return;" return ;) })) (expression_statement "piVar8 = __errno_location();" (assignment_expression "piVar8 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "pcVar9 = strerror(*piVar8);" (assignment_expression "pcVar9 = strerror(*piVar8)" identifier = (call_expression "strerror(*piVar8)" identifier (argument_list "(*piVar8)" ( (pointer_expression "*piVar8" * identifier) )))) ;) (expression_statement "pcVar15 = (this->name_)._M_dataplus._M_p;" (assignment_expression "pcVar15 = (this->name_)._M_dataplus._M_p" identifier = (field_expression "(this->name_)._M_dataplus._M_p" (field_expression "(this->name_)._M_dataplus" (parenthesized_expression "(this->name_)" ( (field_expression "this->name_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "pcVar10 = "%s: readv failed: %s";" (assignment_expression "pcVar10 = "%s: readv failed: %s"" identifier = (string_literal ""%s: readv failed: %s"" " string_content ")) ;) }))) (expression_statement "pcVar10 = (char *)gettext(pcVar10);" (assignment_expression "pcVar10 = (char *)gettext(pcVar10)" identifier = (cast_expression "(char *)gettext(pcVar10)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext(pcVar10)" identifier (argument_list "(pcVar10)" ( identifier ))))) ;) comment (expression_statement "gold_fatal(pcVar10,pcVar15,pcVar9);" (call_expression "gold_fatal(pcVar10,pcVar15,pcVar9)" identifier (argument_list "(pcVar10,pcVar15,pcVar9)" ( identifier , identifier , identifier ))) ;) })))
(translation_unit "void FUN_00066de0(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint uVar5;\n  ssize_t sVar6;\n  int *piVar7;\n  char *pcVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  uint uVar11;\n  int iVar12;\n  uint uVar13;\n  uint *puVar14;\n  undefined4 uVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  int local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec local_281c [256];\n  undefined1 local_201c [8204];\n  \n  puVar4 = (uint *)(param_5 * 0x10 + *param_4);\n  uVar1 = *puVar4;\n  uVar2 = puVar4[1];\n  if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }\n  iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);\n  _Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);\n  if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }\n  uVar10 = gettext(pcVar9);\n                    \n  FUN_00065450(uVar10,uVar15,pcVar8);\n}\n\n" (function_definition "void FUN_00066de0(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint uVar5;\n  ssize_t sVar6;\n  int *piVar7;\n  char *pcVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  uint uVar11;\n  int iVar12;\n  uint uVar13;\n  uint *puVar14;\n  undefined4 uVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  int local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec local_281c [256];\n  undefined1 local_201c [8204];\n  \n  puVar4 = (uint *)(param_5 * 0x10 + *param_4);\n  uVar1 = *puVar4;\n  uVar2 = puVar4[1];\n  if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }\n  iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);\n  _Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);\n  if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }\n  uVar10 = gettext(pcVar9);\n                    \n  FUN_00065450(uVar10,uVar15,pcVar8);\n}" primitive_type (function_declarator "FUN_00066de0(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)" identifier (parameter_list "(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int param_6" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint uVar5;\n  ssize_t sVar6;\n  int *piVar7;\n  char *pcVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  uint uVar11;\n  int iVar12;\n  uint uVar13;\n  uint *puVar14;\n  undefined4 uVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  int local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec local_281c [256];\n  undefined1 local_201c [8204];\n  \n  puVar4 = (uint *)(param_5 * 0x10 + *param_4);\n  uVar1 = *puVar4;\n  uVar2 = puVar4[1];\n  if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }\n  iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);\n  _Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);\n  if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }\n  uVar10 = gettext(pcVar9);\n                    \n  FUN_00065450(uVar10,uVar15,pcVar8);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ssize_t sVar6;" primitive_type identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "undefined4 uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "undefined4 uVar15;" type_identifier identifier ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "__off64_t _Var17;" type_identifier identifier ;) (declaration "int local_284c;" primitive_type identifier ;) (declaration "uint local_2840;" type_identifier identifier ;) (declaration "int local_283c;" primitive_type identifier ;) (declaration "iovec local_281c [256];" type_identifier (array_declarator "local_281c [256]" identifier [ number_literal ]) ;) (declaration "undefined1 local_201c [8204];" type_identifier (array_declarator "local_201c [8204]" identifier [ number_literal ]) ;) (expression_statement "puVar4 = (uint *)(param_5 * 0x10 + *param_4);" (assignment_expression "puVar4 = (uint *)(param_5 * 0x10 + *param_4)" identifier = (cast_expression "(uint *)(param_5 * 0x10 + *param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_5 * 0x10 + *param_4)" ( (binary_expression "param_5 * 0x10 + *param_4" (binary_expression "param_5 * 0x10" identifier * number_literal) + (pointer_expression "*param_4" * identifier)) )))) ;) (expression_statement "uVar1 = *puVar4;" (assignment_expression "uVar1 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "uVar2 = puVar4[1];" (assignment_expression "uVar2 = puVar4[1]" identifier = (subscript_expression "puVar4[1]" identifier [ number_literal ])) ;) (if_statement "if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }" if (parenthesized_expression "(param_6 == 0)" ( (binary_expression "param_6 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }" { (expression_statement "FUN_00066930(param_1);" (call_expression "FUN_00066930(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "local_2840 = 0;" (assignment_expression "local_2840 = 0" identifier = number_literal) ;) (expression_statement "local_283c = 0;" (assignment_expression "local_283c = 0" identifier = number_literal) ;) }) (else_clause "else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }" else (compound_statement "{\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }" { (expression_statement "puVar14 = puVar4 + 3;" (assignment_expression "puVar14 = puVar4 + 3" identifier = (binary_expression "puVar4 + 3" identifier + number_literal)) ;) (expression_statement "local_283c = 0;" (assignment_expression "local_283c = 0" identifier = number_literal) ;) (expression_statement "local_284c = 0;" (assignment_expression "local_284c = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = uVar2;" (assignment_expression "uVar13 = uVar2" identifier = identifier) ;) (expression_statement "uVar16 = uVar1;" (assignment_expression "uVar16 = uVar1" identifier = identifier) ;) (while_statement "while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }" { (expression_statement "local_2840 = uVar5 + 1;" (assignment_expression "local_2840 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) (expression_statement "local_281c[uVar5].iov_base = (void *)*puVar14;" (assignment_expression "local_281c[uVar5].iov_base = (void *)*puVar14" (field_expression "local_281c[uVar5].iov_base" (subscript_expression "local_281c[uVar5]" identifier [ identifier ]) . field_identifier) = (cast_expression "(void *)*puVar14" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar14" * identifier))) ;) (expression_statement "uVar3 = puVar14[-1];" (assignment_expression "uVar3 = puVar14[-1]" identifier = (subscript_expression "puVar14[-1]" identifier [ number_literal ])) ;) (expression_statement "local_283c = local_283c + uVar3;" (assignment_expression "local_283c = local_283c + uVar3" identifier = (binary_expression "local_283c + uVar3" identifier + identifier)) ;) (expression_statement "local_281c[uVar5].iov_len = uVar3;" (assignment_expression "local_281c[uVar5].iov_len = uVar3" (field_expression "local_281c[uVar5].iov_len" (subscript_expression "local_281c[uVar5]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "uVar11 = uVar3 + uVar16;" (assignment_expression "uVar11 = uVar3 + uVar16" identifier = (binary_expression "uVar3 + uVar16" identifier + identifier)) ;) (expression_statement "iVar12 = uVar13 + CARRY4(uVar3,uVar16);" (assignment_expression "iVar12 = uVar13 + CARRY4(uVar3,uVar16)" identifier = (binary_expression "uVar13 + CARRY4(uVar3,uVar16)" identifier + (call_expression "CARRY4(uVar3,uVar16)" identifier (argument_list "(uVar3,uVar16)" ( identifier , identifier ))))) ;) (expression_statement "local_284c = local_284c + 1;" (assignment_expression "local_284c = local_284c + 1" identifier = (binary_expression "local_284c + 1" identifier + number_literal)) ;) (if_statement "if (param_6 == local_284c) break;" if (parenthesized_expression "(param_6 == local_284c)" ( (binary_expression "param_6 == local_284c" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar16 = puVar4[local_284c * 4];" (assignment_expression "uVar16 = puVar4[local_284c * 4]" identifier = (subscript_expression "puVar4[local_284c * 4]" identifier [ (binary_expression "local_284c * 4" identifier * number_literal) ])) ;) (expression_statement "uVar13 = (puVar4 + local_284c * 4)[1];" (assignment_expression "uVar13 = (puVar4 + local_284c * 4)[1]" identifier = (subscript_expression "(puVar4 + local_284c * 4)[1]" (parenthesized_expression "(puVar4 + local_284c * 4)" ( (binary_expression "puVar4 + local_284c * 4" identifier + (binary_expression "local_284c * 4" identifier * number_literal)) )) [ number_literal ])) ;) (expression_statement "uVar3 = (uint)(uVar11 < uVar16);" (assignment_expression "uVar3 = (uint)(uVar11 < uVar16)" identifier = (call_expression "(uint)(uVar11 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar11 < uVar16)" ( (binary_expression "uVar11 < uVar16" identifier < identifier) )))) ;) (if_statement "if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }" if (parenthesized_expression "((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0)" ( (binary_expression "(SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0" (parenthesized_expression "(SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3))" ( (binary_expression "SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)" (call_expression "SBORROW4(iVar12,uVar13)" identifier (argument_list "(iVar12,uVar13)" ( identifier , identifier ))) != (call_expression "SBORROW4(iVar12 - uVar13,uVar3)" identifier (argument_list "(iVar12 - uVar13,uVar3)" ( (binary_expression "iVar12 - uVar13" identifier - identifier) , identifier )))) )) != (binary_expression "(int)((iVar12 - uVar13) - uVar3) < 0" (cast_expression "(int)((iVar12 - uVar13) - uVar3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((iVar12 - uVar13) - uVar3)" ( (binary_expression "(iVar12 - uVar13) - uVar3" (parenthesized_expression "(iVar12 - uVar13)" ( (binary_expression "iVar12 - uVar13" identifier - identifier) )) - identifier) ))) < number_literal)) )) (compound_statement "{\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }" { (expression_statement "uVar11 = uVar16 - uVar11;" (assignment_expression "uVar11 = uVar16 - uVar11" identifier = (binary_expression "uVar16 - uVar11" identifier - identifier)) ;) (if_statement "if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }" if (parenthesized_expression "(0x2000 < uVar11)" ( (binary_expression "0x2000 < uVar11" number_literal < identifier) )) (compound_statement "{\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }" { (expression_statement "FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");" (call_expression "FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv")" identifier (argument_list "("../../gold/fileread.cc",0x290,"do_readv")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""do_readv"" " string_content ") ))) ;) })) (expression_statement "local_283c = local_283c + uVar11;" (assignment_expression "local_283c = local_283c + uVar11" identifier = (binary_expression "local_283c + uVar11" identifier + identifier)) ;) (expression_statement "local_281c[local_2840].iov_base = local_201c;" (assignment_expression "local_281c[local_2840].iov_base = local_201c" (field_expression "local_281c[local_2840].iov_base" (subscript_expression "local_281c[local_2840]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "local_281c[local_2840].iov_len = uVar11;" (assignment_expression "local_281c[local_2840].iov_len = uVar11" (field_expression "local_281c[local_2840].iov_len" (subscript_expression "local_281c[local_2840]" identifier [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "local_2840 = uVar5 + 2;" (assignment_expression "local_2840 = uVar5 + 2" identifier = (binary_expression "uVar5 + 2" identifier + number_literal)) ;) })) (expression_statement "puVar14 = puVar14 + 4;" (assignment_expression "puVar14 = puVar14 + 4" identifier = (binary_expression "puVar14 + 4" identifier + number_literal)) ;) (expression_statement "uVar5 = local_2840;" (assignment_expression "uVar5 = local_2840" identifier = identifier) ;) })) (expression_statement "FUN_00066930(param_1);" (call_expression "FUN_00066930(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (if_statement "if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }" if (parenthesized_expression "(0xff < local_2840)" ( (binary_expression "0xff < local_2840" number_literal < identifier) )) (compound_statement "{\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }" { (expression_statement "FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);" (call_expression "FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12)" identifier (argument_list "("../../gold/fileread.cc",0x2a4,"do_readv",iVar12)" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""do_readv"" " string_content ") , identifier ))) ;) })) }))) (expression_statement "iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);" (assignment_expression "iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2)" identifier = (binary_expression "uVar2 + param_3 + (uint)CARRY4(uVar1,param_2)" (binary_expression "uVar2 + param_3" identifier + identifier) + (cast_expression "(uint)CARRY4(uVar1,param_2)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar1,param_2)" identifier (argument_list "(uVar1,param_2)" ( identifier , identifier )))))) ;) (expression_statement "_Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);" (assignment_expression "_Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0)" identifier = (call_expression "lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0)" identifier (argument_list "(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0)" ( (subscript_expression "param_1[6]" identifier [ number_literal ]) , (call_expression "CONCAT44(iVar12,uVar1 + param_2)" identifier (argument_list "(iVar12,uVar1 + param_2)" ( identifier , (binary_expression "uVar1 + param_2" identifier + identifier) ))) , number_literal )))) ;) (if_statement "if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }" if (parenthesized_expression "(_Var17 < 0)" ( (binary_expression "_Var17 < 0" identifier < number_literal) )) (compound_statement "{\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }" { (expression_statement "piVar7 = __errno_location();" (assignment_expression "piVar7 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "pcVar8 = strerror(*piVar7);" (assignment_expression "pcVar8 = strerror(*piVar7)" identifier = (call_expression "strerror(*piVar7)" identifier (argument_list "(*piVar7)" ( (pointer_expression "*piVar7" * identifier) )))) ;) (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: lseek failed: %s";" (assignment_expression "pcVar9 = "%s: lseek failed: %s"" identifier = (string_literal ""%s: lseek failed: %s"" " string_content ")) ;) }) (else_clause "else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }" else (compound_statement "{\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }" { (expression_statement "sVar6 = readv(param_1[6],local_281c,local_2840);" (assignment_expression "sVar6 = readv(param_1[6],local_281c,local_2840)" identifier = (call_expression "readv(param_1[6],local_281c,local_2840)" identifier (argument_list "(param_1[6],local_281c,local_2840)" ( (subscript_expression "param_1[6]" identifier [ number_literal ]) , identifier , identifier )))) ;) (if_statement "if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }" if (parenthesized_expression "(-1 < sVar6)" ( (binary_expression "-1 < sVar6" number_literal < identifier) )) (compound_statement "{\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }" { (if_statement "if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }" if (parenthesized_expression "(sVar6 != local_283c)" ( (binary_expression "sVar6 != local_283c" identifier != identifier) )) (compound_statement "{\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }" { (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");" (assignment_expression "uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld")" identifier = (call_expression "gettext("%s: file too short: read only %zd of %zd bytes at %lld")" identifier (argument_list "("%s: file too short: read only %zd of %zd bytes at %lld")" ( (string_literal ""%s: file too short: read only %zd of %zd bytes at %lld"" " string_content ") )))) ;) (expression_statement "FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);" (call_expression "FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12)" identifier (argument_list "(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12)" ( identifier , identifier , identifier , identifier , (binary_expression "uVar1 + param_2" identifier + identifier) , identifier ))) ;) })) (return_statement "return;" return ;) })) (expression_statement "piVar7 = __errno_location();" (assignment_expression "piVar7 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "pcVar8 = strerror(*piVar7);" (assignment_expression "pcVar8 = strerror(*piVar7)" identifier = (call_expression "strerror(*piVar7)" identifier (argument_list "(*piVar7)" ( (pointer_expression "*piVar7" * identifier) )))) ;) (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: readv failed: %s";" (assignment_expression "pcVar9 = "%s: readv failed: %s"" identifier = (string_literal ""%s: readv failed: %s"" " string_content ")) ;) }))) (expression_statement "uVar10 = gettext(pcVar9);" (assignment_expression "uVar10 = gettext(pcVar9)" identifier = (call_expression "gettext(pcVar9)" identifier (argument_list "(pcVar9)" ( identifier )))) ;) (expression_statement "FUN_00065450(uVar10,uVar15,pcVar8);" (call_expression "FUN_00065450(uVar10,uVar15,pcVar8)" identifier (argument_list "(uVar10,uVar15,pcVar8)" ( identifier , identifier , identifier ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + (pointer_expression * IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (field_expression (subscript_expression IDENT [ IDENT ]) . field_identifier) = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (field_expression (subscript_expression IDENT [ IDENT ]) . field_identifier) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT * LIT) ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )) [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) != (call_expression IDENT (argument_list ( (binary_expression IDENT - IDENT) , IDENT )))) )) != (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - IDENT) ))) < LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (field_expression (subscript_expression IDENT [ IDENT ]) . field_identifier) = IDENT) ;) (expression_statement (assignment_expression (field_expression (subscript_expression IDENT [ IDENT ]) . field_identifier) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;) })) }))) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + IDENT) ))) , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , (binary_expression IDENT + IDENT) , IDENT ))) ;) })) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) })))
(function_definition "void FUN_00066de0(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint uVar5;\n  ssize_t sVar6;\n  int *piVar7;\n  char *pcVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  uint uVar11;\n  int iVar12;\n  uint uVar13;\n  uint *puVar14;\n  undefined4 uVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  int local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec local_281c [256];\n  undefined1 local_201c [8204];\n  \n  puVar4 = (uint *)(param_5 * 0x10 + *param_4);\n  uVar1 = *puVar4;\n  uVar2 = puVar4[1];\n  if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }\n  iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);\n  _Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);\n  if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }\n  uVar10 = gettext(pcVar9);\n                    \n  FUN_00065450(uVar10,uVar15,pcVar8);\n}" (primitive_type "void") (function_declarator "FUN_00066de0(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)" (identifier "FUN_00066de0") (parameter_list "(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int *param_4" (primitive_type "int") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) (, ",") (parameter_declaration "int param_6" (primitive_type "int") (identifier "param_6")) () ")"))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint *puVar4;\n  uint uVar5;\n  ssize_t sVar6;\n  int *piVar7;\n  char *pcVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  uint uVar11;\n  int iVar12;\n  uint uVar13;\n  uint *puVar14;\n  undefined4 uVar15;\n  uint uVar16;\n  __off64_t _Var17;\n  int local_284c;\n  uint local_2840;\n  int local_283c;\n  iovec local_281c [256];\n  undefined1 local_201c [8204];\n  \n  puVar4 = (uint *)(param_5 * 0x10 + *param_4);\n  uVar1 = *puVar4;\n  uVar2 = puVar4[1];\n  if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }\n  iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);\n  _Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);\n  if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }\n  uVar10 = gettext(pcVar9);\n                    \n  FUN_00065450(uVar10,uVar15,pcVar8);\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint *puVar4;" (type_identifier "uint") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "ssize_t sVar6;" (primitive_type "ssize_t") (identifier "sVar6") (; ";")) (declaration "int *piVar7;" (primitive_type "int") (pointer_declarator "*piVar7" (* "*") (identifier "piVar7")) (; ";")) (declaration "char *pcVar8;" (primitive_type "char") (pointer_declarator "*pcVar8" (* "*") (identifier "pcVar8")) (; ";")) (declaration "char *pcVar9;" (primitive_type "char") (pointer_declarator "*pcVar9" (* "*") (identifier "pcVar9")) (; ";")) (declaration "undefined4 uVar10;" (type_identifier "undefined4") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "int iVar12;" (primitive_type "int") (identifier "iVar12") (; ";")) (declaration "uint uVar13;" (type_identifier "uint") (identifier "uVar13") (; ";")) (declaration "uint *puVar14;" (type_identifier "uint") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "undefined4 uVar15;" (type_identifier "undefined4") (identifier "uVar15") (; ";")) (declaration "uint uVar16;" (type_identifier "uint") (identifier "uVar16") (; ";")) (declaration "__off64_t _Var17;" (type_identifier "__off64_t") (identifier "_Var17") (; ";")) (declaration "int local_284c;" (primitive_type "int") (identifier "local_284c") (; ";")) (declaration "uint local_2840;" (type_identifier "uint") (identifier "local_2840") (; ";")) (declaration "int local_283c;" (primitive_type "int") (identifier "local_283c") (; ";")) (declaration "iovec local_281c [256];" (type_identifier "iovec") (array_declarator "local_281c [256]" (identifier "local_281c") ([ "[") (number_literal "256") (] "]")) (; ";")) (declaration "undefined1 local_201c [8204];" (type_identifier "undefined1") (array_declarator "local_201c [8204]" (identifier "local_201c") ([ "[") (number_literal "8204") (] "]")) (; ";")) (expression_statement "puVar4 = (uint *)(param_5 * 0x10 + *param_4);" (assignment_expression "puVar4 = (uint *)(param_5 * 0x10 + *param_4)" (identifier "puVar4") (= "=") (cast_expression "(uint *)(param_5 * 0x10 + *param_4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_5 * 0x10 + *param_4)" (( "(") (binary_expression "param_5 * 0x10 + *param_4" (binary_expression "param_5 * 0x10" (identifier "param_5") (* "*") (number_literal "0x10")) (+ "+") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) () ")")))) (; ";")) (expression_statement "uVar1 = *puVar4;" (assignment_expression "uVar1 = *puVar4" (identifier "uVar1") (= "=") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))) (; ";")) (expression_statement "uVar2 = puVar4[1];" (assignment_expression "uVar2 = puVar4[1]" (identifier "uVar2") (= "=") (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (param_6 == 0) {\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }\n  else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }" (if "if") (parenthesized_expression "(param_6 == 0)" (( "(") (binary_expression "param_6 == 0" (identifier "param_6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00066930(param_1);\n    local_2840 = 0;\n    local_283c = 0;\n  }" ({ "{") (expression_statement "FUN_00066930(param_1);" (call_expression "FUN_00066930(param_1)" (identifier "FUN_00066930") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "local_2840 = 0;" (assignment_expression "local_2840 = 0" (identifier "local_2840") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_283c = 0;" (assignment_expression "local_283c = 0" (identifier "local_283c") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }" (else "else") (compound_statement "{\n    puVar14 = puVar4 + 3;\n    local_283c = 0;\n    local_284c = 0;\n    uVar5 = 0;\n    uVar13 = uVar2;\n    uVar16 = uVar1;\n    while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }\n    FUN_00066930(param_1);\n    if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }\n  }" ({ "{") (expression_statement "puVar14 = puVar4 + 3;" (assignment_expression "puVar14 = puVar4 + 3" (identifier "puVar14") (= "=") (binary_expression "puVar4 + 3" (identifier "puVar4") (+ "+") (number_literal "3"))) (; ";")) (expression_statement "local_283c = 0;" (assignment_expression "local_283c = 0" (identifier "local_283c") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_284c = 0;" (assignment_expression "local_284c = 0" (identifier "local_284c") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar13 = uVar2;" (assignment_expression "uVar13 = uVar2" (identifier "uVar13") (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar16 = uVar1;" (assignment_expression "uVar16 = uVar1" (identifier "uVar16") (= "=") (identifier "uVar1")) (; ";")) (while_statement "while( true ) {\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      local_2840 = uVar5 + 1;\n      local_281c[uVar5].iov_base = (void *)*puVar14;\n      uVar3 = puVar14[-1];\n      local_283c = local_283c + uVar3;\n      local_281c[uVar5].iov_len = uVar3;\n      uVar11 = uVar3 + uVar16;\n      iVar12 = uVar13 + CARRY4(uVar3,uVar16);\n      local_284c = local_284c + 1;\n      if (param_6 == local_284c) break;\n      uVar16 = puVar4[local_284c * 4];\n      uVar13 = (puVar4 + local_284c * 4)[1];\n      uVar3 = (uint)(uVar11 < uVar16);\n      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }\n      puVar14 = puVar14 + 4;\n      uVar5 = local_2840;\n    }" ({ "{") (expression_statement "local_2840 = uVar5 + 1;" (assignment_expression "local_2840 = uVar5 + 1" (identifier "local_2840") (= "=") (binary_expression "uVar5 + 1" (identifier "uVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "local_281c[uVar5].iov_base = (void *)*puVar14;" (assignment_expression "local_281c[uVar5].iov_base = (void *)*puVar14" (field_expression "local_281c[uVar5].iov_base" (subscript_expression "local_281c[uVar5]" (identifier "local_281c") ([ "[") (identifier "uVar5") (] "]")) (. ".") (field_identifier "iov_base")) (= "=") (cast_expression "(void *)*puVar14" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar14" (* "*") (identifier "puVar14")))) (; ";")) (expression_statement "uVar3 = puVar14[-1];" (assignment_expression "uVar3 = puVar14[-1]" (identifier "uVar3") (= "=") (subscript_expression "puVar14[-1]" (identifier "puVar14") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "local_283c = local_283c + uVar3;" (assignment_expression "local_283c = local_283c + uVar3" (identifier "local_283c") (= "=") (binary_expression "local_283c + uVar3" (identifier "local_283c") (+ "+") (identifier "uVar3"))) (; ";")) (expression_statement "local_281c[uVar5].iov_len = uVar3;" (assignment_expression "local_281c[uVar5].iov_len = uVar3" (field_expression "local_281c[uVar5].iov_len" (subscript_expression "local_281c[uVar5]" (identifier "local_281c") ([ "[") (identifier "uVar5") (] "]")) (. ".") (field_identifier "iov_len")) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "uVar11 = uVar3 + uVar16;" (assignment_expression "uVar11 = uVar3 + uVar16" (identifier "uVar11") (= "=") (binary_expression "uVar3 + uVar16" (identifier "uVar3") (+ "+") (identifier "uVar16"))) (; ";")) (expression_statement "iVar12 = uVar13 + CARRY4(uVar3,uVar16);" (assignment_expression "iVar12 = uVar13 + CARRY4(uVar3,uVar16)" (identifier "iVar12") (= "=") (binary_expression "uVar13 + CARRY4(uVar3,uVar16)" (identifier "uVar13") (+ "+") (call_expression "CARRY4(uVar3,uVar16)" (identifier "CARRY4") (argument_list "(uVar3,uVar16)" (( "(") (identifier "uVar3") (, ",") (identifier "uVar16") () ")"))))) (; ";")) (expression_statement "local_284c = local_284c + 1;" (assignment_expression "local_284c = local_284c + 1" (identifier "local_284c") (= "=") (binary_expression "local_284c + 1" (identifier "local_284c") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_6 == local_284c) break;" (if "if") (parenthesized_expression "(param_6 == local_284c)" (( "(") (binary_expression "param_6 == local_284c" (identifier "param_6") (== "==") (identifier "local_284c")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar16 = puVar4[local_284c * 4];" (assignment_expression "uVar16 = puVar4[local_284c * 4]" (identifier "uVar16") (= "=") (subscript_expression "puVar4[local_284c * 4]" (identifier "puVar4") ([ "[") (binary_expression "local_284c * 4" (identifier "local_284c") (* "*") (number_literal "4")) (] "]"))) (; ";")) (expression_statement "uVar13 = (puVar4 + local_284c * 4)[1];" (assignment_expression "uVar13 = (puVar4 + local_284c * 4)[1]" (identifier "uVar13") (= "=") (subscript_expression "(puVar4 + local_284c * 4)[1]" (parenthesized_expression "(puVar4 + local_284c * 4)" (( "(") (binary_expression "puVar4 + local_284c * 4" (identifier "puVar4") (+ "+") (binary_expression "local_284c * 4" (identifier "local_284c") (* "*") (number_literal "4"))) () ")")) ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar3 = (uint)(uVar11 < uVar16);" (assignment_expression "uVar3 = (uint)(uVar11 < uVar16)" (identifier "uVar3") (= "=") (call_expression "(uint)(uVar11 < uVar16)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar11 < uVar16)" (( "(") (binary_expression "uVar11 < uVar16" (identifier "uVar11") (< "<") (identifier "uVar16")) () ")")))) (; ";")) (if_statement "if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0) {\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }" (if "if") (parenthesized_expression "((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0)" (( "(") (binary_expression "(SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=\n          (int)((iVar12 - uVar13) - uVar3) < 0" (parenthesized_expression "(SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3))" (( "(") (binary_expression "SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)" (call_expression "SBORROW4(iVar12,uVar13)" (identifier "SBORROW4") (argument_list "(iVar12,uVar13)" (( "(") (identifier "iVar12") (, ",") (identifier "uVar13") () ")"))) (!= "!=") (call_expression "SBORROW4(iVar12 - uVar13,uVar3)" (identifier "SBORROW4") (argument_list "(iVar12 - uVar13,uVar3)" (( "(") (binary_expression "iVar12 - uVar13" (identifier "iVar12") (- "-") (identifier "uVar13")) (, ",") (identifier "uVar3") () ")")))) () ")")) (!= "!=") (binary_expression "(int)((iVar12 - uVar13) - uVar3) < 0" (cast_expression "(int)((iVar12 - uVar13) - uVar3)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((iVar12 - uVar13) - uVar3)" (( "(") (binary_expression "(iVar12 - uVar13) - uVar3" (parenthesized_expression "(iVar12 - uVar13)" (( "(") (binary_expression "iVar12 - uVar13" (identifier "iVar12") (- "-") (identifier "uVar13")) () ")")) (- "-") (identifier "uVar3")) () ")"))) (< "<") (number_literal "0"))) () ")")) (compound_statement "{\n        uVar11 = uVar16 - uVar11;\n        if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }\n        local_283c = local_283c + uVar11;\n        local_281c[local_2840].iov_base = local_201c;\n        local_281c[local_2840].iov_len = uVar11;\n        local_2840 = uVar5 + 2;\n      }" ({ "{") (expression_statement "uVar11 = uVar16 - uVar11;" (assignment_expression "uVar11 = uVar16 - uVar11" (identifier "uVar11") (= "=") (binary_expression "uVar16 - uVar11" (identifier "uVar16") (- "-") (identifier "uVar11"))) (; ";")) (if_statement "if (0x2000 < uVar11) {\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }" (if "if") (parenthesized_expression "(0x2000 < uVar11)" (( "(") (binary_expression "0x2000 < uVar11" (number_literal "0x2000") (< "<") (identifier "uVar11")) () ")")) (compound_statement "{\n                    \n          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");\n        }" ({ "{") (expression_statement "FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");" (call_expression "FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv")" (identifier "FUN_00069d00") (argument_list "("../../gold/fileread.cc",0x290,"do_readv")" (( "(") (string_literal ""../../gold/fileread.cc"" (" """) (string_content "../../gold/fileread.cc") (" """)) (, ",") (number_literal "0x290") (, ",") (string_literal ""do_readv"" (" """) (string_content "do_readv") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "local_283c = local_283c + uVar11;" (assignment_expression "local_283c = local_283c + uVar11" (identifier "local_283c") (= "=") (binary_expression "local_283c + uVar11" (identifier "local_283c") (+ "+") (identifier "uVar11"))) (; ";")) (expression_statement "local_281c[local_2840].iov_base = local_201c;" (assignment_expression "local_281c[local_2840].iov_base = local_201c" (field_expression "local_281c[local_2840].iov_base" (subscript_expression "local_281c[local_2840]" (identifier "local_281c") ([ "[") (identifier "local_2840") (] "]")) (. ".") (field_identifier "iov_base")) (= "=") (identifier "local_201c")) (; ";")) (expression_statement "local_281c[local_2840].iov_len = uVar11;" (assignment_expression "local_281c[local_2840].iov_len = uVar11" (field_expression "local_281c[local_2840].iov_len" (subscript_expression "local_281c[local_2840]" (identifier "local_281c") ([ "[") (identifier "local_2840") (] "]")) (. ".") (field_identifier "iov_len")) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "local_2840 = uVar5 + 2;" (assignment_expression "local_2840 = uVar5 + 2" (identifier "local_2840") (= "=") (binary_expression "uVar5 + 2" (identifier "uVar5") (+ "+") (number_literal "2"))) (; ";")) (} "}"))) (expression_statement "puVar14 = puVar14 + 4;" (assignment_expression "puVar14 = puVar14 + 4" (identifier "puVar14") (= "=") (binary_expression "puVar14 + 4" (identifier "puVar14") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "uVar5 = local_2840;" (assignment_expression "uVar5 = local_2840" (identifier "uVar5") (= "=") (identifier "local_2840")) (; ";")) (} "}"))) (expression_statement "FUN_00066930(param_1);" (call_expression "FUN_00066930(param_1)" (identifier "FUN_00066930") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (if_statement "if (0xff < local_2840) {\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }" (if "if") (parenthesized_expression "(0xff < local_2840)" (( "(") (binary_expression "0xff < local_2840" (number_literal "0xff") (< "<") (identifier "local_2840")) () ")")) (compound_statement "{\n                    \n      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);\n    }" ({ "{") (expression_statement "FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);" (call_expression "FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12)" (identifier "FUN_00069d00") (argument_list "("../../gold/fileread.cc",0x2a4,"do_readv",iVar12)" (( "(") (string_literal ""../../gold/fileread.cc"" (" """) (string_content "../../gold/fileread.cc") (" """)) (, ",") (number_literal "0x2a4") (, ",") (string_literal ""do_readv"" (" """) (string_content "do_readv") (" """)) (, ",") (identifier "iVar12") () ")"))) (; ";")) (} "}"))) (} "}")))) (expression_statement "iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);" (assignment_expression "iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2)" (identifier "iVar12") (= "=") (binary_expression "uVar2 + param_3 + (uint)CARRY4(uVar1,param_2)" (binary_expression "uVar2 + param_3" (identifier "uVar2") (+ "+") (identifier "param_3")) (+ "+") (cast_expression "(uint)CARRY4(uVar1,param_2)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar1,param_2)" (identifier "CARRY4") (argument_list "(uVar1,param_2)" (( "(") (identifier "uVar1") (, ",") (identifier "param_2") () ")")))))) (; ";")) (expression_statement "_Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);" (assignment_expression "_Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0)" (identifier "_Var17") (= "=") (call_expression "lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0)" (identifier "lseek64") (argument_list "(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0)" (( "(") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (, ",") (call_expression "CONCAT44(iVar12,uVar1 + param_2)" (identifier "CONCAT44") (argument_list "(iVar12,uVar1 + param_2)" (( "(") (identifier "iVar12") (, ",") (binary_expression "uVar1 + param_2" (identifier "uVar1") (+ "+") (identifier "param_2")) () ")"))) (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (_Var17 < 0) {\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }\n  else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }" (if "if") (parenthesized_expression "(_Var17 < 0)" (( "(") (binary_expression "_Var17 < 0" (identifier "_Var17") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: lseek failed: %s";\n  }" ({ "{") (expression_statement "piVar7 = __errno_location();" (assignment_expression "piVar7 = __errno_location()" (identifier "piVar7") (= "=") (call_expression "__errno_location()" (identifier "__errno_location") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "pcVar8 = strerror(*piVar7);" (assignment_expression "pcVar8 = strerror(*piVar7)" (identifier "pcVar8") (= "=") (call_expression "strerror(*piVar7)" (identifier "strerror") (argument_list "(*piVar7)" (( "(") (pointer_expression "*piVar7" (* "*") (identifier "piVar7")) () ")")))) (; ";")) (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" (identifier "uVar15") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar9 = "%s: lseek failed: %s";" (assignment_expression "pcVar9 = "%s: lseek failed: %s"" (identifier "pcVar9") (= "=") (string_literal ""%s: lseek failed: %s"" (" """) (string_content "%s: lseek failed: %s") (" """))) (; ";")) (} "}")) (else_clause "else {\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }" (else "else") (compound_statement "{\n    sVar6 = readv(param_1[6],local_281c,local_2840);\n    if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }\n    piVar7 = __errno_location();\n    pcVar8 = strerror(*piVar7);\n    uVar15 = *param_1;\n    pcVar9 = "%s: readv failed: %s";\n  }" ({ "{") (expression_statement "sVar6 = readv(param_1[6],local_281c,local_2840);" (assignment_expression "sVar6 = readv(param_1[6],local_281c,local_2840)" (identifier "sVar6") (= "=") (call_expression "readv(param_1[6],local_281c,local_2840)" (identifier "readv") (argument_list "(param_1[6],local_281c,local_2840)" (( "(") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (, ",") (identifier "local_281c") (, ",") (identifier "local_2840") () ")")))) (; ";")) (if_statement "if (-1 < sVar6) {\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }" (if "if") (parenthesized_expression "(-1 < sVar6)" (( "(") (binary_expression "-1 < sVar6" (number_literal "-1") (< "<") (identifier "sVar6")) () ")")) (compound_statement "{\n      if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }\n      return;\n    }" ({ "{") (if_statement "if (sVar6 != local_283c) {\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }" (if "if") (parenthesized_expression "(sVar6 != local_283c)" (( "(") (binary_expression "sVar6 != local_283c" (identifier "sVar6") (!= "!=") (identifier "local_283c")) () ")")) (compound_statement "{\n        uVar15 = *param_1;\n        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");\n                    \n        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);\n      }" ({ "{") (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" (identifier "uVar15") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");" (assignment_expression "uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld")" (identifier "uVar10") (= "=") (call_expression "gettext("%s: file too short: read only %zd of %zd bytes at %lld")" (identifier "gettext") (argument_list "("%s: file too short: read only %zd of %zd bytes at %lld")" (( "(") (string_literal ""%s: file too short: read only %zd of %zd bytes at %lld"" (" """) (string_content "%s: file too short: read only %zd of %zd bytes at %lld") (" """)) () ")")))) (; ";")) (expression_statement "FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);" (call_expression "FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12)" (identifier "FUN_00065450") (argument_list "(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12)" (( "(") (identifier "uVar10") (, ",") (identifier "uVar15") (, ",") (identifier "sVar6") (, ",") (identifier "local_283c") (, ",") (binary_expression "uVar1 + param_2" (identifier "uVar1") (+ "+") (identifier "param_2")) (, ",") (identifier "iVar12") () ")"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "piVar7 = __errno_location();" (assignment_expression "piVar7 = __errno_location()" (identifier "piVar7") (= "=") (call_expression "__errno_location()" (identifier "__errno_location") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "pcVar8 = strerror(*piVar7);" (assignment_expression "pcVar8 = strerror(*piVar7)" (identifier "pcVar8") (= "=") (call_expression "strerror(*piVar7)" (identifier "strerror") (argument_list "(*piVar7)" (( "(") (pointer_expression "*piVar7" (* "*") (identifier "piVar7")) () ")")))) (; ";")) (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" (identifier "uVar15") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar9 = "%s: readv failed: %s";" (assignment_expression "pcVar9 = "%s: readv failed: %s"" (identifier "pcVar9") (= "=") (string_literal ""%s: readv failed: %s"" (" """) (string_content "%s: readv failed: %s") (" """))) (; ";")) (} "}")))) (expression_statement "uVar10 = gettext(pcVar9);" (assignment_expression "uVar10 = gettext(pcVar9)" (identifier "uVar10") (= "=") (call_expression "gettext(pcVar9)" (identifier "gettext") (argument_list "(pcVar9)" (( "(") (identifier "pcVar9") () ")")))) (; ";")) (expression_statement "FUN_00065450(uVar10,uVar15,pcVar8);" (call_expression "FUN_00065450(uVar10,uVar15,pcVar8)" (identifier "FUN_00065450") (argument_list "(uVar10,uVar15,pcVar8)" (( "(") (identifier "uVar10") (, ",") (identifier "uVar15") (, ",") (identifier "pcVar8") () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* DWARF original prototype: void do_readv(File_read * this, off_t base, Read_multiple * rm, size_t
   start, size_t count) */

void __thiscall
gold::type_1::function_1(type_1 *this,type_2 var_21,type_3 *rm,size_t var_4,size_t var_5)

{
  type_4 var_9;
  int var_17;
  type_5 var_24;
  type_5 var_22;
  type_6 pRVar5;
  type_4 var_7;
  ssize_t var_29;
  int *piVar8;
  char *pcVar9;
  char *pcVar10;
  type_4 var_14;
  int var_15;
  int var_11;
  type_7 **var_19;
  type_6 pcVar15;
  type_4 var_10;
  type_8 var_25;
  size_t var_13;
  type_4 var_20;
  int var_8;
  type_9 iov [256];
  type_7 discard [8192];
  
  pRVar5 = (rm->
           super__Vector_base<gold::type_1::var_1,_std::allocator<gold::type_1::var_1>var_2>var_3
           )._M_impl._M_start + var_4;
  var_10 = (type_4)pRVar5->file_offset;
  var_11 = *(int *)((int)&pRVar5->file_offset + 4);
  var_22 = pRVar5->file_offset;
  var_24 = pRVar5->file_offset;
  if (var_5 == 0) {
    var_6(this);
    var_20 = 0;
    var_8 = 0;
  }
  else {
    var_19 = &pRVar5->buffer;
    var_8 = 0;
    var_13 = 0;
    var_7 = 0;
    while( true ) {
      var_20 = var_7 + 1;
      iov[var_7].iov_base = *var_19;
      var_9 = (type_4)var_19[-1];
      var_8 = var_8 + var_9;
      iov[var_7].iov_len = var_9;
      var_14 = var_9 + var_10;
      var_15 = var_11 + (type_4)var_12(var_9,var_10);
      var_13 = var_13 + 1;
      if (var_5 == var_13) break;
      var_10 = (type_4)pRVar5[var_13].file_offset;
      var_11 = *(int *)((int)&pRVar5[var_13].file_offset + 4);
      var_9 = (type_4)(var_14 < var_10);
      var_17 = var_15 - var_11;
      if ((var_16(var_15,var_11) != var_16(var_17,var_9)) != (int)(var_17 - var_9) < 0) {
        var_14 = var_10 - var_14;
        if (0x2000 < var_14) {
                    /* WARNING: Subroutine does not return */
          var_18("../../gold/fileread.cc",0x290,"do_readv");
        }
        var_8 = var_8 + var_14;
        iov[var_20].iov_base = discard;
        iov[var_20].iov_len = var_14;
        var_20 = var_7 + 2;
      }
      var_19 = var_19 + 4;
      var_7 = var_20;
    }
    var_6(this);
    if (0xff < var_20) {
                    /* WARNING: Subroutine does not return */
      var_18("../../gold/fileread.cc",0x2a4,"do_readv");
    }
  }
  var_22 = var_21 + var_22;
  var_25 = var_23(this->descriptor_,var_21 + var_24,0);
  if (var_25 < 0) {
    piVar8 = var_26();
    pcVar9 = var_27(*piVar8);
    pcVar15 = (this->name_)._M_dataplus._M_p;
    pcVar10 = "%s: lseek failed: %s";
  }
  else {
    var_29 = var_28(this->descriptor_,(type_9 *)iov,var_20);
    if (-1 < var_29) {
      if (var_29 != var_8) {
        pcVar15 = (this->name_)._M_dataplus._M_p;
        pcVar10 = (char *)var_30("%s: file too short: read only %zd of %zd bytes at %lld");
                    /* WARNING: Subroutine does not return */
        var_31(pcVar10,pcVar15,var_29,var_8,(int)var_22,(int)((type_10)var_22 >> 0x20));
      }
      return;
    }
    piVar8 = var_26();
    pcVar9 = var_27(*piVar8);
    pcVar15 = (this->name_)._M_dataplus._M_p;
    pcVar10 = "%s: readv failed: %s";
  }
  pcVar10 = (char *)var_30(pcVar10);
                    /* WARNING: Subroutine does not return */
  var_31(pcVar10,pcVar15,pcVar9);
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (pointer_expression argument: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (field_expression argument: (subscript_expression argument: (identifier) index: (identifier)) field: (field_identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (field_expression argument: (subscript_expression argument: (identifier) index: (identifier)) field: (field_identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)) (identifier))))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)))) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (field_expression argument: (subscript_expression argument: (identifier) index: (identifier)) field: (field_identifier)) right: (identifier))) (expression_statement (assignment_expression left: (field_expression argument: (subscript_expression argument: (identifier) index: (identifier)) field: (field_identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content)) (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (identifier)))) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (binary_expression left: (identifier) right: (identifier)) (identifier)))))) (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))))))

/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void MASKED(undefined4 *param_1,uint param_2,int param_3,int *param_4,int param_5,int param_6)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint *puVar4;
  uint uVar5;
  ssize_t sVar6;
  int *piVar7;
  char *pcVar8;
  char *pcVar9;
  undefined4 uVar10;
  uint uVar11;
  int iVar12;
  uint uVar13;
  uint *puVar14;
  undefined4 uVar15;
  uint uVar16;
  __off64_t _Var17;
  int local_284c;
  uint local_2840;
  int local_283c;
  iovec local_281c [256];
  undefined1 local_201c [8204];
  
  puVar4 = (uint *)(param_5 * 0x10 + *param_4);
  uVar1 = *puVar4;
  uVar2 = puVar4[1];
  if (param_6 == 0) {
    FUN_00066930(param_1);
    local_2840 = 0;
    local_283c = 0;
  }
  else {
    puVar14 = puVar4 + 3;
    local_283c = 0;
    local_284c = 0;
    uVar5 = 0;
    uVar13 = uVar2;
    uVar16 = uVar1;
    while( true ) {
      local_2840 = uVar5 + 1;
      local_281c[uVar5].iov_base = (void *)*puVar14;
      uVar3 = puVar14[-1];
      local_283c = local_283c + uVar3;
      local_281c[uVar5].iov_len = uVar3;
      uVar11 = uVar3 + uVar16;
      iVar12 = uVar13 + CARRY4(uVar3,uVar16);
      local_284c = local_284c + 1;
      if (param_6 == local_284c) break;
      uVar16 = puVar4[local_284c * 4];
      uVar13 = (puVar4 + local_284c * 4)[1];
      uVar3 = (uint)(uVar11 < uVar16);
      if ((SBORROW4(iVar12,uVar13) != SBORROW4(iVar12 - uVar13,uVar3)) !=
          (int)((iVar12 - uVar13) - uVar3) < 0) {
        uVar11 = uVar16 - uVar11;
        if (0x2000 < uVar11) {
                    /* WARNING: Subroutine does not return */
          FUN_00069d00("../../gold/fileread.cc",0x290,"do_readv");
        }
        local_283c = local_283c + uVar11;
        local_281c[local_2840].iov_base = local_201c;
        local_281c[local_2840].iov_len = uVar11;
        local_2840 = uVar5 + 2;
      }
      puVar14 = puVar14 + 4;
      uVar5 = local_2840;
    }
    FUN_00066930(param_1);
    if (0xff < local_2840) {
                    /* WARNING: Subroutine does not return */
      FUN_00069d00("../../gold/fileread.cc",0x2a4,"do_readv",iVar12);
    }
  }
  iVar12 = uVar2 + param_3 + (uint)CARRY4(uVar1,param_2);
  _Var17 = lseek64(param_1[6],CONCAT44(iVar12,uVar1 + param_2),0);
  if (_Var17 < 0) {
    piVar7 = __errno_location();
    pcVar8 = strerror(*piVar7);
    uVar15 = *param_1;
    pcVar9 = "%s: lseek failed: %s";
  }
  else {
    sVar6 = readv(param_1[6],local_281c,local_2840);
    if (-1 < sVar6) {
      if (sVar6 != local_283c) {
        uVar15 = *param_1;
        uVar10 = gettext("%s: file too short: read only %zd of %zd bytes at %lld");
                    /* WARNING: Subroutine does not return */
        FUN_00065450(uVar10,uVar15,sVar6,local_283c,uVar1 + param_2,iVar12);
      }
      return;
    }
    piVar7 = __errno_location();
    pcVar8 = strerror(*piVar7);
    uVar15 = *param_1;
    pcVar9 = "%s: readv failed: %s";
  }
  uVar10 = gettext(pcVar9);
                    /* WARNING: Subroutine does not return */
  FUN_00065450(uVar10,uVar15,pcVar8);
}

