
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original name: write<64, true>
   DWARF original prototype: section_offset_type write<64,_true>(Fde * this, uchar * oview,
   section_offset_type output_offset, section_offset_type offset, uint64_t address, uint addralign,
   section_offset_type cie_offset, uchar fde_encoding, Eh_frame_hdr * eh_frame_hdr) */

section_offset_type __thiscall
gold::Fde::write<64,_true>
          (Fde *this,uchar *oview,section_offset_type output_offset,section_offset_type offset,
          uint64_t address,uint addralign,section_offset_type cie_offset,uchar fde_encoding,
          Eh_frame_hdr *eh_frame_hdr)

{
  ulong uVar1;
  uint *__dest;
  size_t __n;
  Target *pTVar2;
  uint uVar3;
  char *format;
  uint uVar4;
  ulong uVar5;
  ulong uVar6;
  long lVar7;
  uint64_t paddress;
  off_t psize;
  uchar local_40;
  
  if (((ulong)(addralign - 1) & offset) != 0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/ehframe.cc",0x165,"write");
  }
  __n = (this->contents_)._M_string_length;
  uVar6 = (ulong)addralign;
  uVar1 = __n + 8;
  uVar5 = uVar1;
  if (uVar6 != 0) {
    uVar5 = uVar6 + 7 + __n & -uVar6;
  }
  uVar3 = (int)uVar5 - 4;
  *(uint *)(oview + offset) =
       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;
  uVar3 = ((int)offset - (int)cie_offset) + 4;
  *(uint *)(oview + offset + 4) =
       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;
  __dest = (uint *)(oview + offset + 8);
  memcpy(__dest,(this->contents_)._M_dataplus._M_p,__n);
  if (this->object_ == (Relobj *)0x0) {
    if (*(long *)__dest != 0) {
                    /* WARNING: Subroutine does not return */
      do_gold_unreachable("../../gold/ehframe.cc",0x182,"write");
    }
    pTVar2 = parameters->target_;
    if (pTVar2 == (Target *)0x0) {
                    /* WARNING: Subroutine does not return */
      do_gold_unreachable("../../gold/parameters.h",0x69,"target");
    }
    (*pTVar2->_vptr_Target[9])(pTVar2,(this->u_).from_linker.plt,__dest,&paddress,&psize);
    lVar7 = ((paddress - 8) - address) - offset;
    uVar3 = (uint)lVar7;
    if (((int)uVar3 != lVar7) || (psize != (psize & 0xffffffffU))) {
      format = (char *)gettext("overflow in PLT unwind data; unwinding through PLT may fail");
      gold_warning(format);
    }
    uVar4 = (uint)psize;
    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;
    *(uint *)(oview + offset + 0xc) =
         uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;
  }
  if (uVar1 < uVar5) {
    memset(oview + uVar1 + offset,0,(uVar5 - __n) - 8);
  }
  if ((eh_frame_hdr != (Eh_frame_hdr *)0x0) &&
     (eh_frame_hdr->any_unrecognized_eh_frame_sections_ == false)) {
    psize = output_offset + offset;
    local_40 = fde_encoding;
    std::
    vector<std::pair<long_int,_unsigned_char>,_std::allocator<std::pair<long_int,_unsigned_char>_>_>
    ::emplace_back<std::pair<long_int,_unsigned_char>_>
              (&eh_frame_hdr->fde_offsets_,(pair<long_int,_unsigned_char> *)&psize);
  }
  return offset + uVar5;
}



long FUN_0030f150(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,
                 int param_7,undefined1 param_8,long param_9)

{
  ulong uVar1;
  uint *__dest;
  size_t __n;
  long *plVar2;
  uint uVar3;
  undefined8 uVar4;
  uint uVar5;
  ulong uVar6;
  ulong uVar7;
  long lVar8;
  long local_50;
  ulong local_48;
  undefined1 local_40;
  
  if ((param_6 - 1 & param_4) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");
  }
  __n = param_1[4];
  uVar7 = (ulong)param_6;
  uVar1 = __n + 8;
  uVar6 = uVar1;
  if (uVar7 != 0) {
    uVar6 = uVar7 + 7 + __n & -uVar7;
  }
  uVar3 = (int)uVar6 - 4;
  *(uint *)(param_2 + param_4) =
       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;
  uVar3 = ((int)param_4 - param_7) + 4;
  *(uint *)(param_2 + 4 + param_4) =
       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;
  __dest = (uint *)(param_2 + 8 + param_4);
  memcpy(__dest,(void *)param_1[3],__n);
  if (*param_1 == 0) {
    if (*(long *)__dest != 0) {
                    /* WARNING: Subroutine does not return */
      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");
    }
    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_001e9890("../../gold/parameters.h",0x69,"target");
    }
    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);
    lVar8 = ((local_50 + -8) - param_5) - param_4;
    uVar3 = (uint)lVar8;
    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {
      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");
      FUN_001e15a0(uVar4);
    }
    uVar5 = (uint)local_48;
    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;
    *(uint *)(param_2 + 0xc + param_4) =
         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;
  }
  if (uVar1 < uVar6) {
    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);
  }
  if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {
    local_48 = param_3 + param_4;
    local_40 = param_8;
    FUN_0030eb10(param_9 + 0x48,&local_48);
  }
  return param_4 + uVar6;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x48
MOV EAX,dword ptr [RSP + 0x88]
MOV qword ptr [RSP + 0x10],RDX
MOV qword ptr [RSP + 0x8],R8
MOV dword ptr [RSP + 0x1c],EAX
LEA EAX,[R9 + -0x1]
TEST RAX,RCX
JNZ 0x0030f308
MOV R13,qword ptr [RDI + 0x20]
MOV R9D,R9D
MOV R14,RDI
MOV R15,RSI
MOV RBX,RCX
LEA R12,[R13 + 0x8]
MOV RBP,R12
TEST R9,R9
JNZ 0x0030f210
LEA EAX,[RBP + -0x4]
MOV RDX,R13
BSWAP EAX
MOV dword ptr [R15 + RBX*0x1],EAX
MOV EAX,EBX
SUB EAX,dword ptr [RSP + 0x80]
ADD EAX,0x4
BSWAP EAX
MOV dword ptr [R15 + RBX*0x1 + 0x4],EAX
LEA RAX,[R15 + RBX*0x1 + 0x8]
MOV RSI,qword ptr [R14 + 0x18]
MOV RDI,RAX
MOV qword ptr [RSP],RAX
CALL 0x00150a90
CMP qword ptr [R14],0x0
JZ 0x0030f270
CMP R12,RBP
JC 0x0030f250
CMP qword ptr [RSP + 0x90],0x0
JZ 0x0030f1f8
MOV RAX,qword ptr [RSP + 0x90]
CMP byte ptr [RAX + 0x60],0x0
JZ 0x0030f220
ADD RSP,0x48
LEA RAX,[RBX + RBP*0x1]
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
LEA RBP,[R9 + R13*0x1 + 0x7]
NEG R9
AND RBP,R9
JMP 0x0030f19c
MOV RAX,qword ptr [RSP + 0x10]
LEA RSI,[RSP + 0x30]
ADD RAX,RBX
MOV qword ptr [RSP + 0x30],RAX
MOVZX EAX,byte ptr [RSP + 0x1c]
MOV byte ptr [RSP + 0x38],AL
MOV RAX,qword ptr [RSP + 0x90]
LEA RDI,[RAX + 0x48]
CALL 0x0030eb10
JMP 0x0030f1f8
MOV RAX,RBP
LEA RDI,[R12 + RBX*0x1]
XOR ESI,ESI
SUB RAX,R13
ADD RDI,R15
LEA RDX,[RAX + -0x8]
CALL 0x00150100
JMP 0x0030f1df
MOV RAX,qword ptr [RSP]
CMP qword ptr [RAX],0x0
JNZ 0x0030f320
MOV RAX,qword ptr [0x004ba7c8]
MOV RDI,qword ptr [RAX + 0x18]
TEST RDI,RDI
JZ 0x0030f338
MOV RAX,qword ptr [RDI]
MOV RSI,qword ptr [R14 + 0x8]
LEA RCX,[RSP + 0x28]
LEA R8,[RSP + 0x30]
MOV RDX,qword ptr [RSP]
CALL qword ptr [RAX + 0x48]
MOV RAX,qword ptr [RSP + 0x28]
MOV RDX,qword ptr [RSP + 0x30]
SUB RAX,0x8
SUB RAX,qword ptr [RSP + 0x8]
MOV R14,RAX
SUB R14,RBX
MOVSXD RAX,R14D
CMP RAX,R14
JNZ 0x0030f2d2
MOV EAX,EDX
CMP RDX,RAX
JZ 0x0030f2f2
LEA RDI,[0x3faf80]
MOV qword ptr [RSP + 0x8],RDX
CALL 0x00150320
MOV RDI,RAX
XOR EAX,EAX
CALL 0x001e15a0
MOV RDX,qword ptr [RSP + 0x8]
MOV RAX,qword ptr [RSP]
BSWAP R14D
BSWAP EDX
MOV dword ptr [RAX],R14D
MOV dword ptr [R15 + RBX*0x1 + 0xc],EDX
JMP 0x0030f1da
LEA RDX,[0x3fb131]
MOV ESI,0x165
LEA RDI,[0x3faf67]
CALL 0x001e9890
LEA RDX,[0x3fb131]
MOV ESI,0x182
LEA RDI,[0x3faf67]
CALL 0x001e9890
LEA RDX,[0x3fb250]
MOV ESI,0x69
LEA RDI,[0x3c9279]
CALL 0x001e9890
(translation_unit "long FUN_0030f150(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)\n\n{\n  ulong uVar1;\n  uint *__dest;\n  size_t __n;\n  long *plVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  long lVar8;\n  long local_50;\n  ulong local_48;\n  undefined1 local_40;\n  \n  if ((param_6 - 1 & param_4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }\n  __n = param_1[4];\n  uVar7 = (ulong)param_6;\n  uVar1 = __n + 8;\n  uVar6 = uVar1;\n  if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }\n  uVar3 = (int)uVar6 - 4;\n  *(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  uVar3 = ((int)param_4 - param_7) + 4;\n  *(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  __dest = (uint *)(param_2 + 8 + param_4);\n  memcpy(__dest,(void *)param_1[3],__n);\n  if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }\n  if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }\n  if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }\n  return param_4 + uVar6;\n}\n\n" (function_definition "long FUN_0030f150(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)\n\n{\n  ulong uVar1;\n  uint *__dest;\n  size_t __n;\n  long *plVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  long lVar8;\n  long local_50;\n  ulong local_48;\n  undefined1 local_40;\n  \n  if ((param_6 - 1 & param_4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }\n  __n = param_1[4];\n  uVar7 = (ulong)param_6;\n  uVar1 = __n + 8;\n  uVar6 = uVar1;\n  if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }\n  uVar3 = (int)uVar6 - 4;\n  *(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  uVar3 = ((int)param_4 - param_7) + 4;\n  *(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  __dest = (uint *)(param_2 + 8 + param_4);\n  memcpy(__dest,(void *)param_1[3],__n);\n  if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }\n  if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }\n  if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }\n  return param_4 + uVar6;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_0030f150(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)" identifier (parameter_list "(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "long param_5" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "undefined1 param_8" type_identifier identifier) , (parameter_declaration "long param_9" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ulong uVar1;\n  uint *__dest;\n  size_t __n;\n  long *plVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  long lVar8;\n  long local_50;\n  ulong local_48;\n  undefined1 local_40;\n  \n  if ((param_6 - 1 & param_4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }\n  __n = param_1[4];\n  uVar7 = (ulong)param_6;\n  uVar1 = __n + 8;\n  uVar6 = uVar1;\n  if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }\n  uVar3 = (int)uVar6 - 4;\n  *(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  uVar3 = ((int)param_4 - param_7) + 4;\n  *(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  __dest = (uint *)(param_2 + 8 + param_4);\n  memcpy(__dest,(void *)param_1[3],__n);\n  if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }\n  if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }\n  if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }\n  return param_4 + uVar6;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "uint *__dest;" type_identifier (pointer_declarator "*__dest" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_48;" type_identifier identifier ;) (declaration "undefined1 local_40;" type_identifier identifier ;) (if_statement "if ((param_6 - 1 & param_4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }" if (parenthesized_expression "((param_6 - 1 & param_4) != 0)" ( (binary_expression "(param_6 - 1 & param_4) != 0" (parenthesized_expression "(param_6 - 1 & param_4)" ( (binary_expression "param_6 - 1 & param_4" (binary_expression "param_6 - 1" identifier - number_literal) & identifier) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }" { comment (expression_statement "FUN_001e9890("../../gold/ehframe.cc",0x165,"write");" (call_expression "FUN_001e9890("../../gold/ehframe.cc",0x165,"write")" identifier (argument_list "("../../gold/ehframe.cc",0x165,"write")" ( (string_literal ""../../gold/ehframe.cc"" " string_content ") , number_literal , (string_literal ""write"" " string_content ") ))) ;) })) (expression_statement "__n = param_1[4];" (assignment_expression "__n = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = (ulong)param_6;" (assignment_expression "uVar7 = (ulong)param_6" identifier = (cast_expression "(ulong)param_6" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "uVar1 = __n + 8;" (assignment_expression "uVar1 = __n + 8" identifier = (binary_expression "__n + 8" identifier + number_literal)) ;) (expression_statement "uVar6 = uVar1;" (assignment_expression "uVar6 = uVar1" identifier = identifier) ;) (if_statement "if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }" { (expression_statement "uVar6 = uVar7 + 7 + __n & -uVar7;" (assignment_expression "uVar6 = uVar7 + 7 + __n & -uVar7" identifier = (binary_expression "uVar7 + 7 + __n & -uVar7" (binary_expression "uVar7 + 7 + __n" (binary_expression "uVar7 + 7" identifier + number_literal) + identifier) & (unary_expression "-uVar7" - identifier))) ;) })) (expression_statement "uVar3 = (int)uVar6 - 4;" (assignment_expression "uVar3 = (int)uVar6 - 4" identifier = (binary_expression "(int)uVar6 - 4" (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal)) ;) (expression_statement "*(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "*(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (pointer_expression "*(uint *)(param_2 + param_4)" * (cast_expression "(uint *)(param_2 + param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + param_4)" ( (binary_expression "param_2 + param_4" identifier + identifier) )))) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 * 0x1000000" identifier * number_literal))) ;) (expression_statement "uVar3 = ((int)param_4 - param_7) + 4;" (assignment_expression "uVar3 = ((int)param_4 - param_7) + 4" identifier = (binary_expression "((int)param_4 - param_7) + 4" (parenthesized_expression "((int)param_4 - param_7)" ( (binary_expression "(int)param_4 - param_7" (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier) - identifier) )) + number_literal)) ;) (expression_statement "*(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "*(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (pointer_expression "*(uint *)(param_2 + 4 + param_4)" * (cast_expression "(uint *)(param_2 + 4 + param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4 + param_4)" ( (binary_expression "param_2 + 4 + param_4" (binary_expression "param_2 + 4" identifier + number_literal) + identifier) )))) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 * 0x1000000" identifier * number_literal))) ;) (expression_statement "__dest = (uint *)(param_2 + 8 + param_4);" (assignment_expression "__dest = (uint *)(param_2 + 8 + param_4)" identifier = (cast_expression "(uint *)(param_2 + 8 + param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8 + param_4)" ( (binary_expression "param_2 + 8 + param_4" (binary_expression "param_2 + 8" identifier + number_literal) + identifier) )))) ;) (expression_statement "memcpy(__dest,(void *)param_1[3],__n);" (call_expression "memcpy(__dest,(void *)param_1[3],__n)" identifier (argument_list "(__dest,(void *)param_1[3],__n)" ( identifier , (cast_expression "(void *)param_1[3]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ])) , identifier ))) ;) (if_statement "if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }" if (parenthesized_expression "(*param_1 == 0)" ( (binary_expression "*param_1 == 0" (pointer_expression "*param_1" * identifier) == number_literal) )) (compound_statement "{\n    if (*(long *)__dest != 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }" { (if_statement "if (*(long *)__dest != 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }" if (parenthesized_expression "(*(long *)__dest != 0)" ( (binary_expression "*(long *)__dest != 0" (pointer_expression "*(long *)__dest" * (cast_expression "(long *)__dest" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }" { comment (expression_statement "FUN_001e9890("../../gold/ehframe.cc",0x182,"write");" (call_expression "FUN_001e9890("../../gold/ehframe.cc",0x182,"write")" identifier (argument_list "("../../gold/ehframe.cc",0x182,"write")" ( (string_literal ""../../gold/ehframe.cc"" " string_content ") , number_literal , (string_literal ""write"" " string_content ") ))) ;) })) (expression_statement "plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);" (assignment_expression "plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18)" identifier = (pointer_expression "*(long **)(PTR_DAT_004ba7c8 + 0x18)" * (cast_expression "(long **)(PTR_DAT_004ba7c8 + 0x18)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR_DAT_004ba7c8 + 0x18)" ( (binary_expression "PTR_DAT_004ba7c8 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if (plVar2 == (long *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }" if (parenthesized_expression "(plVar2 == (long *)0x0)" ( (binary_expression "plVar2 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }" { comment (expression_statement "FUN_001e9890("../../gold/parameters.h",0x69,"target");" (call_expression "FUN_001e9890("../../gold/parameters.h",0x69,"target")" identifier (argument_list "("../../gold/parameters.h",0x69,"target")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""target"" " string_content ") ))) ;) })) (expression_statement "(**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);" (call_expression "(**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48)" (parenthesized_expression "(**(code **)(*plVar2 + 0x48))" ( (pointer_expression "**(code **)(*plVar2 + 0x48)" * (pointer_expression "*(code **)(*plVar2 + 0x48)" * (cast_expression "(code **)(*plVar2 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0x48)" ( (binary_expression "*plVar2 + 0x48" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(plVar2,param_1[1],__dest,&local_50,&local_48)" ( identifier , (subscript_expression "param_1[1]" identifier [ number_literal ]) , identifier , (pointer_expression "&local_50" & identifier) , (pointer_expression "&local_48" & identifier) ))) ;) (expression_statement "lVar8 = ((local_50 + -8) - param_5) - param_4;" (assignment_expression "lVar8 = ((local_50 + -8) - param_5) - param_4" identifier = (binary_expression "((local_50 + -8) - param_5) - param_4" (parenthesized_expression "((local_50 + -8) - param_5)" ( (binary_expression "(local_50 + -8) - param_5" (parenthesized_expression "(local_50 + -8)" ( (binary_expression "local_50 + -8" identifier + number_literal) )) - identifier) )) - identifier)) ;) (expression_statement "uVar3 = (uint)lVar8;" (assignment_expression "uVar3 = (uint)lVar8" identifier = (cast_expression "(uint)lVar8" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }" if (parenthesized_expression "(((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff)))" ( (binary_expression "((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))" (parenthesized_expression "((int)uVar3 != lVar8)" ( (binary_expression "(int)uVar3 != lVar8" (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier) != identifier) )) || (parenthesized_expression "(local_48 != (local_48 & 0xffffffff))" ( (binary_expression "local_48 != (local_48 & 0xffffffff)" identifier != (parenthesized_expression "(local_48 & 0xffffffff)" ( (binary_expression "local_48 & 0xffffffff" identifier & number_literal) ))) ))) )) (compound_statement "{\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }" { (expression_statement "uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");" (assignment_expression "uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail")" identifier = (call_expression "gettext("overflow in PLT unwind data; unwinding through PLT may fail")" identifier (argument_list "("overflow in PLT unwind data; unwinding through PLT may fail")" ( (string_literal ""overflow in PLT unwind data; unwinding through PLT may fail"" " string_content ") )))) ;) (expression_statement "FUN_001e15a0(uVar4);" (call_expression "FUN_001e15a0(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) })) (expression_statement "uVar5 = (uint)local_48;" (assignment_expression "uVar5 = (uint)local_48" identifier = (cast_expression "(uint)local_48" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;" (assignment_expression "*__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (pointer_expression "*__dest" * identifier) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x18" identifier << number_literal))) ;) (expression_statement "*(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;" (assignment_expression "*(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18" (pointer_expression "*(uint *)(param_2 + 0xc + param_4)" * (cast_expression "(uint *)(param_2 + 0xc + param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc + param_4)" ( (binary_expression "param_2 + 0xc + param_4" (binary_expression "param_2 + 0xc" identifier + number_literal) + identifier) )))) = (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8" (binary_expression "uVar5 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar5 & 0xff0000) >> 8" (parenthesized_expression "(uVar5 & 0xff0000)" ( (binary_expression "uVar5 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar5 & 0xff00) << 8" (parenthesized_expression "(uVar5 & 0xff00)" ( (binary_expression "uVar5 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar5 << 0x18" identifier << number_literal))) ;) })) (if_statement "if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }" if (parenthesized_expression "(uVar1 < uVar6)" ( (binary_expression "uVar1 < uVar6" identifier < identifier) )) (compound_statement "{\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }" { (expression_statement "memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);" (call_expression "memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8)" identifier (argument_list "((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8)" ( (cast_expression "(void *)(uVar1 + param_4 + param_2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar1 + param_4 + param_2)" ( (binary_expression "uVar1 + param_4 + param_2" (binary_expression "uVar1 + param_4" identifier + identifier) + identifier) ))) , number_literal , (binary_expression "(uVar6 - __n) - 8" (parenthesized_expression "(uVar6 - __n)" ( (binary_expression "uVar6 - __n" identifier - identifier) )) - number_literal) ))) ;) })) (if_statement "if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }" if (parenthesized_expression "((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0'))" ( (binary_expression "(param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')" (parenthesized_expression "(param_9 != 0)" ( (binary_expression "param_9 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(char *)(param_9 + 0x60) == '\0')" ( (binary_expression "*(char *)(param_9 + 0x60) == '\0'" (pointer_expression "*(char *)(param_9 + 0x60)" * (cast_expression "(char *)(param_9 + 0x60)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_9 + 0x60)" ( (binary_expression "param_9 + 0x60" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }" { (expression_statement "local_48 = param_3 + param_4;" (assignment_expression "local_48 = param_3 + param_4" identifier = (binary_expression "param_3 + param_4" identifier + identifier)) ;) (expression_statement "local_40 = param_8;" (assignment_expression "local_40 = param_8" identifier = identifier) ;) (expression_statement "FUN_0030eb10(param_9 + 0x48,&local_48);" (call_expression "FUN_0030eb10(param_9 + 0x48,&local_48)" identifier (argument_list "(param_9 + 0x48,&local_48)" ( (binary_expression "param_9 + 0x48" identifier + number_literal) , (pointer_expression "&local_48" & identifier) ))) ;) })) (return_statement "return param_4 + uVar6;" return (binary_expression "param_4 + uVar6" identifier + identifier) ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Enum "ELFOSABI": Some values do not have unique names */\n/* DWARF original name: write<64, true>\n   DWARF original prototype: section_offset_type write<64,_true>(Fde * this, uchar * oview,\n   section_offset_type output_offset, section_offset_type offset, uint64_t address, uint addralign,\n   section_offset_type cie_offset, uchar fde_encoding, Eh_frame_hdr * eh_frame_hdr) */\n\nsection_offset_type __thiscall\ngold::Fde::write<64,_true>\n          (Fde *this,uchar *oview,section_offset_type output_offset,section_offset_type offset,\n          uint64_t address,uint addralign,section_offset_type cie_offset,uchar fde_encoding,\n          Eh_frame_hdr *eh_frame_hdr)\n\n{\n  ulong uVar1;\n  uint *__dest;\n  size_t __n;\n  Target *pTVar2;\n  uint uVar3;\n  char *format;\n  uint uVar4;\n  ulong uVar5;\n  ulong uVar6;\n  long lVar7;\n  uint64_t paddress;\n  off_t psize;\n  uchar local_40;\n  \n  if (((ulong)(addralign - 1) & offset) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/ehframe.cc",0x165,"write");\n  }\n  __n = (this->contents_)._M_string_length;\n  uVar6 = (ulong)addralign;\n  uVar1 = __n + 8;\n  uVar5 = uVar1;\n  if (uVar6 != 0) {\n    uVar5 = uVar6 + 7 + __n & -uVar6;\n  }\n  uVar3 = (int)uVar5 - 4;\n  *(uint *)(oview + offset) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  uVar3 = ((int)offset - (int)cie_offset) + 4;\n  *(uint *)(oview + offset + 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  __dest = (uint *)(oview + offset + 8);\n  memcpy(__dest,(this->contents_)._M_dataplus._M_p,__n);\n  if (this->object_ == (Relobj *)0x0) {\n    if (*(long *)__dest != 0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/ehframe.cc",0x182,"write");\n    }\n    pTVar2 = parameters->target_;\n    if (pTVar2 == (Target *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/parameters.h",0x69,"target");\n    }\n    (*pTVar2->_vptr_Target[9])(pTVar2,(this->u_).from_linker.plt,__dest,&paddress,&psize);\n    lVar7 = ((paddress - 8) - address) - offset;\n    uVar3 = (uint)lVar7;\n    if (((int)uVar3 != lVar7) || (psize != (psize & 0xffffffffU))) {\n      format = (char *)gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      gold_warning(format);\n    }\n    uVar4 = (uint)psize;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(oview + offset + 0xc) =\n         uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n  }\n  if (uVar1 < uVar5) {\n    memset(oview + uVar1 + offset,0,(uVar5 - __n) - 8);\n  }\n  if ((eh_frame_hdr != (Eh_frame_hdr *)0x0) &&\n     (eh_frame_hdr->any_unrecognized_eh_frame_sections_ == false)) {\n    psize = output_offset + offset;\n    local_40 = fde_encoding;\n    std::\n    vector<std::pair<long_int,_unsigned_char>,_std::allocator<std::pair<long_int,_unsigned_char>_>_>\n    ::emplace_back<std::pair<long_int,_unsigned_char>_>\n              (&eh_frame_hdr->fde_offsets_,(pair<long_int,_unsigned_char> *)&psize);\n  }\n  return offset + uVar5;\n}\n\n" comment comment comment (declaration "section_offset_type __thiscall\ngold::Fde::write<64,_true>\n          (Fde *this,uchar *oview,section_offset_type output_offset,section_offset_type offset,\n          uint64_t address,uint addralign,section_offset_type cie_offset,uchar fde_encoding,\n          Eh_frame_hdr *eh_frame_hdr)\n\n{\n  ulong uVar1;" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Fde::" identifier : : identifier : :) identifier (ERROR "<64" < number_literal) , (ERROR "_true>\n          (Fde *this,uchar *oview,section_offset_type output_offset,section_offset_type offset,\n          uint64_t address,uint addralign,section_offset_type cie_offset,uchar fde_encoding,\n          Eh_frame_hdr *eh_frame_hdr)\n\n{\n  ulong" (function_declarator "_true>\n          (Fde *this,uchar *oview,section_offset_type output_offset,section_offset_type offset,\n          uint64_t address,uint addralign,section_offset_type cie_offset,uchar fde_encoding,\n          Eh_frame_hdr *eh_frame_hdr)" identifier (ERROR ">" >) (parameter_list "(Fde *this,uchar *oview,section_offset_type output_offset,section_offset_type offset,\n          uint64_t address,uint addralign,section_offset_type cie_offset,uchar fde_encoding,\n          Eh_frame_hdr *eh_frame_hdr)" ( (parameter_declaration "Fde *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "uchar *oview" type_identifier (pointer_declarator "*oview" * identifier)) , (parameter_declaration "section_offset_type output_offset" type_identifier identifier) , (parameter_declaration "section_offset_type offset" type_identifier identifier) , (parameter_declaration "uint64_t address" primitive_type identifier) , (parameter_declaration "uint addralign" type_identifier identifier) , (parameter_declaration "section_offset_type cie_offset" type_identifier identifier) , (parameter_declaration "uchar fde_encoding" type_identifier identifier) , (parameter_declaration "Eh_frame_hdr *eh_frame_hdr" type_identifier (pointer_declarator "*eh_frame_hdr" * identifier)) ))) { identifier) identifier ;) (declaration "uint *__dest;" type_identifier (pointer_declarator "*__dest" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "Target *pTVar2;" type_identifier (pointer_declarator "*pTVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "char *format;" primitive_type (pointer_declarator "*format" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "uint64_t paddress;" primitive_type identifier ;) (declaration "off_t psize;" type_identifier identifier ;) (declaration "uchar local_40;" type_identifier identifier ;) (if_statement "if (((ulong)(addralign - 1) & offset) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/ehframe.cc",0x165,"write");\n  }" if (parenthesized_expression "(((ulong)(addralign - 1) & offset) != 0)" ( (binary_expression "((ulong)(addralign - 1) & offset) != 0" (parenthesized_expression "((ulong)(addralign - 1) & offset)" ( (binary_expression "(ulong)(addralign - 1) & offset" (call_expression "(ulong)(addralign - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(addralign - 1)" ( (binary_expression "addralign - 1" identifier - number_literal) ))) & identifier) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/ehframe.cc",0x165,"write");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/ehframe.cc",0x165,"write");" (call_expression "do_gold_unreachable("../../gold/ehframe.cc",0x165,"write")" identifier (argument_list "("../../gold/ehframe.cc",0x165,"write")" ( (string_literal ""../../gold/ehframe.cc"" " string_content ") , number_literal , (string_literal ""write"" " string_content ") ))) ;) })) (expression_statement "__n = (this->contents_)._M_string_length;" (assignment_expression "__n = (this->contents_)._M_string_length" identifier = (field_expression "(this->contents_)._M_string_length" (parenthesized_expression "(this->contents_)" ( (field_expression "this->contents_" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar6 = (ulong)addralign;" (assignment_expression "uVar6 = (ulong)addralign" identifier = (cast_expression "(ulong)addralign" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "uVar1 = __n + 8;" (assignment_expression "uVar1 = __n + 8" identifier = (binary_expression "__n + 8" identifier + number_literal)) ;) (expression_statement "uVar5 = uVar1;" (assignment_expression "uVar5 = uVar1" identifier = identifier) ;) (if_statement "if (uVar6 != 0) {\n    uVar5 = uVar6 + 7 + __n & -uVar6;\n  }" if (parenthesized_expression "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar5 = uVar6 + 7 + __n & -uVar6;\n  }" { (expression_statement "uVar5 = uVar6 + 7 + __n & -uVar6;" (assignment_expression "uVar5 = uVar6 + 7 + __n & -uVar6" identifier = (binary_expression "uVar6 + 7 + __n & -uVar6" (binary_expression "uVar6 + 7 + __n" (binary_expression "uVar6 + 7" identifier + number_literal) + identifier) & (unary_expression "-uVar6" - identifier))) ;) })) (expression_statement "uVar3 = (int)uVar5 - 4;" (assignment_expression "uVar3 = (int)uVar5 - 4" identifier = (binary_expression "(int)uVar5 - 4" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal)) ;) (expression_statement "*(uint *)(oview + offset) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "*(uint *)(oview + offset) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (pointer_expression "*(uint *)(oview + offset)" * (cast_expression "(uint *)(oview + offset)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(oview + offset)" ( (binary_expression "oview + offset" identifier + identifier) )))) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 * 0x1000000" identifier * number_literal))) ;) (expression_statement "uVar3 = ((int)offset - (int)cie_offset) + 4;" (assignment_expression "uVar3 = ((int)offset - (int)cie_offset) + 4" identifier = (binary_expression "((int)offset - (int)cie_offset) + 4" (parenthesized_expression "((int)offset - (int)cie_offset)" ( (binary_expression "(int)offset - (int)cie_offset" (cast_expression "(int)offset" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)cie_offset" ( (type_descriptor "int" primitive_type) ) identifier)) )) + number_literal)) ;) (expression_statement "*(uint *)(oview + offset + 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "*(uint *)(oview + offset + 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (pointer_expression "*(uint *)(oview + offset + 4)" * (cast_expression "(uint *)(oview + offset + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(oview + offset + 4)" ( (binary_expression "oview + offset + 4" (binary_expression "oview + offset" identifier + identifier) + number_literal) )))) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 * 0x1000000" identifier * number_literal))) ;) (expression_statement "__dest = (uint *)(oview + offset + 8);" (assignment_expression "__dest = (uint *)(oview + offset + 8)" identifier = (cast_expression "(uint *)(oview + offset + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(oview + offset + 8)" ( (binary_expression "oview + offset + 8" (binary_expression "oview + offset" identifier + identifier) + number_literal) )))) ;) (expression_statement "memcpy(__dest,(this->contents_)._M_dataplus._M_p,__n);" (call_expression "memcpy(__dest,(this->contents_)._M_dataplus._M_p,__n)" identifier (argument_list "(__dest,(this->contents_)._M_dataplus._M_p,__n)" ( identifier , (field_expression "(this->contents_)._M_dataplus._M_p" (field_expression "(this->contents_)._M_dataplus" (parenthesized_expression "(this->contents_)" ( (field_expression "this->contents_" identifier -> field_identifier) )) . field_identifier) . field_identifier) , identifier ))) ;) (if_statement "if (this->object_ == (Relobj *)0x0) {\n    if (*(long *)__dest != 0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/ehframe.cc",0x182,"write");\n    }\n    pTVar2 = parameters->target_;\n    if (pTVar2 == (Target *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/parameters.h",0x69,"target");\n    }\n    (*pTVar2->_vptr_Target[9])(pTVar2,(this->u_).from_linker.plt,__dest,&paddress,&psize);\n    lVar7 = ((paddress - 8) - address) - offset;\n    uVar3 = (uint)lVar7;\n    if (((int)uVar3 != lVar7) || (psize != (psize & 0xffffffffU))) {\n      format = (char *)gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      gold_warning(format);\n    }\n    uVar4 = (uint)psize;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(oview + offset + 0xc) =\n         uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n  }" if (parenthesized_expression "(this->object_ == (Relobj *)0x0)" ( (binary_expression "this->object_ == (Relobj *)0x0" (field_expression "this->object_" identifier -> field_identifier) == (cast_expression "(Relobj *)0x0" ( (type_descriptor "Relobj *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (*(long *)__dest != 0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/ehframe.cc",0x182,"write");\n    }\n    pTVar2 = parameters->target_;\n    if (pTVar2 == (Target *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/parameters.h",0x69,"target");\n    }\n    (*pTVar2->_vptr_Target[9])(pTVar2,(this->u_).from_linker.plt,__dest,&paddress,&psize);\n    lVar7 = ((paddress - 8) - address) - offset;\n    uVar3 = (uint)lVar7;\n    if (((int)uVar3 != lVar7) || (psize != (psize & 0xffffffffU))) {\n      format = (char *)gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      gold_warning(format);\n    }\n    uVar4 = (uint)psize;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(oview + offset + 0xc) =\n         uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n  }" { (if_statement "if (*(long *)__dest != 0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/ehframe.cc",0x182,"write");\n    }" if (parenthesized_expression "(*(long *)__dest != 0)" ( (binary_expression "*(long *)__dest != 0" (pointer_expression "*(long *)__dest" * (cast_expression "(long *)__dest" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/ehframe.cc",0x182,"write");\n    }" { comment (expression_statement "do_gold_unreachable("../../gold/ehframe.cc",0x182,"write");" (call_expression "do_gold_unreachable("../../gold/ehframe.cc",0x182,"write")" identifier (argument_list "("../../gold/ehframe.cc",0x182,"write")" ( (string_literal ""../../gold/ehframe.cc"" " string_content ") , number_literal , (string_literal ""write"" " string_content ") ))) ;) })) (expression_statement "pTVar2 = parameters->target_;" (assignment_expression "pTVar2 = parameters->target_" identifier = (field_expression "parameters->target_" identifier -> field_identifier)) ;) (if_statement "if (pTVar2 == (Target *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/parameters.h",0x69,"target");\n    }" if (parenthesized_expression "(pTVar2 == (Target *)0x0)" ( (binary_expression "pTVar2 == (Target *)0x0" identifier == (cast_expression "(Target *)0x0" ( (type_descriptor "Target *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/parameters.h",0x69,"target");\n    }" { comment (expression_statement "do_gold_unreachable("../../gold/parameters.h",0x69,"target");" (call_expression "do_gold_unreachable("../../gold/parameters.h",0x69,"target")" identifier (argument_list "("../../gold/parameters.h",0x69,"target")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""target"" " string_content ") ))) ;) })) (expression_statement "(*pTVar2->_vptr_Target[9])(pTVar2,(this->u_).from_linker.plt,__dest,&paddress,&psize);" (call_expression "(*pTVar2->_vptr_Target[9])(pTVar2,(this->u_).from_linker.plt,__dest,&paddress,&psize)" (parenthesized_expression "(*pTVar2->_vptr_Target[9])" ( (pointer_expression "*pTVar2->_vptr_Target[9]" * (subscript_expression "pTVar2->_vptr_Target[9]" (field_expression "pTVar2->_vptr_Target" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(pTVar2,(this->u_).from_linker.plt,__dest,&paddress,&psize)" ( identifier , (field_expression "(this->u_).from_linker.plt" (field_expression "(this->u_).from_linker" (parenthesized_expression "(this->u_)" ( (field_expression "this->u_" identifier -> field_identifier) )) . field_identifier) . field_identifier) , identifier , (pointer_expression "&paddress" & identifier) , (pointer_expression "&psize" & identifier) ))) ;) (expression_statement "lVar7 = ((paddress - 8) - address) - offset;" (assignment_expression "lVar7 = ((paddress - 8) - address) - offset" identifier = (binary_expression "((paddress - 8) - address) - offset" (parenthesized_expression "((paddress - 8) - address)" ( (binary_expression "(paddress - 8) - address" (parenthesized_expression "(paddress - 8)" ( (binary_expression "paddress - 8" identifier - number_literal) )) - identifier) )) - identifier)) ;) (expression_statement "uVar3 = (uint)lVar7;" (assignment_expression "uVar3 = (uint)lVar7" identifier = (cast_expression "(uint)lVar7" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (((int)uVar3 != lVar7) || (psize != (psize & 0xffffffffU))) {\n      format = (char *)gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      gold_warning(format);\n    }" if (parenthesized_expression "(((int)uVar3 != lVar7) || (psize != (psize & 0xffffffffU)))" ( (binary_expression "((int)uVar3 != lVar7) || (psize != (psize & 0xffffffffU))" (parenthesized_expression "((int)uVar3 != lVar7)" ( (binary_expression "(int)uVar3 != lVar7" (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier) != identifier) )) || (parenthesized_expression "(psize != (psize & 0xffffffffU))" ( (binary_expression "psize != (psize & 0xffffffffU)" identifier != (parenthesized_expression "(psize & 0xffffffffU)" ( (binary_expression "psize & 0xffffffffU" identifier & number_literal) ))) ))) )) (compound_statement "{\n      format = (char *)gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      gold_warning(format);\n    }" { (expression_statement "format = (char *)gettext("overflow in PLT unwind data; unwinding through PLT may fail");" (assignment_expression "format = (char *)gettext("overflow in PLT unwind data; unwinding through PLT may fail")" identifier = (cast_expression "(char *)gettext("overflow in PLT unwind data; unwinding through PLT may fail")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("overflow in PLT unwind data; unwinding through PLT may fail")" identifier (argument_list "("overflow in PLT unwind data; unwinding through PLT may fail")" ( (string_literal ""overflow in PLT unwind data; unwinding through PLT may fail"" " string_content ") ))))) ;) (expression_statement "gold_warning(format);" (call_expression "gold_warning(format)" identifier (argument_list "(format)" ( identifier ))) ;) })) (expression_statement "uVar4 = (uint)psize;" (assignment_expression "uVar4 = (uint)psize" identifier = (cast_expression "(uint)psize" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;" (assignment_expression "*__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (pointer_expression "*__dest" * identifier) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x18" identifier << number_literal))) ;) (expression_statement "*(uint *)(oview + offset + 0xc) =\n         uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;" (assignment_expression "*(uint *)(oview + offset + 0xc) =\n         uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (pointer_expression "*(uint *)(oview + offset + 0xc)" * (cast_expression "(uint *)(oview + offset + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(oview + offset + 0xc)" ( (binary_expression "oview + offset + 0xc" (binary_expression "oview + offset" identifier + identifier) + number_literal) )))) = (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 << 0x18" identifier << number_literal))) ;) })) (if_statement "if (uVar1 < uVar5) {\n    memset(oview + uVar1 + offset,0,(uVar5 - __n) - 8);\n  }" if (parenthesized_expression "(uVar1 < uVar5)" ( (binary_expression "uVar1 < uVar5" identifier < identifier) )) (compound_statement "{\n    memset(oview + uVar1 + offset,0,(uVar5 - __n) - 8);\n  }" { (expression_statement "memset(oview + uVar1 + offset,0,(uVar5 - __n) - 8);" (call_expression "memset(oview + uVar1 + offset,0,(uVar5 - __n) - 8)" identifier (argument_list "(oview + uVar1 + offset,0,(uVar5 - __n) - 8)" ( (binary_expression "oview + uVar1 + offset" (binary_expression "oview + uVar1" identifier + identifier) + identifier) , number_literal , (binary_expression "(uVar5 - __n) - 8" (parenthesized_expression "(uVar5 - __n)" ( (binary_expression "uVar5 - __n" identifier - identifier) )) - number_literal) ))) ;) })) (if_statement "if ((eh_frame_hdr != (Eh_frame_hdr *)0x0) &&\n     (eh_frame_hdr->any_unrecognized_eh_frame_sections_ == false)) {\n    psize = output_offset + offset;\n    local_40 = fde_encoding;\n    std::\n    vector<std::pair<long_int,_unsigned_char>,_std::allocator<std::pair<long_int,_unsigned_char>_>_>\n    ::emplace_back<std::pair<long_int,_unsigned_char>_>\n              (&eh_frame_hdr->fde_offsets_,(pair<long_int,_unsigned_char> *)&psize);\n  }" if (parenthesized_expression "((eh_frame_hdr != (Eh_frame_hdr *)0x0) &&\n     (eh_frame_hdr->any_unrecognized_eh_frame_sections_ == false))" ( (binary_expression "(eh_frame_hdr != (Eh_frame_hdr *)0x0) &&\n     (eh_frame_hdr->any_unrecognized_eh_frame_sections_ == false)" (parenthesized_expression "(eh_frame_hdr != (Eh_frame_hdr *)0x0)" ( (binary_expression "eh_frame_hdr != (Eh_frame_hdr *)0x0" identifier != (cast_expression "(Eh_frame_hdr *)0x0" ( (type_descriptor "Eh_frame_hdr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(eh_frame_hdr->any_unrecognized_eh_frame_sections_ == false)" ( (binary_expression "eh_frame_hdr->any_unrecognized_eh_frame_sections_ == false" (field_expression "eh_frame_hdr->any_unrecognized_eh_frame_sections_" identifier -> field_identifier) == false) ))) )) (compound_statement "{\n    psize = output_offset + offset;\n    local_40 = fde_encoding;\n    std::\n    vector<std::pair<long_int,_unsigned_char>,_std::allocator<std::pair<long_int,_unsigned_char>_>_>\n    ::emplace_back<std::pair<long_int,_unsigned_char>_>\n              (&eh_frame_hdr->fde_offsets_,(pair<long_int,_unsigned_char> *)&psize);\n  }" { (expression_statement "psize = output_offset + offset;" (assignment_expression "psize = output_offset + offset" identifier = (binary_expression "output_offset + offset" identifier + identifier)) ;) (expression_statement "local_40 = fde_encoding;" (assignment_expression "local_40 = fde_encoding" identifier = identifier) ;) (labeled_statement "std::\n    vector<std::pair<long_int,_unsigned_char>,_std::allocator<std::pair<long_int,_unsigned_char>_>_>\n    ::emplace_back<std::pair<long_int,_unsigned_char>_>\n              (&eh_frame_hdr->fde_offsets_,(pair<long_int,_unsigned_char> *)&psize);" statement_identifier (ERROR "::\n    vector<std::pair<long_int,_unsigned_char>,_std::allocator<std::pair<long_int,_unsigned_char>_>_>\n    ::emplace_back<std:" : : (binary_expression "vector<std" identifier < identifier) : : (comma_expression "pair<long_int,_unsigned_char>,_std" (binary_expression "pair<long_int" identifier < identifier) , (binary_expression "_unsigned_char>,_std" identifier > (ERROR "," ,) identifier)) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<long_int,_unsigned_char>_>_>\n    ::emplace_back<std" (binary_expression "pair<long_int" identifier < identifier) , (binary_expression "_unsigned_char>_>_>\n    ::emplace_back<std" (binary_expression "_unsigned_char>_>_>\n    ::emplace_back" (binary_expression "_unsigned_char>_>_" (binary_expression "_unsigned_char>_" identifier > identifier) > identifier) > (ERROR "::" : :) identifier) < identifier)) :) : (expression_statement "pair<long_int,_unsigned_char>_>\n              (&eh_frame_hdr->fde_offsets_,(pair<long_int,_unsigned_char> *)&psize);" (comma_expression "pair<long_int,_unsigned_char>_>\n              (&eh_frame_hdr->fde_offsets_,(pair<long_int,_unsigned_char> *)&psize)" (binary_expression "pair<long_int" identifier < identifier) , (binary_expression "_unsigned_char>_>\n              (&eh_frame_hdr->fde_offsets_,(pair<long_int,_unsigned_char> *)&psize)" (binary_expression "_unsigned_char>_" identifier > identifier) > (parenthesized_expression "(&eh_frame_hdr->fde_offsets_,(pair<long_int,_unsigned_char> *)&psize)" ( (comma_expression "&eh_frame_hdr->fde_offsets_,(pair<long_int,_unsigned_char> *)&psize" (pointer_expression "&eh_frame_hdr->fde_offsets_" & (field_expression "eh_frame_hdr->fde_offsets_" identifier -> field_identifier)) , (binary_expression "(pair<long_int,_unsigned_char> *)&psize" (parenthesized_expression "(pair<long_int,_unsigned_char> *)" ( (comma_expression "pair<long_int,_unsigned_char> *" (binary_expression "pair<long_int" identifier < identifier) , (binary_expression "_unsigned_char> *" identifier > (pointer_expression "*" * identifier))) )) & identifier)) )))) ;)) })) (return_statement "return offset + uVar5;" return (binary_expression "offset + uVar5" identifier + identifier) ;) (ERROR "}" }))
(translation_unit "long FUN_0030f150(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)\n\n{\n  ulong uVar1;\n  uint *__dest;\n  size_t __n;\n  long *plVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  long lVar8;\n  long local_50;\n  ulong local_48;\n  undefined1 local_40;\n  \n  if ((param_6 - 1 & param_4) != 0) {\n                    \n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }\n  __n = param_1[4];\n  uVar7 = (ulong)param_6;\n  uVar1 = __n + 8;\n  uVar6 = uVar1;\n  if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }\n  uVar3 = (int)uVar6 - 4;\n  *(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  uVar3 = ((int)param_4 - param_7) + 4;\n  *(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  __dest = (uint *)(param_2 + 8 + param_4);\n  memcpy(__dest,(void *)param_1[3],__n);\n  if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }\n  if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }\n  if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }\n  return param_4 + uVar6;\n}\n\n" (function_definition "long FUN_0030f150(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)\n\n{\n  ulong uVar1;\n  uint *__dest;\n  size_t __n;\n  long *plVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  long lVar8;\n  long local_50;\n  ulong local_48;\n  undefined1 local_40;\n  \n  if ((param_6 - 1 & param_4) != 0) {\n                    \n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }\n  __n = param_1[4];\n  uVar7 = (ulong)param_6;\n  uVar1 = __n + 8;\n  uVar6 = uVar1;\n  if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }\n  uVar3 = (int)uVar6 - 4;\n  *(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  uVar3 = ((int)param_4 - param_7) + 4;\n  *(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  __dest = (uint *)(param_2 + 8 + param_4);\n  memcpy(__dest,(void *)param_1[3],__n);\n  if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }\n  if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }\n  if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }\n  return param_4 + uVar6;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_0030f150(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)" identifier (parameter_list "(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "long param_5" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "undefined1 param_8" type_identifier identifier) , (parameter_declaration "long param_9" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ulong uVar1;\n  uint *__dest;\n  size_t __n;\n  long *plVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  long lVar8;\n  long local_50;\n  ulong local_48;\n  undefined1 local_40;\n  \n  if ((param_6 - 1 & param_4) != 0) {\n                    \n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }\n  __n = param_1[4];\n  uVar7 = (ulong)param_6;\n  uVar1 = __n + 8;\n  uVar6 = uVar1;\n  if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }\n  uVar3 = (int)uVar6 - 4;\n  *(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  uVar3 = ((int)param_4 - param_7) + 4;\n  *(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  __dest = (uint *)(param_2 + 8 + param_4);\n  memcpy(__dest,(void *)param_1[3],__n);\n  if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }\n  if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }\n  if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }\n  return param_4 + uVar6;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "uint *__dest;" type_identifier (pointer_declarator "*__dest" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_48;" type_identifier identifier ;) (declaration "undefined1 local_40;" type_identifier identifier ;) (if_statement "if ((param_6 - 1 & param_4) != 0) {\n                    \n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }" if (parenthesized_expression "((param_6 - 1 & param_4) != 0)" ( (binary_expression "(param_6 - 1 & param_4) != 0" (parenthesized_expression "(param_6 - 1 & param_4)" ( (binary_expression "param_6 - 1 & param_4" (binary_expression "param_6 - 1" identifier - number_literal) & identifier) )) != number_literal) )) (compound_statement "{\n                    \n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }" { (expression_statement "FUN_001e9890("../../gold/ehframe.cc",0x165,"write");" (call_expression "FUN_001e9890("../../gold/ehframe.cc",0x165,"write")" identifier (argument_list "("../../gold/ehframe.cc",0x165,"write")" ( (string_literal ""../../gold/ehframe.cc"" " string_content ") , number_literal , (string_literal ""write"" " string_content ") ))) ;) })) (expression_statement "__n = param_1[4];" (assignment_expression "__n = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = (ulong)param_6;" (assignment_expression "uVar7 = (ulong)param_6" identifier = (cast_expression "(ulong)param_6" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "uVar1 = __n + 8;" (assignment_expression "uVar1 = __n + 8" identifier = (binary_expression "__n + 8" identifier + number_literal)) ;) (expression_statement "uVar6 = uVar1;" (assignment_expression "uVar6 = uVar1" identifier = identifier) ;) (if_statement "if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }" { (expression_statement "uVar6 = uVar7 + 7 + __n & -uVar7;" (assignment_expression "uVar6 = uVar7 + 7 + __n & -uVar7" identifier = (binary_expression "uVar7 + 7 + __n & -uVar7" (binary_expression "uVar7 + 7 + __n" (binary_expression "uVar7 + 7" identifier + number_literal) + identifier) & (unary_expression "-uVar7" - identifier))) ;) })) (expression_statement "uVar3 = (int)uVar6 - 4;" (assignment_expression "uVar3 = (int)uVar6 - 4" identifier = (binary_expression "(int)uVar6 - 4" (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal)) ;) (expression_statement "*(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "*(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (pointer_expression "*(uint *)(param_2 + param_4)" * (cast_expression "(uint *)(param_2 + param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + param_4)" ( (binary_expression "param_2 + param_4" identifier + identifier) )))) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 * 0x1000000" identifier * number_literal))) ;) (expression_statement "uVar3 = ((int)param_4 - param_7) + 4;" (assignment_expression "uVar3 = ((int)param_4 - param_7) + 4" identifier = (binary_expression "((int)param_4 - param_7) + 4" (parenthesized_expression "((int)param_4 - param_7)" ( (binary_expression "(int)param_4 - param_7" (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier) - identifier) )) + number_literal)) ;) (expression_statement "*(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "*(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (pointer_expression "*(uint *)(param_2 + 4 + param_4)" * (cast_expression "(uint *)(param_2 + 4 + param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4 + param_4)" ( (binary_expression "param_2 + 4 + param_4" (binary_expression "param_2 + 4" identifier + number_literal) + identifier) )))) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 * 0x1000000" identifier * number_literal))) ;) (expression_statement "__dest = (uint *)(param_2 + 8 + param_4);" (assignment_expression "__dest = (uint *)(param_2 + 8 + param_4)" identifier = (cast_expression "(uint *)(param_2 + 8 + param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8 + param_4)" ( (binary_expression "param_2 + 8 + param_4" (binary_expression "param_2 + 8" identifier + number_literal) + identifier) )))) ;) (expression_statement "memcpy(__dest,(void *)param_1[3],__n);" (call_expression "memcpy(__dest,(void *)param_1[3],__n)" identifier (argument_list "(__dest,(void *)param_1[3],__n)" ( identifier , (cast_expression "(void *)param_1[3]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ])) , identifier ))) ;) (if_statement "if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }" if (parenthesized_expression "(*param_1 == 0)" ( (binary_expression "*param_1 == 0" (pointer_expression "*param_1" * identifier) == number_literal) )) (compound_statement "{\n    if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }" { (if_statement "if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }" if (parenthesized_expression "(*(long *)__dest != 0)" ( (binary_expression "*(long *)__dest != 0" (pointer_expression "*(long *)__dest" * (cast_expression "(long *)__dest" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }" { (expression_statement "FUN_001e9890("../../gold/ehframe.cc",0x182,"write");" (call_expression "FUN_001e9890("../../gold/ehframe.cc",0x182,"write")" identifier (argument_list "("../../gold/ehframe.cc",0x182,"write")" ( (string_literal ""../../gold/ehframe.cc"" " string_content ") , number_literal , (string_literal ""write"" " string_content ") ))) ;) })) (expression_statement "plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);" (assignment_expression "plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18)" identifier = (pointer_expression "*(long **)(PTR_DAT_004ba7c8 + 0x18)" * (cast_expression "(long **)(PTR_DAT_004ba7c8 + 0x18)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR_DAT_004ba7c8 + 0x18)" ( (binary_expression "PTR_DAT_004ba7c8 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }" if (parenthesized_expression "(plVar2 == (long *)0x0)" ( (binary_expression "plVar2 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }" { (expression_statement "FUN_001e9890("../../gold/parameters.h",0x69,"target");" (call_expression "FUN_001e9890("../../gold/parameters.h",0x69,"target")" identifier (argument_list "("../../gold/parameters.h",0x69,"target")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""target"" " string_content ") ))) ;) })) (expression_statement "(**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);" (call_expression "(**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48)" (parenthesized_expression "(**(code **)(*plVar2 + 0x48))" ( (pointer_expression "**(code **)(*plVar2 + 0x48)" * (pointer_expression "*(code **)(*plVar2 + 0x48)" * (cast_expression "(code **)(*plVar2 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0x48)" ( (binary_expression "*plVar2 + 0x48" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(plVar2,param_1[1],__dest,&local_50,&local_48)" ( identifier , (subscript_expression "param_1[1]" identifier [ number_literal ]) , identifier , (pointer_expression "&local_50" & identifier) , (pointer_expression "&local_48" & identifier) ))) ;) (expression_statement "lVar8 = ((local_50 + -8) - param_5) - param_4;" (assignment_expression "lVar8 = ((local_50 + -8) - param_5) - param_4" identifier = (binary_expression "((local_50 + -8) - param_5) - param_4" (parenthesized_expression "((local_50 + -8) - param_5)" ( (binary_expression "(local_50 + -8) - param_5" (parenthesized_expression "(local_50 + -8)" ( (binary_expression "local_50 + -8" identifier + number_literal) )) - identifier) )) - identifier)) ;) (expression_statement "uVar3 = (uint)lVar8;" (assignment_expression "uVar3 = (uint)lVar8" identifier = (cast_expression "(uint)lVar8" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }" if (parenthesized_expression "(((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff)))" ( (binary_expression "((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))" (parenthesized_expression "((int)uVar3 != lVar8)" ( (binary_expression "(int)uVar3 != lVar8" (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier) != identifier) )) || (parenthesized_expression "(local_48 != (local_48 & 0xffffffff))" ( (binary_expression "local_48 != (local_48 & 0xffffffff)" identifier != (parenthesized_expression "(local_48 & 0xffffffff)" ( (binary_expression "local_48 & 0xffffffff" identifier & number_literal) ))) ))) )) (compound_statement "{\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }" { (expression_statement "uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");" (assignment_expression "uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail")" identifier = (call_expression "gettext("overflow in PLT unwind data; unwinding through PLT may fail")" identifier (argument_list "("overflow in PLT unwind data; unwinding through PLT may fail")" ( (string_literal ""overflow in PLT unwind data; unwinding through PLT may fail"" " string_content ") )))) ;) (expression_statement "FUN_001e15a0(uVar4);" (call_expression "FUN_001e15a0(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) })) (expression_statement "uVar5 = (uint)local_48;" (assignment_expression "uVar5 = (uint)local_48" identifier = (cast_expression "(uint)local_48" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;" (assignment_expression "*__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (pointer_expression "*__dest" * identifier) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x18" identifier << number_literal))) ;) (expression_statement "*(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;" (assignment_expression "*(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18" (pointer_expression "*(uint *)(param_2 + 0xc + param_4)" * (cast_expression "(uint *)(param_2 + 0xc + param_4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc + param_4)" ( (binary_expression "param_2 + 0xc + param_4" (binary_expression "param_2 + 0xc" identifier + number_literal) + identifier) )))) = (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8" (binary_expression "uVar5 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar5 & 0xff0000) >> 8" (parenthesized_expression "(uVar5 & 0xff0000)" ( (binary_expression "uVar5 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar5 & 0xff00) << 8" (parenthesized_expression "(uVar5 & 0xff00)" ( (binary_expression "uVar5 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar5 << 0x18" identifier << number_literal))) ;) })) (if_statement "if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }" if (parenthesized_expression "(uVar1 < uVar6)" ( (binary_expression "uVar1 < uVar6" identifier < identifier) )) (compound_statement "{\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }" { (expression_statement "memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);" (call_expression "memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8)" identifier (argument_list "((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8)" ( (cast_expression "(void *)(uVar1 + param_4 + param_2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar1 + param_4 + param_2)" ( (binary_expression "uVar1 + param_4 + param_2" (binary_expression "uVar1 + param_4" identifier + identifier) + identifier) ))) , number_literal , (binary_expression "(uVar6 - __n) - 8" (parenthesized_expression "(uVar6 - __n)" ( (binary_expression "uVar6 - __n" identifier - identifier) )) - number_literal) ))) ;) })) (if_statement "if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }" if (parenthesized_expression "((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0'))" ( (binary_expression "(param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')" (parenthesized_expression "(param_9 != 0)" ( (binary_expression "param_9 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(char *)(param_9 + 0x60) == '\0')" ( (binary_expression "*(char *)(param_9 + 0x60) == '\0'" (pointer_expression "*(char *)(param_9 + 0x60)" * (cast_expression "(char *)(param_9 + 0x60)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_9 + 0x60)" ( (binary_expression "param_9 + 0x60" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }" { (expression_statement "local_48 = param_3 + param_4;" (assignment_expression "local_48 = param_3 + param_4" identifier = (binary_expression "param_3 + param_4" identifier + identifier)) ;) (expression_statement "local_40 = param_8;" (assignment_expression "local_40 = param_8" identifier = identifier) ;) (expression_statement "FUN_0030eb10(param_9 + 0x48,&local_48);" (call_expression "FUN_0030eb10(param_9 + 0x48,&local_48)" identifier (argument_list "(param_9 + 0x48,&local_48)" ( (binary_expression "param_9 + 0x48" identifier + number_literal) , (pointer_expression "&local_48" & identifier) ))) ;) })) (return_statement "return param_4 + uVar6;" return (binary_expression "param_4 + uVar6" identifier + identifier) ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) & IDENT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT + LIT) + IDENT) & (unary_expression - IDENT))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - IDENT) )) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) IDENT)) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , IDENT , (pointer_expression & IDENT) , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) - IDENT) )) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != IDENT) )) || (parenthesized_expression ( (binary_expression IDENT != (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + IDENT) ))) , LIT , (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - LIT) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression & IDENT) ))) ;) })) (return_statement return (binary_expression IDENT + IDENT) ;) })))
(function_definition "long FUN_0030f150(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)\n\n{\n  ulong uVar1;\n  uint *__dest;\n  size_t __n;\n  long *plVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  long lVar8;\n  long local_50;\n  ulong local_48;\n  undefined1 local_40;\n  \n  if ((param_6 - 1 & param_4) != 0) {\n                    \n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }\n  __n = param_1[4];\n  uVar7 = (ulong)param_6;\n  uVar1 = __n + 8;\n  uVar6 = uVar1;\n  if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }\n  uVar3 = (int)uVar6 - 4;\n  *(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  uVar3 = ((int)param_4 - param_7) + 4;\n  *(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  __dest = (uint *)(param_2 + 8 + param_4);\n  memcpy(__dest,(void *)param_1[3],__n);\n  if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }\n  if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }\n  if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }\n  return param_4 + uVar6;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_0030f150(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)" (identifier "FUN_0030f150") (parameter_list "(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,\n                 int param_7,undefined1 param_8,long param_9)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "ulong param_4" (type_identifier "ulong") (identifier "param_4")) (, ",") (parameter_declaration "long param_5" (sized_type_specifier "long" (long "long")) (identifier "param_5")) (, ",") (parameter_declaration "uint param_6" (type_identifier "uint") (identifier "param_6")) (, ",") (parameter_declaration "int param_7" (primitive_type "int") (identifier "param_7")) (, ",") (parameter_declaration "undefined1 param_8" (type_identifier "undefined1") (identifier "param_8")) (, ",") (parameter_declaration "long param_9" (sized_type_specifier "long" (long "long")) (identifier "param_9")) () ")"))) (compound_statement "{\n  ulong uVar1;\n  uint *__dest;\n  size_t __n;\n  long *plVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  uint uVar5;\n  ulong uVar6;\n  ulong uVar7;\n  long lVar8;\n  long local_50;\n  ulong local_48;\n  undefined1 local_40;\n  \n  if ((param_6 - 1 & param_4) != 0) {\n                    \n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }\n  __n = param_1[4];\n  uVar7 = (ulong)param_6;\n  uVar1 = __n + 8;\n  uVar6 = uVar1;\n  if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }\n  uVar3 = (int)uVar6 - 4;\n  *(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  uVar3 = ((int)param_4 - param_7) + 4;\n  *(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;\n  __dest = (uint *)(param_2 + 8 + param_4);\n  memcpy(__dest,(void *)param_1[3],__n);\n  if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }\n  if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }\n  if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }\n  return param_4 + uVar6;\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "uint *__dest;" (type_identifier "uint") (pointer_declarator "*__dest" (* "*") (identifier "__dest")) (; ";")) (declaration "size_t __n;" (primitive_type "size_t") (identifier "__n") (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "ulong uVar6;" (type_identifier "ulong") (identifier "uVar6") (; ";")) (declaration "ulong uVar7;" (type_identifier "ulong") (identifier "uVar7") (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "long local_50;" (sized_type_specifier "long" (long "long")) (identifier "local_50") (; ";")) (declaration "ulong local_48;" (type_identifier "ulong") (identifier "local_48") (; ";")) (declaration "undefined1 local_40;" (type_identifier "undefined1") (identifier "local_40") (; ";")) (if_statement "if ((param_6 - 1 & param_4) != 0) {\n                    \n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }" (if "if") (parenthesized_expression "((param_6 - 1 & param_4) != 0)" (( "(") (binary_expression "(param_6 - 1 & param_4) != 0" (parenthesized_expression "(param_6 - 1 & param_4)" (( "(") (binary_expression "param_6 - 1 & param_4" (binary_expression "param_6 - 1" (identifier "param_6") (- "-") (number_literal "1")) (& "&") (identifier "param_4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");\n  }" ({ "{") (expression_statement "FUN_001e9890("../../gold/ehframe.cc",0x165,"write");" (call_expression "FUN_001e9890("../../gold/ehframe.cc",0x165,"write")" (identifier "FUN_001e9890") (argument_list "("../../gold/ehframe.cc",0x165,"write")" (( "(") (string_literal ""../../gold/ehframe.cc"" (" """) (string_content "../../gold/ehframe.cc") (" """)) (, ",") (number_literal "0x165") (, ",") (string_literal ""write"" (" """) (string_content "write") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "__n = param_1[4];" (assignment_expression "__n = param_1[4]" (identifier "__n") (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "uVar7 = (ulong)param_6;" (assignment_expression "uVar7 = (ulong)param_6" (identifier "uVar7") (= "=") (cast_expression "(ulong)param_6" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "param_6"))) (; ";")) (expression_statement "uVar1 = __n + 8;" (assignment_expression "uVar1 = __n + 8" (identifier "uVar1") (= "=") (binary_expression "__n + 8" (identifier "__n") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "uVar6 = uVar1;" (assignment_expression "uVar6 = uVar1" (identifier "uVar6") (= "=") (identifier "uVar1")) (; ";")) (if_statement "if (uVar7 != 0) {\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }" (if "if") (parenthesized_expression "(uVar7 != 0)" (( "(") (binary_expression "uVar7 != 0" (identifier "uVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar6 = uVar7 + 7 + __n & -uVar7;\n  }" ({ "{") (expression_statement "uVar6 = uVar7 + 7 + __n & -uVar7;" (assignment_expression "uVar6 = uVar7 + 7 + __n & -uVar7" (identifier "uVar6") (= "=") (binary_expression "uVar7 + 7 + __n & -uVar7" (binary_expression "uVar7 + 7 + __n" (binary_expression "uVar7 + 7" (identifier "uVar7") (+ "+") (number_literal "7")) (+ "+") (identifier "__n")) (& "&") (unary_expression "-uVar7" (- "-") (identifier "uVar7")))) (; ";")) (} "}"))) (expression_statement "uVar3 = (int)uVar6 - 4;" (assignment_expression "uVar3 = (int)uVar6 - 4" (identifier "uVar3") (= "=") (binary_expression "(int)uVar6 - 4" (cast_expression "(int)uVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar6")) (- "-") (number_literal "4"))) (; ";")) (expression_statement "*(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "*(uint *)(param_2 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (pointer_expression "*(uint *)(param_2 + param_4)" (* "*") (cast_expression "(uint *)(param_2 + param_4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + param_4)" (( "(") (binary_expression "param_2 + param_4" (identifier "param_2") (+ "+") (identifier "param_4")) () ")")))) (= "=") (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" (identifier "uVar3") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" (( "(") (binary_expression "uVar3 & 0xff0000" (identifier "uVar3") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" (( "(") (binary_expression "uVar3 & 0xff00" (identifier "uVar3") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar3 * 0x1000000" (identifier "uVar3") (* "*") (number_literal "0x1000000")))) (; ";")) (expression_statement "uVar3 = ((int)param_4 - param_7) + 4;" (assignment_expression "uVar3 = ((int)param_4 - param_7) + 4" (identifier "uVar3") (= "=") (binary_expression "((int)param_4 - param_7) + 4" (parenthesized_expression "((int)param_4 - param_7)" (( "(") (binary_expression "(int)param_4 - param_7" (cast_expression "(int)param_4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_4")) (- "-") (identifier "param_7")) () ")")) (+ "+") (number_literal "4"))) (; ";")) (expression_statement "*(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;" (assignment_expression "*(uint *)(param_2 + 4 + param_4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (pointer_expression "*(uint *)(param_2 + 4 + param_4)" (* "*") (cast_expression "(uint *)(param_2 + 4 + param_4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4 + param_4)" (( "(") (binary_expression "param_2 + 4 + param_4" (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) (+ "+") (identifier "param_4")) () ")")))) (= "=") (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" (identifier "uVar3") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" (( "(") (binary_expression "uVar3 & 0xff0000" (identifier "uVar3") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" (( "(") (binary_expression "uVar3 & 0xff00" (identifier "uVar3") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar3 * 0x1000000" (identifier "uVar3") (* "*") (number_literal "0x1000000")))) (; ";")) (expression_statement "__dest = (uint *)(param_2 + 8 + param_4);" (assignment_expression "__dest = (uint *)(param_2 + 8 + param_4)" (identifier "__dest") (= "=") (cast_expression "(uint *)(param_2 + 8 + param_4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8 + param_4)" (( "(") (binary_expression "param_2 + 8 + param_4" (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) (+ "+") (identifier "param_4")) () ")")))) (; ";")) (expression_statement "memcpy(__dest,(void *)param_1[3],__n);" (call_expression "memcpy(__dest,(void *)param_1[3],__n)" (identifier "memcpy") (argument_list "(__dest,(void *)param_1[3],__n)" (( "(") (identifier "__dest") (, ",") (cast_expression "(void *)param_1[3]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (, ",") (identifier "__n") () ")"))) (; ";")) (if_statement "if (*param_1 == 0) {\n    if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }" (if "if") (parenthesized_expression "(*param_1 == 0)" (( "(") (binary_expression "*param_1 == 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }\n    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);\n    if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }\n    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);\n    lVar8 = ((local_50 + -8) - param_5) - param_4;\n    uVar3 = (uint)lVar8;\n    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }\n    uVar5 = (uint)local_48;\n    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;\n    *(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;\n  }" ({ "{") (if_statement "if (*(long *)__dest != 0) {\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }" (if "if") (parenthesized_expression "(*(long *)__dest != 0)" (( "(") (binary_expression "*(long *)__dest != 0" (pointer_expression "*(long *)__dest" (* "*") (cast_expression "(long *)__dest" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "__dest"))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");\n    }" ({ "{") (expression_statement "FUN_001e9890("../../gold/ehframe.cc",0x182,"write");" (call_expression "FUN_001e9890("../../gold/ehframe.cc",0x182,"write")" (identifier "FUN_001e9890") (argument_list "("../../gold/ehframe.cc",0x182,"write")" (( "(") (string_literal ""../../gold/ehframe.cc"" (" """) (string_content "../../gold/ehframe.cc") (" """)) (, ",") (number_literal "0x182") (, ",") (string_literal ""write"" (" """) (string_content "write") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);" (assignment_expression "plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18)" (identifier "plVar2") (= "=") (pointer_expression "*(long **)(PTR_DAT_004ba7c8 + 0x18)" (* "*") (cast_expression "(long **)(PTR_DAT_004ba7c8 + 0x18)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(PTR_DAT_004ba7c8 + 0x18)" (( "(") (binary_expression "PTR_DAT_004ba7c8 + 0x18" (identifier "PTR_DAT_004ba7c8") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if (plVar2 == (long *)0x0) {\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }" (if "if") (parenthesized_expression "(plVar2 == (long *)0x0)" (( "(") (binary_expression "plVar2 == (long *)0x0" (identifier "plVar2") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n      FUN_001e9890("../../gold/parameters.h",0x69,"target");\n    }" ({ "{") (expression_statement "FUN_001e9890("../../gold/parameters.h",0x69,"target");" (call_expression "FUN_001e9890("../../gold/parameters.h",0x69,"target")" (identifier "FUN_001e9890") (argument_list "("../../gold/parameters.h",0x69,"target")" (( "(") (string_literal ""../../gold/parameters.h"" (" """) (string_content "../../gold/parameters.h") (" """)) (, ",") (number_literal "0x69") (, ",") (string_literal ""target"" (" """) (string_content "target") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "(**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);" (call_expression "(**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48)" (parenthesized_expression "(**(code **)(*plVar2 + 0x48))" (( "(") (pointer_expression "**(code **)(*plVar2 + 0x48)" (* "*") (pointer_expression "*(code **)(*plVar2 + 0x48)" (* "*") (cast_expression "(code **)(*plVar2 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar2 + 0x48)" (( "(") (binary_expression "*plVar2 + 0x48" (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "(plVar2,param_1[1],__dest,&local_50,&local_48)" (( "(") (identifier "plVar2") (, ",") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (, ",") (identifier "__dest") (, ",") (pointer_expression "&local_50" (& "&") (identifier "local_50")) (, ",") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))) (; ";")) (expression_statement "lVar8 = ((local_50 + -8) - param_5) - param_4;" (assignment_expression "lVar8 = ((local_50 + -8) - param_5) - param_4" (identifier "lVar8") (= "=") (binary_expression "((local_50 + -8) - param_5) - param_4" (parenthesized_expression "((local_50 + -8) - param_5)" (( "(") (binary_expression "(local_50 + -8) - param_5" (parenthesized_expression "(local_50 + -8)" (( "(") (binary_expression "local_50 + -8" (identifier "local_50") (+ "+") (number_literal "-8")) () ")")) (- "-") (identifier "param_5")) () ")")) (- "-") (identifier "param_4"))) (; ";")) (expression_statement "uVar3 = (uint)lVar8;" (assignment_expression "uVar3 = (uint)lVar8" (identifier "uVar3") (= "=") (cast_expression "(uint)lVar8" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar8"))) (; ";")) (if_statement "if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }" (if "if") (parenthesized_expression "(((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff)))" (( "(") (binary_expression "((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))" (parenthesized_expression "((int)uVar3 != lVar8)" (( "(") (binary_expression "(int)uVar3 != lVar8" (cast_expression "(int)uVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar3")) (!= "!=") (identifier "lVar8")) () ")")) (|| "||") (parenthesized_expression "(local_48 != (local_48 & 0xffffffff))" (( "(") (binary_expression "local_48 != (local_48 & 0xffffffff)" (identifier "local_48") (!= "!=") (parenthesized_expression "(local_48 & 0xffffffff)" (( "(") (binary_expression "local_48 & 0xffffffff" (identifier "local_48") (& "&") (number_literal "0xffffffff")) () ")"))) () ")"))) () ")")) (compound_statement "{\n      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");\n      FUN_001e15a0(uVar4);\n    }" ({ "{") (expression_statement "uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");" (assignment_expression "uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail")" (identifier "uVar4") (= "=") (call_expression "gettext("overflow in PLT unwind data; unwinding through PLT may fail")" (identifier "gettext") (argument_list "("overflow in PLT unwind data; unwinding through PLT may fail")" (( "(") (string_literal ""overflow in PLT unwind data; unwinding through PLT may fail"" (" """) (string_content "overflow in PLT unwind data; unwinding through PLT may fail") (" """)) () ")")))) (; ";")) (expression_statement "FUN_001e15a0(uVar4);" (call_expression "FUN_001e15a0(uVar4)" (identifier "FUN_001e15a0") (argument_list "(uVar4)" (( "(") (identifier "uVar4") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar5 = (uint)local_48;" (assignment_expression "uVar5 = (uint)local_48" (identifier "uVar5") (= "=") (cast_expression "(uint)local_48" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "local_48"))) (; ";")) (expression_statement "*__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;" (assignment_expression "*__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (pointer_expression "*__dest" (* "*") (identifier "__dest")) (= "=") (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" (identifier "uVar3") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" (( "(") (binary_expression "uVar3 & 0xff0000" (identifier "uVar3") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" (( "(") (binary_expression "uVar3 & 0xff00" (identifier "uVar3") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar3 << 0x18" (identifier "uVar3") (<< "<<") (number_literal "0x18")))) (; ";")) (expression_statement "*(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;" (assignment_expression "*(uint *)(param_2 + 0xc + param_4) =\n         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18" (pointer_expression "*(uint *)(param_2 + 0xc + param_4)" (* "*") (cast_expression "(uint *)(param_2 + 0xc + param_4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc + param_4)" (( "(") (binary_expression "param_2 + 0xc + param_4" (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) (+ "+") (identifier "param_4")) () ")")))) (= "=") (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8" (binary_expression "uVar5 >> 0x18" (identifier "uVar5") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar5 & 0xff0000) >> 8" (parenthesized_expression "(uVar5 & 0xff0000)" (( "(") (binary_expression "uVar5 & 0xff0000" (identifier "uVar5") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar5 & 0xff00) << 8" (parenthesized_expression "(uVar5 & 0xff00)" (( "(") (binary_expression "uVar5 & 0xff00" (identifier "uVar5") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar5 << 0x18" (identifier "uVar5") (<< "<<") (number_literal "0x18")))) (; ";")) (} "}"))) (if_statement "if (uVar1 < uVar6) {\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }" (if "if") (parenthesized_expression "(uVar1 < uVar6)" (( "(") (binary_expression "uVar1 < uVar6" (identifier "uVar1") (< "<") (identifier "uVar6")) () ")")) (compound_statement "{\n    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);\n  }" ({ "{") (expression_statement "memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);" (call_expression "memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8)" (identifier "memset") (argument_list "((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8)" (( "(") (cast_expression "(void *)(uVar1 + param_4 + param_2)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar1 + param_4 + param_2)" (( "(") (binary_expression "uVar1 + param_4 + param_2" (binary_expression "uVar1 + param_4" (identifier "uVar1") (+ "+") (identifier "param_4")) (+ "+") (identifier "param_2")) () ")"))) (, ",") (number_literal "0") (, ",") (binary_expression "(uVar6 - __n) - 8" (parenthesized_expression "(uVar6 - __n)" (( "(") (binary_expression "uVar6 - __n" (identifier "uVar6") (- "-") (identifier "__n")) () ")")) (- "-") (number_literal "8")) () ")"))) (; ";")) (} "}"))) (if_statement "if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }" (if "if") (parenthesized_expression "((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0'))" (( "(") (binary_expression "(param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')" (parenthesized_expression "(param_9 != 0)" (( "(") (binary_expression "param_9 != 0" (identifier "param_9") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(char *)(param_9 + 0x60) == '\0')" (( "(") (binary_expression "*(char *)(param_9 + 0x60) == '\0'" (pointer_expression "*(char *)(param_9 + 0x60)" (* "*") (cast_expression "(char *)(param_9 + 0x60)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_9 + 0x60)" (( "(") (binary_expression "param_9 + 0x60" (identifier "param_9") (+ "+") (number_literal "0x60")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n    local_48 = param_3 + param_4;\n    local_40 = param_8;\n    FUN_0030eb10(param_9 + 0x48,&local_48);\n  }" ({ "{") (expression_statement "local_48 = param_3 + param_4;" (assignment_expression "local_48 = param_3 + param_4" (identifier "local_48") (= "=") (binary_expression "param_3 + param_4" (identifier "param_3") (+ "+") (identifier "param_4"))) (; ";")) (expression_statement "local_40 = param_8;" (assignment_expression "local_40 = param_8" (identifier "local_40") (= "=") (identifier "param_8")) (; ";")) (expression_statement "FUN_0030eb10(param_9 + 0x48,&local_48);" (call_expression "FUN_0030eb10(param_9 + 0x48,&local_48)" (identifier "FUN_0030eb10") (argument_list "(param_9 + 0x48,&local_48)" (( "(") (binary_expression "param_9 + 0x48" (identifier "param_9") (+ "+") (number_literal "0x48")) (, ",") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))) (; ";")) (} "}"))) (return_statement "return param_4 + uVar6;" (return "return") (binary_expression "param_4 + uVar6" (identifier "param_4") (+ "+") (identifier "uVar6")) (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original name: write<64, true>
   DWARF original prototype: section_offset_type write<64,_true>(Fde * this, uchar * oview,
   section_offset_type output_offset, section_offset_type offset, uint64_t address, uint addralign,
   section_offset_type cie_offset, uchar fde_encoding, Eh_frame_hdr * eh_frame_hdr) */

type_1 __thiscall
gold::Fde::write<64,_true>
          (Fde *this,type_6 *var_6,type_1 var_21,type_1 var_2,
          uint64_t var_11,type_2 var_1,type_1 cie_offset,type_6 fde_encoding,
          type_8 *var_20)

{
  type_4 var_17;
  type_2 *__dest;
  size_t var_4;
  type_3 *var_9;
  type_2 var_7;
  char *format;
  type_2 var_16;
  type_4 var_18;
  type_4 var_5;
  long var_12;
  uint64_t var_10;
  type_5 var_13;
  type_6 local_40;
  
  if (((type_4)(var_1 - 1) & var_2) != 0) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/ehframe.cc",0x165,"write");
  }
  var_4 = (this->contents_)._M_string_length;
  var_5 = (type_4)var_1;
  var_17 = var_4 + 8;
  var_18 = var_17;
  if (var_5 != 0) {
    var_18 = var_5 + 7 + var_4 & -var_5;
  }
  var_7 = (int)var_18 - 4;
  *(type_2 *)(var_6 + var_2) =
       var_7 >> 0x18 | (var_7 & 0xff0000) >> 8 | (var_7 & 0xff00) << 8 | var_7 * 0x1000000;
  var_7 = ((int)var_2 - (int)cie_offset) + 4;
  *(type_2 *)(var_6 + var_2 + 4) =
       var_7 >> 0x18 | (var_7 & 0xff0000) >> 8 | (var_7 & 0xff00) << 8 | var_7 * 0x1000000;
  __dest = (type_2 *)(var_6 + var_2 + 8);
  var_8(__dest,(this->contents_)._M_dataplus._M_p,var_4);
  if (this->object_ == (type_7 *)0x0) {
    if (*(long *)__dest != 0) {
                    /* WARNING: Subroutine does not return */
      var_3("../../gold/ehframe.cc",0x182,"write");
    }
    var_9 = parameters->target_;
    if (var_9 == (type_3 *)0x0) {
                    /* WARNING: Subroutine does not return */
      var_3("../../gold/parameters.h",0x69,"target");
    }
    (*var_9->_vptr_Target[9])(var_9,(this->u_).from_linker.plt,__dest,&var_10,&var_13);
    var_12 = ((var_10 - 8) - var_11) - var_2;
    var_7 = (type_2)var_12;
    if (((int)var_7 != var_12) || (var_13 != (var_13 & 0xffffffffU))) {
      format = (char *)var_14("overflow in PLT unwind data; unwinding through PLT may fail");
      var_15(format);
    }
    var_16 = (type_2)var_13;
    *__dest = var_7 >> 0x18 | (var_7 & 0xff0000) >> 8 | (var_7 & 0xff00) << 8 | var_7 << 0x18;
    *(type_2 *)(var_6 + var_2 + 0xc) =
         var_16 >> 0x18 | (var_16 & 0xff0000) >> 8 | (var_16 & 0xff00) << 8 | var_16 << 0x18;
  }
  if (var_17 < var_18) {
    var_19(var_6 + var_17 + var_2,0,(var_18 - var_4) - 8);
  }
  if ((var_20 != (type_8 *)0x0) &&
     (var_20->any_unrecognized_eh_frame_sections_ == false)) {
    var_13 = var_21 + var_2;
    local_40 = fde_encoding;
    std::
    vector<std::var_22<var_23,var_24>,_std::allocator<std::var_22<var_23,var_24>var_25>var_25>
    ::emplace_back<std::var_22<var_23,var_24>var_25>
              (&var_20->fde_offsets_,(var_22<var_23,var_24> *)&var_13);
  }
  return var_2 + var_18;
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) 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: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))) right: (number_literal))) 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: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)) right: (unary_expression argument: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier))) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (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: (identifier))))) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (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: (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (number_literal))) 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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal)) (identifier) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (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 (string_literal (string_content)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (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: (identifier))))) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)))) (number_literal) (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (char_literal (escape_sequence)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (identifier))))))) (return_statement (binary_expression left: (identifier) right: (identifier))))))

long MASKED(long *param_1,long param_2,long param_3,ulong param_4,long param_5,uint param_6,
                 int param_7,undefined1 param_8,long param_9)

{
  ulong uVar1;
  uint *__dest;
  size_t __n;
  long *plVar2;
  uint uVar3;
  undefined8 uVar4;
  uint uVar5;
  ulong uVar6;
  ulong uVar7;
  long lVar8;
  long local_50;
  ulong local_48;
  undefined1 local_40;
  
  if ((param_6 - 1 & param_4) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_001e9890("../../gold/ehframe.cc",0x165,"write");
  }
  __n = param_1[4];
  uVar7 = (ulong)param_6;
  uVar1 = __n + 8;
  uVar6 = uVar1;
  if (uVar7 != 0) {
    uVar6 = uVar7 + 7 + __n & -uVar7;
  }
  uVar3 = (int)uVar6 - 4;
  *(uint *)(param_2 + param_4) =
       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;
  uVar3 = ((int)param_4 - param_7) + 4;
  *(uint *)(param_2 + 4 + param_4) =
       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 * 0x1000000;
  __dest = (uint *)(param_2 + 8 + param_4);
  memcpy(__dest,(void *)param_1[3],__n);
  if (*param_1 == 0) {
    if (*(long *)__dest != 0) {
                    /* WARNING: Subroutine does not return */
      FUN_001e9890("../../gold/ehframe.cc",0x182,"write");
    }
    plVar2 = *(long **)(PTR_DAT_004ba7c8 + 0x18);
    if (plVar2 == (long *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_001e9890("../../gold/parameters.h",0x69,"target");
    }
    (**(code **)(*plVar2 + 0x48))(plVar2,param_1[1],__dest,&local_50,&local_48);
    lVar8 = ((local_50 + -8) - param_5) - param_4;
    uVar3 = (uint)lVar8;
    if (((int)uVar3 != lVar8) || (local_48 != (local_48 & 0xffffffff))) {
      uVar4 = gettext("overflow in PLT unwind data; unwinding through PLT may fail");
      FUN_001e15a0(uVar4);
    }
    uVar5 = (uint)local_48;
    *__dest = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 | uVar3 << 0x18;
    *(uint *)(param_2 + 0xc + param_4) =
         uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 | uVar5 << 0x18;
  }
  if (uVar1 < uVar6) {
    memset((void *)(uVar1 + param_4 + param_2),0,(uVar6 - __n) - 8);
  }
  if ((param_9 != 0) && (*(char *)(param_9 + 0x60) == '\0')) {
    local_48 = param_3 + param_4;
    local_40 = param_8;
    FUN_0030eb10(param_9 + 0x48,&local_48);
  }
  return param_4 + uVar6;
}

