
/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */
/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */
/* DWARF original prototype: Value value(Merged_symbol_value<64> * this, Relobj * object, uint
   input_shndx, Value addend) */

Value __thiscall
gold::Merged_symbol_value<64>::value
          (Merged_symbol_value<64> *this,Relobj *object,uint input_shndx,Value addend)

{
  _Hash_node_base *p_Var1;
  uint uVar2;
  _Hash_node_base *p_Var3;
  __bucket_type p_Var4;
  __bucket_type p_Var5;
  __bucket_type p_Var6;
  int iVar7;
  Elf_Addr EVar8;
  
  iVar7 = *(int *)&this->input_value_;
  p_Var1 = *(_Hash_node_base **)((int)&this->input_value_ + 4);
  if ((addend._0_4_ == 0) &&
     (p_Var3 = (_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_), addend._4_4_ < 0xffffff00))
  {
    addend._4_4_ = 0;
    iVar7 = (uint)(p_Var3 < p_Var1) + iVar7;
    p_Var1 = p_Var3;
  }
  uVar2 = (this->output_addresses_)._M_h._M_bucket_count;
  if (uVar2 == 0) {
    trap(7);
  }
  p_Var5 = (this->output_addresses_)._M_h._M_buckets[(uint)p_Var1 % uVar2];
  if (p_Var5 != (__bucket_type)0x0) {
    p_Var3 = p_Var5->_M_nxt[2]._M_nxt;
    p_Var6 = p_Var5->_M_nxt;
    do {
      p_Var4 = p_Var6;
      if (p_Var1 == p_Var3) {
        p_Var3 = p_Var5->_M_nxt;
        if (p_Var3 != (_Hash_node_base *)0x0) {
          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;
          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +
                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);
        }
        break;
      }
      p_Var6 = p_Var4->_M_nxt;
      if (p_Var6 == (_Hash_node_base *)0x0) break;
      p_Var3 = p_Var6[2]._M_nxt;
      if (uVar2 == 0) {
        trap(7);
      }
      p_Var5 = p_Var4;
    } while ((uint)p_Var1 % uVar2 == (uint)p_Var3 % uVar2);
  }
  EVar8 = value_from_output_section(this,object,input_shndx,CONCAT44(iVar7,p_Var1));
  return EVar8 + CONCAT44(addend._0_4_,addend._4_4_);
}



int FUN_001f53a4(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,
                uint param_6)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  int *piVar5;
  int *piVar6;
  int *piVar7;
  int iVar8;
  undefined8 uVar9;
  
  iVar8 = *(int *)param_1;
  uVar1 = *(uint *)(param_1 + 4);
  if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {
    param_6 = 0;
    iVar8 = (uint)(uVar2 < uVar1) + iVar8;
    uVar1 = uVar2;
  }
  uVar2 = *(uint *)(param_1 + 0x14);
  if (uVar2 == 0) {
    trap(7);
  }
  piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);
  if (piVar6 != (int *)0x0) {
    uVar3 = ((int *)*piVar6)[2];
    piVar7 = (int *)*piVar6;
    do {
      piVar5 = piVar7;
      if (uVar1 == uVar3) {
        iVar4 = *piVar6;
        if (iVar4 != 0) {
          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +
                 param_5 + *(int *)(iVar4 + 0x10);
        }
        break;
      }
      piVar7 = (int *)*piVar5;
      if (piVar7 == (int *)0x0) break;
      uVar3 = piVar7[2];
      if (uVar2 == 0) {
        trap(7);
      }
      piVar6 = piVar5;
    } while (uVar1 % uVar2 == uVar3 % uVar2);
  }
  uVar9 = gold::Merged_symbol_value<64>::value_from_output_section
                    (param_1,param_2,CONCAT44(iVar8,uVar1));
  return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);
}


lui gp,0x24
addiu gp,gp,0x4e2c
addu gp,gp,t9
addiu sp,sp,-0x30
lw t4,0x0(a0)
lw v0,0x4(a0)
sw s1,0x28(sp)
sw gp,0x18(sp)
sw s0,0x24(sp)
sw ra,0x2c(sp)
lw s1,0x40(sp)
bne s1,zero,0x001f53e4
_lw s0,0x44(sp)
sltiu v1,s0,-0x100
bne v1,zero,0x001f547c
_addu v1,v0,s0
lw v1,0x14(a0)
lw a3,0x10(a0)
teq v1,zero
divu v0,v1
mfhi t3
sll t0,t3,0x2
addu a3,a3,t0
lw t1,0x0(a3)
beq t1,zero,0x001f5494
_lw t9,-0x5e18(gp)
lw t0,0x0(t1)
b 0x001f5440
_lw a3,0x8(t0)
lw t2,0x0(t0)
beq t2,zero,0x001f5490
_or t1,t0,zero
lw a3,0x8(t2)
or t0,t2,zero
teq v1,zero
divu a3,v1
mfhi t2
bne t3,t2,0x001f5494
_lw t9,-0x5e18(gp)
bne v0,a3,0x001f5418
_nop
lw a3,0x0(t1)
beq a3,zero,0x001f5490
_lw ra,0x2c(sp)
lw v1,0x14(a3)
lw v0,0x10(a3)
addu v1,s0,v1
addu v0,s1,v0
lw s1,0x28(sp)
sltu s0,v1,s0
addu v0,s0,v0
lw s0,0x24(sp)
jr ra
_addiu sp,sp,0x30
or s0,zero,zero
sltu v0,v1,v0
addu t4,v0,t4
b 0x001f53e4
_or v0,v1,zero
lw t9,-0x5e18(gp)
sw t4,0x10(sp)
bal 0x001f52f0
_sw v0,0x14(sp)
addu v1,s0,v1
lw ra,0x2c(sp)
addu v0,s1,v0
lw s1,0x28(sp)
sltu s0,v1,s0
addu v0,s0,v0
lw s0,0x24(sp)
jr ra
_addiu sp,sp,0x30
(translation_unit "int FUN_001f53a4(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  int *piVar5;\n  int *piVar6;\n  int *piVar7;\n  int iVar8;\n  undefined8 uVar9;\n  \n  iVar8 = *(int *)param_1;\n  uVar1 = *(uint *)(param_1 + 4);\n  if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }\n  uVar2 = *(uint *)(param_1 + 0x14);\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);\n  if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }\n  uVar9 = gold::Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));\n  return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);\n}\n\n" (function_definition "int FUN_001f53a4(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  int *piVar5;\n  int *piVar6;\n  int *piVar7;\n  int iVar8;\n  undefined8 uVar9;\n  \n  iVar8 = *(int *)param_1;\n  uVar1 = *(uint *)(param_1 + 4);\n  if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }\n  uVar2 = *(uint *)(param_1 + 0x14);\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);\n  if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }\n  uVar9 = gold::Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));\n  return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);\n}" primitive_type (function_declarator "FUN_001f53a4(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)" identifier (parameter_list "(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)" ( (parameter_declaration "Relobj *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "uint param_6" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  int *piVar5;\n  int *piVar6;\n  int *piVar7;\n  int iVar8;\n  undefined8 uVar9;\n  \n  iVar8 = *(int *)param_1;\n  uVar1 = *(uint *)(param_1 + 4);\n  if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }\n  uVar2 = *(uint *)(param_1 + 0x14);\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);\n  if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }\n  uVar9 = gold::Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));\n  return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "undefined8 uVar9;" type_identifier identifier ;) (expression_statement "iVar8 = *(int *)param_1;" (assignment_expression "iVar8 = *(int *)param_1" identifier = (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "uVar1 = *(uint *)(param_1 + 4);" (assignment_expression "uVar1 = *(uint *)(param_1 + 4)" identifier = (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }" if (parenthesized_expression "((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00))" ( (binary_expression "(param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)" (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) && (parenthesized_expression "(uVar2 = uVar1 + param_6, param_6 < 0xffffff00)" ( (comma_expression "uVar2 = uVar1 + param_6, param_6 < 0xffffff00" (assignment_expression "uVar2 = uVar1 + param_6" identifier = (binary_expression "uVar1 + param_6" identifier + identifier)) , (binary_expression "param_6 < 0xffffff00" identifier < number_literal)) ))) )) (compound_statement "{\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }" { (expression_statement "param_6 = 0;" (assignment_expression "param_6 = 0" identifier = number_literal) ;) (expression_statement "iVar8 = (uint)(uVar2 < uVar1) + iVar8;" (assignment_expression "iVar8 = (uint)(uVar2 < uVar1) + iVar8" identifier = (binary_expression "(uint)(uVar2 < uVar1) + iVar8" (call_expression "(uint)(uVar2 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) ))) + identifier)) ;) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) })) (expression_statement "uVar2 = *(uint *)(param_1 + 0x14);" (assignment_expression "uVar2 = *(uint *)(param_1 + 0x14)" identifier = (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (if_statement "if (uVar2 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);" (assignment_expression "piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" identifier = (pointer_expression "*(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" * (cast_expression "(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" ( (binary_expression "*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + (binary_expression "(uVar1 % uVar2) * 4" (parenthesized_expression "(uVar1 % uVar2)" ( (binary_expression "uVar1 % uVar2" identifier % identifier) )) * number_literal)) ))))) ;) (if_statement "if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }" if (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)) )) (compound_statement "{\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }" { (expression_statement "uVar3 = ((int *)*piVar6)[2];" (assignment_expression "uVar3 = ((int *)*piVar6)[2]" identifier = (subscript_expression "((int *)*piVar6)[2]" (parenthesized_expression "((int *)*piVar6)" ( (cast_expression "(int *)*piVar6" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar6" * identifier)) )) [ number_literal ])) ;) (expression_statement "piVar7 = (int *)*piVar6;" (assignment_expression "piVar7 = (int *)*piVar6" identifier = (cast_expression "(int *)*piVar6" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar6" * identifier))) ;) (do_statement "do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);" do (compound_statement "{\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    }" { (expression_statement "piVar5 = piVar7;" (assignment_expression "piVar5 = piVar7" identifier = identifier) ;) (if_statement "if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }" if (parenthesized_expression "(uVar1 == uVar3)" ( (binary_expression "uVar1 == uVar3" identifier == identifier) )) (compound_statement "{\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }" { (expression_statement "iVar4 = *piVar6;" (assignment_expression "iVar4 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (if_statement "if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }" { (return_statement "return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);" return (binary_expression "(uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10)" (binary_expression "(uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5" (call_expression "(uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_6 + *(int *)(iVar4 + 0x14) < param_6)" ( (binary_expression "param_6 + *(int *)(iVar4 + 0x14) < param_6" (binary_expression "param_6 + *(int *)(iVar4 + 0x14)" identifier + (pointer_expression "*(int *)(iVar4 + 0x14)" * (cast_expression "(int *)(iVar4 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x14)" ( (binary_expression "iVar4 + 0x14" identifier + number_literal) ))))) < identifier) ))) + identifier) + (pointer_expression "*(int *)(iVar4 + 0x10)" * (cast_expression "(int *)(iVar4 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x10)" ( (binary_expression "iVar4 + 0x10" identifier + number_literal) ))))) ;) })) (break_statement "break;" break ;) })) (expression_statement "piVar7 = (int *)*piVar5;" (assignment_expression "piVar7 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) (if_statement "if (piVar7 == (int *)0x0) break;" if (parenthesized_expression "(piVar7 == (int *)0x0)" ( (binary_expression "piVar7 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = piVar7[2];" (assignment_expression "uVar3 = piVar7[2]" identifier = (subscript_expression "piVar7[2]" identifier [ number_literal ])) ;) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "piVar6 = piVar5;" (assignment_expression "piVar6 = piVar5" identifier = identifier) ;) }) while (parenthesized_expression "(uVar1 % uVar2 == uVar3 % uVar2)" ( (binary_expression "uVar1 % uVar2 == uVar3 % uVar2" (binary_expression "uVar1 % uVar2" identifier % identifier) == (binary_expression "uVar3 % uVar2" identifier % identifier)) )) ;) })) (ERROR "uVar9 = gold::" (assignment_expression "uVar9 = gold" identifier = identifier) : :) (expression_statement "Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));" (binary_expression "Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1))" (binary_expression "Merged_symbol_value<64" identifier < number_literal) > (ERROR "::" : :) (call_expression "value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1))" identifier (argument_list "(param_1,param_2,CONCAT44(iVar8,uVar1))" ( identifier , identifier , (call_expression "CONCAT44(iVar8,uVar1)" identifier (argument_list "(iVar8,uVar1)" ( identifier , identifier ))) )))) ;) (return_statement "return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);" return (binary_expression "(uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20)" (binary_expression "(uint)(param_6 + (int)uVar9 < param_6) + param_5" (call_expression "(uint)(param_6 + (int)uVar9 < param_6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_6 + (int)uVar9 < param_6)" ( (binary_expression "param_6 + (int)uVar9 < param_6" (binary_expression "param_6 + (int)uVar9" identifier + (cast_expression "(int)uVar9" ( (type_descriptor "int" primitive_type) ) identifier)) < identifier) ))) + identifier) + (cast_expression "(int)((ulonglong)uVar9 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar9 >> 0x20)" ( (binary_expression "(ulonglong)uVar9 >> 0x20" (cast_expression "(ulonglong)uVar9" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) })))
(translation_unit "/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */\n/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */\n/* DWARF original prototype: Value value(Merged_symbol_value<64> * this, Relobj * object, uint\n   input_shndx, Value addend) */\n\nValue __thiscall\ngold::Merged_symbol_value<64>::value\n          (Merged_symbol_value<64> *this,Relobj *object,uint input_shndx,Value addend)\n\n{\n  _Hash_node_base *p_Var1;\n  uint uVar2;\n  _Hash_node_base *p_Var3;\n  __bucket_type p_Var4;\n  __bucket_type p_Var5;\n  __bucket_type p_Var6;\n  int iVar7;\n  Elf_Addr EVar8;\n  \n  iVar7 = *(int *)&this->input_value_;\n  p_Var1 = *(_Hash_node_base **)((int)&this->input_value_ + 4);\n  if ((addend._0_4_ == 0) &&\n     (p_Var3 = (_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_), addend._4_4_ < 0xffffff00))\n  {\n    addend._4_4_ = 0;\n    iVar7 = (uint)(p_Var3 < p_Var1) + iVar7;\n    p_Var1 = p_Var3;\n  }\n  uVar2 = (this->output_addresses_)._M_h._M_bucket_count;\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  p_Var5 = (this->output_addresses_)._M_h._M_buckets[(uint)p_Var1 % uVar2];\n  if (p_Var5 != (__bucket_type)0x0) {\n    p_Var3 = p_Var5->_M_nxt[2]._M_nxt;\n    p_Var6 = p_Var5->_M_nxt;\n    do {\n      p_Var4 = p_Var6;\n      if (p_Var1 == p_Var3) {\n        p_Var3 = p_Var5->_M_nxt;\n        if (p_Var3 != (_Hash_node_base *)0x0) {\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }\n        break;\n      }\n      p_Var6 = p_Var4->_M_nxt;\n      if (p_Var6 == (_Hash_node_base *)0x0) break;\n      p_Var3 = p_Var6[2]._M_nxt;\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      p_Var5 = p_Var4;\n    } while ((uint)p_Var1 % uVar2 == (uint)p_Var3 % uVar2);\n  }\n  EVar8 = value_from_output_section(this,object,input_shndx,CONCAT44(iVar7,p_Var1));\n  return EVar8 + CONCAT44(addend._0_4_,addend._4_4_);\n}\n\n" comment comment comment (function_definition "Value __thiscall\ngold::Merged_symbol_value<64>::value\n          (Merged_symbol_value<64> *this,Relobj *object,uint input_shndx,Value addend)\n\n{\n  _Hash_node_base *p_Var1;\n  uint uVar2;\n  _Hash_node_base *p_Var3;\n  __bucket_type p_Var4;\n  __bucket_type p_Var5;\n  __bucket_type p_Var6;\n  int iVar7;\n  Elf_Addr EVar8;\n  \n  iVar7 = *(int *)&this->input_value_;\n  p_Var1 = *(_Hash_node_base **)((int)&this->input_value_ + 4);\n  if ((addend._0_4_ == 0) &&\n     (p_Var3 = (_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_), addend._4_4_ < 0xffffff00))\n  {\n    addend._4_4_ = 0;\n    iVar7 = (uint)(p_Var3 < p_Var1) + iVar7;\n    p_Var1 = p_Var3;\n  }\n  uVar2 = (this->output_addresses_)._M_h._M_bucket_count;\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  p_Var5 = (this->output_addresses_)._M_h._M_buckets[(uint)p_Var1 % uVar2];\n  if (p_Var5 != (__bucket_type)0x0) {\n    p_Var3 = p_Var5->_M_nxt[2]._M_nxt;\n    p_Var6 = p_Var5->_M_nxt;\n    do {\n      p_Var4 = p_Var6;\n      if (p_Var1 == p_Var3) {\n        p_Var3 = p_Var5->_M_nxt;\n        if (p_Var3 != (_Hash_node_base *)0x0) {\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }\n        break;\n      }\n      p_Var6 = p_Var4->_M_nxt;\n      if (p_Var6 == (_Hash_node_base *)0x0) break;\n      p_Var3 = p_Var6[2]._M_nxt;\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      p_Var5 = p_Var4;\n    } while ((uint)p_Var1 % uVar2 == (uint)p_Var3 % uVar2);\n  }\n  EVar8 = value_from_output_section(this,object,input_shndx,CONCAT44(iVar7,p_Var1));\n  return EVar8 + CONCAT44(addend._0_4_,addend._4_4_);\n}" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Merged_symbol_value<64>::" identifier : : identifier < number_literal > : :) (function_declarator "value\n          (Merged_symbol_value<64> *this,Relobj *object,uint input_shndx,Value addend)" identifier (parameter_list "(Merged_symbol_value<64> *this,Relobj *object,uint input_shndx,Value addend)" ( (parameter_declaration "Merged_symbol_value<64> *this" type_identifier (ERROR "<64>" < number_literal >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Relobj *object" type_identifier (pointer_declarator "*object" * identifier)) , (parameter_declaration "uint input_shndx" type_identifier identifier) , (parameter_declaration "Value addend" type_identifier identifier) ))) (compound_statement "{\n  _Hash_node_base *p_Var1;\n  uint uVar2;\n  _Hash_node_base *p_Var3;\n  __bucket_type p_Var4;\n  __bucket_type p_Var5;\n  __bucket_type p_Var6;\n  int iVar7;\n  Elf_Addr EVar8;\n  \n  iVar7 = *(int *)&this->input_value_;\n  p_Var1 = *(_Hash_node_base **)((int)&this->input_value_ + 4);\n  if ((addend._0_4_ == 0) &&\n     (p_Var3 = (_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_), addend._4_4_ < 0xffffff00))\n  {\n    addend._4_4_ = 0;\n    iVar7 = (uint)(p_Var3 < p_Var1) + iVar7;\n    p_Var1 = p_Var3;\n  }\n  uVar2 = (this->output_addresses_)._M_h._M_bucket_count;\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  p_Var5 = (this->output_addresses_)._M_h._M_buckets[(uint)p_Var1 % uVar2];\n  if (p_Var5 != (__bucket_type)0x0) {\n    p_Var3 = p_Var5->_M_nxt[2]._M_nxt;\n    p_Var6 = p_Var5->_M_nxt;\n    do {\n      p_Var4 = p_Var6;\n      if (p_Var1 == p_Var3) {\n        p_Var3 = p_Var5->_M_nxt;\n        if (p_Var3 != (_Hash_node_base *)0x0) {\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }\n        break;\n      }\n      p_Var6 = p_Var4->_M_nxt;\n      if (p_Var6 == (_Hash_node_base *)0x0) break;\n      p_Var3 = p_Var6[2]._M_nxt;\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      p_Var5 = p_Var4;\n    } while ((uint)p_Var1 % uVar2 == (uint)p_Var3 % uVar2);\n  }\n  EVar8 = value_from_output_section(this,object,input_shndx,CONCAT44(iVar7,p_Var1));\n  return EVar8 + CONCAT44(addend._0_4_,addend._4_4_);\n}" { (declaration "_Hash_node_base *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "_Hash_node_base *p_Var3;" type_identifier (pointer_declarator "*p_Var3" * identifier) ;) (declaration "__bucket_type p_Var4;" type_identifier identifier ;) (declaration "__bucket_type p_Var5;" type_identifier identifier ;) (declaration "__bucket_type p_Var6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "Elf_Addr EVar8;" type_identifier identifier ;) (expression_statement "iVar7 = *(int *)&this->input_value_;" (assignment_expression "iVar7 = *(int *)&this->input_value_" identifier = (pointer_expression "*(int *)&this->input_value_" * (cast_expression "(int *)&this->input_value_" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->input_value_" & (field_expression "this->input_value_" identifier -> field_identifier))))) ;) (expression_statement "p_Var1 = *(_Hash_node_base **)((int)&this->input_value_ + 4);" (assignment_expression "p_Var1 = *(_Hash_node_base **)((int)&this->input_value_ + 4)" identifier = (pointer_expression "*(_Hash_node_base **)((int)&this->input_value_ + 4)" * (cast_expression "(_Hash_node_base **)((int)&this->input_value_ + 4)" ( (type_descriptor "_Hash_node_base **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)&this->input_value_ + 4)" ( (binary_expression "(int)&this->input_value_ + 4" (cast_expression "(int)&this->input_value_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&this->input_value_" & (field_expression "this->input_value_" identifier -> field_identifier))) + number_literal) ))))) ;) (if_statement "if ((addend._0_4_ == 0) &&\n     (p_Var3 = (_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_), addend._4_4_ < 0xffffff00))\n  {\n    addend._4_4_ = 0;\n    iVar7 = (uint)(p_Var3 < p_Var1) + iVar7;\n    p_Var1 = p_Var3;\n  }" if (parenthesized_expression "((addend._0_4_ == 0) &&\n     (p_Var3 = (_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_), addend._4_4_ < 0xffffff00))" ( (binary_expression "(addend._0_4_ == 0) &&\n     (p_Var3 = (_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_), addend._4_4_ < 0xffffff00)" (parenthesized_expression "(addend._0_4_ == 0)" ( (binary_expression "addend._0_4_ == 0" (field_expression "addend._0_4_" identifier . field_identifier) == number_literal) )) && (parenthesized_expression "(p_Var3 = (_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_), addend._4_4_ < 0xffffff00)" ( (comma_expression "p_Var3 = (_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_), addend._4_4_ < 0xffffff00" (assignment_expression "p_Var3 = (_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_)" identifier = (cast_expression "(_Hash_node_base *)((int)&p_Var1->_M_nxt + addend._4_4_)" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&p_Var1->_M_nxt + addend._4_4_)" ( (binary_expression "(int)&p_Var1->_M_nxt + addend._4_4_" (cast_expression "(int)&p_Var1->_M_nxt" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&p_Var1->_M_nxt" & (field_expression "p_Var1->_M_nxt" identifier -> field_identifier))) + (field_expression "addend._4_4_" identifier . field_identifier)) )))) , (binary_expression "addend._4_4_ < 0xffffff00" (field_expression "addend._4_4_" identifier . field_identifier) < number_literal)) ))) )) (compound_statement "{\n    addend._4_4_ = 0;\n    iVar7 = (uint)(p_Var3 < p_Var1) + iVar7;\n    p_Var1 = p_Var3;\n  }" { (expression_statement "addend._4_4_ = 0;" (assignment_expression "addend._4_4_ = 0" (field_expression "addend._4_4_" identifier . field_identifier) = number_literal) ;) (expression_statement "iVar7 = (uint)(p_Var3 < p_Var1) + iVar7;" (assignment_expression "iVar7 = (uint)(p_Var3 < p_Var1) + iVar7" identifier = (binary_expression "(uint)(p_Var3 < p_Var1) + iVar7" (call_expression "(uint)(p_Var3 < p_Var1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(p_Var3 < p_Var1)" ( (binary_expression "p_Var3 < p_Var1" identifier < identifier) ))) + identifier)) ;) (expression_statement "p_Var1 = p_Var3;" (assignment_expression "p_Var1 = p_Var3" identifier = identifier) ;) })) (expression_statement "uVar2 = (this->output_addresses_)._M_h._M_bucket_count;" (assignment_expression "uVar2 = (this->output_addresses_)._M_h._M_bucket_count" identifier = (field_expression "(this->output_addresses_)._M_h._M_bucket_count" (field_expression "(this->output_addresses_)._M_h" (parenthesized_expression "(this->output_addresses_)" ( (field_expression "this->output_addresses_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if (uVar2 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "p_Var5 = (this->output_addresses_)._M_h._M_buckets[(uint)p_Var1 % uVar2];" (assignment_expression "p_Var5 = (this->output_addresses_)._M_h._M_buckets[(uint)p_Var1 % uVar2]" identifier = (subscript_expression "(this->output_addresses_)._M_h._M_buckets[(uint)p_Var1 % uVar2]" (field_expression "(this->output_addresses_)._M_h._M_buckets" (field_expression "(this->output_addresses_)._M_h" (parenthesized_expression "(this->output_addresses_)" ( (field_expression "this->output_addresses_" identifier -> field_identifier) )) . field_identifier) . field_identifier) [ (binary_expression "(uint)p_Var1 % uVar2" (cast_expression "(uint)p_Var1" ( (type_descriptor "uint" type_identifier) ) identifier) % identifier) ])) ;) (if_statement "if (p_Var5 != (__bucket_type)0x0) {\n    p_Var3 = p_Var5->_M_nxt[2]._M_nxt;\n    p_Var6 = p_Var5->_M_nxt;\n    do {\n      p_Var4 = p_Var6;\n      if (p_Var1 == p_Var3) {\n        p_Var3 = p_Var5->_M_nxt;\n        if (p_Var3 != (_Hash_node_base *)0x0) {\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }\n        break;\n      }\n      p_Var6 = p_Var4->_M_nxt;\n      if (p_Var6 == (_Hash_node_base *)0x0) break;\n      p_Var3 = p_Var6[2]._M_nxt;\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      p_Var5 = p_Var4;\n    } while ((uint)p_Var1 % uVar2 == (uint)p_Var3 % uVar2);\n  }" if (parenthesized_expression "(p_Var5 != (__bucket_type)0x0)" ( (binary_expression "p_Var5 != (__bucket_type)0x0" identifier != (cast_expression "(__bucket_type)0x0" ( (type_descriptor "__bucket_type" type_identifier) ) number_literal)) )) (compound_statement "{\n    p_Var3 = p_Var5->_M_nxt[2]._M_nxt;\n    p_Var6 = p_Var5->_M_nxt;\n    do {\n      p_Var4 = p_Var6;\n      if (p_Var1 == p_Var3) {\n        p_Var3 = p_Var5->_M_nxt;\n        if (p_Var3 != (_Hash_node_base *)0x0) {\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }\n        break;\n      }\n      p_Var6 = p_Var4->_M_nxt;\n      if (p_Var6 == (_Hash_node_base *)0x0) break;\n      p_Var3 = p_Var6[2]._M_nxt;\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      p_Var5 = p_Var4;\n    } while ((uint)p_Var1 % uVar2 == (uint)p_Var3 % uVar2);\n  }" { (expression_statement "p_Var3 = p_Var5->_M_nxt[2]._M_nxt;" (assignment_expression "p_Var3 = p_Var5->_M_nxt[2]._M_nxt" identifier = (field_expression "p_Var5->_M_nxt[2]._M_nxt" (subscript_expression "p_Var5->_M_nxt[2]" (field_expression "p_Var5->_M_nxt" identifier -> field_identifier) [ number_literal ]) . field_identifier)) ;) (expression_statement "p_Var6 = p_Var5->_M_nxt;" (assignment_expression "p_Var6 = p_Var5->_M_nxt" identifier = (field_expression "p_Var5->_M_nxt" identifier -> field_identifier)) ;) (do_statement "do {\n      p_Var4 = p_Var6;\n      if (p_Var1 == p_Var3) {\n        p_Var3 = p_Var5->_M_nxt;\n        if (p_Var3 != (_Hash_node_base *)0x0) {\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }\n        break;\n      }\n      p_Var6 = p_Var4->_M_nxt;\n      if (p_Var6 == (_Hash_node_base *)0x0) break;\n      p_Var3 = p_Var6[2]._M_nxt;\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      p_Var5 = p_Var4;\n    } while ((uint)p_Var1 % uVar2 == (uint)p_Var3 % uVar2);" do (compound_statement "{\n      p_Var4 = p_Var6;\n      if (p_Var1 == p_Var3) {\n        p_Var3 = p_Var5->_M_nxt;\n        if (p_Var3 != (_Hash_node_base *)0x0) {\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }\n        break;\n      }\n      p_Var6 = p_Var4->_M_nxt;\n      if (p_Var6 == (_Hash_node_base *)0x0) break;\n      p_Var3 = p_Var6[2]._M_nxt;\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      p_Var5 = p_Var4;\n    }" { (expression_statement "p_Var4 = p_Var6;" (assignment_expression "p_Var4 = p_Var6" identifier = identifier) ;) (if_statement "if (p_Var1 == p_Var3) {\n        p_Var3 = p_Var5->_M_nxt;\n        if (p_Var3 != (_Hash_node_base *)0x0) {\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }\n        break;\n      }" if (parenthesized_expression "(p_Var1 == p_Var3)" ( (binary_expression "p_Var1 == p_Var3" identifier == identifier) )) (compound_statement "{\n        p_Var3 = p_Var5->_M_nxt;\n        if (p_Var3 != (_Hash_node_base *)0x0) {\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }\n        break;\n      }" { (expression_statement "p_Var3 = p_Var5->_M_nxt;" (assignment_expression "p_Var3 = p_Var5->_M_nxt" identifier = (field_expression "p_Var5->_M_nxt" identifier -> field_identifier)) ;) (if_statement "if (p_Var3 != (_Hash_node_base *)0x0) {\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }" if (parenthesized_expression "(p_Var3 != (_Hash_node_base *)0x0)" ( (binary_expression "p_Var3 != (_Hash_node_base *)0x0" identifier != (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;\n          return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);\n        }" { (expression_statement "uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_;" (assignment_expression "uVar2 = (int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_" identifier = (binary_expression "(int)&(p_Var3[5]._M_nxt)->_M_nxt + addend._4_4_" (cast_expression "(int)&(p_Var3[5]._M_nxt)->_M_nxt" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(p_Var3[5]._M_nxt)->_M_nxt" & (field_expression "(p_Var3[5]._M_nxt)->_M_nxt" (parenthesized_expression "(p_Var3[5]._M_nxt)" ( (field_expression "p_Var3[5]._M_nxt" (subscript_expression "p_Var3[5]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier))) + (field_expression "addend._4_4_" identifier . field_identifier))) ;) (return_statement "return CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2);" return (call_expression "CONCAT44((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2)" identifier (argument_list "((int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_,uVar2)" ( (binary_expression "(int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_) + addend._0_4_" (binary_expression "(int)&(p_Var3[4]._M_nxt)->_M_nxt +\n                          (uint)(uVar2 < addend._4_4_)" (cast_expression "(int)&(p_Var3[4]._M_nxt)->_M_nxt" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(p_Var3[4]._M_nxt)->_M_nxt" & (field_expression "(p_Var3[4]._M_nxt)->_M_nxt" (parenthesized_expression "(p_Var3[4]._M_nxt)" ( (field_expression "p_Var3[4]._M_nxt" (subscript_expression "p_Var3[4]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier))) + (call_expression "(uint)(uVar2 < addend._4_4_)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < addend._4_4_)" ( (binary_expression "uVar2 < addend._4_4_" identifier < (field_expression "addend._4_4_" identifier . field_identifier)) )))) + (field_expression "addend._0_4_" identifier . field_identifier)) , identifier ))) ;) })) (break_statement "break;" break ;) })) (expression_statement "p_Var6 = p_Var4->_M_nxt;" (assignment_expression "p_Var6 = p_Var4->_M_nxt" identifier = (field_expression "p_Var4->_M_nxt" identifier -> field_identifier)) ;) (if_statement "if (p_Var6 == (_Hash_node_base *)0x0) break;" if (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)) )) (break_statement "break;" break ;)) (expression_statement "p_Var3 = p_Var6[2]._M_nxt;" (assignment_expression "p_Var3 = p_Var6[2]._M_nxt" identifier = (field_expression "p_Var6[2]._M_nxt" (subscript_expression "p_Var6[2]" identifier [ number_literal ]) . field_identifier)) ;) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "p_Var5 = p_Var4;" (assignment_expression "p_Var5 = p_Var4" identifier = identifier) ;) }) while (parenthesized_expression "((uint)p_Var1 % uVar2 == (uint)p_Var3 % uVar2)" ( (binary_expression "(uint)p_Var1 % uVar2 == (uint)p_Var3 % uVar2" (binary_expression "(uint)p_Var1 % uVar2" (cast_expression "(uint)p_Var1" ( (type_descriptor "uint" type_identifier) ) identifier) % identifier) == (binary_expression "(uint)p_Var3 % uVar2" (cast_expression "(uint)p_Var3" ( (type_descriptor "uint" type_identifier) ) identifier) % identifier)) )) ;) })) (expression_statement "EVar8 = value_from_output_section(this,object,input_shndx,CONCAT44(iVar7,p_Var1));" (assignment_expression "EVar8 = value_from_output_section(this,object,input_shndx,CONCAT44(iVar7,p_Var1))" identifier = (call_expression "value_from_output_section(this,object,input_shndx,CONCAT44(iVar7,p_Var1))" identifier (argument_list "(this,object,input_shndx,CONCAT44(iVar7,p_Var1))" ( identifier , identifier , identifier , (call_expression "CONCAT44(iVar7,p_Var1)" identifier (argument_list "(iVar7,p_Var1)" ( identifier , identifier ))) )))) ;) (return_statement "return EVar8 + CONCAT44(addend._0_4_,addend._4_4_);" return (binary_expression "EVar8 + CONCAT44(addend._0_4_,addend._4_4_)" identifier + (call_expression "CONCAT44(addend._0_4_,addend._4_4_)" identifier (argument_list "(addend._0_4_,addend._4_4_)" ( (field_expression "addend._0_4_" identifier . field_identifier) , (field_expression "addend._4_4_" identifier . field_identifier) )))) ;) })))
(translation_unit "int FUN_001f53a4(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  int *piVar5;\n  int *piVar6;\n  int *piVar7;\n  int iVar8;\n  undefined8 uVar9;\n  \n  iVar8 = *(int *)param_1;\n  uVar1 = *(uint *)(param_1 + 4);\n  if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }\n  uVar2 = *(uint *)(param_1 + 0x14);\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);\n  if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }\n  uVar9 = gold::Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));\n  return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);\n}\n\n" (function_definition "int FUN_001f53a4(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  int *piVar5;\n  int *piVar6;\n  int *piVar7;\n  int iVar8;\n  undefined8 uVar9;\n  \n  iVar8 = *(int *)param_1;\n  uVar1 = *(uint *)(param_1 + 4);\n  if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }\n  uVar2 = *(uint *)(param_1 + 0x14);\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);\n  if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }\n  uVar9 = gold::Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));\n  return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);\n}" primitive_type (function_declarator "FUN_001f53a4(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)" identifier (parameter_list "(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)" ( (parameter_declaration "Relobj *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "uint param_6" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  int *piVar5;\n  int *piVar6;\n  int *piVar7;\n  int iVar8;\n  undefined8 uVar9;\n  \n  iVar8 = *(int *)param_1;\n  uVar1 = *(uint *)(param_1 + 4);\n  if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }\n  uVar2 = *(uint *)(param_1 + 0x14);\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);\n  if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }\n  uVar9 = gold::Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));\n  return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "undefined8 uVar9;" type_identifier identifier ;) (expression_statement "iVar8 = *(int *)param_1;" (assignment_expression "iVar8 = *(int *)param_1" identifier = (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "uVar1 = *(uint *)(param_1 + 4);" (assignment_expression "uVar1 = *(uint *)(param_1 + 4)" identifier = (pointer_expression "*(uint *)(param_1 + 4)" * (cast_expression "(uint *)(param_1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }" if (parenthesized_expression "((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00))" ( (binary_expression "(param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)" (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) && (parenthesized_expression "(uVar2 = uVar1 + param_6, param_6 < 0xffffff00)" ( (comma_expression "uVar2 = uVar1 + param_6, param_6 < 0xffffff00" (assignment_expression "uVar2 = uVar1 + param_6" identifier = (binary_expression "uVar1 + param_6" identifier + identifier)) , (binary_expression "param_6 < 0xffffff00" identifier < number_literal)) ))) )) (compound_statement "{\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }" { (expression_statement "param_6 = 0;" (assignment_expression "param_6 = 0" identifier = number_literal) ;) (expression_statement "iVar8 = (uint)(uVar2 < uVar1) + iVar8;" (assignment_expression "iVar8 = (uint)(uVar2 < uVar1) + iVar8" identifier = (binary_expression "(uint)(uVar2 < uVar1) + iVar8" (call_expression "(uint)(uVar2 < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) ))) + identifier)) ;) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) })) (expression_statement "uVar2 = *(uint *)(param_1 + 0x14);" (assignment_expression "uVar2 = *(uint *)(param_1 + 0x14)" identifier = (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (if_statement "if (uVar2 == 0) {\n    trap(7);\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    trap(7);\n  }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);" (assignment_expression "piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" identifier = (pointer_expression "*(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" * (cast_expression "(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" ( (binary_expression "*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + (binary_expression "(uVar1 % uVar2) * 4" (parenthesized_expression "(uVar1 % uVar2)" ( (binary_expression "uVar1 % uVar2" identifier % identifier) )) * number_literal)) ))))) ;) (if_statement "if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }" if (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)) )) (compound_statement "{\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }" { (expression_statement "uVar3 = ((int *)*piVar6)[2];" (assignment_expression "uVar3 = ((int *)*piVar6)[2]" identifier = (subscript_expression "((int *)*piVar6)[2]" (parenthesized_expression "((int *)*piVar6)" ( (cast_expression "(int *)*piVar6" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar6" * identifier)) )) [ number_literal ])) ;) (expression_statement "piVar7 = (int *)*piVar6;" (assignment_expression "piVar7 = (int *)*piVar6" identifier = (cast_expression "(int *)*piVar6" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar6" * identifier))) ;) (do_statement "do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);" do (compound_statement "{\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    }" { (expression_statement "piVar5 = piVar7;" (assignment_expression "piVar5 = piVar7" identifier = identifier) ;) (if_statement "if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }" if (parenthesized_expression "(uVar1 == uVar3)" ( (binary_expression "uVar1 == uVar3" identifier == identifier) )) (compound_statement "{\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }" { (expression_statement "iVar4 = *piVar6;" (assignment_expression "iVar4 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (if_statement "if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }" { (return_statement "return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);" return (binary_expression "(uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10)" (binary_expression "(uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5" (call_expression "(uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_6 + *(int *)(iVar4 + 0x14) < param_6)" ( (binary_expression "param_6 + *(int *)(iVar4 + 0x14) < param_6" (binary_expression "param_6 + *(int *)(iVar4 + 0x14)" identifier + (pointer_expression "*(int *)(iVar4 + 0x14)" * (cast_expression "(int *)(iVar4 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x14)" ( (binary_expression "iVar4 + 0x14" identifier + number_literal) ))))) < identifier) ))) + identifier) + (pointer_expression "*(int *)(iVar4 + 0x10)" * (cast_expression "(int *)(iVar4 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x10)" ( (binary_expression "iVar4 + 0x10" identifier + number_literal) ))))) ;) })) (break_statement "break;" break ;) })) (expression_statement "piVar7 = (int *)*piVar5;" (assignment_expression "piVar7 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) (if_statement "if (piVar7 == (int *)0x0) break;" if (parenthesized_expression "(piVar7 == (int *)0x0)" ( (binary_expression "piVar7 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = piVar7[2];" (assignment_expression "uVar3 = piVar7[2]" identifier = (subscript_expression "piVar7[2]" identifier [ number_literal ])) ;) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "piVar6 = piVar5;" (assignment_expression "piVar6 = piVar5" identifier = identifier) ;) }) while (parenthesized_expression "(uVar1 % uVar2 == uVar3 % uVar2)" ( (binary_expression "uVar1 % uVar2 == uVar3 % uVar2" (binary_expression "uVar1 % uVar2" identifier % identifier) == (binary_expression "uVar3 % uVar2" identifier % identifier)) )) ;) })) (ERROR "uVar9 = gold::" (assignment_expression "uVar9 = gold" identifier = identifier) : :) (expression_statement "Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));" (binary_expression "Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1))" (binary_expression "Merged_symbol_value<64" identifier < number_literal) > (ERROR "::" : :) (call_expression "value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1))" identifier (argument_list "(param_1,param_2,CONCAT44(iVar8,uVar1))" ( identifier , identifier , (call_expression "CONCAT44(iVar8,uVar1)" identifier (argument_list "(iVar8,uVar1)" ( identifier , identifier ))) )))) ;) (return_statement "return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);" return (binary_expression "(uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20)" (binary_expression "(uint)(param_6 + (int)uVar9 < param_6) + param_5" (call_expression "(uint)(param_6 + (int)uVar9 < param_6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_6 + (int)uVar9 < param_6)" ( (binary_expression "param_6 + (int)uVar9 < param_6" (binary_expression "param_6 + (int)uVar9" identifier + (cast_expression "(int)uVar9" ( (type_descriptor "int" primitive_type) ) identifier)) < identifier) ))) + identifier) + (cast_expression "(int)((ulonglong)uVar9 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar9 >> 0x20)" ( (binary_expression "(ulonglong)uVar9 >> 0x20" (cast_expression "(ulonglong)uVar9" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE 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 (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (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) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + IDENT)) , (binary_expression IDENT < LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (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 IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (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 (parenthesized_expression ( (binary_expression IDENT % 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))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) < IDENT) ))) + IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (break_statement break ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT % IDENT) == (binary_expression IDENT % IDENT)) )) ;) })) (ERROR (assignment_expression IDENT = IDENT) : :) (expression_statement (binary_expression (binary_expression IDENT < LIT) > (ERROR : :) (call_expression IDENT (argument_list ( IDENT , IDENT , (call_expression IDENT (argument_list ( IDENT , IDENT ))) )))) ;) (return_statement return (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) < IDENT) ))) + IDENT) + (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) })))
(function_definition "int FUN_001f53a4(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)\n\n{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  int *piVar5;\n  int *piVar6;\n  int *piVar7;\n  int iVar8;\n  undefined8 uVar9;\n  \n  iVar8 = *(int *)param_1;\n  uVar1 = *(uint *)(param_1 + 4);\n  if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }\n  uVar2 = *(uint *)(param_1 + 0x14);\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);\n  if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }\n  uVar9 = gold::Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));\n  return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);\n}" (primitive_type "int") (function_declarator "FUN_001f53a4(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)" (identifier "FUN_001f53a4") (parameter_list "(Relobj *param_1,uint param_2,undefined4 param_3,undefined4 param_4,int param_5,\n                uint param_6)" (( "(") (parameter_declaration "Relobj *param_1" (type_identifier "Relobj") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) (, ",") (parameter_declaration "uint param_6" (type_identifier "uint") (identifier "param_6")) () ")"))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  int *piVar5;\n  int *piVar6;\n  int *piVar7;\n  int iVar8;\n  undefined8 uVar9;\n  \n  iVar8 = *(int *)param_1;\n  uVar1 = *(uint *)(param_1 + 4);\n  if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }\n  uVar2 = *(uint *)(param_1 + 0x14);\n  if (uVar2 == 0) {\n    trap(7);\n  }\n  piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);\n  if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }\n  uVar9 = gold::Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));\n  return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int *piVar5;" (primitive_type "int") (pointer_declarator "*piVar5" (* "*") (identifier "piVar5")) (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "int *piVar7;" (primitive_type "int") (pointer_declarator "*piVar7" (* "*") (identifier "piVar7")) (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "undefined8 uVar9;" (type_identifier "undefined8") (identifier "uVar9") (; ";")) (expression_statement "iVar8 = *(int *)param_1;" (assignment_expression "iVar8 = *(int *)param_1" (identifier "iVar8") (= "=") (pointer_expression "*(int *)param_1" (* "*") (cast_expression "(int *)param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_1")))) (; ";")) (expression_statement "uVar1 = *(uint *)(param_1 + 4);" (assignment_expression "uVar1 = *(uint *)(param_1 + 4)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_1 + 4)" (* "*") (cast_expression "(uint *)(param_1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }" (if "if") (parenthesized_expression "((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00))" (( "(") (binary_expression "(param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)" (parenthesized_expression "(param_5 == 0)" (( "(") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(uVar2 = uVar1 + param_6, param_6 < 0xffffff00)" (( "(") (comma_expression "uVar2 = uVar1 + param_6, param_6 < 0xffffff00" (assignment_expression "uVar2 = uVar1 + param_6" (identifier "uVar2") (= "=") (binary_expression "uVar1 + param_6" (identifier "uVar1") (+ "+") (identifier "param_6"))) (, ",") (binary_expression "param_6 < 0xffffff00" (identifier "param_6") (< "<") (number_literal "0xffffff00"))) () ")"))) () ")")) (compound_statement "{\n    param_6 = 0;\n    iVar8 = (uint)(uVar2 < uVar1) + iVar8;\n    uVar1 = uVar2;\n  }" ({ "{") (expression_statement "param_6 = 0;" (assignment_expression "param_6 = 0" (identifier "param_6") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar8 = (uint)(uVar2 < uVar1) + iVar8;" (assignment_expression "iVar8 = (uint)(uVar2 < uVar1) + iVar8" (identifier "iVar8") (= "=") (binary_expression "(uint)(uVar2 < uVar1) + iVar8" (call_expression "(uint)(uVar2 < uVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar2 < uVar1)" (( "(") (binary_expression "uVar2 < uVar1" (identifier "uVar2") (< "<") (identifier "uVar1")) () ")"))) (+ "+") (identifier "iVar8"))) (; ";")) (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" (identifier "uVar1") (= "=") (identifier "uVar2")) (; ";")) (} "}"))) (expression_statement "uVar2 = *(uint *)(param_1 + 0x14);" (assignment_expression "uVar2 = *(uint *)(param_1 + 0x14)" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(param_1 + 0x14)" (* "*") (cast_expression "(uint *)(param_1 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (if_statement "if (uVar2 == 0) {\n    trap(7);\n  }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    trap(7);\n  }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);" (assignment_expression "piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" (identifier "piVar6") (= "=") (pointer_expression "*(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" (* "*") (cast_expression "(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4" (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (binary_expression "(uVar1 % uVar2) * 4" (parenthesized_expression "(uVar1 % uVar2)" (( "(") (binary_expression "uVar1 % uVar2" (identifier "uVar1") (% "%") (identifier "uVar2")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (piVar6 != (int *)0x0) {\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }" (if "if") (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"))) () ")")) (compound_statement "{\n    uVar3 = ((int *)*piVar6)[2];\n    piVar7 = (int *)*piVar6;\n    do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);\n  }" ({ "{") (expression_statement "uVar3 = ((int *)*piVar6)[2];" (assignment_expression "uVar3 = ((int *)*piVar6)[2]" (identifier "uVar3") (= "=") (subscript_expression "((int *)*piVar6)[2]" (parenthesized_expression "((int *)*piVar6)" (( "(") (cast_expression "(int *)*piVar6" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar6" (* "*") (identifier "piVar6"))) () ")")) ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "piVar7 = (int *)*piVar6;" (assignment_expression "piVar7 = (int *)*piVar6" (identifier "piVar7") (= "=") (cast_expression "(int *)*piVar6" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar6" (* "*") (identifier "piVar6")))) (; ";")) (do_statement "do {\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    } while (uVar1 % uVar2 == uVar3 % uVar2);" (do "do") (compound_statement "{\n      piVar5 = piVar7;\n      if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }\n      piVar7 = (int *)*piVar5;\n      if (piVar7 == (int *)0x0) break;\n      uVar3 = piVar7[2];\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      piVar6 = piVar5;\n    }" ({ "{") (expression_statement "piVar5 = piVar7;" (assignment_expression "piVar5 = piVar7" (identifier "piVar5") (= "=") (identifier "piVar7")) (; ";")) (if_statement "if (uVar1 == uVar3) {\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }" (if "if") (parenthesized_expression "(uVar1 == uVar3)" (( "(") (binary_expression "uVar1 == uVar3" (identifier "uVar1") (== "==") (identifier "uVar3")) () ")")) (compound_statement "{\n        iVar4 = *piVar6;\n        if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }\n        break;\n      }" ({ "{") (expression_statement "iVar4 = *piVar6;" (assignment_expression "iVar4 = *piVar6" (identifier "iVar4") (= "=") (pointer_expression "*piVar6" (* "*") (identifier "piVar6"))) (; ";")) (if_statement "if (iVar4 != 0) {\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }" (if "if") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);\n        }" ({ "{") (return_statement "return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10);" (return "return") (binary_expression "(uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5 + *(int *)(iVar4 + 0x10)" (binary_expression "(uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +\n                 param_5" (call_expression "(uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_6 + *(int *)(iVar4 + 0x14) < param_6)" (( "(") (binary_expression "param_6 + *(int *)(iVar4 + 0x14) < param_6" (binary_expression "param_6 + *(int *)(iVar4 + 0x14)" (identifier "param_6") (+ "+") (pointer_expression "*(int *)(iVar4 + 0x14)" (* "*") (cast_expression "(int *)(iVar4 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x14)" (( "(") (binary_expression "iVar4 + 0x14" (identifier "iVar4") (+ "+") (number_literal "0x14")) () ")"))))) (< "<") (identifier "param_6")) () ")"))) (+ "+") (identifier "param_5")) (+ "+") (pointer_expression "*(int *)(iVar4 + 0x10)" (* "*") (cast_expression "(int *)(iVar4 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x10)" (( "(") (binary_expression "iVar4 + 0x10" (identifier "iVar4") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";")) (} "}"))) (expression_statement "piVar7 = (int *)*piVar5;" (assignment_expression "piVar7 = (int *)*piVar5" (identifier "piVar7") (= "=") (cast_expression "(int *)*piVar5" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar5" (* "*") (identifier "piVar5")))) (; ";")) (if_statement "if (piVar7 == (int *)0x0) break;" (if "if") (parenthesized_expression "(piVar7 == (int *)0x0)" (( "(") (binary_expression "piVar7 == (int *)0x0" (identifier "piVar7") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar3 = piVar7[2];" (assignment_expression "uVar3 = piVar7[2]" (identifier "uVar3") (= "=") (subscript_expression "piVar7[2]" (identifier "piVar7") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        trap(7);\n      }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "piVar6 = piVar5;" (assignment_expression "piVar6 = piVar5" (identifier "piVar6") (= "=") (identifier "piVar5")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar1 % uVar2 == uVar3 % uVar2)" (( "(") (binary_expression "uVar1 % uVar2 == uVar3 % uVar2" (binary_expression "uVar1 % uVar2" (identifier "uVar1") (% "%") (identifier "uVar2")) (== "==") (binary_expression "uVar3 % uVar2" (identifier "uVar3") (% "%") (identifier "uVar2"))) () ")")) (; ";")) (} "}"))) (ERROR "uVar9 = gold::" (assignment_expression "uVar9 = gold" (identifier "uVar9") (= "=") (identifier "gold")) (: ":") (: ":")) (expression_statement "Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1));" (binary_expression "Merged_symbol_value<64>::value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1))" (binary_expression "Merged_symbol_value<64" (identifier "Merged_symbol_value") (< "<") (number_literal "64")) (> ">") (ERROR "::" (: ":") (: ":")) (call_expression "value_from_output_section\n                    (param_1,param_2,CONCAT44(iVar8,uVar1))" (identifier "value_from_output_section") (argument_list "(param_1,param_2,CONCAT44(iVar8,uVar1))" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (call_expression "CONCAT44(iVar8,uVar1)" (identifier "CONCAT44") (argument_list "(iVar8,uVar1)" (( "(") (identifier "iVar8") (, ",") (identifier "uVar1") () ")"))) () ")")))) (; ";")) (return_statement "return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);" (return "return") (binary_expression "(uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20)" (binary_expression "(uint)(param_6 + (int)uVar9 < param_6) + param_5" (call_expression "(uint)(param_6 + (int)uVar9 < param_6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_6 + (int)uVar9 < param_6)" (( "(") (binary_expression "param_6 + (int)uVar9 < param_6" (binary_expression "param_6 + (int)uVar9" (identifier "param_6") (+ "+") (cast_expression "(int)uVar9" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar9"))) (< "<") (identifier "param_6")) () ")"))) (+ "+") (identifier "param_5")) (+ "+") (cast_expression "(int)((ulonglong)uVar9 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)uVar9 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar9 >> 0x20" (cast_expression "(ulonglong)uVar9" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar9")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (} "}")))

/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */
/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */
/* DWARF original prototype: Value value(Merged_symbol_value<64> * this, Relobj * object, uint
   input_shndx, Value addend) */

type_1 __thiscall
gold::type_2<64>::function_1
          (type_2<64> *this,type_3 *object,type_4 input_shndx,type_1 addend)

{
  type_5 *var_2;
  type_4 var_4;
  type_5 *var_1;
  type_6 p_Var4;
  type_6 var_6;
  type_6 var_8;
  int var_3;
  type_7 var_10;
  
  var_3 = *(int *)&this->input_value_;
  var_2 = *(type_5 **)((int)&this->input_value_ + 4);
  if ((addend._0_4_ == 0) &&
     (var_1 = (type_5 *)((int)&var_2->_M_nxt + addend._4_4_), addend._4_4_ < 0xffffff00))
  {
    addend._4_4_ = 0;
    var_3 = (type_4)(var_1 < var_2) + var_3;
    var_2 = var_1;
  }
  var_4 = (this->output_addresses_)._M_h._M_bucket_count;
  if (var_4 == 0) {
    var_5(7);
  }
  var_6 = (this->output_addresses_)._M_h._M_buckets[(type_4)var_2 % var_4];
  if (var_6 != (type_6)0x0) {
    var_1 = var_6->_M_nxt[2]._M_nxt;
    var_8 = var_6->_M_nxt;
    do {
      p_Var4 = var_8;
      if (var_2 == var_1) {
        var_1 = var_6->_M_nxt;
        if (var_1 != (type_5 *)0x0) {
          var_4 = (int)&(var_1[5]._M_nxt)->_M_nxt + addend._4_4_;
          return var_7((int)&(var_1[4]._M_nxt)->_M_nxt +
                          (type_4)(var_4 < addend._4_4_) + addend._0_4_,var_4);
        }
        break;
      }
      var_8 = p_Var4->_M_nxt;
      if (var_8 == (type_5 *)0x0) break;
      var_1 = var_8[2]._M_nxt;
      if (var_4 == 0) {
        var_5(7);
      }
      var_6 = p_Var4;
    } while ((type_4)var_2 % var_4 == (type_4)var_1 % var_4);
  }
  var_10 = var_9(this,object,input_shndx,var_7(var_3,var_2));
  return var_10 + var_7(addend._0_4_,addend._4_4_);
}


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

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

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  int *piVar5;
  int *piVar6;
  int *piVar7;
  int iVar8;
  undefined8 uVar9;
  
  iVar8 = *(int *)param_1;
  uVar1 = *(uint *)(param_1 + 4);
  if ((param_5 == 0) && (uVar2 = uVar1 + param_6, param_6 < 0xffffff00)) {
    param_6 = 0;
    iVar8 = (uint)(uVar2 < uVar1) + iVar8;
    uVar1 = uVar2;
  }
  uVar2 = *(uint *)(param_1 + 0x14);
  if (uVar2 == 0) {
    trap(7);
  }
  piVar6 = *(int **)(*(int *)(param_1 + 0x10) + (uVar1 % uVar2) * 4);
  if (piVar6 != (int *)0x0) {
    uVar3 = ((int *)*piVar6)[2];
    piVar7 = (int *)*piVar6;
    do {
      piVar5 = piVar7;
      if (uVar1 == uVar3) {
        iVar4 = *piVar6;
        if (iVar4 != 0) {
          return (uint)(param_6 + *(int *)(iVar4 + 0x14) < param_6) +
                 param_5 + *(int *)(iVar4 + 0x10);
        }
        break;
      }
      piVar7 = (int *)*piVar5;
      if (piVar7 == (int *)0x0) break;
      uVar3 = piVar7[2];
      if (uVar2 == 0) {
        trap(7);
      }
      piVar6 = piVar5;
    } while (uVar1 % uVar2 == uVar3 % uVar2);
  }
  uVar9 = gold::Merged_symbol_value<64>::value_from_output_section
                    (param_1,param_2,CONCAT44(iVar8,uVar1));
  return (uint)(param_6 + (int)uVar9 < param_6) + param_5 + (int)((ulonglong)uVar9 >> 0x20);
}

