
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* DWARF original prototype: uint64_t do_reloc_addend(Target_x86_64<64> * this, void * arg, uint
   r_type, uint64_t param_3) */

uint64_t __thiscall
anon_unknown.dwarf_32e241::Target_x86_64<64>::do_reloc_addend
          (Target_x86_64<64> *this,void *arg,uint r_type,uint64_t param_4)

{
  int iVar1;
  byte bVar2;
  char *pcVar3;
  Relobj *object;
  uint uVar4;
  size_type sVar5;
  Merged_symbol_value<64> *this_00;
  _Hash_node_base *p_Var6;
  uint uVar7;
  __bucket_type p_Var8;
  __bucket_type p_Var9;
  _Hash_node_base *p_Var10;
  Elf_Addr EVar11;
  
  if (r_type != 0x24) {
                    /* WARNING: Subroutine does not return */
    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1712,"do_reloc_addend");
  }
  pcVar3 = (this->x86_64_info).attributes_section;
  if ((void *)((int)(this->x86_64_info).attributes_vendor - (int)pcVar3 >> 3) <= arg) {
                    /* WARNING: Subroutine does not return */
    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1714,"do_reloc_addend");
  }
  pcVar3 = pcVar3 + (int)arg * 8;
  object = *(Relobj **)pcVar3;
  uVar4 = *(uint *)(pcVar3 + 4);
  sVar5 = object[2].super_Object.name_.field_2._M_allocated_capacity;
  if ((uint)(((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2) *
            -0x33333333) <= uVar4) {
                    /* WARNING: Subroutine does not return */
    gold::do_gold_unreachable("../../gold/object.h",0x8c1,"local_symbol");
  }
  iVar1 = sVar5 + uVar4 * 0x14;
  bVar2 = *(byte *)(iVar1 + 0xb);
  if ((bVar2 & 0x20) == 0) {
                    /* WARNING: Subroutine does not return */
    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1717,"do_reloc_addend");
  }
  if ((char)bVar2 < '\0') {
    return *(uint64_t *)(iVar1 + 0xc);
  }
  if ((bVar2 & 8) == 0) {
                    /* WARNING: Subroutine does not return */
    gold::do_gold_unreachable("../../gold/object.h",0x6ab,"value");
  }
  this_00 = *(Merged_symbol_value<64> **)(iVar1 + 0xc);
  uVar4 = (this_00->output_addresses_)._M_h._M_bucket_count;
  uVar7 = (uint)*(_Hash_node_base **)&this_00->input_value_ % uVar4;
  p_Var9 = (this_00->output_addresses_)._M_h._M_buckets[uVar7];
  if (p_Var9 != (__bucket_type)0x0) {
    p_Var10 = p_Var9->_M_nxt[1]._M_nxt;
    p_Var6 = p_Var9->_M_nxt;
    while (p_Var8 = p_Var6, *(_Hash_node_base **)&this_00->input_value_ != p_Var10) {
      p_Var6 = p_Var8->_M_nxt;
      if ((p_Var6 == (_Hash_node_base *)0x0) ||
         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4))
      goto LAB_0007be54;
    }
    if (p_Var9->_M_nxt != (_Hash_node_base *)0x0) {
      return *(uint64_t *)(p_Var9->_M_nxt + 2);
    }
  }
LAB_0007be54:
  EVar11 = gold::Merged_symbol_value<64>::value_from_output_section
                     (this_00,object,*(uint *)(iVar1 + 8) & 0x7ffffff,this_00->input_value_);
  return EVar11;
}



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

undefined8 FUN_0007bd50(int param_1,uint param_2,int param_3)

{
  byte bVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  uint *puVar5;
  int *piVar6;
  uint uVar7;
  int *piVar8;
  int *piVar9;
  uint uVar10;
  undefined8 uVar11;
  
  if (param_3 != 0x24) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");
  }
  if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");
  }
  piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);
  iVar2 = *piVar9;
  uVar3 = piVar9[1];
  iVar4 = *(int *)(iVar2 + 0xdc);
  if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);
  }
  iVar4 = iVar4 + uVar3 * 0x14;
  bVar1 = *(byte *)(iVar4 + 0xb);
  if ((bVar1 & 0x20) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);
  }
  if ((char)bVar1 < '\0') {
    return *(undefined8 *)(iVar4 + 0xc);
  }
  if ((bVar1 & 8) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);
  }
  puVar5 = *(uint **)(iVar4 + 0xc);
  uVar3 = *puVar5;
  uVar7 = uVar3 % puVar5[5];
  piVar9 = *(int **)(puVar5[4] + uVar7 * 4);
  if (piVar9 != (int *)0x0) {
    uVar10 = ((int *)*piVar9)[1];
    piVar6 = (int *)*piVar9;
    while (piVar8 = piVar6, uVar3 != uVar10) {
      piVar6 = (int *)*piVar8;
      if ((piVar6 == (int *)0x0) ||
         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;
    }
    if (*piVar9 != 0) {
      return *(undefined8 *)(*piVar9 + 8);
    }
  }
LAB_0007be54:
  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);
  return uVar11;
}


CALL 0x00074f02
ADD EAX,0x56e2ab
PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x2c
CMP dword ptr [ESP + 0x48],0x24
MOV EDX,dword ptr [ESP + 0x44]
MOV dword ptr [ESP + 0x14],EAX
MOV EAX,dword ptr [ESP + 0x40]
JNZ 0x0007bee5
MOV ECX,dword ptr [EAX + 0x50]
MOV EAX,dword ptr [EAX + 0x54]
SUB EAX,ECX
SAR EAX,0x3
CMP EDX,EAX
JNC 0x0007bec8
LEA EAX,[ECX + EDX*0x8]
MOV EDI,dword ptr [EAX]
MOV EDX,dword ptr [EAX + 0x4]
MOV ECX,dword ptr [EDI + 0xdc]
MOV EAX,dword ptr [EDI + 0xe0]
SUB EAX,ECX
SAR EAX,0x2
IMUL EAX,EAX,-0x33333333
CMP EDX,EAX
JNC 0x0007beab
LEA EAX,[EDX + EDX*0x4]
LEA ECX,[ECX + EAX*0x4]
MOVZX EAX,byte ptr [ECX + 0xb]
TEST AL,0x20
JZ 0x0007be8e
TEST AL,AL
JS 0x0007be80
TEST AL,0x8
JZ 0x0007bf02
MOV EBP,dword ptr [ECX + 0xc]
MOV EDX,dword ptr [EBP + 0x4]
MOV EAX,dword ptr [EBP]
MOV ESI,dword ptr [EBP + 0x14]
MOV dword ptr [ESP + 0x1c],EDX
XOR EDX,EDX
MOV dword ptr [ESP + 0x18],EAX
MOV dword ptr [ESP + 0x4],EAX
DIV ESI
MOV EAX,dword ptr [EBP + 0x10]
MOV dword ptr [ESP + 0x8],ESI
MOV ESI,dword ptr [EAX + EDX*0x4]
MOV dword ptr [ESP + 0xc],EDX
TEST ESI,ESI
JZ 0x0007be54
MOV EBX,dword ptr [ESI]
MOV dword ptr [ESP + 0x10],EDI
MOV EAX,dword ptr [EBX + 0x4]
MOV EDI,EAX
JMP 0x0007be2b
MOV EAX,dword ptr [EBX]
TEST EAX,EAX
JZ 0x0007be50
MOV EDI,dword ptr [EAX + 0x4]
MOV ESI,EBX
XOR EDX,EDX
MOV EBX,EAX
MOV EAX,EDI
DIV dword ptr [ESP + 0x8]
CMP dword ptr [ESP + 0xc],EDX
JNZ 0x0007be50
CMP dword ptr [ESP + 0x4],EDI
JNZ 0x0007be10
MOV EAX,dword ptr [ESI]
MOV EDI,dword ptr [ESP + 0x10]
TEST EAX,EAX
JZ 0x0007be54
MOV EDX,dword ptr [EAX + 0xc]
MOV EAX,dword ptr [EAX + 0x8]
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDI,dword ptr [ESP + 0x10]
SUB ESP,0xc
PUSH dword ptr [ESP + 0x28]
PUSH dword ptr [ESP + 0x28]
MOV EAX,dword ptr [ECX + 0x8]
AND EAX,0x7ffffff
PUSH EAX
PUSH EDI
PUSH EBP
MOV EBX,dword ptr [ESP + 0x34]
CALL 0x00318fd0
ADD ESP,0x20
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [ECX + 0xc]
MOV EDX,dword ptr [ECX + 0x10]
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
PUSH EDX
MOV EBX,dword ptr [ESP + 0x18]
LEA EAX,[EBX + 0xffe686e0]
PUSH EAX
LEA EAX,[EBX + 0xffe6608e]
PUSH 0x1717
PUSH EAX
CALL 0x002446e0
PUSH ECX
MOV EBX,dword ptr [ESP + 0x18]
LEA EAX,[EBX + 0xffe688b0]
PUSH EAX
LEA EAX,[EBX + 0xffe63385]
PUSH 0x8c1
PUSH EAX
CALL 0x002446e0
PUSH EBX
MOV EBX,dword ptr [ESP + 0x18]
LEA EAX,[EBX + 0xffe686e0]
PUSH EAX
LEA EAX,[EBX + 0xffe6608e]
PUSH 0x1714
PUSH EAX
CALL 0x002446e0
PUSH ESI
MOV EBX,dword ptr [ESP + 0x18]
LEA EAX,[EBX + 0xffe686e0]
PUSH EAX
LEA EAX,[EBX + 0xffe6608e]
PUSH 0x1712
PUSH EAX
CALL 0x002446e0
PUSH EAX
MOV EBX,dword ptr [ESP + 0x18]
LEA EAX,[EBX + 0xffe68a80]
PUSH EAX
LEA EAX,[EBX + 0xffe63385]
PUSH 0x6ab
PUSH EAX
CALL 0x002446e0
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nundefined8 FUN_0007bd50(int param_1,uint param_2,int param_3)\n\n{\n  byte bVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint *puVar5;\n  int *piVar6;\n  uint uVar7;\n  int *piVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined8 uVar11;\n  \n  if (param_3 != 0x24) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);\n  iVar2 = *piVar9;\n  uVar3 = piVar9[1];\n  iVar4 = *(int *)(iVar2 + 0xdc);\n  if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }\n  iVar4 = iVar4 + uVar3 * 0x14;\n  bVar1 = *(byte *)(iVar4 + 0xb);\n  if ((bVar1 & 0x20) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }\n  if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }\n  if ((bVar1 & 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }\n  puVar5 = *(uint **)(iVar4 + 0xc);\n  uVar3 = *puVar5;\n  uVar7 = uVar3 % puVar5[5];\n  piVar9 = *(int **)(puVar5[4] + uVar7 * 4);\n  if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }\nLAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);\n  return uVar11;\n}\n\n" comment (function_definition "undefined8 FUN_0007bd50(int param_1,uint param_2,int param_3)\n\n{\n  byte bVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint *puVar5;\n  int *piVar6;\n  uint uVar7;\n  int *piVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined8 uVar11;\n  \n  if (param_3 != 0x24) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);\n  iVar2 = *piVar9;\n  uVar3 = piVar9[1];\n  iVar4 = *(int *)(iVar2 + 0xdc);\n  if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }\n  iVar4 = iVar4 + uVar3 * 0x14;\n  bVar1 = *(byte *)(iVar4 + 0xb);\n  if ((bVar1 & 0x20) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }\n  if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }\n  if ((bVar1 & 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }\n  puVar5 = *(uint **)(iVar4 + 0xc);\n  uVar3 = *puVar5;\n  uVar7 = uVar3 % puVar5[5];\n  piVar9 = *(int **)(puVar5[4] + uVar7 * 4);\n  if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }\nLAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);\n  return uVar11;\n}" type_identifier (function_declarator "FUN_0007bd50(int param_1,uint param_2,int param_3)" identifier (parameter_list "(int param_1,uint param_2,int param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  byte bVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint *puVar5;\n  int *piVar6;\n  uint uVar7;\n  int *piVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined8 uVar11;\n  \n  if (param_3 != 0x24) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);\n  iVar2 = *piVar9;\n  uVar3 = piVar9[1];\n  iVar4 = *(int *)(iVar2 + 0xdc);\n  if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }\n  iVar4 = iVar4 + uVar3 * 0x14;\n  bVar1 = *(byte *)(iVar4 + 0xb);\n  if ((bVar1 & 0x20) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }\n  if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }\n  if ((bVar1 & 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }\n  puVar5 = *(uint **)(iVar4 + 0xc);\n  uVar3 = *puVar5;\n  uVar7 = uVar3 % puVar5[5];\n  piVar9 = *(int **)(puVar5[4] + uVar7 * 4);\n  if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }\nLAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);\n  return uVar11;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "undefined8 uVar11;" type_identifier identifier ;) (if_statement "if (param_3 != 0x24) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }" if (parenthesized_expression "(param_3 != 0x24)" ( (binary_expression "param_3 != 0x24" identifier != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }" { comment (expression_statement "FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");" (call_expression "FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend")" identifier (argument_list "("../../gold/x86_64.cc",0x1712,"do_reloc_addend")" ( (string_literal ""../../gold/x86_64.cc"" " string_content ") , number_literal , (string_literal ""do_reloc_addend"" " string_content ") ))) ;) })) (if_statement "if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }" if (parenthesized_expression "((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2)" ( (binary_expression "(uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2" (call_expression "(uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3)" ( (binary_expression "*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3" (binary_expression "*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50)" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) - (pointer_expression "*(int *)(param_1 + 0x50)" * (cast_expression "(int *)(param_1 + 0x50)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) ))))) >> number_literal) ))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }" { comment (expression_statement "FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");" (call_expression "FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend")" identifier (argument_list "("../../gold/x86_64.cc",0x1714,"do_reloc_addend")" ( (string_literal ""../../gold/x86_64.cc"" " string_content ") , number_literal , (string_literal ""do_reloc_addend"" " string_content ") ))) ;) })) (expression_statement "piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);" (assignment_expression "piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8)" identifier = (cast_expression "(int *)(*(int *)(param_1 + 0x50) + param_2 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x50) + param_2 * 8)" ( (binary_expression "*(int *)(param_1 + 0x50) + param_2 * 8" (pointer_expression "*(int *)(param_1 + 0x50)" * (cast_expression "(int *)(param_1 + 0x50)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) + (binary_expression "param_2 * 8" identifier * number_literal)) )))) ;) (expression_statement "iVar2 = *piVar9;" (assignment_expression "iVar2 = *piVar9" identifier = (pointer_expression "*piVar9" * identifier)) ;) (expression_statement "uVar3 = piVar9[1];" (assignment_expression "uVar3 = piVar9[1]" identifier = (subscript_expression "piVar9[1]" identifier [ number_literal ])) ;) (expression_statement "iVar4 = *(int *)(iVar2 + 0xdc);" (assignment_expression "iVar4 = *(int *)(iVar2 + 0xdc)" identifier = (pointer_expression "*(int *)(iVar2 + 0xdc)" * (cast_expression "(int *)(iVar2 + 0xdc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0xdc)" ( (binary_expression "iVar2 + 0xdc" identifier + number_literal) ))))) ;) (if_statement "if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }" if (parenthesized_expression "((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3)" ( (binary_expression "(uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3" (call_expression "(uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333)" ( (binary_expression "(*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333" (parenthesized_expression "(*(int *)(iVar2 + 0xe0) - iVar4 >> 2)" ( (binary_expression "*(int *)(iVar2 + 0xe0) - iVar4 >> 2" (binary_expression "*(int *)(iVar2 + 0xe0) - iVar4" (pointer_expression "*(int *)(iVar2 + 0xe0)" * (cast_expression "(int *)(iVar2 + 0xe0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0xe0)" ( (binary_expression "iVar2 + 0xe0" identifier + number_literal) )))) - identifier) >> number_literal) )) * number_literal) ))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }" { comment (expression_statement "FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);" (call_expression "FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4)" identifier (argument_list "("../../gold/object.h",0x8c1,"local_symbol",iVar4)" ( (string_literal ""../../gold/object.h"" " string_content ") , number_literal , (string_literal ""local_symbol"" " string_content ") , identifier ))) ;) })) (expression_statement "iVar4 = iVar4 + uVar3 * 0x14;" (assignment_expression "iVar4 = iVar4 + uVar3 * 0x14" identifier = (binary_expression "iVar4 + uVar3 * 0x14" identifier + (binary_expression "uVar3 * 0x14" identifier * number_literal))) ;) (expression_statement "bVar1 = *(byte *)(iVar4 + 0xb);" (assignment_expression "bVar1 = *(byte *)(iVar4 + 0xb)" identifier = (pointer_expression "*(byte *)(iVar4 + 0xb)" * (cast_expression "(byte *)(iVar4 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0xb)" ( (binary_expression "iVar4 + 0xb" identifier + number_literal) ))))) ;) (if_statement "if ((bVar1 & 0x20) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }" if (parenthesized_expression "((bVar1 & 0x20) == 0)" ( (binary_expression "(bVar1 & 0x20) == 0" (parenthesized_expression "(bVar1 & 0x20)" ( (binary_expression "bVar1 & 0x20" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }" { comment (expression_statement "FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);" (call_expression "FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3)" identifier (argument_list "("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3)" ( (string_literal ""../../gold/x86_64.cc"" " string_content ") , number_literal , (string_literal ""do_reloc_addend"" " string_content ") , identifier ))) ;) })) (if_statement "if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return *(undefined8 *)(iVar4 + 0xc);\n  }" { (return_statement "return *(undefined8 *)(iVar4 + 0xc);" return (pointer_expression "*(undefined8 *)(iVar4 + 0xc)" * (cast_expression "(undefined8 *)(iVar4 + 0xc)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0xc)" ( (binary_expression "iVar4 + 0xc" identifier + number_literal) )))) ;) })) (if_statement "if ((bVar1 & 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }" if (parenthesized_expression "((bVar1 & 8) == 0)" ( (binary_expression "(bVar1 & 8) == 0" (parenthesized_expression "(bVar1 & 8)" ( (binary_expression "bVar1 & 8" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }" { comment (expression_statement "FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);" (call_expression "FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1)" identifier (argument_list "("../../gold/object.h",0x6ab,"value",bVar1)" ( (string_literal ""../../gold/object.h"" " string_content ") , number_literal , (string_literal ""value"" " string_content ") , identifier ))) ;) })) (expression_statement "puVar5 = *(uint **)(iVar4 + 0xc);" (assignment_expression "puVar5 = *(uint **)(iVar4 + 0xc)" identifier = (pointer_expression "*(uint **)(iVar4 + 0xc)" * (cast_expression "(uint **)(iVar4 + 0xc)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0xc)" ( (binary_expression "iVar4 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *puVar5;" (assignment_expression "uVar3 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "uVar7 = uVar3 % puVar5[5];" (assignment_expression "uVar7 = uVar3 % puVar5[5]" identifier = (binary_expression "uVar3 % puVar5[5]" identifier % (subscript_expression "puVar5[5]" identifier [ number_literal ]))) ;) (expression_statement "piVar9 = *(int **)(puVar5[4] + uVar7 * 4);" (assignment_expression "piVar9 = *(int **)(puVar5[4] + uVar7 * 4)" identifier = (pointer_expression "*(int **)(puVar5[4] + uVar7 * 4)" * (cast_expression "(int **)(puVar5[4] + uVar7 * 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5[4] + uVar7 * 4)" ( (binary_expression "puVar5[4] + uVar7 * 4" (subscript_expression "puVar5[4]" identifier [ number_literal ]) + (binary_expression "uVar7 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }" if (parenthesized_expression "(piVar9 != (int *)0x0)" ( (binary_expression "piVar9 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }" { (expression_statement "uVar10 = ((int *)*piVar9)[1];" (assignment_expression "uVar10 = ((int *)*piVar9)[1]" identifier = (subscript_expression "((int *)*piVar9)[1]" (parenthesized_expression "((int *)*piVar9)" ( (cast_expression "(int *)*piVar9" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar9" * identifier)) )) [ number_literal ])) ;) (expression_statement "piVar6 = (int *)*piVar9;" (assignment_expression "piVar6 = (int *)*piVar9" identifier = (cast_expression "(int *)*piVar9" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar9" * identifier))) ;) (while_statement "while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }" while (parenthesized_expression "(piVar8 = piVar6, uVar3 != uVar10)" ( (comma_expression "piVar8 = piVar6, uVar3 != uVar10" (assignment_expression "piVar8 = piVar6" identifier = identifier) , (binary_expression "uVar3 != uVar10" identifier != identifier)) )) (compound_statement "{\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }" { (expression_statement "piVar6 = (int *)*piVar8;" (assignment_expression "piVar6 = (int *)*piVar8" identifier = (cast_expression "(int *)*piVar8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar8" * identifier))) ;) (if_statement "if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;" if (parenthesized_expression "((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5]))" ( (binary_expression "(piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])" (parenthesized_expression "(piVar6 == (int *)0x0)" ( (binary_expression "piVar6 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])" ( (comma_expression "uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5]" (assignment_expression "uVar10 = piVar6[1]" identifier = (subscript_expression "piVar6[1]" identifier [ number_literal ])) , (comma_expression "piVar9 = piVar8, uVar7 != uVar10 % puVar5[5]" (assignment_expression "piVar9 = piVar8" identifier = identifier) , (binary_expression "uVar7 != uVar10 % puVar5[5]" identifier != (binary_expression "uVar10 % puVar5[5]" identifier % (subscript_expression "puVar5[5]" identifier [ number_literal ]))))) ))) )) (goto_statement "goto LAB_0007be54;" goto statement_identifier ;)) })) (if_statement "if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }" if (parenthesized_expression "(*piVar9 != 0)" ( (binary_expression "*piVar9 != 0" (pointer_expression "*piVar9" * identifier) != number_literal) )) (compound_statement "{\n      return *(undefined8 *)(*piVar9 + 8);\n    }" { (return_statement "return *(undefined8 *)(*piVar9 + 8);" return (pointer_expression "*(undefined8 *)(*piVar9 + 8)" * (cast_expression "(undefined8 *)(*piVar9 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar9 + 8)" ( (binary_expression "*piVar9 + 8" (pointer_expression "*piVar9" * identifier) + number_literal) )))) ;) })) })) (labeled_statement "LAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);" statement_identifier : (expression_statement "uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);" (assignment_expression "uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1])" identifier = (call_expression "FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1])" identifier (argument_list "(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1])" ( identifier , identifier , (binary_expression "*(uint *)(iVar4 + 8) & 0x7ffffff" (pointer_expression "*(uint *)(iVar4 + 8)" * (cast_expression "(uint *)(iVar4 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 8)" ( (binary_expression "iVar4 + 8" identifier + number_literal) )))) & number_literal) , identifier , (subscript_expression "puVar5[1]" identifier [ number_literal ]) )))) ;)) (return_statement "return uVar11;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n/* DWARF original prototype: uint64_t do_reloc_addend(Target_x86_64<64> * this, void * arg, uint\n   r_type, uint64_t param_3) */\n\nuint64_t __thiscall\nanon_unknown.dwarf_32e241::Target_x86_64<64>::do_reloc_addend\n          (Target_x86_64<64> *this,void *arg,uint r_type,uint64_t param_4)\n\n{\n  int iVar1;\n  byte bVar2;\n  char *pcVar3;\n  Relobj *object;\n  uint uVar4;\n  size_type sVar5;\n  Merged_symbol_value<64> *this_00;\n  _Hash_node_base *p_Var6;\n  uint uVar7;\n  __bucket_type p_Var8;\n  __bucket_type p_Var9;\n  _Hash_node_base *p_Var10;\n  Elf_Addr EVar11;\n  \n  if (r_type != 0x24) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  pcVar3 = (this->x86_64_info).attributes_section;\n  if ((void *)((int)(this->x86_64_info).attributes_vendor - (int)pcVar3 >> 3) <= arg) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  pcVar3 = pcVar3 + (int)arg * 8;\n  object = *(Relobj **)pcVar3;\n  uVar4 = *(uint *)(pcVar3 + 4);\n  sVar5 = object[2].super_Object.name_.field_2._M_allocated_capacity;\n  if ((uint)(((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2) *\n            -0x33333333) <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/object.h",0x8c1,"local_symbol");\n  }\n  iVar1 = sVar5 + uVar4 * 0x14;\n  bVar2 = *(byte *)(iVar1 + 0xb);\n  if ((bVar2 & 0x20) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1717,"do_reloc_addend");\n  }\n  if ((char)bVar2 < '\0') {\n    return *(uint64_t *)(iVar1 + 0xc);\n  }\n  if ((bVar2 & 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/object.h",0x6ab,"value");\n  }\n  this_00 = *(Merged_symbol_value<64> **)(iVar1 + 0xc);\n  uVar4 = (this_00->output_addresses_)._M_h._M_bucket_count;\n  uVar7 = (uint)*(_Hash_node_base **)&this_00->input_value_ % uVar4;\n  p_Var9 = (this_00->output_addresses_)._M_h._M_buckets[uVar7];\n  if (p_Var9 != (__bucket_type)0x0) {\n    p_Var10 = p_Var9->_M_nxt[1]._M_nxt;\n    p_Var6 = p_Var9->_M_nxt;\n    while (p_Var8 = p_Var6, *(_Hash_node_base **)&this_00->input_value_ != p_Var10) {\n      p_Var6 = p_Var8->_M_nxt;\n      if ((p_Var6 == (_Hash_node_base *)0x0) ||\n         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4))\n      goto LAB_0007be54;\n    }\n    if (p_Var9->_M_nxt != (_Hash_node_base *)0x0) {\n      return *(uint64_t *)(p_Var9->_M_nxt + 2);\n    }\n  }\nLAB_0007be54:\n  EVar11 = gold::Merged_symbol_value<64>::value_from_output_section\n                     (this_00,object,*(uint *)(iVar1 + 8) & 0x7ffffff,this_00->input_value_);\n  return EVar11;\n}\n\n" comment comment (function_definition "uint64_t __thiscall\nanon_unknown.dwarf_32e241::Target_x86_64<64>::do_reloc_addend\n          (Target_x86_64<64> *this,void *arg,uint r_type,uint64_t param_4)\n\n{\n  int iVar1;\n  byte bVar2;\n  char *pcVar3;\n  Relobj *object;\n  uint uVar4;\n  size_type sVar5;\n  Merged_symbol_value<64> *this_00;\n  _Hash_node_base *p_Var6;\n  uint uVar7;\n  __bucket_type p_Var8;\n  __bucket_type p_Var9;\n  _Hash_node_base *p_Var10;\n  Elf_Addr EVar11;\n  \n  if (r_type != 0x24) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  pcVar3 = (this->x86_64_info).attributes_section;\n  if ((void *)((int)(this->x86_64_info).attributes_vendor - (int)pcVar3 >> 3) <= arg) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  pcVar3 = pcVar3 + (int)arg * 8;\n  object = *(Relobj **)pcVar3;\n  uVar4 = *(uint *)(pcVar3 + 4);\n  sVar5 = object[2].super_Object.name_.field_2._M_allocated_capacity;\n  if ((uint)(((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2) *\n            -0x33333333) <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/object.h",0x8c1,"local_symbol");\n  }\n  iVar1 = sVar5 + uVar4 * 0x14;\n  bVar2 = *(byte *)(iVar1 + 0xb);\n  if ((bVar2 & 0x20) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1717,"do_reloc_addend");\n  }\n  if ((char)bVar2 < '\0') {\n    return *(uint64_t *)(iVar1 + 0xc);\n  }\n  if ((bVar2 & 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/object.h",0x6ab,"value");\n  }\n  this_00 = *(Merged_symbol_value<64> **)(iVar1 + 0xc);\n  uVar4 = (this_00->output_addresses_)._M_h._M_bucket_count;\n  uVar7 = (uint)*(_Hash_node_base **)&this_00->input_value_ % uVar4;\n  p_Var9 = (this_00->output_addresses_)._M_h._M_buckets[uVar7];\n  if (p_Var9 != (__bucket_type)0x0) {\n    p_Var10 = p_Var9->_M_nxt[1]._M_nxt;\n    p_Var6 = p_Var9->_M_nxt;\n    while (p_Var8 = p_Var6, *(_Hash_node_base **)&this_00->input_value_ != p_Var10) {\n      p_Var6 = p_Var8->_M_nxt;\n      if ((p_Var6 == (_Hash_node_base *)0x0) ||\n         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4))\n      goto LAB_0007be54;\n    }\n    if (p_Var9->_M_nxt != (_Hash_node_base *)0x0) {\n      return *(uint64_t *)(p_Var9->_M_nxt + 2);\n    }\n  }\nLAB_0007be54:\n  EVar11 = gold::Merged_symbol_value<64>::value_from_output_section\n                     (this_00,object,*(uint *)(iVar1 + 8) & 0x7ffffff,this_00->input_value_);\n  return EVar11;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "anon_unknown.dwarf_32e241::Target_x86_64<64>::" identifier . identifier : : identifier < number_literal > : :) (function_declarator "do_reloc_addend\n          (Target_x86_64<64> *this,void *arg,uint r_type,uint64_t param_4)" identifier (parameter_list "(Target_x86_64<64> *this,void *arg,uint r_type,uint64_t param_4)" ( (parameter_declaration "Target_x86_64<64> *this" type_identifier (ERROR "<64>" < number_literal >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "void *arg" primitive_type (pointer_declarator "*arg" * identifier)) , (parameter_declaration "uint r_type" type_identifier identifier) , (parameter_declaration "uint64_t param_4" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  char *pcVar3;\n  Relobj *object;\n  uint uVar4;\n  size_type sVar5;\n  Merged_symbol_value<64> *this_00;\n  _Hash_node_base *p_Var6;\n  uint uVar7;\n  __bucket_type p_Var8;\n  __bucket_type p_Var9;\n  _Hash_node_base *p_Var10;\n  Elf_Addr EVar11;\n  \n  if (r_type != 0x24) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  pcVar3 = (this->x86_64_info).attributes_section;\n  if ((void *)((int)(this->x86_64_info).attributes_vendor - (int)pcVar3 >> 3) <= arg) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  pcVar3 = pcVar3 + (int)arg * 8;\n  object = *(Relobj **)pcVar3;\n  uVar4 = *(uint *)(pcVar3 + 4);\n  sVar5 = object[2].super_Object.name_.field_2._M_allocated_capacity;\n  if ((uint)(((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2) *\n            -0x33333333) <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/object.h",0x8c1,"local_symbol");\n  }\n  iVar1 = sVar5 + uVar4 * 0x14;\n  bVar2 = *(byte *)(iVar1 + 0xb);\n  if ((bVar2 & 0x20) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1717,"do_reloc_addend");\n  }\n  if ((char)bVar2 < '\0') {\n    return *(uint64_t *)(iVar1 + 0xc);\n  }\n  if ((bVar2 & 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/object.h",0x6ab,"value");\n  }\n  this_00 = *(Merged_symbol_value<64> **)(iVar1 + 0xc);\n  uVar4 = (this_00->output_addresses_)._M_h._M_bucket_count;\n  uVar7 = (uint)*(_Hash_node_base **)&this_00->input_value_ % uVar4;\n  p_Var9 = (this_00->output_addresses_)._M_h._M_buckets[uVar7];\n  if (p_Var9 != (__bucket_type)0x0) {\n    p_Var10 = p_Var9->_M_nxt[1]._M_nxt;\n    p_Var6 = p_Var9->_M_nxt;\n    while (p_Var8 = p_Var6, *(_Hash_node_base **)&this_00->input_value_ != p_Var10) {\n      p_Var6 = p_Var8->_M_nxt;\n      if ((p_Var6 == (_Hash_node_base *)0x0) ||\n         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4))\n      goto LAB_0007be54;\n    }\n    if (p_Var9->_M_nxt != (_Hash_node_base *)0x0) {\n      return *(uint64_t *)(p_Var9->_M_nxt + 2);\n    }\n  }\nLAB_0007be54:\n  EVar11 = gold::Merged_symbol_value<64>::value_from_output_section\n                     (this_00,object,*(uint *)(iVar1 + 8) & 0x7ffffff,this_00->input_value_);\n  return EVar11;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "Relobj *object;" type_identifier (pointer_declarator "*object" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "size_type sVar5;" type_identifier identifier ;) (expression_statement "Merged_symbol_value<64> *this_00;" (binary_expression "Merged_symbol_value<64> *this_00" (binary_expression "Merged_symbol_value<64" identifier < number_literal) > (pointer_expression "*this_00" * identifier)) ;) (declaration "_Hash_node_base *p_Var6;" type_identifier (pointer_declarator "*p_Var6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "__bucket_type p_Var8;" type_identifier identifier ;) (declaration "__bucket_type p_Var9;" type_identifier identifier ;) (declaration "_Hash_node_base *p_Var10;" type_identifier (pointer_declarator "*p_Var10" * identifier) ;) (declaration "Elf_Addr EVar11;" type_identifier identifier ;) (if_statement "if (r_type != 0x24) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }" if (parenthesized_expression "(r_type != 0x24)" ( (binary_expression "r_type != 0x24" identifier != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }" { comment (labeled_statement "gold::do_gold_unreachable("../../gold/x86_64.cc",0x1712,"do_reloc_addend");" statement_identifier : (ERROR ":" :) (expression_statement "do_gold_unreachable("../../gold/x86_64.cc",0x1712,"do_reloc_addend");" (call_expression "do_gold_unreachable("../../gold/x86_64.cc",0x1712,"do_reloc_addend")" identifier (argument_list "("../../gold/x86_64.cc",0x1712,"do_reloc_addend")" ( (string_literal ""../../gold/x86_64.cc"" " string_content ") , number_literal , (string_literal ""do_reloc_addend"" " string_content ") ))) ;)) })) (expression_statement "pcVar3 = (this->x86_64_info).attributes_section;" (assignment_expression "pcVar3 = (this->x86_64_info).attributes_section" identifier = (field_expression "(this->x86_64_info).attributes_section" (parenthesized_expression "(this->x86_64_info)" ( (field_expression "this->x86_64_info" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if ((void *)((int)(this->x86_64_info).attributes_vendor - (int)pcVar3 >> 3) <= arg) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }" if (parenthesized_expression "((void *)((int)(this->x86_64_info).attributes_vendor - (int)pcVar3 >> 3) <= arg)" ( (binary_expression "(void *)((int)(this->x86_64_info).attributes_vendor - (int)pcVar3 >> 3) <= arg" (cast_expression "(void *)((int)(this->x86_64_info).attributes_vendor - (int)pcVar3 >> 3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)(this->x86_64_info).attributes_vendor - (int)pcVar3 >> 3)" ( (binary_expression "(int)(this->x86_64_info).attributes_vendor - (int)pcVar3 >> 3" (binary_expression "(int)(this->x86_64_info).attributes_vendor - (int)pcVar3" (cast_expression "(int)(this->x86_64_info).attributes_vendor" ( (type_descriptor "int" primitive_type) ) (field_expression "(this->x86_64_info).attributes_vendor" (parenthesized_expression "(this->x86_64_info)" ( (field_expression "this->x86_64_info" identifier -> field_identifier) )) . field_identifier)) - (cast_expression "(int)pcVar3" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal) ))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }" { comment (labeled_statement "gold::do_gold_unreachable("../../gold/x86_64.cc",0x1714,"do_reloc_addend");" statement_identifier : (ERROR ":" :) (expression_statement "do_gold_unreachable("../../gold/x86_64.cc",0x1714,"do_reloc_addend");" (call_expression "do_gold_unreachable("../../gold/x86_64.cc",0x1714,"do_reloc_addend")" identifier (argument_list "("../../gold/x86_64.cc",0x1714,"do_reloc_addend")" ( (string_literal ""../../gold/x86_64.cc"" " string_content ") , number_literal , (string_literal ""do_reloc_addend"" " string_content ") ))) ;)) })) (expression_statement "pcVar3 = pcVar3 + (int)arg * 8;" (assignment_expression "pcVar3 = pcVar3 + (int)arg * 8" identifier = (binary_expression "pcVar3 + (int)arg * 8" identifier + (binary_expression "(int)arg * 8" (cast_expression "(int)arg" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal))) ;) (expression_statement "object = *(Relobj **)pcVar3;" (assignment_expression "object = *(Relobj **)pcVar3" identifier = (pointer_expression "*(Relobj **)pcVar3" * (cast_expression "(Relobj **)pcVar3" ( (type_descriptor "Relobj **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "uVar4 = *(uint *)(pcVar3 + 4);" (assignment_expression "uVar4 = *(uint *)(pcVar3 + 4)" identifier = (pointer_expression "*(uint *)(pcVar3 + 4)" * (cast_expression "(uint *)(pcVar3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar3 + 4)" ( (binary_expression "pcVar3 + 4" identifier + number_literal) ))))) ;) (expression_statement "sVar5 = object[2].super_Object.name_.field_2._M_allocated_capacity;" (assignment_expression "sVar5 = object[2].super_Object.name_.field_2._M_allocated_capacity" identifier = (field_expression "object[2].super_Object.name_.field_2._M_allocated_capacity" (field_expression "object[2].super_Object.name_.field_2" (field_expression "object[2].super_Object.name_" (field_expression "object[2].super_Object" (subscript_expression "object[2]" identifier [ number_literal ]) . field_identifier) . field_identifier) . field_identifier) . field_identifier)) ;) (if_statement "if ((uint)(((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2) *\n            -0x33333333) <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/object.h",0x8c1,"local_symbol");\n  }" if (parenthesized_expression "((uint)(((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2) *\n            -0x33333333) <= uVar4)" ( (binary_expression "(uint)(((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2) *\n            -0x33333333) <= uVar4" (call_expression "(uint)(((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2) *\n            -0x33333333)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2) *\n            -0x33333333)" ( (binary_expression "((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2) *\n            -0x33333333" (parenthesized_expression "((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2)" ( (binary_expression "(int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5) >> 2" (cast_expression "(int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5)" ( (binary_expression "*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - sVar5" (pointer_expression "*(int *)((int)&object[2].super_Object.name_.field_2 + 4)" * (cast_expression "(int *)((int)&object[2].super_Object.name_.field_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&object[2].super_Object.name_.field_2 + 4)" ( (binary_expression "(int)&object[2].super_Object.name_.field_2 + 4" (cast_expression "(int)&object[2].super_Object.name_.field_2" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&object[2].super_Object.name_.field_2" & (field_expression "object[2].super_Object.name_.field_2" (field_expression "object[2].super_Object.name_" (field_expression "object[2].super_Object" (subscript_expression "object[2]" identifier [ number_literal ]) . field_identifier) . field_identifier) . field_identifier))) + number_literal) )))) - identifier) ))) >> number_literal) )) * number_literal) ))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/object.h",0x8c1,"local_symbol");\n  }" { comment (labeled_statement "gold::do_gold_unreachable("../../gold/object.h",0x8c1,"local_symbol");" statement_identifier : (ERROR ":" :) (expression_statement "do_gold_unreachable("../../gold/object.h",0x8c1,"local_symbol");" (call_expression "do_gold_unreachable("../../gold/object.h",0x8c1,"local_symbol")" identifier (argument_list "("../../gold/object.h",0x8c1,"local_symbol")" ( (string_literal ""../../gold/object.h"" " string_content ") , number_literal , (string_literal ""local_symbol"" " string_content ") ))) ;)) })) (expression_statement "iVar1 = sVar5 + uVar4 * 0x14;" (assignment_expression "iVar1 = sVar5 + uVar4 * 0x14" identifier = (binary_expression "sVar5 + uVar4 * 0x14" identifier + (binary_expression "uVar4 * 0x14" identifier * number_literal))) ;) (expression_statement "bVar2 = *(byte *)(iVar1 + 0xb);" (assignment_expression "bVar2 = *(byte *)(iVar1 + 0xb)" identifier = (pointer_expression "*(byte *)(iVar1 + 0xb)" * (cast_expression "(byte *)(iVar1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xb)" ( (binary_expression "iVar1 + 0xb" identifier + number_literal) ))))) ;) (if_statement "if ((bVar2 & 0x20) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1717,"do_reloc_addend");\n  }" if (parenthesized_expression "((bVar2 & 0x20) == 0)" ( (binary_expression "(bVar2 & 0x20) == 0" (parenthesized_expression "(bVar2 & 0x20)" ( (binary_expression "bVar2 & 0x20" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/x86_64.cc",0x1717,"do_reloc_addend");\n  }" { comment (labeled_statement "gold::do_gold_unreachable("../../gold/x86_64.cc",0x1717,"do_reloc_addend");" statement_identifier : (ERROR ":" :) (expression_statement "do_gold_unreachable("../../gold/x86_64.cc",0x1717,"do_reloc_addend");" (call_expression "do_gold_unreachable("../../gold/x86_64.cc",0x1717,"do_reloc_addend")" identifier (argument_list "("../../gold/x86_64.cc",0x1717,"do_reloc_addend")" ( (string_literal ""../../gold/x86_64.cc"" " string_content ") , number_literal , (string_literal ""do_reloc_addend"" " string_content ") ))) ;)) })) (if_statement "if ((char)bVar2 < '\0') {\n    return *(uint64_t *)(iVar1 + 0xc);\n  }" if (parenthesized_expression "((char)bVar2 < '\0')" ( (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return *(uint64_t *)(iVar1 + 0xc);\n  }" { (return_statement "return *(uint64_t *)(iVar1 + 0xc);" return (pointer_expression "*(uint64_t *)(iVar1 + 0xc)" * (cast_expression "(uint64_t *)(iVar1 + 0xc)" ( (type_descriptor "uint64_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) )))) ;) })) (if_statement "if ((bVar2 & 8) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/object.h",0x6ab,"value");\n  }" if (parenthesized_expression "((bVar2 & 8) == 0)" ( (binary_expression "(bVar2 & 8) == 0" (parenthesized_expression "(bVar2 & 8)" ( (binary_expression "bVar2 & 8" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/object.h",0x6ab,"value");\n  }" { comment (labeled_statement "gold::do_gold_unreachable("../../gold/object.h",0x6ab,"value");" statement_identifier : (ERROR ":" :) (expression_statement "do_gold_unreachable("../../gold/object.h",0x6ab,"value");" (call_expression "do_gold_unreachable("../../gold/object.h",0x6ab,"value")" identifier (argument_list "("../../gold/object.h",0x6ab,"value")" ( (string_literal ""../../gold/object.h"" " string_content ") , number_literal , (string_literal ""value"" " string_content ") ))) ;)) })) (expression_statement "this_00 = *(Merged_symbol_value<64> **)(iVar1 + 0xc);" (assignment_expression "this_00 = *(Merged_symbol_value<64> **)(iVar1 + 0xc)" identifier = (pointer_expression "*(Merged_symbol_value<64> **)(iVar1 + 0xc)" * (call_expression "(Merged_symbol_value<64> **)(iVar1 + 0xc)" (parenthesized_expression "(Merged_symbol_value<64> **)" ( (binary_expression "Merged_symbol_value<64> **" (binary_expression "Merged_symbol_value<64" identifier < number_literal) > (pointer_expression "**" * (pointer_expression "*" * identifier))) )) (argument_list "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = (this_00->output_addresses_)._M_h._M_bucket_count;" (assignment_expression "uVar4 = (this_00->output_addresses_)._M_h._M_bucket_count" identifier = (field_expression "(this_00->output_addresses_)._M_h._M_bucket_count" (field_expression "(this_00->output_addresses_)._M_h" (parenthesized_expression "(this_00->output_addresses_)" ( (field_expression "this_00->output_addresses_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "uVar7 = (uint)*(_Hash_node_base **)&this_00->input_value_ % uVar4;" (assignment_expression "uVar7 = (uint)*(_Hash_node_base **)&this_00->input_value_ % uVar4" identifier = (binary_expression "(uint)*(_Hash_node_base **)&this_00->input_value_ % uVar4" (binary_expression "(uint)*(_Hash_node_base **)&this_00->input_value_" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(_Hash_node_base **)&this_00->input_value_" ( (type_descriptor "_Hash_node_base **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&this_00->input_value_" & (field_expression "this_00->input_value_" identifier -> field_identifier)))) % identifier)) ;) (expression_statement "p_Var9 = (this_00->output_addresses_)._M_h._M_buckets[uVar7];" (assignment_expression "p_Var9 = (this_00->output_addresses_)._M_h._M_buckets[uVar7]" identifier = (subscript_expression "(this_00->output_addresses_)._M_h._M_buckets[uVar7]" (field_expression "(this_00->output_addresses_)._M_h._M_buckets" (field_expression "(this_00->output_addresses_)._M_h" (parenthesized_expression "(this_00->output_addresses_)" ( (field_expression "this_00->output_addresses_" identifier -> field_identifier) )) . field_identifier) . field_identifier) [ identifier ])) ;) (if_statement "if (p_Var9 != (__bucket_type)0x0) {\n    p_Var10 = p_Var9->_M_nxt[1]._M_nxt;\n    p_Var6 = p_Var9->_M_nxt;\n    while (p_Var8 = p_Var6, *(_Hash_node_base **)&this_00->input_value_ != p_Var10) {\n      p_Var6 = p_Var8->_M_nxt;\n      if ((p_Var6 == (_Hash_node_base *)0x0) ||\n         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4))\n      goto LAB_0007be54;\n    }\n    if (p_Var9->_M_nxt != (_Hash_node_base *)0x0) {\n      return *(uint64_t *)(p_Var9->_M_nxt + 2);\n    }\n  }" if (parenthesized_expression "(p_Var9 != (__bucket_type)0x0)" ( (binary_expression "p_Var9 != (__bucket_type)0x0" identifier != (cast_expression "(__bucket_type)0x0" ( (type_descriptor "__bucket_type" type_identifier) ) number_literal)) )) (compound_statement "{\n    p_Var10 = p_Var9->_M_nxt[1]._M_nxt;\n    p_Var6 = p_Var9->_M_nxt;\n    while (p_Var8 = p_Var6, *(_Hash_node_base **)&this_00->input_value_ != p_Var10) {\n      p_Var6 = p_Var8->_M_nxt;\n      if ((p_Var6 == (_Hash_node_base *)0x0) ||\n         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4))\n      goto LAB_0007be54;\n    }\n    if (p_Var9->_M_nxt != (_Hash_node_base *)0x0) {\n      return *(uint64_t *)(p_Var9->_M_nxt + 2);\n    }\n  }" { (expression_statement "p_Var10 = p_Var9->_M_nxt[1]._M_nxt;" (assignment_expression "p_Var10 = p_Var9->_M_nxt[1]._M_nxt" identifier = (field_expression "p_Var9->_M_nxt[1]._M_nxt" (subscript_expression "p_Var9->_M_nxt[1]" (field_expression "p_Var9->_M_nxt" identifier -> field_identifier) [ number_literal ]) . field_identifier)) ;) (expression_statement "p_Var6 = p_Var9->_M_nxt;" (assignment_expression "p_Var6 = p_Var9->_M_nxt" identifier = (field_expression "p_Var9->_M_nxt" identifier -> field_identifier)) ;) (while_statement "while (p_Var8 = p_Var6, *(_Hash_node_base **)&this_00->input_value_ != p_Var10) {\n      p_Var6 = p_Var8->_M_nxt;\n      if ((p_Var6 == (_Hash_node_base *)0x0) ||\n         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4))\n      goto LAB_0007be54;\n    }" while (parenthesized_expression "(p_Var8 = p_Var6, *(_Hash_node_base **)&this_00->input_value_ != p_Var10)" ( (comma_expression "p_Var8 = p_Var6, *(_Hash_node_base **)&this_00->input_value_ != p_Var10" (assignment_expression "p_Var8 = p_Var6" identifier = identifier) , (binary_expression "*(_Hash_node_base **)&this_00->input_value_ != p_Var10" (pointer_expression "*(_Hash_node_base **)&this_00->input_value_" * (cast_expression "(_Hash_node_base **)&this_00->input_value_" ( (type_descriptor "_Hash_node_base **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&this_00->input_value_" & (field_expression "this_00->input_value_" identifier -> field_identifier)))) != identifier)) )) (compound_statement "{\n      p_Var6 = p_Var8->_M_nxt;\n      if ((p_Var6 == (_Hash_node_base *)0x0) ||\n         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4))\n      goto LAB_0007be54;\n    }" { (expression_statement "p_Var6 = p_Var8->_M_nxt;" (assignment_expression "p_Var6 = p_Var8->_M_nxt" identifier = (field_expression "p_Var8->_M_nxt" identifier -> field_identifier)) ;) (if_statement "if ((p_Var6 == (_Hash_node_base *)0x0) ||\n         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4))\n      goto LAB_0007be54;" if (parenthesized_expression "((p_Var6 == (_Hash_node_base *)0x0) ||\n         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4))" ( (binary_expression "(p_Var6 == (_Hash_node_base *)0x0) ||\n         (p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4)" (parenthesized_expression "(p_Var6 == (_Hash_node_base *)0x0)" ( (binary_expression "p_Var6 == (_Hash_node_base *)0x0" identifier == (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4)" ( (comma_expression "p_Var10 = p_Var6[1]._M_nxt, p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4" (assignment_expression "p_Var10 = p_Var6[1]._M_nxt" identifier = (field_expression "p_Var6[1]._M_nxt" (subscript_expression "p_Var6[1]" identifier [ number_literal ]) . field_identifier)) , (comma_expression "p_Var9 = p_Var8, uVar7 != (uint)p_Var10 % uVar4" (assignment_expression "p_Var9 = p_Var8" identifier = identifier) , (binary_expression "uVar7 != (uint)p_Var10 % uVar4" identifier != (binary_expression "(uint)p_Var10 % uVar4" (cast_expression "(uint)p_Var10" ( (type_descriptor "uint" type_identifier) ) identifier) % identifier)))) ))) )) (goto_statement "goto LAB_0007be54;" goto statement_identifier ;)) })) (if_statement "if (p_Var9->_M_nxt != (_Hash_node_base *)0x0) {\n      return *(uint64_t *)(p_Var9->_M_nxt + 2);\n    }" if (parenthesized_expression "(p_Var9->_M_nxt != (_Hash_node_base *)0x0)" ( (binary_expression "p_Var9->_M_nxt != (_Hash_node_base *)0x0" (field_expression "p_Var9->_M_nxt" identifier -> field_identifier) != (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return *(uint64_t *)(p_Var9->_M_nxt + 2);\n    }" { (return_statement "return *(uint64_t *)(p_Var9->_M_nxt + 2);" return (pointer_expression "*(uint64_t *)(p_Var9->_M_nxt + 2)" * (cast_expression "(uint64_t *)(p_Var9->_M_nxt + 2)" ( (type_descriptor "uint64_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(p_Var9->_M_nxt + 2)" ( (binary_expression "p_Var9->_M_nxt + 2" (field_expression "p_Var9->_M_nxt" identifier -> field_identifier) + number_literal) )))) ;) })) })) (labeled_statement "LAB_0007be54:\n  EVar11 = gold::Merged_symbol_value<64>::value_from_output_section\n                     (this_00,object,*(uint *)(iVar1 + 8) & 0x7ffffff,this_00->input_value_);" statement_identifier : (ERROR "EVar11 = gold::" (assignment_expression "EVar11 = gold" identifier = identifier) : :) (expression_statement "Merged_symbol_value<64>::value_from_output_section\n                     (this_00,object,*(uint *)(iVar1 + 8) & 0x7ffffff,this_00->input_value_);" (binary_expression "Merged_symbol_value<64>::value_from_output_section\n                     (this_00,object,*(uint *)(iVar1 + 8) & 0x7ffffff,this_00->input_value_)" (binary_expression "Merged_symbol_value<64" identifier < number_literal) > (ERROR "::" : :) (call_expression "value_from_output_section\n                     (this_00,object,*(uint *)(iVar1 + 8) & 0x7ffffff,this_00->input_value_)" identifier (argument_list "(this_00,object,*(uint *)(iVar1 + 8) & 0x7ffffff,this_00->input_value_)" ( identifier , identifier , (binary_expression "*(uint *)(iVar1 + 8) & 0x7ffffff" (pointer_expression "*(uint *)(iVar1 + 8)" * (cast_expression "(uint *)(iVar1 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 8)" ( (binary_expression "iVar1 + 8" identifier + number_literal) )))) & number_literal) , (field_expression "this_00->input_value_" identifier -> field_identifier) )))) ;)) (return_statement "return EVar11;" return identifier ;) })))
(translation_unit "undefined8 FUN_0007bd50(int param_1,uint param_2,int param_3)\n\n{\n  byte bVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint *puVar5;\n  int *piVar6;\n  uint uVar7;\n  int *piVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined8 uVar11;\n  \n  if (param_3 != 0x24) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);\n  iVar2 = *piVar9;\n  uVar3 = piVar9[1];\n  iVar4 = *(int *)(iVar2 + 0xdc);\n  if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    \n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }\n  iVar4 = iVar4 + uVar3 * 0x14;\n  bVar1 = *(byte *)(iVar4 + 0xb);\n  if ((bVar1 & 0x20) == 0) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }\n  if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }\n  if ((bVar1 & 8) == 0) {\n                    \n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }\n  puVar5 = *(uint **)(iVar4 + 0xc);\n  uVar3 = *puVar5;\n  uVar7 = uVar3 % puVar5[5];\n  piVar9 = *(int **)(puVar5[4] + uVar7 * 4);\n  if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }\nLAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);\n  return uVar11;\n}\n\n" (function_definition "undefined8 FUN_0007bd50(int param_1,uint param_2,int param_3)\n\n{\n  byte bVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint *puVar5;\n  int *piVar6;\n  uint uVar7;\n  int *piVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined8 uVar11;\n  \n  if (param_3 != 0x24) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);\n  iVar2 = *piVar9;\n  uVar3 = piVar9[1];\n  iVar4 = *(int *)(iVar2 + 0xdc);\n  if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    \n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }\n  iVar4 = iVar4 + uVar3 * 0x14;\n  bVar1 = *(byte *)(iVar4 + 0xb);\n  if ((bVar1 & 0x20) == 0) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }\n  if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }\n  if ((bVar1 & 8) == 0) {\n                    \n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }\n  puVar5 = *(uint **)(iVar4 + 0xc);\n  uVar3 = *puVar5;\n  uVar7 = uVar3 % puVar5[5];\n  piVar9 = *(int **)(puVar5[4] + uVar7 * 4);\n  if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }\nLAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);\n  return uVar11;\n}" type_identifier (function_declarator "FUN_0007bd50(int param_1,uint param_2,int param_3)" identifier (parameter_list "(int param_1,uint param_2,int param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  byte bVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint *puVar5;\n  int *piVar6;\n  uint uVar7;\n  int *piVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined8 uVar11;\n  \n  if (param_3 != 0x24) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);\n  iVar2 = *piVar9;\n  uVar3 = piVar9[1];\n  iVar4 = *(int *)(iVar2 + 0xdc);\n  if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    \n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }\n  iVar4 = iVar4 + uVar3 * 0x14;\n  bVar1 = *(byte *)(iVar4 + 0xb);\n  if ((bVar1 & 0x20) == 0) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }\n  if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }\n  if ((bVar1 & 8) == 0) {\n                    \n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }\n  puVar5 = *(uint **)(iVar4 + 0xc);\n  uVar3 = *puVar5;\n  uVar7 = uVar3 % puVar5[5];\n  piVar9 = *(int **)(puVar5[4] + uVar7 * 4);\n  if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }\nLAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);\n  return uVar11;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "undefined8 uVar11;" type_identifier identifier ;) (if_statement "if (param_3 != 0x24) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }" if (parenthesized_expression "(param_3 != 0x24)" ( (binary_expression "param_3 != 0x24" identifier != number_literal) )) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }" { (expression_statement "FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");" (call_expression "FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend")" identifier (argument_list "("../../gold/x86_64.cc",0x1712,"do_reloc_addend")" ( (string_literal ""../../gold/x86_64.cc"" " string_content ") , number_literal , (string_literal ""do_reloc_addend"" " string_content ") ))) ;) })) (if_statement "if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }" if (parenthesized_expression "((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2)" ( (binary_expression "(uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2" (call_expression "(uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3)" ( (binary_expression "*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3" (binary_expression "*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50)" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) - (pointer_expression "*(int *)(param_1 + 0x50)" * (cast_expression "(int *)(param_1 + 0x50)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) ))))) >> number_literal) ))) <= identifier) )) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }" { (expression_statement "FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");" (call_expression "FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend")" identifier (argument_list "("../../gold/x86_64.cc",0x1714,"do_reloc_addend")" ( (string_literal ""../../gold/x86_64.cc"" " string_content ") , number_literal , (string_literal ""do_reloc_addend"" " string_content ") ))) ;) })) (expression_statement "piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);" (assignment_expression "piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8)" identifier = (cast_expression "(int *)(*(int *)(param_1 + 0x50) + param_2 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x50) + param_2 * 8)" ( (binary_expression "*(int *)(param_1 + 0x50) + param_2 * 8" (pointer_expression "*(int *)(param_1 + 0x50)" * (cast_expression "(int *)(param_1 + 0x50)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) + (binary_expression "param_2 * 8" identifier * number_literal)) )))) ;) (expression_statement "iVar2 = *piVar9;" (assignment_expression "iVar2 = *piVar9" identifier = (pointer_expression "*piVar9" * identifier)) ;) (expression_statement "uVar3 = piVar9[1];" (assignment_expression "uVar3 = piVar9[1]" identifier = (subscript_expression "piVar9[1]" identifier [ number_literal ])) ;) (expression_statement "iVar4 = *(int *)(iVar2 + 0xdc);" (assignment_expression "iVar4 = *(int *)(iVar2 + 0xdc)" identifier = (pointer_expression "*(int *)(iVar2 + 0xdc)" * (cast_expression "(int *)(iVar2 + 0xdc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0xdc)" ( (binary_expression "iVar2 + 0xdc" identifier + number_literal) ))))) ;) (if_statement "if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    \n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }" if (parenthesized_expression "((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3)" ( (binary_expression "(uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3" (call_expression "(uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333)" ( (binary_expression "(*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333" (parenthesized_expression "(*(int *)(iVar2 + 0xe0) - iVar4 >> 2)" ( (binary_expression "*(int *)(iVar2 + 0xe0) - iVar4 >> 2" (binary_expression "*(int *)(iVar2 + 0xe0) - iVar4" (pointer_expression "*(int *)(iVar2 + 0xe0)" * (cast_expression "(int *)(iVar2 + 0xe0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0xe0)" ( (binary_expression "iVar2 + 0xe0" identifier + number_literal) )))) - identifier) >> number_literal) )) * number_literal) ))) <= identifier) )) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }" { (expression_statement "FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);" (call_expression "FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4)" identifier (argument_list "("../../gold/object.h",0x8c1,"local_symbol",iVar4)" ( (string_literal ""../../gold/object.h"" " string_content ") , number_literal , (string_literal ""local_symbol"" " string_content ") , identifier ))) ;) })) (expression_statement "iVar4 = iVar4 + uVar3 * 0x14;" (assignment_expression "iVar4 = iVar4 + uVar3 * 0x14" identifier = (binary_expression "iVar4 + uVar3 * 0x14" identifier + (binary_expression "uVar3 * 0x14" identifier * number_literal))) ;) (expression_statement "bVar1 = *(byte *)(iVar4 + 0xb);" (assignment_expression "bVar1 = *(byte *)(iVar4 + 0xb)" identifier = (pointer_expression "*(byte *)(iVar4 + 0xb)" * (cast_expression "(byte *)(iVar4 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0xb)" ( (binary_expression "iVar4 + 0xb" identifier + number_literal) ))))) ;) (if_statement "if ((bVar1 & 0x20) == 0) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }" if (parenthesized_expression "((bVar1 & 0x20) == 0)" ( (binary_expression "(bVar1 & 0x20) == 0" (parenthesized_expression "(bVar1 & 0x20)" ( (binary_expression "bVar1 & 0x20" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }" { (expression_statement "FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);" (call_expression "FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3)" identifier (argument_list "("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3)" ( (string_literal ""../../gold/x86_64.cc"" " string_content ") , number_literal , (string_literal ""do_reloc_addend"" " string_content ") , identifier ))) ;) })) (if_statement "if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return *(undefined8 *)(iVar4 + 0xc);\n  }" { (return_statement "return *(undefined8 *)(iVar4 + 0xc);" return (pointer_expression "*(undefined8 *)(iVar4 + 0xc)" * (cast_expression "(undefined8 *)(iVar4 + 0xc)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0xc)" ( (binary_expression "iVar4 + 0xc" identifier + number_literal) )))) ;) })) (if_statement "if ((bVar1 & 8) == 0) {\n                    \n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }" if (parenthesized_expression "((bVar1 & 8) == 0)" ( (binary_expression "(bVar1 & 8) == 0" (parenthesized_expression "(bVar1 & 8)" ( (binary_expression "bVar1 & 8" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }" { (expression_statement "FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);" (call_expression "FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1)" identifier (argument_list "("../../gold/object.h",0x6ab,"value",bVar1)" ( (string_literal ""../../gold/object.h"" " string_content ") , number_literal , (string_literal ""value"" " string_content ") , identifier ))) ;) })) (expression_statement "puVar5 = *(uint **)(iVar4 + 0xc);" (assignment_expression "puVar5 = *(uint **)(iVar4 + 0xc)" identifier = (pointer_expression "*(uint **)(iVar4 + 0xc)" * (cast_expression "(uint **)(iVar4 + 0xc)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0xc)" ( (binary_expression "iVar4 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *puVar5;" (assignment_expression "uVar3 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "uVar7 = uVar3 % puVar5[5];" (assignment_expression "uVar7 = uVar3 % puVar5[5]" identifier = (binary_expression "uVar3 % puVar5[5]" identifier % (subscript_expression "puVar5[5]" identifier [ number_literal ]))) ;) (expression_statement "piVar9 = *(int **)(puVar5[4] + uVar7 * 4);" (assignment_expression "piVar9 = *(int **)(puVar5[4] + uVar7 * 4)" identifier = (pointer_expression "*(int **)(puVar5[4] + uVar7 * 4)" * (cast_expression "(int **)(puVar5[4] + uVar7 * 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5[4] + uVar7 * 4)" ( (binary_expression "puVar5[4] + uVar7 * 4" (subscript_expression "puVar5[4]" identifier [ number_literal ]) + (binary_expression "uVar7 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }" if (parenthesized_expression "(piVar9 != (int *)0x0)" ( (binary_expression "piVar9 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }" { (expression_statement "uVar10 = ((int *)*piVar9)[1];" (assignment_expression "uVar10 = ((int *)*piVar9)[1]" identifier = (subscript_expression "((int *)*piVar9)[1]" (parenthesized_expression "((int *)*piVar9)" ( (cast_expression "(int *)*piVar9" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar9" * identifier)) )) [ number_literal ])) ;) (expression_statement "piVar6 = (int *)*piVar9;" (assignment_expression "piVar6 = (int *)*piVar9" identifier = (cast_expression "(int *)*piVar9" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar9" * identifier))) ;) (while_statement "while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }" while (parenthesized_expression "(piVar8 = piVar6, uVar3 != uVar10)" ( (comma_expression "piVar8 = piVar6, uVar3 != uVar10" (assignment_expression "piVar8 = piVar6" identifier = identifier) , (binary_expression "uVar3 != uVar10" identifier != identifier)) )) (compound_statement "{\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }" { (expression_statement "piVar6 = (int *)*piVar8;" (assignment_expression "piVar6 = (int *)*piVar8" identifier = (cast_expression "(int *)*piVar8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar8" * identifier))) ;) (if_statement "if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;" if (parenthesized_expression "((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5]))" ( (binary_expression "(piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])" (parenthesized_expression "(piVar6 == (int *)0x0)" ( (binary_expression "piVar6 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])" ( (comma_expression "uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5]" (assignment_expression "uVar10 = piVar6[1]" identifier = (subscript_expression "piVar6[1]" identifier [ number_literal ])) , (comma_expression "piVar9 = piVar8, uVar7 != uVar10 % puVar5[5]" (assignment_expression "piVar9 = piVar8" identifier = identifier) , (binary_expression "uVar7 != uVar10 % puVar5[5]" identifier != (binary_expression "uVar10 % puVar5[5]" identifier % (subscript_expression "puVar5[5]" identifier [ number_literal ]))))) ))) )) (goto_statement "goto LAB_0007be54;" goto statement_identifier ;)) })) (if_statement "if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }" if (parenthesized_expression "(*piVar9 != 0)" ( (binary_expression "*piVar9 != 0" (pointer_expression "*piVar9" * identifier) != number_literal) )) (compound_statement "{\n      return *(undefined8 *)(*piVar9 + 8);\n    }" { (return_statement "return *(undefined8 *)(*piVar9 + 8);" return (pointer_expression "*(undefined8 *)(*piVar9 + 8)" * (cast_expression "(undefined8 *)(*piVar9 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar9 + 8)" ( (binary_expression "*piVar9 + 8" (pointer_expression "*piVar9" * identifier) + number_literal) )))) ;) })) })) (labeled_statement "LAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);" statement_identifier : (expression_statement "uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);" (assignment_expression "uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1])" identifier = (call_expression "FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1])" identifier (argument_list "(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1])" ( identifier , identifier , (binary_expression "*(uint *)(iVar4 + 8) & 0x7ffffff" (pointer_expression "*(uint *)(iVar4 + 8)" * (cast_expression "(uint *)(iVar4 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 8)" ( (binary_expression "iVar4 + 8" identifier + number_literal) )))) & number_literal) , identifier , (subscript_expression "puVar5[1]" identifier [ number_literal ]) )))) ;)) (return_statement "return uVar11;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) >> LIT) ))) <= IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT) >> LIT) )) * LIT) ))) <= IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT % (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )) [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT != IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT != (binary_expression IDENT % (subscript_expression IDENT [ LIT ]))))) ))) )) (goto_statement goto statement_identifier ;)) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (return_statement return (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) ;) })) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) , IDENT , (subscript_expression IDENT [ LIT ]) )))) ;)) (return_statement return IDENT ;) })))
(function_definition "undefined8 FUN_0007bd50(int param_1,uint param_2,int param_3)\n\n{\n  byte bVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint *puVar5;\n  int *piVar6;\n  uint uVar7;\n  int *piVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined8 uVar11;\n  \n  if (param_3 != 0x24) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);\n  iVar2 = *piVar9;\n  uVar3 = piVar9[1];\n  iVar4 = *(int *)(iVar2 + 0xdc);\n  if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    \n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }\n  iVar4 = iVar4 + uVar3 * 0x14;\n  bVar1 = *(byte *)(iVar4 + 0xb);\n  if ((bVar1 & 0x20) == 0) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }\n  if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }\n  if ((bVar1 & 8) == 0) {\n                    \n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }\n  puVar5 = *(uint **)(iVar4 + 0xc);\n  uVar3 = *puVar5;\n  uVar7 = uVar3 % puVar5[5];\n  piVar9 = *(int **)(puVar5[4] + uVar7 * 4);\n  if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }\nLAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);\n  return uVar11;\n}" (type_identifier "undefined8") (function_declarator "FUN_0007bd50(int param_1,uint param_2,int param_3)" (identifier "FUN_0007bd50") (parameter_list "(int param_1,uint param_2,int param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  byte bVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  uint *puVar5;\n  int *piVar6;\n  uint uVar7;\n  int *piVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined8 uVar11;\n  \n  if (param_3 != 0x24) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }\n  if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }\n  piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);\n  iVar2 = *piVar9;\n  uVar3 = piVar9[1];\n  iVar4 = *(int *)(iVar2 + 0xdc);\n  if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    \n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }\n  iVar4 = iVar4 + uVar3 * 0x14;\n  bVar1 = *(byte *)(iVar4 + 0xb);\n  if ((bVar1 & 0x20) == 0) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }\n  if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }\n  if ((bVar1 & 8) == 0) {\n                    \n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }\n  puVar5 = *(uint **)(iVar4 + 0xc);\n  uVar3 = *puVar5;\n  uVar7 = uVar3 % puVar5[5];\n  piVar9 = *(int **)(puVar5[4] + uVar7 * 4);\n  if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }\nLAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);\n  return uVar11;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "int *piVar8;" (primitive_type "int") (pointer_declarator "*piVar8" (* "*") (identifier "piVar8")) (; ";")) (declaration "int *piVar9;" (primitive_type "int") (pointer_declarator "*piVar9" (* "*") (identifier "piVar9")) (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "undefined8 uVar11;" (type_identifier "undefined8") (identifier "uVar11") (; ";")) (if_statement "if (param_3 != 0x24) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }" (if "if") (parenthesized_expression "(param_3 != 0x24)" (( "(") (binary_expression "param_3 != 0x24" (identifier "param_3") (!= "!=") (number_literal "0x24")) () ")")) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");\n  }" ({ "{") (expression_statement "FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");" (call_expression "FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend")" (identifier "FUN_002446e0") (argument_list "("../../gold/x86_64.cc",0x1712,"do_reloc_addend")" (( "(") (string_literal ""../../gold/x86_64.cc"" (" """) (string_content "../../gold/x86_64.cc") (" """)) (, ",") (number_literal "0x1712") (, ",") (string_literal ""do_reloc_addend"" (" """) (string_content "do_reloc_addend") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }" (if "if") (parenthesized_expression "((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2)" (( "(") (binary_expression "(uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2" (call_expression "(uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3)" (( "(") (binary_expression "*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3" (binary_expression "*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50)" (pointer_expression "*(int *)(param_1 + 0x54)" (* "*") (cast_expression "(int *)(param_1 + 0x54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (- "-") (pointer_expression "*(int *)(param_1 + 0x50)" (* "*") (cast_expression "(int *)(param_1 + 0x50)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")"))))) (>> ">>") (number_literal "3")) () ")"))) (<= "<=") (identifier "param_2")) () ")")) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");\n  }" ({ "{") (expression_statement "FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");" (call_expression "FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend")" (identifier "FUN_002446e0") (argument_list "("../../gold/x86_64.cc",0x1714,"do_reloc_addend")" (( "(") (string_literal ""../../gold/x86_64.cc"" (" """) (string_content "../../gold/x86_64.cc") (" """)) (, ",") (number_literal "0x1714") (, ",") (string_literal ""do_reloc_addend"" (" """) (string_content "do_reloc_addend") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);" (assignment_expression "piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8)" (identifier "piVar9") (= "=") (cast_expression "(int *)(*(int *)(param_1 + 0x50) + param_2 * 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x50) + param_2 * 8)" (( "(") (binary_expression "*(int *)(param_1 + 0x50) + param_2 * 8" (pointer_expression "*(int *)(param_1 + 0x50)" (* "*") (cast_expression "(int *)(param_1 + 0x50)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")")))) (+ "+") (binary_expression "param_2 * 8" (identifier "param_2") (* "*") (number_literal "8"))) () ")")))) (; ";")) (expression_statement "iVar2 = *piVar9;" (assignment_expression "iVar2 = *piVar9" (identifier "iVar2") (= "=") (pointer_expression "*piVar9" (* "*") (identifier "piVar9"))) (; ";")) (expression_statement "uVar3 = piVar9[1];" (assignment_expression "uVar3 = piVar9[1]" (identifier "uVar3") (= "=") (subscript_expression "piVar9[1]" (identifier "piVar9") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "iVar4 = *(int *)(iVar2 + 0xdc);" (assignment_expression "iVar4 = *(int *)(iVar2 + 0xdc)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(iVar2 + 0xdc)" (* "*") (cast_expression "(int *)(iVar2 + 0xdc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0xdc)" (( "(") (binary_expression "iVar2 + 0xdc" (identifier "iVar2") (+ "+") (number_literal "0xdc")) () ")"))))) (; ";")) (if_statement "if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {\n                    \n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }" (if "if") (parenthesized_expression "((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3)" (( "(") (binary_expression "(uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3" (call_expression "(uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333)" (( "(") (binary_expression "(*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333" (parenthesized_expression "(*(int *)(iVar2 + 0xe0) - iVar4 >> 2)" (( "(") (binary_expression "*(int *)(iVar2 + 0xe0) - iVar4 >> 2" (binary_expression "*(int *)(iVar2 + 0xe0) - iVar4" (pointer_expression "*(int *)(iVar2 + 0xe0)" (* "*") (cast_expression "(int *)(iVar2 + 0xe0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0xe0)" (( "(") (binary_expression "iVar2 + 0xe0" (identifier "iVar2") (+ "+") (number_literal "0xe0")) () ")")))) (- "-") (identifier "iVar4")) (>> ">>") (number_literal "2")) () ")")) (* "*") (number_literal "-0x33333333")) () ")"))) (<= "<=") (identifier "uVar3")) () ")")) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);\n  }" ({ "{") (expression_statement "FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);" (call_expression "FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4)" (identifier "FUN_002446e0") (argument_list "("../../gold/object.h",0x8c1,"local_symbol",iVar4)" (( "(") (string_literal ""../../gold/object.h"" (" """) (string_content "../../gold/object.h") (" """)) (, ",") (number_literal "0x8c1") (, ",") (string_literal ""local_symbol"" (" """) (string_content "local_symbol") (" """)) (, ",") (identifier "iVar4") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar4 = iVar4 + uVar3 * 0x14;" (assignment_expression "iVar4 = iVar4 + uVar3 * 0x14" (identifier "iVar4") (= "=") (binary_expression "iVar4 + uVar3 * 0x14" (identifier "iVar4") (+ "+") (binary_expression "uVar3 * 0x14" (identifier "uVar3") (* "*") (number_literal "0x14")))) (; ";")) (expression_statement "bVar1 = *(byte *)(iVar4 + 0xb);" (assignment_expression "bVar1 = *(byte *)(iVar4 + 0xb)" (identifier "bVar1") (= "=") (pointer_expression "*(byte *)(iVar4 + 0xb)" (* "*") (cast_expression "(byte *)(iVar4 + 0xb)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0xb)" (( "(") (binary_expression "iVar4 + 0xb" (identifier "iVar4") (+ "+") (number_literal "0xb")) () ")"))))) (; ";")) (if_statement "if ((bVar1 & 0x20) == 0) {\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }" (if "if") (parenthesized_expression "((bVar1 & 0x20) == 0)" (( "(") (binary_expression "(bVar1 & 0x20) == 0" (parenthesized_expression "(bVar1 & 0x20)" (( "(") (binary_expression "bVar1 & 0x20" (identifier "bVar1") (& "&") (number_literal "0x20")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);\n  }" ({ "{") (expression_statement "FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);" (call_expression "FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3)" (identifier "FUN_002446e0") (argument_list "("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3)" (( "(") (string_literal ""../../gold/x86_64.cc"" (" """) (string_content "../../gold/x86_64.cc") (" """)) (, ",") (number_literal "0x1717") (, ",") (string_literal ""do_reloc_addend"" (" """) (string_content "do_reloc_addend") (" """)) (, ",") (identifier "uVar3") () ")"))) (; ";")) (} "}"))) (if_statement "if ((char)bVar1 < '\0') {\n    return *(undefined8 *)(iVar4 + 0xc);\n  }" (if "if") (parenthesized_expression "((char)bVar1 < '\0')" (( "(") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    return *(undefined8 *)(iVar4 + 0xc);\n  }" ({ "{") (return_statement "return *(undefined8 *)(iVar4 + 0xc);" (return "return") (pointer_expression "*(undefined8 *)(iVar4 + 0xc)" (* "*") (cast_expression "(undefined8 *)(iVar4 + 0xc)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0xc)" (( "(") (binary_expression "iVar4 + 0xc" (identifier "iVar4") (+ "+") (number_literal "0xc")) () ")")))) (; ";")) (} "}"))) (if_statement "if ((bVar1 & 8) == 0) {\n                    \n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }" (if "if") (parenthesized_expression "((bVar1 & 8) == 0)" (( "(") (binary_expression "(bVar1 & 8) == 0" (parenthesized_expression "(bVar1 & 8)" (( "(") (binary_expression "bVar1 & 8" (identifier "bVar1") (& "&") (number_literal "8")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);\n  }" ({ "{") (expression_statement "FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);" (call_expression "FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1)" (identifier "FUN_002446e0") (argument_list "("../../gold/object.h",0x6ab,"value",bVar1)" (( "(") (string_literal ""../../gold/object.h"" (" """) (string_content "../../gold/object.h") (" """)) (, ",") (number_literal "0x6ab") (, ",") (string_literal ""value"" (" """) (string_content "value") (" """)) (, ",") (identifier "bVar1") () ")"))) (; ";")) (} "}"))) (expression_statement "puVar5 = *(uint **)(iVar4 + 0xc);" (assignment_expression "puVar5 = *(uint **)(iVar4 + 0xc)" (identifier "puVar5") (= "=") (pointer_expression "*(uint **)(iVar4 + 0xc)" (* "*") (cast_expression "(uint **)(iVar4 + 0xc)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar4 + 0xc)" (( "(") (binary_expression "iVar4 + 0xc" (identifier "iVar4") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "uVar3 = *puVar5;" (assignment_expression "uVar3 = *puVar5" (identifier "uVar3") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "uVar7 = uVar3 % puVar5[5];" (assignment_expression "uVar7 = uVar3 % puVar5[5]" (identifier "uVar7") (= "=") (binary_expression "uVar3 % puVar5[5]" (identifier "uVar3") (% "%") (subscript_expression "puVar5[5]" (identifier "puVar5") ([ "[") (number_literal "5") (] "]")))) (; ";")) (expression_statement "piVar9 = *(int **)(puVar5[4] + uVar7 * 4);" (assignment_expression "piVar9 = *(int **)(puVar5[4] + uVar7 * 4)" (identifier "piVar9") (= "=") (pointer_expression "*(int **)(puVar5[4] + uVar7 * 4)" (* "*") (cast_expression "(int **)(puVar5[4] + uVar7 * 4)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar5[4] + uVar7 * 4)" (( "(") (binary_expression "puVar5[4] + uVar7 * 4" (subscript_expression "puVar5[4]" (identifier "puVar5") ([ "[") (number_literal "4") (] "]")) (+ "+") (binary_expression "uVar7 * 4" (identifier "uVar7") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (piVar9 != (int *)0x0) {\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }" (if "if") (parenthesized_expression "(piVar9 != (int *)0x0)" (( "(") (binary_expression "piVar9 != (int *)0x0" (identifier "piVar9") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    uVar10 = ((int *)*piVar9)[1];\n    piVar6 = (int *)*piVar9;\n    while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }\n    if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }\n  }" ({ "{") (expression_statement "uVar10 = ((int *)*piVar9)[1];" (assignment_expression "uVar10 = ((int *)*piVar9)[1]" (identifier "uVar10") (= "=") (subscript_expression "((int *)*piVar9)[1]" (parenthesized_expression "((int *)*piVar9)" (( "(") (cast_expression "(int *)*piVar9" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar9" (* "*") (identifier "piVar9"))) () ")")) ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "piVar6 = (int *)*piVar9;" (assignment_expression "piVar6 = (int *)*piVar9" (identifier "piVar6") (= "=") (cast_expression "(int *)*piVar9" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar9" (* "*") (identifier "piVar9")))) (; ";")) (while_statement "while (piVar8 = piVar6, uVar3 != uVar10) {\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }" (while "while") (parenthesized_expression "(piVar8 = piVar6, uVar3 != uVar10)" (( "(") (comma_expression "piVar8 = piVar6, uVar3 != uVar10" (assignment_expression "piVar8 = piVar6" (identifier "piVar8") (= "=") (identifier "piVar6")) (, ",") (binary_expression "uVar3 != uVar10" (identifier "uVar3") (!= "!=") (identifier "uVar10"))) () ")")) (compound_statement "{\n      piVar6 = (int *)*piVar8;\n      if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;\n    }" ({ "{") (expression_statement "piVar6 = (int *)*piVar8;" (assignment_expression "piVar6 = (int *)*piVar8" (identifier "piVar6") (= "=") (cast_expression "(int *)*piVar8" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar8" (* "*") (identifier "piVar8")))) (; ";")) (if_statement "if ((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;" (if "if") (parenthesized_expression "((piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5]))" (( "(") (binary_expression "(piVar6 == (int *)0x0) ||\n         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])" (parenthesized_expression "(piVar6 == (int *)0x0)" (( "(") (binary_expression "piVar6 == (int *)0x0" (identifier "piVar6") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (|| "||") (parenthesized_expression "(uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])" (( "(") (comma_expression "uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5]" (assignment_expression "uVar10 = piVar6[1]" (identifier "uVar10") (= "=") (subscript_expression "piVar6[1]" (identifier "piVar6") ([ "[") (number_literal "1") (] "]"))) (, ",") (comma_expression "piVar9 = piVar8, uVar7 != uVar10 % puVar5[5]" (assignment_expression "piVar9 = piVar8" (identifier "piVar9") (= "=") (identifier "piVar8")) (, ",") (binary_expression "uVar7 != uVar10 % puVar5[5]" (identifier "uVar7") (!= "!=") (binary_expression "uVar10 % puVar5[5]" (identifier "uVar10") (% "%") (subscript_expression "puVar5[5]" (identifier "puVar5") ([ "[") (number_literal "5") (] "]")))))) () ")"))) () ")")) (goto_statement "goto LAB_0007be54;" (goto "goto") (statement_identifier "LAB_0007be54") (; ";"))) (} "}"))) (if_statement "if (*piVar9 != 0) {\n      return *(undefined8 *)(*piVar9 + 8);\n    }" (if "if") (parenthesized_expression "(*piVar9 != 0)" (( "(") (binary_expression "*piVar9 != 0" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return *(undefined8 *)(*piVar9 + 8);\n    }" ({ "{") (return_statement "return *(undefined8 *)(*piVar9 + 8);" (return "return") (pointer_expression "*(undefined8 *)(*piVar9 + 8)" (* "*") (cast_expression "(undefined8 *)(*piVar9 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*piVar9 + 8)" (( "(") (binary_expression "*piVar9 + 8" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (+ "+") (number_literal "8")) () ")")))) (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_0007be54:\n  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);" (statement_identifier "LAB_0007be54") (: ":") (expression_statement "uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);" (assignment_expression "uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1])" (identifier "uVar11") (= "=") (call_expression "FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1])" (identifier "FUN_00318fd0") (argument_list "(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1])" (( "(") (identifier "puVar5") (, ",") (identifier "iVar2") (, ",") (binary_expression "*(uint *)(iVar4 + 8) & 0x7ffffff" (pointer_expression "*(uint *)(iVar4 + 8)" (* "*") (cast_expression "(uint *)(iVar4 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 8)" (( "(") (binary_expression "iVar4 + 8" (identifier "iVar4") (+ "+") (number_literal "8")) () ")")))) (& "&") (number_literal "0x7ffffff")) (, ",") (identifier "uVar3") (, ",") (subscript_expression "puVar5[1]" (identifier "puVar5") ([ "[") (number_literal "1") (] "]")) () ")")))) (; ";"))) (return_statement "return uVar11;" (return "return") (identifier "uVar11") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* DWARF original prototype: uint64_t do_reloc_addend(Target_x86_64<64> * this, void * arg, uint
   r_type, uint64_t param_3) */

uint64_t __thiscall
anon_unknown.dwarf_32e241::type_1<64>::function_1
          (type_1<64> *this,void *var_4,type_2 var_2,uint64_t param_4)

{
  int var_8;
  type_3 var_9;
  char *var_5;
  type_4 *object;
  type_2 var_7;
  type_5 var_6;
  var_1<64> *this_00;
  type_6 *var_12;
  type_2 var_13;
  type_7 p_Var8;
  type_7 var_10;
  type_6 *var_11;
  type_8 EVar11;
  
  if (var_2 != 0x24) {
                    /* WARNING: Subroutine does not return */
    gold::var_3("../../gold/x86_64.cc",0x1712,"do_reloc_addend");
  }
  var_5 = (this->x86_64_info).attributes_section;
  if ((void *)((int)(this->x86_64_info).attributes_vendor - (int)var_5 >> 3) <= var_4) {
                    /* WARNING: Subroutine does not return */
    gold::var_3("../../gold/x86_64.cc",0x1714,"do_reloc_addend");
  }
  var_5 = var_5 + (int)var_4 * 8;
  object = *(type_4 **)var_5;
  var_7 = *(type_2 *)(var_5 + 4);
  var_6 = object[2].super_Object.name_.field_2._M_allocated_capacity;
  if ((type_2)(((int)(*(int *)((int)&object[2].super_Object.name_.field_2 + 4) - var_6) >> 2) *
            -0x33333333) <= var_7) {
                    /* WARNING: Subroutine does not return */
    gold::var_3("../../gold/object.h",0x8c1,"local_symbol");
  }
  var_8 = var_6 + var_7 * 0x14;
  var_9 = *(type_3 *)(var_8 + 0xb);
  if ((var_9 & 0x20) == 0) {
                    /* WARNING: Subroutine does not return */
    gold::var_3("../../gold/x86_64.cc",0x1717,"do_reloc_addend");
  }
  if ((char)var_9 < '\0') {
    return *(uint64_t *)(var_8 + 0xc);
  }
  if ((var_9 & 8) == 0) {
                    /* WARNING: Subroutine does not return */
    gold::var_3("../../gold/object.h",0x6ab,"value");
  }
  this_00 = *(var_1<64> **)(var_8 + 0xc);
  var_7 = (this_00->output_addresses_)._M_h._M_bucket_count;
  var_13 = (type_2)*(type_6 **)&this_00->input_value_ % var_7;
  var_10 = (this_00->output_addresses_)._M_h._M_buckets[var_13];
  if (var_10 != (type_7)0x0) {
    var_11 = var_10->_M_nxt[1]._M_nxt;
    var_12 = var_10->_M_nxt;
    while (p_Var8 = var_12, *(type_6 **)&this_00->input_value_ != var_11) {
      var_12 = p_Var8->_M_nxt;
      if ((var_12 == (type_6 *)0x0) ||
         (var_11 = var_12[1]._M_nxt, var_10 = p_Var8, var_13 != (type_2)var_11 % var_7))
      goto LAB_0007be54;
    }
    if (var_10->_M_nxt != (type_6 *)0x0) {
      return *(uint64_t *)(var_10->_M_nxt + 2);
    }
  }
LAB_0007be54:
  EVar11 = gold::var_1<64>::var_14
                     (this_00,object,*(type_2 *)(var_8 + 8) & 0x7ffffff,this_00->input_value_);
  return EVar11;
}


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

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

undefined8 MASKED(int param_1,uint param_2,int param_3)

{
  byte bVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  uint *puVar5;
  int *piVar6;
  uint uVar7;
  int *piVar8;
  int *piVar9;
  uint uVar10;
  undefined8 uVar11;
  
  if (param_3 != 0x24) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/x86_64.cc",0x1712,"do_reloc_addend");
  }
  if ((uint)(*(int *)(param_1 + 0x54) - *(int *)(param_1 + 0x50) >> 3) <= param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/x86_64.cc",0x1714,"do_reloc_addend");
  }
  piVar9 = (int *)(*(int *)(param_1 + 0x50) + param_2 * 8);
  iVar2 = *piVar9;
  uVar3 = piVar9[1];
  iVar4 = *(int *)(iVar2 + 0xdc);
  if ((uint)((*(int *)(iVar2 + 0xe0) - iVar4 >> 2) * -0x33333333) <= uVar3) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/object.h",0x8c1,"local_symbol",iVar4);
  }
  iVar4 = iVar4 + uVar3 * 0x14;
  bVar1 = *(byte *)(iVar4 + 0xb);
  if ((bVar1 & 0x20) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/x86_64.cc",0x1717,"do_reloc_addend",uVar3);
  }
  if ((char)bVar1 < '\0') {
    return *(undefined8 *)(iVar4 + 0xc);
  }
  if ((bVar1 & 8) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_002446e0("../../gold/object.h",0x6ab,"value",bVar1);
  }
  puVar5 = *(uint **)(iVar4 + 0xc);
  uVar3 = *puVar5;
  uVar7 = uVar3 % puVar5[5];
  piVar9 = *(int **)(puVar5[4] + uVar7 * 4);
  if (piVar9 != (int *)0x0) {
    uVar10 = ((int *)*piVar9)[1];
    piVar6 = (int *)*piVar9;
    while (piVar8 = piVar6, uVar3 != uVar10) {
      piVar6 = (int *)*piVar8;
      if ((piVar6 == (int *)0x0) ||
         (uVar10 = piVar6[1], piVar9 = piVar8, uVar7 != uVar10 % puVar5[5])) goto LAB_0007be54;
    }
    if (*piVar9 != 0) {
      return *(undefined8 *)(*piVar9 + 8);
    }
  }
LAB_0007be54:
  uVar11 = FUN_00318fd0(puVar5,iVar2,*(uint *)(iVar4 + 8) & 0x7ffffff,uVar3,puVar5[1]);
  return uVar11;
}

