
/* DWARF original prototype: void do_for_all_global_symbols(Sized_pluginobj<64,_false> * this,
   Read_symbols_data * param_1, Symbol_visitor_base * v) */

void __thiscall
gold::Sized_pluginobj<64,_false>::do_for_all_global_symbols
          (Sized_pluginobj<64,_false> *this,Read_symbols_data *param_1,Symbol_visitor_base *v)

{
  ld_plugin_symbol *plVar1;
  int iVar2;
  int iVar3;
  
  iVar2 = (this->super_Pluginobj).nsyms_;
  if (0 < iVar2) {
    iVar3 = 0;
    do {
      plVar1 = (this->super_Pluginobj).syms_ + iVar3;
      iVar3 = iVar3 + 1;
      if (plVar1->def != 2) {
        (*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name);
        iVar2 = (this->super_Pluginobj).nsyms_;
      }
    } while (iVar3 < iVar2);
    return;
  }
  return;
}



void FUN_00271ef8(int param_1,undefined4 param_2,int *param_3)

{
  undefined4 *puVar1;
  int iVar2;
  int iVar3;
  
  iVar2 = *(int *)(param_1 + 0x38);
  if (0 < iVar2) {
    iVar3 = 0;
    do {
      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);
      iVar3 = iVar3 + 1;
      if (puVar1[2] != 2) {
        (**(code **)(*param_3 + 8))(param_3,*puVar1);
        iVar2 = *(int *)(param_1 + 0x38);
      }
    } while (iVar3 < iVar2);
    return;
  }
  return;
}


lw a1,0x38(a0)
blez a1,0x00271f80
_nop
addiu sp,sp,-0x30
sw s3,0x28(sp)
li s3,0x2
sw s0,0x1c(sp)
or s0,zero,zero
sw s2,0x24(sp)
or s2,a2,zero
sw s1,0x20(sp)
or s1,a0,zero
sw ra,0x2c(sp)
lw v1,0x3c(s1)
sll v0,s0,0x5
or a0,s2,zero
addu v0,v1,v0
lw v1,0x8(v0)
beq v1,s3,0x00271f5c
_addiu s0,s0,0x1
lw v1,0x0(s2)
lw t9,0x8(v1)
jalr t9
_lw a1,0x0(v0)
lw a1,0x38(s1)
slt v0,s0,a1
bne v0,zero,0x00271f2c
_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
jr ra
_nop
(translation_unit "void FUN_00271ef8(int param_1,undefined4 param_2,int *param_3)\n\n{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = *(int *)(param_1 + 0x38);\n  if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }\n  return;\n}\n\n" (function_definition "void FUN_00271ef8(int param_1,undefined4 param_2,int *param_3)\n\n{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = *(int *)(param_1 + 0x38);\n  if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00271ef8(int param_1,undefined4 param_2,int *param_3)" identifier (parameter_list "(int param_1,undefined4 param_2,int *param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = *(int *)(param_1 + 0x38);\n  if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }\n  return;\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x38)" identifier = (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }" if (parenthesized_expression "(0 < iVar2)" ( (binary_expression "0 < iVar2" number_literal < identifier) )) (compound_statement "{\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);" do (compound_statement "{\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    }" { (expression_statement "puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);" (assignment_expression "puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20)" identifier = (cast_expression "(undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x3c) + iVar3 * 0x20)" ( (binary_expression "*(int *)(param_1 + 0x3c) + iVar3 * 0x20" (pointer_expression "*(int *)(param_1 + 0x3c)" * (cast_expression "(int *)(param_1 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) + (binary_expression "iVar3 * 0x20" identifier * number_literal)) )))) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }" if (parenthesized_expression "(puVar1[2] != 2)" ( (binary_expression "puVar1[2] != 2" (subscript_expression "puVar1[2]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }" { (expression_statement "(**(code **)(*param_3 + 8))(param_3,*puVar1);" (call_expression "(**(code **)(*param_3 + 8))(param_3,*puVar1)" (parenthesized_expression "(**(code **)(*param_3 + 8))" ( (pointer_expression "**(code **)(*param_3 + 8)" * (pointer_expression "*(code **)(*param_3 + 8)" * (cast_expression "(code **)(*param_3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "(param_3,*puVar1)" ( identifier , (pointer_expression "*puVar1" * identifier) ))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x38)" identifier = (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) })) }) while (parenthesized_expression "(iVar3 < iVar2)" ( (binary_expression "iVar3 < iVar2" identifier < identifier) )) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void do_for_all_global_symbols(Sized_pluginobj<64,_false> * this,\n   Read_symbols_data * param_1, Symbol_visitor_base * v) */\n\nvoid __thiscall\ngold::Sized_pluginobj<64,_false>::do_for_all_global_symbols\n          (Sized_pluginobj<64,_false> *this,Read_symbols_data *param_1,Symbol_visitor_base *v)\n\n{\n  ld_plugin_symbol *plVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = (this->super_Pluginobj).nsyms_;\n  if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      plVar1 = (this->super_Pluginobj).syms_ + iVar3;\n      iVar3 = iVar3 + 1;\n      if (plVar1->def != 2) {\n        (*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name);\n        iVar2 = (this->super_Pluginobj).nsyms_;\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }\n  return;\n}\n\n" comment (declaration "void __thiscall\ngold::Sized_pluginobj<64,_false>::do_for_all_global_symbols\n          (Sized_pluginobj<64,_false> *this,Read_symbols_data *param_1,Symbol_visitor_base *v)\n\n{\n  ld_plugin_symbol *plVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<64" < number_literal) , (ERROR "_false>::do_for_all_global_symbols\n          (Sized_pluginobj<64,_false> *this,Read_symbols_data *param_1,Symbol_visitor_base *v)\n\n{\n  ld_plugin_symbol" identifier > : : (function_declarator "do_for_all_global_symbols\n          (Sized_pluginobj<64,_false> *this,Read_symbols_data *param_1,Symbol_visitor_base *v)" identifier (parameter_list "(Sized_pluginobj<64,_false> *this,Read_symbols_data *param_1,Symbol_visitor_base *v)" ( (parameter_declaration "Sized_pluginobj" type_identifier) (ERROR "<64" < number_literal) , (parameter_declaration "_false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Read_symbols_data *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "Symbol_visitor_base *v" type_identifier (pointer_declarator "*v" * identifier)) ))) { identifier) (pointer_declarator "*plVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "iVar2 = (this->super_Pluginobj).nsyms_;" (assignment_expression "iVar2 = (this->super_Pluginobj).nsyms_" identifier = (field_expression "(this->super_Pluginobj).nsyms_" (parenthesized_expression "(this->super_Pluginobj)" ( (field_expression "this->super_Pluginobj" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      plVar1 = (this->super_Pluginobj).syms_ + iVar3;\n      iVar3 = iVar3 + 1;\n      if (plVar1->def != 2) {\n        (*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name);\n        iVar2 = (this->super_Pluginobj).nsyms_;\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }" if (parenthesized_expression "(0 < iVar2)" ( (binary_expression "0 < iVar2" number_literal < identifier) )) (compound_statement "{\n    iVar3 = 0;\n    do {\n      plVar1 = (this->super_Pluginobj).syms_ + iVar3;\n      iVar3 = iVar3 + 1;\n      if (plVar1->def != 2) {\n        (*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name);\n        iVar2 = (this->super_Pluginobj).nsyms_;\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      plVar1 = (this->super_Pluginobj).syms_ + iVar3;\n      iVar3 = iVar3 + 1;\n      if (plVar1->def != 2) {\n        (*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name);\n        iVar2 = (this->super_Pluginobj).nsyms_;\n      }\n    } while (iVar3 < iVar2);" do (compound_statement "{\n      plVar1 = (this->super_Pluginobj).syms_ + iVar3;\n      iVar3 = iVar3 + 1;\n      if (plVar1->def != 2) {\n        (*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name);\n        iVar2 = (this->super_Pluginobj).nsyms_;\n      }\n    }" { (expression_statement "plVar1 = (this->super_Pluginobj).syms_ + iVar3;" (assignment_expression "plVar1 = (this->super_Pluginobj).syms_ + iVar3" identifier = (binary_expression "(this->super_Pluginobj).syms_ + iVar3" (field_expression "(this->super_Pluginobj).syms_" (parenthesized_expression "(this->super_Pluginobj)" ( (field_expression "this->super_Pluginobj" identifier -> field_identifier) )) . field_identifier) + identifier)) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if (plVar1->def != 2) {\n        (*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name);\n        iVar2 = (this->super_Pluginobj).nsyms_;\n      }" if (parenthesized_expression "(plVar1->def != 2)" ( (binary_expression "plVar1->def != 2" (field_expression "plVar1->def" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n        (*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name);\n        iVar2 = (this->super_Pluginobj).nsyms_;\n      }" { (expression_statement "(*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name);" (call_expression "(*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name)" (parenthesized_expression "(*v->_vptr_Symbol_visitor_base[2])" ( (pointer_expression "*v->_vptr_Symbol_visitor_base[2]" * (subscript_expression "v->_vptr_Symbol_visitor_base[2]" (field_expression "v->_vptr_Symbol_visitor_base" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(v,plVar1->name)" ( identifier , (field_expression "plVar1->name" identifier -> field_identifier) ))) ;) (expression_statement "iVar2 = (this->super_Pluginobj).nsyms_;" (assignment_expression "iVar2 = (this->super_Pluginobj).nsyms_" identifier = (field_expression "(this->super_Pluginobj).nsyms_" (parenthesized_expression "(this->super_Pluginobj)" ( (field_expression "this->super_Pluginobj" identifier -> field_identifier) )) . field_identifier)) ;) })) }) while (parenthesized_expression "(iVar3 < iVar2)" ( (binary_expression "iVar3 < iVar2" identifier < identifier) )) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_00271ef8(int param_1,undefined4 param_2,int *param_3)\n\n{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = *(int *)(param_1 + 0x38);\n  if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }\n  return;\n}\n\n" (function_definition "void FUN_00271ef8(int param_1,undefined4 param_2,int *param_3)\n\n{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = *(int *)(param_1 + 0x38);\n  if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00271ef8(int param_1,undefined4 param_2,int *param_3)" identifier (parameter_list "(int param_1,undefined4 param_2,int *param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = *(int *)(param_1 + 0x38);\n  if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }\n  return;\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x38)" identifier = (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }" if (parenthesized_expression "(0 < iVar2)" ( (binary_expression "0 < iVar2" number_literal < identifier) )) (compound_statement "{\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);" do (compound_statement "{\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    }" { (expression_statement "puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);" (assignment_expression "puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20)" identifier = (cast_expression "(undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x3c) + iVar3 * 0x20)" ( (binary_expression "*(int *)(param_1 + 0x3c) + iVar3 * 0x20" (pointer_expression "*(int *)(param_1 + 0x3c)" * (cast_expression "(int *)(param_1 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) + (binary_expression "iVar3 * 0x20" identifier * number_literal)) )))) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }" if (parenthesized_expression "(puVar1[2] != 2)" ( (binary_expression "puVar1[2] != 2" (subscript_expression "puVar1[2]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }" { (expression_statement "(**(code **)(*param_3 + 8))(param_3,*puVar1);" (call_expression "(**(code **)(*param_3 + 8))(param_3,*puVar1)" (parenthesized_expression "(**(code **)(*param_3 + 8))" ( (pointer_expression "**(code **)(*param_3 + 8)" * (pointer_expression "*(code **)(*param_3 + 8)" * (cast_expression "(code **)(*param_3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 8)" ( (binary_expression "*param_3 + 8" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "(param_3,*puVar1)" ( identifier , (pointer_expression "*puVar1" * identifier) ))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x38)" identifier = (pointer_expression "*(int *)(param_1 + 0x38)" * (cast_expression "(int *)(param_1 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) })) }) while (parenthesized_expression "(iVar3 < iVar2)" ( (binary_expression "iVar3 < iVar2" identifier < identifier) )) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , (pointer_expression * IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (return_statement return ;) })) (return_statement return ;) })))
(function_definition "void FUN_00271ef8(int param_1,undefined4 param_2,int *param_3)\n\n{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = *(int *)(param_1 + 0x38);\n  if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00271ef8(int param_1,undefined4 param_2,int *param_3)" (identifier "FUN_00271ef8") (parameter_list "(int param_1,undefined4 param_2,int *param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = *(int *)(param_1 + 0x38);\n  if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }\n  return;\n}" ({ "{") (declaration "undefined4 *puVar1;" (type_identifier "undefined4") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x38)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1 + 0x38)" (* "*") (cast_expression "(int *)(param_1 + 0x38)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (if_statement "if (0 < iVar2) {\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }" (if "if") (parenthesized_expression "(0 < iVar2)" (( "(") (binary_expression "0 < iVar2" (number_literal "0") (< "<") (identifier "iVar2")) () ")")) (compound_statement "{\n    iVar3 = 0;\n    do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);\n    return;\n  }" ({ "{") (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    } while (iVar3 < iVar2);" (do "do") (compound_statement "{\n      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);\n      iVar3 = iVar3 + 1;\n      if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }\n    }" ({ "{") (expression_statement "puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);" (assignment_expression "puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20)" (identifier "puVar1") (= "=") (cast_expression "(undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x3c) + iVar3 * 0x20)" (( "(") (binary_expression "*(int *)(param_1 + 0x3c) + iVar3 * 0x20" (pointer_expression "*(int *)(param_1 + 0x3c)" (* "*") (cast_expression "(int *)(param_1 + 0x3c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")")))) (+ "+") (binary_expression "iVar3 * 0x20" (identifier "iVar3") (* "*") (number_literal "0x20"))) () ")")))) (; ";")) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (puVar1[2] != 2) {\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }" (if "if") (parenthesized_expression "(puVar1[2] != 2)" (( "(") (binary_expression "puVar1[2] != 2" (subscript_expression "puVar1[2]" (identifier "puVar1") ([ "[") (number_literal "2") (] "]")) (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n        (**(code **)(*param_3 + 8))(param_3,*puVar1);\n        iVar2 = *(int *)(param_1 + 0x38);\n      }" ({ "{") (expression_statement "(**(code **)(*param_3 + 8))(param_3,*puVar1);" (call_expression "(**(code **)(*param_3 + 8))(param_3,*puVar1)" (parenthesized_expression "(**(code **)(*param_3 + 8))" (( "(") (pointer_expression "**(code **)(*param_3 + 8)" (* "*") (pointer_expression "*(code **)(*param_3 + 8)" (* "*") (cast_expression "(code **)(*param_3 + 8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_3 + 8)" (( "(") (binary_expression "*param_3 + 8" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "8")) () ")"))))) () ")")) (argument_list "(param_3,*puVar1)" (( "(") (identifier "param_3") (, ",") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) () ")"))) (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 0x38);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x38)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1 + 0x38)" (* "*") (cast_expression "(int *)(param_1 + 0x38)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(iVar3 < iVar2)" (( "(") (binary_expression "iVar3 < iVar2" (identifier "iVar3") (< "<") (identifier "iVar2")) () ")")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void do_for_all_global_symbols(Sized_pluginobj<64,_false> * this,
   Read_symbols_data * param_1, Symbol_visitor_base * v) */

void __thiscall
gold::Sized_pluginobj<64,_false>::do_for_all_global_symbols
          (Sized_pluginobj<64,_false> *this,Read_symbols_data *param_1,Symbol_visitor_base *v)

{
  ld_plugin_symbol *plVar1;
  int var_1;
  int var_2;
  
  var_1 = (this->super_Pluginobj).nsyms_;
  if (0 < var_1) {
    var_2 = 0;
    do {
      plVar1 = (this->super_Pluginobj).syms_ + var_2;
      var_2 = var_2 + 1;
      if (plVar1->def != 2) {
        (*v->_vptr_Symbol_visitor_base[2])(v,plVar1->name);
        var_1 = (this->super_Pluginobj).nsyms_;
      }
    } while (var_2 < var_1);
    return;
  }
  return;
}


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

void MASKED(int param_1,undefined4 param_2,int *param_3)

{
  undefined4 *puVar1;
  int iVar2;
  int iVar3;
  
  iVar2 = *(int *)(param_1 + 0x38);
  if (0 < iVar2) {
    iVar3 = 0;
    do {
      puVar1 = (undefined4 *)(*(int *)(param_1 + 0x3c) + iVar3 * 0x20);
      iVar3 = iVar3 + 1;
      if (puVar1[2] != 2) {
        (**(code **)(*param_3 + 8))(param_3,*puVar1);
        iVar2 = *(int *)(param_1 + 0x38);
      }
    } while (iVar3 < iVar2);
    return;
  }
  return;
}

