
/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */
/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */
/* WARNING: Struct "Output_section_headers": ignoring overlapping field "layout_" */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Struct "Output_reduced_debug_abbrev_section": ignoring overlapping field "data_" */
/* WARNING: Struct "Output_reduced_debug_info_section": ignoring overlapping field "data_" */
/* DWARF original prototype: ld_plugin_status get_input_file(Plugin_manager * this, uint handle,
   ld_plugin_input_file * file) */

ld_plugin_status __thiscall
gold::Plugin_manager::get_input_file(Plugin_manager *this,uint handle,ld_plugin_input_file *file)

{
  code *pcVar1;
  undefined *puVar2;
  Object *pOVar3;
  int iVar4;
  pointer ppOVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  int iVar8;
  
  ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.
            _M_impl._M_start;
  if ((uint)((int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>
                  ._M_impl._M_finish - (int)ppOVar5 >> 2) <= handle) {
                    /* WARNING: Does not return */
    pcVar1 = (code *)trap(0);
    (*pcVar1)();
  }
  pOVar3 = ppOVar5[handle];
  iVar4 = (*pOVar3->_vptr_Object[5])(pOVar3);
  if (iVar4 != 0) {
    if (*(int *)(iVar4 + 0x1c) != 0) {
      (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,this->task_);
      puVar2 = PTR_reopen_descriptor_00432d8c;
      iVar8 = *(int *)(iVar4 + 0x1c);
      if (iVar8 != 0) {
        file->name = *(char **)(iVar8 + 0x20);
        (*(code *)puVar2)(iVar8 + 0x20);
        uVar6 = *(undefined4 *)(iVar4 + 0x20);
        iVar8 = *(int *)(iVar8 + 0x38);
        *(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);
        *(undefined4 *)&file->offset = uVar6;
        file->fd = iVar8;
        uVar7 = *(undefined4 *)(iVar4 + 0x54);
        uVar6 = *(undefined4 *)(iVar4 + 0x50);
        file->handle = (void *)handle;
        *(undefined4 *)((int)&file->filesize + 4) = uVar7;
        *(undefined4 *)&file->filesize = uVar6;
        return LDPS_OK;
      }
    }
    (*(code *)PTR_do_gold_unreachable_004323c4)
              (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_s__0043226c + -0x78d0);
  }
  return LDPS_BAD_HANDLE;
}



/* gold::Plugin_manager::get_input_file(unsigned int, ld_plugin_input_file*) */

undefined4 __thiscall
gold::Plugin_manager::get_input_file
          (Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)

{
  code *pcVar1;
  undefined *puVar2;
  int *piVar3;
  int iVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  int iVar7;
  
  if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {
                    /* WARNING: Does not return */
    pcVar1 = (code *)trap(0);
    (*pcVar1)();
  }
  piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);
  iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);
  if (iVar4 == 0) {
    return 2;
  }
  if (*(int *)(iVar4 + 0x1c) != 0) {
    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));
    puVar2 = PTR_reopen_descriptor_00432d8c;
    iVar7 = *(int *)(iVar4 + 0x1c);
    if (iVar7 != 0) {
      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);
      (*(code *)puVar2)(iVar7 + 0x20);
      uVar6 = *(undefined4 *)(iVar4 + 0x20);
      uVar5 = *(undefined4 *)(iVar7 + 0x38);
      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);
      *(undefined4 *)(param_2 + 8) = uVar6;
      *(undefined4 *)(param_2 + 4) = uVar5;
      uVar6 = *(undefined4 *)(iVar4 + 0x54);
      uVar5 = *(undefined4 *)(iVar4 + 0x50);
      *(uint *)(param_2 + 0x18) = param_1;
      *(undefined4 *)(param_2 + 0x14) = uVar6;
      *(undefined4 *)(param_2 + 0x10) = uVar5;
      return 0;
    }
  }
  uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)
                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);
  return uVar5;
}


lui gp,0x25
addiu gp,gp,0x50b8
addu gp,gp,t9
lw v1,0x10(a0)
lw v0,0x14(a0)
subu v0,v0,v1
sra v0,v0,0x2
sltu v0,a1,v0
beq v0,zero,0x001e5234
_sll v0,a1,0x2
addiu sp,sp,-0x30
addu v1,v1,v0
sw s1,0x20(sp)
or s1,a0,zero
lw v0,0x0(v1)
sw gp,0x10(sp)
sw s3,0x28(sp)
or s3,a1,zero
or a0,v0,zero
sw s2,0x24(sp)
lw v0,0x0(v0)
sw s0,0x1c(sp)
sw ra,0x2c(sp)
lw t9,0x14(v0)
jalr t9
_or s0,a2,zero
lw gp,0x10(sp)
beq v0,zero,0x001e522c
_or s2,v0,zero
lw a0,0x1c(v0)
beq a0,zero,0x001e5210
_lw a1,0x74(s1)
lw t9,-0x72f8(gp)
jalr t9
_addiu a0,a0,0x20
lw s1,0x1c(s2)
beq s1,zero,0x001e5210
_lw gp,0x10(sp)
lw v0,0x20(s1)
addiu a0,s1,0x20
lw t9,-0x7444(gp)
jalr t9
_sw v0,0x0(s0)
or v0,zero,zero
lw a1,0x24(s2)
lw a0,0x20(s2)
lw v1,0x38(s1)
sw a1,0xc(s0)
sw a0,0x8(s0)
sw v1,0x4(s0)
lw a1,0x54(s2)
lw a0,0x50(s2)
sw s3,0x18(s0)
sw a1,0x14(s0)
sw a0,0x10(s0)
lw ra,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x30
lw a2,-0x7f64(gp)
li a1,0x1ea
lw a0,-0x7fc4(gp)
lw t9,-0x7e0c(gp)
addiu a2,a2,-0x78d0
jalr t9
_addiu a0,a0,0x44a8
b 0x001e51f4
_li v0,0x2
lw v0,0x0(zero)
teq zero,zero
(translation_unit "/* gold::Plugin_manager::get_input_file(unsigned int, ld_plugin_input_file*) */\n\nundefined4 __thiscall\ngold::Plugin_manager::get_input_file\n          (Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)\n\n{\n  code *pcVar1;\n  undefined *puVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  int iVar7;\n  \n  if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    /* WARNING: Does not return */\n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);\n  iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);\n  if (iVar4 == 0) {\n    return 2;\n  }\n  if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }\n  uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);\n  return uVar5;\n}\n\n" comment (function_definition "undefined4 __thiscall\ngold::Plugin_manager::get_input_file\n          (Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)\n\n{\n  code *pcVar1;\n  undefined *puVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  int iVar7;\n  \n  if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    /* WARNING: Does not return */\n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);\n  iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);\n  if (iVar4 == 0) {\n    return 2;\n  }\n  if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }\n  uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);\n  return uVar5;\n}" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Plugin_manager::" identifier : : identifier : :) (function_declarator "get_input_file\n          (Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)" identifier (parameter_list "(Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)" ( (parameter_declaration "Plugin_manager *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "ld_plugin_input_file *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  code *pcVar1;\n  undefined *puVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  int iVar7;\n  \n  if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    /* WARNING: Does not return */\n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);\n  iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);\n  if (iVar4 == 0) {\n    return 2;\n  }\n  if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }\n  uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);\n  return uVar5;\n}" { (declaration "code *pcVar1;" type_identifier (pointer_declarator "*pcVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (if_statement "if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    /* WARNING: Does not return */\n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }" if (parenthesized_expression "((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1)" ( (binary_expression "(uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1" (call_expression "(uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2)" ( (binary_expression "*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2" (binary_expression "*(int *)(this + 0x14) - *(int *)(this + 0x10)" (pointer_expression "*(int *)(this + 0x14)" * (cast_expression "(int *)(this + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x14)" ( (binary_expression "this + 0x14" identifier + number_literal) )))) - (pointer_expression "*(int *)(this + 0x10)" * (cast_expression "(int *)(this + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) ))))) >> number_literal) ))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Does not return */\n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }" { comment (expression_statement "pcVar1 = (code *)trap(0);" (assignment_expression "pcVar1 = (code *)trap(0)" identifier = (cast_expression "(code *)trap(0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "trap(0)" identifier (argument_list "(0)" ( number_literal ))))) ;) (expression_statement "(*pcVar1)();" (call_expression "(*pcVar1)()" (parenthesized_expression "(*pcVar1)" ( (pointer_expression "*pcVar1" * identifier) )) (argument_list "()" ( ))) ;) })) (expression_statement "piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);" (assignment_expression "piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4)" identifier = (pointer_expression "*(int **)(*(int *)(this + 0x10) + param_1 * 4)" * (cast_expression "(int **)(*(int *)(this + 0x10) + param_1 * 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(this + 0x10) + param_1 * 4)" ( (binary_expression "*(int *)(this + 0x10) + param_1 * 4" (pointer_expression "*(int *)(this + 0x10)" * (cast_expression "(int *)(this + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) + (binary_expression "param_1 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);" (assignment_expression "iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3)" identifier = (call_expression "(**(code **)(*piVar3 + 0x14))(piVar3)" (parenthesized_expression "(**(code **)(*piVar3 + 0x14))" ( (pointer_expression "**(code **)(*piVar3 + 0x14)" * (pointer_expression "*(code **)(*piVar3 + 0x14)" * (cast_expression "(code **)(*piVar3 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar3 + 0x14)" ( (binary_expression "*piVar3 + 0x14" (pointer_expression "*piVar3" * identifier) + number_literal) ))))) )) (argument_list "(piVar3)" ( identifier )))) ;) (if_statement "if (iVar4 == 0) {\n    return 2;\n  }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    return 2;\n  }" { (return_statement "return 2;" return number_literal ;) })) (if_statement "if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }" if (parenthesized_expression "(*(int *)(iVar4 + 0x1c) != 0)" ( (binary_expression "*(int *)(iVar4 + 0x1c) != 0" (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }" { (expression_statement "(*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));" (call_expression "(*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74))" (parenthesized_expression "(*(code *)PTR_lock_00432ed8)" ( (pointer_expression "*(code *)PTR_lock_00432ed8" * (cast_expression "(code *)PTR_lock_00432ed8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74))" ( (binary_expression "*(int *)(iVar4 + 0x1c) + 0x20" (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) )))) + number_literal) , (pointer_expression "*(undefined4 *)(this + 0x74)" * (cast_expression "(undefined4 *)(this + 0x74)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x74)" ( (binary_expression "this + 0x74" identifier + number_literal) )))) ))) ;) (expression_statement "puVar2 = PTR_reopen_descriptor_00432d8c;" (assignment_expression "puVar2 = PTR_reopen_descriptor_00432d8c" identifier = identifier) ;) (expression_statement "iVar7 = *(int *)(iVar4 + 0x1c);" (assignment_expression "iVar7 = *(int *)(iVar4 + 0x1c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) ))))) ;) (if_statement "if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }" { (expression_statement "*(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);" (assignment_expression "*(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20)" (pointer_expression "*(undefined4 *)param_2" * (cast_expression "(undefined4 *)param_2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (pointer_expression "*(undefined4 *)(iVar7 + 0x20)" * (cast_expression "(undefined4 *)(iVar7 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x20)" ( (binary_expression "iVar7 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "(*(code *)puVar2)(iVar7 + 0x20);" (call_expression "(*(code *)puVar2)(iVar7 + 0x20)" (parenthesized_expression "(*(code *)puVar2)" ( (pointer_expression "*(code *)puVar2" * (cast_expression "(code *)puVar2" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7 + 0x20)" ( (binary_expression "iVar7 + 0x20" identifier + number_literal) ))) ;) (expression_statement "uVar6 = *(undefined4 *)(iVar4 + 0x20);" (assignment_expression "uVar6 = *(undefined4 *)(iVar4 + 0x20)" identifier = (pointer_expression "*(undefined4 *)(iVar4 + 0x20)" * (cast_expression "(undefined4 *)(iVar4 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x20)" ( (binary_expression "iVar4 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(undefined4 *)(iVar7 + 0x38);" (assignment_expression "uVar5 = *(undefined4 *)(iVar7 + 0x38)" identifier = (pointer_expression "*(undefined4 *)(iVar7 + 0x38)" * (cast_expression "(undefined4 *)(iVar7 + 0x38)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x38)" ( (binary_expression "iVar7 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);" (assignment_expression "*(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24)" (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(iVar4 + 0x24)" * (cast_expression "(undefined4 *)(iVar4 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x24)" ( (binary_expression "iVar4 + 0x24" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(param_2 + 8) = uVar6;" (assignment_expression "*(undefined4 *)(param_2 + 8) = uVar6" (pointer_expression "*(undefined4 *)(param_2 + 8)" * (cast_expression "(undefined4 *)(param_2 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_2 + 4) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 4) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 4)" * (cast_expression "(undefined4 *)(param_2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = *(undefined4 *)(iVar4 + 0x54);" (assignment_expression "uVar6 = *(undefined4 *)(iVar4 + 0x54)" identifier = (pointer_expression "*(undefined4 *)(iVar4 + 0x54)" * (cast_expression "(undefined4 *)(iVar4 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x54)" ( (binary_expression "iVar4 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(undefined4 *)(iVar4 + 0x50);" (assignment_expression "uVar5 = *(undefined4 *)(iVar4 + 0x50)" identifier = (pointer_expression "*(undefined4 *)(iVar4 + 0x50)" * (cast_expression "(undefined4 *)(iVar4 + 0x50)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x50)" ( (binary_expression "iVar4 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "*(uint *)(param_2 + 0x18) = param_1;" (assignment_expression "*(uint *)(param_2 + 0x18) = param_1" (pointer_expression "*(uint *)(param_2 + 0x18)" * (cast_expression "(uint *)(param_2 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_2 + 0x14) = uVar6;" (assignment_expression "*(undefined4 *)(param_2 + 0x14) = uVar6" (pointer_expression "*(undefined4 *)(param_2 + 0x14)" * (cast_expression "(undefined4 *)(param_2 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_2 + 0x10) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x10) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x10)" * (cast_expression "(undefined4 *)(param_2 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (return_statement "return 0;" return number_literal ;) })) })) (expression_statement "uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);" (assignment_expression "uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0)" identifier = (call_expression "(*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0)" (parenthesized_expression "(*(code *)PTR_do_gold_unreachable_004323c4)" ( (pointer_expression "*(code *)PTR_do_gold_unreachable_004323c4" * (cast_expression "(code *)PTR_do_gold_unreachable_004323c4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0)" ( (binary_expression "PTR_LAB_0043220c + 0x44a8" identifier + number_literal) , number_literal , (binary_expression "PTR_DAT_0043226c + -0x78d0" identifier + number_literal) )))) ;) (return_statement "return uVar5;" return identifier ;) })))
(translation_unit "/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */\n/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */\n/* WARNING: Struct "Output_section_headers": ignoring overlapping field "layout_" */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Struct "Output_reduced_debug_abbrev_section": ignoring overlapping field "data_" */\n/* WARNING: Struct "Output_reduced_debug_info_section": ignoring overlapping field "data_" */\n/* DWARF original prototype: ld_plugin_status get_input_file(Plugin_manager * this, uint handle,\n   ld_plugin_input_file * file) */\n\nld_plugin_status __thiscall\ngold::Plugin_manager::get_input_file(Plugin_manager *this,uint handle,ld_plugin_input_file *file)\n\n{\n  code *pcVar1;\n  undefined *puVar2;\n  Object *pOVar3;\n  int iVar4;\n  pointer ppOVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  int iVar8;\n  \n  ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n            _M_impl._M_start;\n  if ((uint)((int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish - (int)ppOVar5 >> 2) <= handle) {\n                    /* WARNING: Does not return */\n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  pOVar3 = ppOVar5[handle];\n  iVar4 = (*pOVar3->_vptr_Object[5])(pOVar3);\n  if (iVar4 != 0) {\n    if (*(int *)(iVar4 + 0x1c) != 0) {\n      (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,this->task_);\n      puVar2 = PTR_reopen_descriptor_00432d8c;\n      iVar8 = *(int *)(iVar4 + 0x1c);\n      if (iVar8 != 0) {\n        file->name = *(char **)(iVar8 + 0x20);\n        (*(code *)puVar2)(iVar8 + 0x20);\n        uVar6 = *(undefined4 *)(iVar4 + 0x20);\n        iVar8 = *(int *)(iVar8 + 0x38);\n        *(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);\n        *(undefined4 *)&file->offset = uVar6;\n        file->fd = iVar8;\n        uVar7 = *(undefined4 *)(iVar4 + 0x54);\n        uVar6 = *(undefined4 *)(iVar4 + 0x50);\n        file->handle = (void *)handle;\n        *(undefined4 *)((int)&file->filesize + 4) = uVar7;\n        *(undefined4 *)&file->filesize = uVar6;\n        return LDPS_OK;\n      }\n    }\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_s__0043226c + -0x78d0);\n  }\n  return LDPS_BAD_HANDLE;\n}\n\n" comment comment comment comment comment comment comment (function_definition "ld_plugin_status __thiscall\ngold::Plugin_manager::get_input_file(Plugin_manager *this,uint handle,ld_plugin_input_file *file)\n\n{\n  code *pcVar1;\n  undefined *puVar2;\n  Object *pOVar3;\n  int iVar4;\n  pointer ppOVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  int iVar8;\n  \n  ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n            _M_impl._M_start;\n  if ((uint)((int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish - (int)ppOVar5 >> 2) <= handle) {\n                    /* WARNING: Does not return */\n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  pOVar3 = ppOVar5[handle];\n  iVar4 = (*pOVar3->_vptr_Object[5])(pOVar3);\n  if (iVar4 != 0) {\n    if (*(int *)(iVar4 + 0x1c) != 0) {\n      (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,this->task_);\n      puVar2 = PTR_reopen_descriptor_00432d8c;\n      iVar8 = *(int *)(iVar4 + 0x1c);\n      if (iVar8 != 0) {\n        file->name = *(char **)(iVar8 + 0x20);\n        (*(code *)puVar2)(iVar8 + 0x20);\n        uVar6 = *(undefined4 *)(iVar4 + 0x20);\n        iVar8 = *(int *)(iVar8 + 0x38);\n        *(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);\n        *(undefined4 *)&file->offset = uVar6;\n        file->fd = iVar8;\n        uVar7 = *(undefined4 *)(iVar4 + 0x54);\n        uVar6 = *(undefined4 *)(iVar4 + 0x50);\n        file->handle = (void *)handle;\n        *(undefined4 *)((int)&file->filesize + 4) = uVar7;\n        *(undefined4 *)&file->filesize = uVar6;\n        return LDPS_OK;\n      }\n    }\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_s__0043226c + -0x78d0);\n  }\n  return LDPS_BAD_HANDLE;\n}" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Plugin_manager::" identifier : : identifier : :) (function_declarator "get_input_file(Plugin_manager *this,uint handle,ld_plugin_input_file *file)" identifier (parameter_list "(Plugin_manager *this,uint handle,ld_plugin_input_file *file)" ( (parameter_declaration "Plugin_manager *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "uint handle" type_identifier identifier) , (parameter_declaration "ld_plugin_input_file *file" type_identifier (pointer_declarator "*file" * identifier)) ))) (compound_statement "{\n  code *pcVar1;\n  undefined *puVar2;\n  Object *pOVar3;\n  int iVar4;\n  pointer ppOVar5;\n  undefined4 uVar6;\n  undefined4 uVar7;\n  int iVar8;\n  \n  ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n            _M_impl._M_start;\n  if ((uint)((int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish - (int)ppOVar5 >> 2) <= handle) {\n                    /* WARNING: Does not return */\n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  pOVar3 = ppOVar5[handle];\n  iVar4 = (*pOVar3->_vptr_Object[5])(pOVar3);\n  if (iVar4 != 0) {\n    if (*(int *)(iVar4 + 0x1c) != 0) {\n      (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,this->task_);\n      puVar2 = PTR_reopen_descriptor_00432d8c;\n      iVar8 = *(int *)(iVar4 + 0x1c);\n      if (iVar8 != 0) {\n        file->name = *(char **)(iVar8 + 0x20);\n        (*(code *)puVar2)(iVar8 + 0x20);\n        uVar6 = *(undefined4 *)(iVar4 + 0x20);\n        iVar8 = *(int *)(iVar8 + 0x38);\n        *(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);\n        *(undefined4 *)&file->offset = uVar6;\n        file->fd = iVar8;\n        uVar7 = *(undefined4 *)(iVar4 + 0x54);\n        uVar6 = *(undefined4 *)(iVar4 + 0x50);\n        file->handle = (void *)handle;\n        *(undefined4 *)((int)&file->filesize + 4) = uVar7;\n        *(undefined4 *)&file->filesize = uVar6;\n        return LDPS_OK;\n      }\n    }\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_s__0043226c + -0x78d0);\n  }\n  return LDPS_BAD_HANDLE;\n}" { (declaration "code *pcVar1;" type_identifier (pointer_declarator "*pcVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "Object *pOVar3;" type_identifier (pointer_declarator "*pOVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "pointer ppOVar5;" type_identifier identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (expression_statement "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n            _M_impl._M_start;" (field_expression "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n            _M_impl._M_start" (field_expression "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n            _M_impl" (binary_expression "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold" (binary_expression "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std" (assignment_expression "ppOVar5 = (this->objects_).super__Vector_base<gold" identifier = (binary_expression "(this->objects_).super__Vector_base<gold" (field_expression "(this->objects_).super__Vector_base" (parenthesized_expression "(this->objects_)" ( (field_expression "this->objects_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if ((uint)((int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish - (int)ppOVar5 >> 2) <= handle) {\n                    /* WARNING: Does not return */\n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }" if (parenthesized_expression "((uint)((int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish - (int)ppOVar5 >> 2) <= handle)" ( (binary_expression "(uint)((int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish - (int)ppOVar5 >> 2) <= handle" (call_expression "(uint)((int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish - (int)ppOVar5 >> 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish - (int)ppOVar5 >> 2)" ( (binary_expression "(int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish - (int)ppOVar5 >> 2" (binary_expression "(int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish - (int)ppOVar5" (field_expression "(int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl._M_finish" (field_expression "(int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>\n                  ._M_impl" (binary_expression "(int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "(int)(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold" (binary_expression "(int)(this->objects_).super__Vector_base<gold::Object*,_std" (binary_expression "(int)(this->objects_).super__Vector_base<gold" (cast_expression "(int)(this->objects_).super__Vector_base" ( (type_descriptor "int" primitive_type) ) (field_expression "(this->objects_).super__Vector_base" (parenthesized_expression "(this->objects_)" ( (field_expression "this->objects_" identifier -> field_identifier) )) . field_identifier)) < identifier) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) - (cast_expression "(int)ppOVar5" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal) ))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Does not return */\n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }" { comment (expression_statement "pcVar1 = (code *)trap(0);" (assignment_expression "pcVar1 = (code *)trap(0)" identifier = (cast_expression "(code *)trap(0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "trap(0)" identifier (argument_list "(0)" ( number_literal ))))) ;) (expression_statement "(*pcVar1)();" (call_expression "(*pcVar1)()" (parenthesized_expression "(*pcVar1)" ( (pointer_expression "*pcVar1" * identifier) )) (argument_list "()" ( ))) ;) })) (expression_statement "pOVar3 = ppOVar5[handle];" (assignment_expression "pOVar3 = ppOVar5[handle]" identifier = (subscript_expression "ppOVar5[handle]" identifier [ identifier ])) ;) (expression_statement "iVar4 = (*pOVar3->_vptr_Object[5])(pOVar3);" (assignment_expression "iVar4 = (*pOVar3->_vptr_Object[5])(pOVar3)" identifier = (call_expression "(*pOVar3->_vptr_Object[5])(pOVar3)" (parenthesized_expression "(*pOVar3->_vptr_Object[5])" ( (pointer_expression "*pOVar3->_vptr_Object[5]" * (subscript_expression "pOVar3->_vptr_Object[5]" (field_expression "pOVar3->_vptr_Object" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(pOVar3)" ( identifier )))) ;) (if_statement "if (iVar4 != 0) {\n    if (*(int *)(iVar4 + 0x1c) != 0) {\n      (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,this->task_);\n      puVar2 = PTR_reopen_descriptor_00432d8c;\n      iVar8 = *(int *)(iVar4 + 0x1c);\n      if (iVar8 != 0) {\n        file->name = *(char **)(iVar8 + 0x20);\n        (*(code *)puVar2)(iVar8 + 0x20);\n        uVar6 = *(undefined4 *)(iVar4 + 0x20);\n        iVar8 = *(int *)(iVar8 + 0x38);\n        *(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);\n        *(undefined4 *)&file->offset = uVar6;\n        file->fd = iVar8;\n        uVar7 = *(undefined4 *)(iVar4 + 0x54);\n        uVar6 = *(undefined4 *)(iVar4 + 0x50);\n        file->handle = (void *)handle;\n        *(undefined4 *)((int)&file->filesize + 4) = uVar7;\n        *(undefined4 *)&file->filesize = uVar6;\n        return LDPS_OK;\n      }\n    }\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_s__0043226c + -0x78d0);\n  }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n    if (*(int *)(iVar4 + 0x1c) != 0) {\n      (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,this->task_);\n      puVar2 = PTR_reopen_descriptor_00432d8c;\n      iVar8 = *(int *)(iVar4 + 0x1c);\n      if (iVar8 != 0) {\n        file->name = *(char **)(iVar8 + 0x20);\n        (*(code *)puVar2)(iVar8 + 0x20);\n        uVar6 = *(undefined4 *)(iVar4 + 0x20);\n        iVar8 = *(int *)(iVar8 + 0x38);\n        *(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);\n        *(undefined4 *)&file->offset = uVar6;\n        file->fd = iVar8;\n        uVar7 = *(undefined4 *)(iVar4 + 0x54);\n        uVar6 = *(undefined4 *)(iVar4 + 0x50);\n        file->handle = (void *)handle;\n        *(undefined4 *)((int)&file->filesize + 4) = uVar7;\n        *(undefined4 *)&file->filesize = uVar6;\n        return LDPS_OK;\n      }\n    }\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_s__0043226c + -0x78d0);\n  }" { (if_statement "if (*(int *)(iVar4 + 0x1c) != 0) {\n      (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,this->task_);\n      puVar2 = PTR_reopen_descriptor_00432d8c;\n      iVar8 = *(int *)(iVar4 + 0x1c);\n      if (iVar8 != 0) {\n        file->name = *(char **)(iVar8 + 0x20);\n        (*(code *)puVar2)(iVar8 + 0x20);\n        uVar6 = *(undefined4 *)(iVar4 + 0x20);\n        iVar8 = *(int *)(iVar8 + 0x38);\n        *(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);\n        *(undefined4 *)&file->offset = uVar6;\n        file->fd = iVar8;\n        uVar7 = *(undefined4 *)(iVar4 + 0x54);\n        uVar6 = *(undefined4 *)(iVar4 + 0x50);\n        file->handle = (void *)handle;\n        *(undefined4 *)((int)&file->filesize + 4) = uVar7;\n        *(undefined4 *)&file->filesize = uVar6;\n        return LDPS_OK;\n      }\n    }" if (parenthesized_expression "(*(int *)(iVar4 + 0x1c) != 0)" ( (binary_expression "*(int *)(iVar4 + 0x1c) != 0" (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,this->task_);\n      puVar2 = PTR_reopen_descriptor_00432d8c;\n      iVar8 = *(int *)(iVar4 + 0x1c);\n      if (iVar8 != 0) {\n        file->name = *(char **)(iVar8 + 0x20);\n        (*(code *)puVar2)(iVar8 + 0x20);\n        uVar6 = *(undefined4 *)(iVar4 + 0x20);\n        iVar8 = *(int *)(iVar8 + 0x38);\n        *(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);\n        *(undefined4 *)&file->offset = uVar6;\n        file->fd = iVar8;\n        uVar7 = *(undefined4 *)(iVar4 + 0x54);\n        uVar6 = *(undefined4 *)(iVar4 + 0x50);\n        file->handle = (void *)handle;\n        *(undefined4 *)((int)&file->filesize + 4) = uVar7;\n        *(undefined4 *)&file->filesize = uVar6;\n        return LDPS_OK;\n      }\n    }" { (expression_statement "(*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,this->task_);" (call_expression "(*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,this->task_)" (parenthesized_expression "(*(code *)PTR_lock_00432ed8)" ( (pointer_expression "*(code *)PTR_lock_00432ed8" * (cast_expression "(code *)PTR_lock_00432ed8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(int *)(iVar4 + 0x1c) + 0x20,this->task_)" ( (binary_expression "*(int *)(iVar4 + 0x1c) + 0x20" (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) )))) + number_literal) , (field_expression "this->task_" identifier -> field_identifier) ))) ;) (expression_statement "puVar2 = PTR_reopen_descriptor_00432d8c;" (assignment_expression "puVar2 = PTR_reopen_descriptor_00432d8c" identifier = identifier) ;) (expression_statement "iVar8 = *(int *)(iVar4 + 0x1c);" (assignment_expression "iVar8 = *(int *)(iVar4 + 0x1c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) ))))) ;) (if_statement "if (iVar8 != 0) {\n        file->name = *(char **)(iVar8 + 0x20);\n        (*(code *)puVar2)(iVar8 + 0x20);\n        uVar6 = *(undefined4 *)(iVar4 + 0x20);\n        iVar8 = *(int *)(iVar8 + 0x38);\n        *(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);\n        *(undefined4 *)&file->offset = uVar6;\n        file->fd = iVar8;\n        uVar7 = *(undefined4 *)(iVar4 + 0x54);\n        uVar6 = *(undefined4 *)(iVar4 + 0x50);\n        file->handle = (void *)handle;\n        *(undefined4 *)((int)&file->filesize + 4) = uVar7;\n        *(undefined4 *)&file->filesize = uVar6;\n        return LDPS_OK;\n      }" if (parenthesized_expression "(iVar8 != 0)" ( (binary_expression "iVar8 != 0" identifier != number_literal) )) (compound_statement "{\n        file->name = *(char **)(iVar8 + 0x20);\n        (*(code *)puVar2)(iVar8 + 0x20);\n        uVar6 = *(undefined4 *)(iVar4 + 0x20);\n        iVar8 = *(int *)(iVar8 + 0x38);\n        *(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);\n        *(undefined4 *)&file->offset = uVar6;\n        file->fd = iVar8;\n        uVar7 = *(undefined4 *)(iVar4 + 0x54);\n        uVar6 = *(undefined4 *)(iVar4 + 0x50);\n        file->handle = (void *)handle;\n        *(undefined4 *)((int)&file->filesize + 4) = uVar7;\n        *(undefined4 *)&file->filesize = uVar6;\n        return LDPS_OK;\n      }" { (expression_statement "file->name = *(char **)(iVar8 + 0x20);" (assignment_expression "file->name = *(char **)(iVar8 + 0x20)" (field_expression "file->name" identifier -> field_identifier) = (pointer_expression "*(char **)(iVar8 + 0x20)" * (cast_expression "(char **)(iVar8 + 0x20)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar8 + 0x20)" ( (binary_expression "iVar8 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "(*(code *)puVar2)(iVar8 + 0x20);" (call_expression "(*(code *)puVar2)(iVar8 + 0x20)" (parenthesized_expression "(*(code *)puVar2)" ( (pointer_expression "*(code *)puVar2" * (cast_expression "(code *)puVar2" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar8 + 0x20)" ( (binary_expression "iVar8 + 0x20" identifier + number_literal) ))) ;) (expression_statement "uVar6 = *(undefined4 *)(iVar4 + 0x20);" (assignment_expression "uVar6 = *(undefined4 *)(iVar4 + 0x20)" identifier = (pointer_expression "*(undefined4 *)(iVar4 + 0x20)" * (cast_expression "(undefined4 *)(iVar4 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x20)" ( (binary_expression "iVar4 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "iVar8 = *(int *)(iVar8 + 0x38);" (assignment_expression "iVar8 = *(int *)(iVar8 + 0x38)" identifier = (pointer_expression "*(int *)(iVar8 + 0x38)" * (cast_expression "(int *)(iVar8 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + 0x38)" ( (binary_expression "iVar8 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24);" (assignment_expression "*(undefined4 *)((int)&file->offset + 4) = *(undefined4 *)(iVar4 + 0x24)" (pointer_expression "*(undefined4 *)((int)&file->offset + 4)" * (cast_expression "(undefined4 *)((int)&file->offset + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&file->offset + 4)" ( (binary_expression "(int)&file->offset + 4" (cast_expression "(int)&file->offset" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&file->offset" & (field_expression "file->offset" identifier -> field_identifier))) + number_literal) )))) = (pointer_expression "*(undefined4 *)(iVar4 + 0x24)" * (cast_expression "(undefined4 *)(iVar4 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x24)" ( (binary_expression "iVar4 + 0x24" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)&file->offset = uVar6;" (assignment_expression "*(undefined4 *)&file->offset = uVar6" (pointer_expression "*(undefined4 *)&file->offset" * (cast_expression "(undefined4 *)&file->offset" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&file->offset" & (field_expression "file->offset" identifier -> field_identifier)))) = identifier) ;) (expression_statement "file->fd = iVar8;" (assignment_expression "file->fd = iVar8" (field_expression "file->fd" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar7 = *(undefined4 *)(iVar4 + 0x54);" (assignment_expression "uVar7 = *(undefined4 *)(iVar4 + 0x54)" identifier = (pointer_expression "*(undefined4 *)(iVar4 + 0x54)" * (cast_expression "(undefined4 *)(iVar4 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x54)" ( (binary_expression "iVar4 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = *(undefined4 *)(iVar4 + 0x50);" (assignment_expression "uVar6 = *(undefined4 *)(iVar4 + 0x50)" identifier = (pointer_expression "*(undefined4 *)(iVar4 + 0x50)" * (cast_expression "(undefined4 *)(iVar4 + 0x50)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x50)" ( (binary_expression "iVar4 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "file->handle = (void *)handle;" (assignment_expression "file->handle = (void *)handle" (field_expression "file->handle" identifier -> field_identifier) = (cast_expression "(void *)handle" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "*(undefined4 *)((int)&file->filesize + 4) = uVar7;" (assignment_expression "*(undefined4 *)((int)&file->filesize + 4) = uVar7" (pointer_expression "*(undefined4 *)((int)&file->filesize + 4)" * (cast_expression "(undefined4 *)((int)&file->filesize + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&file->filesize + 4)" ( (binary_expression "(int)&file->filesize + 4" (cast_expression "(int)&file->filesize" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&file->filesize" & (field_expression "file->filesize" identifier -> field_identifier))) + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)&file->filesize = uVar6;" (assignment_expression "*(undefined4 *)&file->filesize = uVar6" (pointer_expression "*(undefined4 *)&file->filesize" * (cast_expression "(undefined4 *)&file->filesize" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&file->filesize" & (field_expression "file->filesize" identifier -> field_identifier)))) = identifier) ;) (return_statement "return LDPS_OK;" return identifier ;) })) })) (expression_statement "(*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_s__0043226c + -0x78d0);" (call_expression "(*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_s__0043226c + -0x78d0)" (parenthesized_expression "(*(code *)PTR_do_gold_unreachable_004323c4)" ( (pointer_expression "*(code *)PTR_do_gold_unreachable_004323c4" * (cast_expression "(code *)PTR_do_gold_unreachable_004323c4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_s__0043226c + -0x78d0)" ( (binary_expression "PTR_LAB_0043220c + 0x44a8" identifier + number_literal) , number_literal , (binary_expression "PTR_s__0043226c + -0x78d0" identifier + number_literal) ))) ;) })) (return_statement "return LDPS_BAD_HANDLE;" return identifier ;) })))
(translation_unit "undefined4 __thiscall\ngold::Plugin_manager::get_input_file\n          (Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)\n\n{\n  code *pcVar1;\n  undefined *puVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  int iVar7;\n  \n  if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    \n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);\n  iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);\n  if (iVar4 == 0) {\n    return 2;\n  }\n  if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }\n  uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);\n  return uVar5;\n}\n\n" (function_definition "undefined4 __thiscall\ngold::Plugin_manager::get_input_file\n          (Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)\n\n{\n  code *pcVar1;\n  undefined *puVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  int iVar7;\n  \n  if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    \n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);\n  iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);\n  if (iVar4 == 0) {\n    return 2;\n  }\n  if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }\n  uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);\n  return uVar5;\n}" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Plugin_manager::" identifier : : identifier : :) (function_declarator "get_input_file\n          (Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)" identifier (parameter_list "(Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)" ( (parameter_declaration "Plugin_manager *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "ld_plugin_input_file *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  code *pcVar1;\n  undefined *puVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  int iVar7;\n  \n  if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    \n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);\n  iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);\n  if (iVar4 == 0) {\n    return 2;\n  }\n  if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }\n  uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);\n  return uVar5;\n}" { (declaration "code *pcVar1;" type_identifier (pointer_declarator "*pcVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (if_statement "if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    \n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }" if (parenthesized_expression "((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1)" ( (binary_expression "(uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1" (call_expression "(uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2)" ( (binary_expression "*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2" (binary_expression "*(int *)(this + 0x14) - *(int *)(this + 0x10)" (pointer_expression "*(int *)(this + 0x14)" * (cast_expression "(int *)(this + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x14)" ( (binary_expression "this + 0x14" identifier + number_literal) )))) - (pointer_expression "*(int *)(this + 0x10)" * (cast_expression "(int *)(this + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) ))))) >> number_literal) ))) <= identifier) )) (compound_statement "{\n                    \n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }" { (expression_statement "pcVar1 = (code *)trap(0);" (assignment_expression "pcVar1 = (code *)trap(0)" identifier = (cast_expression "(code *)trap(0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "trap(0)" identifier (argument_list "(0)" ( number_literal ))))) ;) (expression_statement "(*pcVar1)();" (call_expression "(*pcVar1)()" (parenthesized_expression "(*pcVar1)" ( (pointer_expression "*pcVar1" * identifier) )) (argument_list "()" ( ))) ;) })) (expression_statement "piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);" (assignment_expression "piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4)" identifier = (pointer_expression "*(int **)(*(int *)(this + 0x10) + param_1 * 4)" * (cast_expression "(int **)(*(int *)(this + 0x10) + param_1 * 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(this + 0x10) + param_1 * 4)" ( (binary_expression "*(int *)(this + 0x10) + param_1 * 4" (pointer_expression "*(int *)(this + 0x10)" * (cast_expression "(int *)(this + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) + (binary_expression "param_1 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);" (assignment_expression "iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3)" identifier = (call_expression "(**(code **)(*piVar3 + 0x14))(piVar3)" (parenthesized_expression "(**(code **)(*piVar3 + 0x14))" ( (pointer_expression "**(code **)(*piVar3 + 0x14)" * (pointer_expression "*(code **)(*piVar3 + 0x14)" * (cast_expression "(code **)(*piVar3 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar3 + 0x14)" ( (binary_expression "*piVar3 + 0x14" (pointer_expression "*piVar3" * identifier) + number_literal) ))))) )) (argument_list "(piVar3)" ( identifier )))) ;) (if_statement "if (iVar4 == 0) {\n    return 2;\n  }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    return 2;\n  }" { (return_statement "return 2;" return number_literal ;) })) (if_statement "if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }" if (parenthesized_expression "(*(int *)(iVar4 + 0x1c) != 0)" ( (binary_expression "*(int *)(iVar4 + 0x1c) != 0" (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }" { (expression_statement "(*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));" (call_expression "(*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74))" (parenthesized_expression "(*(code *)PTR_lock_00432ed8)" ( (pointer_expression "*(code *)PTR_lock_00432ed8" * (cast_expression "(code *)PTR_lock_00432ed8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74))" ( (binary_expression "*(int *)(iVar4 + 0x1c) + 0x20" (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) )))) + number_literal) , (pointer_expression "*(undefined4 *)(this + 0x74)" * (cast_expression "(undefined4 *)(this + 0x74)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x74)" ( (binary_expression "this + 0x74" identifier + number_literal) )))) ))) ;) (expression_statement "puVar2 = PTR_reopen_descriptor_00432d8c;" (assignment_expression "puVar2 = PTR_reopen_descriptor_00432d8c" identifier = identifier) ;) (expression_statement "iVar7 = *(int *)(iVar4 + 0x1c);" (assignment_expression "iVar7 = *(int *)(iVar4 + 0x1c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x1c)" * (cast_expression "(int *)(iVar4 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x1c)" ( (binary_expression "iVar4 + 0x1c" identifier + number_literal) ))))) ;) (if_statement "if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }" { (expression_statement "*(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);" (assignment_expression "*(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20)" (pointer_expression "*(undefined4 *)param_2" * (cast_expression "(undefined4 *)param_2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (pointer_expression "*(undefined4 *)(iVar7 + 0x20)" * (cast_expression "(undefined4 *)(iVar7 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x20)" ( (binary_expression "iVar7 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "(*(code *)puVar2)(iVar7 + 0x20);" (call_expression "(*(code *)puVar2)(iVar7 + 0x20)" (parenthesized_expression "(*(code *)puVar2)" ( (pointer_expression "*(code *)puVar2" * (cast_expression "(code *)puVar2" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7 + 0x20)" ( (binary_expression "iVar7 + 0x20" identifier + number_literal) ))) ;) (expression_statement "uVar6 = *(undefined4 *)(iVar4 + 0x20);" (assignment_expression "uVar6 = *(undefined4 *)(iVar4 + 0x20)" identifier = (pointer_expression "*(undefined4 *)(iVar4 + 0x20)" * (cast_expression "(undefined4 *)(iVar4 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x20)" ( (binary_expression "iVar4 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(undefined4 *)(iVar7 + 0x38);" (assignment_expression "uVar5 = *(undefined4 *)(iVar7 + 0x38)" identifier = (pointer_expression "*(undefined4 *)(iVar7 + 0x38)" * (cast_expression "(undefined4 *)(iVar7 + 0x38)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x38)" ( (binary_expression "iVar7 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);" (assignment_expression "*(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24)" (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(iVar4 + 0x24)" * (cast_expression "(undefined4 *)(iVar4 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x24)" ( (binary_expression "iVar4 + 0x24" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(param_2 + 8) = uVar6;" (assignment_expression "*(undefined4 *)(param_2 + 8) = uVar6" (pointer_expression "*(undefined4 *)(param_2 + 8)" * (cast_expression "(undefined4 *)(param_2 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_2 + 4) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 4) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 4)" * (cast_expression "(undefined4 *)(param_2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar6 = *(undefined4 *)(iVar4 + 0x54);" (assignment_expression "uVar6 = *(undefined4 *)(iVar4 + 0x54)" identifier = (pointer_expression "*(undefined4 *)(iVar4 + 0x54)" * (cast_expression "(undefined4 *)(iVar4 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x54)" ( (binary_expression "iVar4 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(undefined4 *)(iVar4 + 0x50);" (assignment_expression "uVar5 = *(undefined4 *)(iVar4 + 0x50)" identifier = (pointer_expression "*(undefined4 *)(iVar4 + 0x50)" * (cast_expression "(undefined4 *)(iVar4 + 0x50)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x50)" ( (binary_expression "iVar4 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "*(uint *)(param_2 + 0x18) = param_1;" (assignment_expression "*(uint *)(param_2 + 0x18) = param_1" (pointer_expression "*(uint *)(param_2 + 0x18)" * (cast_expression "(uint *)(param_2 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_2 + 0x14) = uVar6;" (assignment_expression "*(undefined4 *)(param_2 + 0x14) = uVar6" (pointer_expression "*(undefined4 *)(param_2 + 0x14)" * (cast_expression "(undefined4 *)(param_2 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_2 + 0x10) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x10) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x10)" * (cast_expression "(undefined4 *)(param_2 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (return_statement "return 0;" return number_literal ;) })) })) (expression_statement "uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);" (assignment_expression "uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0)" identifier = (call_expression "(*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0)" (parenthesized_expression "(*(code *)PTR_do_gold_unreachable_004323c4)" ( (pointer_expression "*(code *)PTR_do_gold_unreachable_004323c4" * (cast_expression "(code *)PTR_do_gold_unreachable_004323c4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0)" ( (binary_expression "PTR_LAB_0043220c + 0x44a8" identifier + number_literal) , number_literal , (binary_expression "PTR_DAT_0043226c + -0x78d0" identifier + number_literal) )))) ;) (return_statement "return uVar5;" return identifier ;) })))
(translation_unit (function_definition TYPE (ms_call_modifier __thiscall) (ERROR IDENT : : IDENT : :) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) >> LIT) ))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( ))) ;) })) (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 IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (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 (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (return_statement return LIT ;) })) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression IDENT + LIT) )))) ;) (return_statement return IDENT ;) })))
(function_definition "undefined4 __thiscall\ngold::Plugin_manager::get_input_file\n          (Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)\n\n{\n  code *pcVar1;\n  undefined *puVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  int iVar7;\n  \n  if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    \n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);\n  iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);\n  if (iVar4 == 0) {\n    return 2;\n  }\n  if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }\n  uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);\n  return uVar5;\n}" (type_identifier "undefined4") (ms_call_modifier "__thiscall" (__thiscall "__thiscall")) (ERROR "gold::Plugin_manager::" (identifier "gold") (: ":") (: ":") (identifier "Plugin_manager") (: ":") (: ":")) (function_declarator "get_input_file\n          (Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)" (identifier "get_input_file") (parameter_list "(Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)" (( "(") (parameter_declaration "Plugin_manager *this" (type_identifier "Plugin_manager") (pointer_declarator "*this" (* "*") (identifier "this"))) (, ",") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) (, ",") (parameter_declaration "ld_plugin_input_file *param_2" (type_identifier "ld_plugin_input_file") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  code *pcVar1;\n  undefined *puVar2;\n  int *piVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  int iVar7;\n  \n  if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    \n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }\n  piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);\n  iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);\n  if (iVar4 == 0) {\n    return 2;\n  }\n  if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }\n  uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);\n  return uVar5;\n}" ({ "{") (declaration "code *pcVar1;" (type_identifier "code") (pointer_declarator "*pcVar1" (* "*") (identifier "pcVar1")) (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "undefined4 uVar5;" (type_identifier "undefined4") (identifier "uVar5") (; ";")) (declaration "undefined4 uVar6;" (type_identifier "undefined4") (identifier "uVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (if_statement "if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {\n                    \n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }" (if "if") (parenthesized_expression "((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1)" (( "(") (binary_expression "(uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1" (call_expression "(uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2)" (( "(") (binary_expression "*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2" (binary_expression "*(int *)(this + 0x14) - *(int *)(this + 0x10)" (pointer_expression "*(int *)(this + 0x14)" (* "*") (cast_expression "(int *)(this + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0x14)" (( "(") (binary_expression "this + 0x14" (identifier "this") (+ "+") (number_literal "0x14")) () ")")))) (- "-") (pointer_expression "*(int *)(this + 0x10)" (* "*") (cast_expression "(int *)(this + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0x10)" (( "(") (binary_expression "this + 0x10" (identifier "this") (+ "+") (number_literal "0x10")) () ")"))))) (>> ">>") (number_literal "2")) () ")"))) (<= "<=") (identifier "param_1")) () ")")) (compound_statement "{\n                    \n    pcVar1 = (code *)trap(0);\n    (*pcVar1)();\n  }" ({ "{") (expression_statement "pcVar1 = (code *)trap(0);" (assignment_expression "pcVar1 = (code *)trap(0)" (identifier "pcVar1") (= "=") (cast_expression "(code *)trap(0)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "trap(0)" (identifier "trap") (argument_list "(0)" (( "(") (number_literal "0") () ")"))))) (; ";")) (expression_statement "(*pcVar1)();" (call_expression "(*pcVar1)()" (parenthesized_expression "(*pcVar1)" (( "(") (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);" (assignment_expression "piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4)" (identifier "piVar3") (= "=") (pointer_expression "*(int **)(*(int *)(this + 0x10) + param_1 * 4)" (* "*") (cast_expression "(int **)(*(int *)(this + 0x10) + param_1 * 4)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(this + 0x10) + param_1 * 4)" (( "(") (binary_expression "*(int *)(this + 0x10) + param_1 * 4" (pointer_expression "*(int *)(this + 0x10)" (* "*") (cast_expression "(int *)(this + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0x10)" (( "(") (binary_expression "this + 0x10" (identifier "this") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (binary_expression "param_1 * 4" (identifier "param_1") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);" (assignment_expression "iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3)" (identifier "iVar4") (= "=") (call_expression "(**(code **)(*piVar3 + 0x14))(piVar3)" (parenthesized_expression "(**(code **)(*piVar3 + 0x14))" (( "(") (pointer_expression "**(code **)(*piVar3 + 0x14)" (* "*") (pointer_expression "*(code **)(*piVar3 + 0x14)" (* "*") (cast_expression "(code **)(*piVar3 + 0x14)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar3 + 0x14)" (( "(") (binary_expression "*piVar3 + 0x14" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (argument_list "(piVar3)" (( "(") (identifier "piVar3") () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n    return 2;\n  }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 2;\n  }" ({ "{") (return_statement "return 2;" (return "return") (number_literal "2") (; ";")) (} "}"))) (if_statement "if (*(int *)(iVar4 + 0x1c) != 0) {\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }" (if "if") (parenthesized_expression "(*(int *)(iVar4 + 0x1c) != 0)" (( "(") (binary_expression "*(int *)(iVar4 + 0x1c) != 0" (pointer_expression "*(int *)(iVar4 + 0x1c)" (* "*") (cast_expression "(int *)(iVar4 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x1c)" (( "(") (binary_expression "iVar4 + 0x1c" (identifier "iVar4") (+ "+") (number_literal "0x1c")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));\n    puVar2 = PTR_reopen_descriptor_00432d8c;\n    iVar7 = *(int *)(iVar4 + 0x1c);\n    if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }\n  }" ({ "{") (expression_statement "(*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));" (call_expression "(*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74))" (parenthesized_expression "(*(code *)PTR_lock_00432ed8)" (( "(") (pointer_expression "*(code *)PTR_lock_00432ed8" (* "*") (cast_expression "(code *)PTR_lock_00432ed8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_lock_00432ed8"))) () ")")) (argument_list "(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74))" (( "(") (binary_expression "*(int *)(iVar4 + 0x1c) + 0x20" (pointer_expression "*(int *)(iVar4 + 0x1c)" (* "*") (cast_expression "(int *)(iVar4 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x1c)" (( "(") (binary_expression "iVar4 + 0x1c" (identifier "iVar4") (+ "+") (number_literal "0x1c")) () ")")))) (+ "+") (number_literal "0x20")) (, ",") (pointer_expression "*(undefined4 *)(this + 0x74)" (* "*") (cast_expression "(undefined4 *)(this + 0x74)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0x74)" (( "(") (binary_expression "this + 0x74" (identifier "this") (+ "+") (number_literal "0x74")) () ")")))) () ")"))) (; ";")) (expression_statement "puVar2 = PTR_reopen_descriptor_00432d8c;" (assignment_expression "puVar2 = PTR_reopen_descriptor_00432d8c" (identifier "puVar2") (= "=") (identifier "PTR_reopen_descriptor_00432d8c")) (; ";")) (expression_statement "iVar7 = *(int *)(iVar4 + 0x1c);" (assignment_expression "iVar7 = *(int *)(iVar4 + 0x1c)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(iVar4 + 0x1c)" (* "*") (cast_expression "(int *)(iVar4 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x1c)" (( "(") (binary_expression "iVar4 + 0x1c" (identifier "iVar4") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (if_statement "if (iVar7 != 0) {\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);\n      (*(code *)puVar2)(iVar7 + 0x20);\n      uVar6 = *(undefined4 *)(iVar4 + 0x20);\n      uVar5 = *(undefined4 *)(iVar7 + 0x38);\n      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);\n      *(undefined4 *)(param_2 + 8) = uVar6;\n      *(undefined4 *)(param_2 + 4) = uVar5;\n      uVar6 = *(undefined4 *)(iVar4 + 0x54);\n      uVar5 = *(undefined4 *)(iVar4 + 0x50);\n      *(uint *)(param_2 + 0x18) = param_1;\n      *(undefined4 *)(param_2 + 0x14) = uVar6;\n      *(undefined4 *)(param_2 + 0x10) = uVar5;\n      return 0;\n    }" ({ "{") (expression_statement "*(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);" (assignment_expression "*(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20)" (pointer_expression "*(undefined4 *)param_2" (* "*") (cast_expression "(undefined4 *)param_2" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_2"))) (= "=") (pointer_expression "*(undefined4 *)(iVar7 + 0x20)" (* "*") (cast_expression "(undefined4 *)(iVar7 + 0x20)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x20)" (( "(") (binary_expression "iVar7 + 0x20" (identifier "iVar7") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "(*(code *)puVar2)(iVar7 + 0x20);" (call_expression "(*(code *)puVar2)(iVar7 + 0x20)" (parenthesized_expression "(*(code *)puVar2)" (( "(") (pointer_expression "*(code *)puVar2" (* "*") (cast_expression "(code *)puVar2" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar2"))) () ")")) (argument_list "(iVar7 + 0x20)" (( "(") (binary_expression "iVar7 + 0x20" (identifier "iVar7") (+ "+") (number_literal "0x20")) () ")"))) (; ";")) (expression_statement "uVar6 = *(undefined4 *)(iVar4 + 0x20);" (assignment_expression "uVar6 = *(undefined4 *)(iVar4 + 0x20)" (identifier "uVar6") (= "=") (pointer_expression "*(undefined4 *)(iVar4 + 0x20)" (* "*") (cast_expression "(undefined4 *)(iVar4 + 0x20)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x20)" (( "(") (binary_expression "iVar4 + 0x20" (identifier "iVar4") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "uVar5 = *(undefined4 *)(iVar7 + 0x38);" (assignment_expression "uVar5 = *(undefined4 *)(iVar7 + 0x38)" (identifier "uVar5") (= "=") (pointer_expression "*(undefined4 *)(iVar7 + 0x38)" (* "*") (cast_expression "(undefined4 *)(iVar7 + 0x38)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x38)" (( "(") (binary_expression "iVar7 + 0x38" (identifier "iVar7") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);" (assignment_expression "*(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24)" (pointer_expression "*(undefined4 *)(param_2 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (pointer_expression "*(undefined4 *)(iVar4 + 0x24)" (* "*") (cast_expression "(undefined4 *)(iVar4 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x24)" (( "(") (binary_expression "iVar4 + 0x24" (identifier "iVar4") (+ "+") (number_literal "0x24")) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 8) = uVar6;" (assignment_expression "*(undefined4 *)(param_2 + 8) = uVar6" (pointer_expression "*(undefined4 *)(param_2 + 8)" (* "*") (cast_expression "(undefined4 *)(param_2 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 4) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 4) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 4)" (* "*") (cast_expression "(undefined4 *)(param_2 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "uVar6 = *(undefined4 *)(iVar4 + 0x54);" (assignment_expression "uVar6 = *(undefined4 *)(iVar4 + 0x54)" (identifier "uVar6") (= "=") (pointer_expression "*(undefined4 *)(iVar4 + 0x54)" (* "*") (cast_expression "(undefined4 *)(iVar4 + 0x54)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x54)" (( "(") (binary_expression "iVar4 + 0x54" (identifier "iVar4") (+ "+") (number_literal "0x54")) () ")"))))) (; ";")) (expression_statement "uVar5 = *(undefined4 *)(iVar4 + 0x50);" (assignment_expression "uVar5 = *(undefined4 *)(iVar4 + 0x50)" (identifier "uVar5") (= "=") (pointer_expression "*(undefined4 *)(iVar4 + 0x50)" (* "*") (cast_expression "(undefined4 *)(iVar4 + 0x50)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x50)" (( "(") (binary_expression "iVar4 + 0x50" (identifier "iVar4") (+ "+") (number_literal "0x50")) () ")"))))) (; ";")) (expression_statement "*(uint *)(param_2 + 0x18) = param_1;" (assignment_expression "*(uint *)(param_2 + 0x18) = param_1" (pointer_expression "*(uint *)(param_2 + 0x18)" (* "*") (cast_expression "(uint *)(param_2 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "param_1")) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x14) = uVar6;" (assignment_expression "*(undefined4 *)(param_2 + 0x14) = uVar6" (pointer_expression "*(undefined4 *)(param_2 + 0x14)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x14)" (( "(") (binary_expression "param_2 + 0x14" (identifier "param_2") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x10) = uVar5;" (assignment_expression "*(undefined4 *)(param_2 + 0x10) = uVar5" (pointer_expression "*(undefined4 *)(param_2 + 0x10)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);" (assignment_expression "uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0)" (identifier "uVar5") (= "=") (call_expression "(*(code *)PTR_do_gold_unreachable_004323c4)\n                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0)" (parenthesized_expression "(*(code *)PTR_do_gold_unreachable_004323c4)" (( "(") (pointer_expression "*(code *)PTR_do_gold_unreachable_004323c4" (* "*") (cast_expression "(code *)PTR_do_gold_unreachable_004323c4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_do_gold_unreachable_004323c4"))) () ")")) (argument_list "(PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0)" (( "(") (binary_expression "PTR_LAB_0043220c + 0x44a8" (identifier "PTR_LAB_0043220c") (+ "+") (number_literal "0x44a8")) (, ",") (number_literal "0x1ea") (, ",") (binary_expression "PTR_DAT_0043226c + -0x78d0" (identifier "PTR_DAT_0043226c") (+ "+") (number_literal "-0x78d0")) () ")")))) (; ";")) (return_statement "return uVar5;" (return "return") (identifier "uVar5") (; ";")) (} "}")))
(translation_unit (function_definition type: (type_identifier) (ms_call_modifier) (ERROR (identifier) (identifier)) 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: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) 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)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal)))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list))))) (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: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (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: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (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: (number_literal)) (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)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (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))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (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))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) 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))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) 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))))))) (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))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (return_statement (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal) (binary_expression left: (identifier) right: (number_literal)))))) (return_statement (identifier)))))

/* gold::Plugin_manager::MASKED(unsigned int, ld_plugin_input_file*) */

undefined4 __thiscall
gold::Plugin_manager::MASKED
          (Plugin_manager *this,uint param_1,ld_plugin_input_file *param_2)

{
  code *pcVar1;
  undefined *puVar2;
  int *piVar3;
  int iVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  int iVar7;
  
  if ((uint)(*(int *)(this + 0x14) - *(int *)(this + 0x10) >> 2) <= param_1) {
                    /* WARNING: Does not return */
    pcVar1 = (code *)trap(0);
    (*pcVar1)();
  }
  piVar3 = *(int **)(*(int *)(this + 0x10) + param_1 * 4);
  iVar4 = (**(code **)(*piVar3 + 0x14))(piVar3);
  if (iVar4 == 0) {
    return 2;
  }
  if (*(int *)(iVar4 + 0x1c) != 0) {
    (*(code *)PTR_lock_00432ed8)(*(int *)(iVar4 + 0x1c) + 0x20,*(undefined4 *)(this + 0x74));
    puVar2 = PTR_reopen_descriptor_00432d8c;
    iVar7 = *(int *)(iVar4 + 0x1c);
    if (iVar7 != 0) {
      *(undefined4 *)param_2 = *(undefined4 *)(iVar7 + 0x20);
      (*(code *)puVar2)(iVar7 + 0x20);
      uVar6 = *(undefined4 *)(iVar4 + 0x20);
      uVar5 = *(undefined4 *)(iVar7 + 0x38);
      *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(iVar4 + 0x24);
      *(undefined4 *)(param_2 + 8) = uVar6;
      *(undefined4 *)(param_2 + 4) = uVar5;
      uVar6 = *(undefined4 *)(iVar4 + 0x54);
      uVar5 = *(undefined4 *)(iVar4 + 0x50);
      *(uint *)(param_2 + 0x18) = param_1;
      *(undefined4 *)(param_2 + 0x14) = uVar6;
      *(undefined4 *)(param_2 + 0x10) = uVar5;
      return 0;
    }
  }
  uVar5 = (*(code *)PTR_do_gold_unreachable_004323c4)
                    (PTR_LAB_0043220c + 0x44a8,0x1ea,PTR_DAT_0043226c + -0x78d0);
  return uVar5;
}

