
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* DWARF original prototype: bool add_local_plt(Output_data_got<32,_false> * this, Relobj * object,
   uint symndx, uint got_type) */

bool __thiscall
gold::Output_data_got<32,_false>::add_local_plt
          (Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type)

{
  Got_entry got_entry;
  int iVar1;
  uint uVar2;
  uint local_28;
  
  iVar1 = (*(object->super_Object)._vptr_Object[0x2b])(object,symndx,got_type,0,0);
  if ((char)iVar1 != '\0') {
    return false;
  }
  if ((2 < symndx + 0x80000003) && (symndx == (symndx & 0x7fffffff))) {
    got_entry.addend_ = 0;
    got_entry._0_8_ =
         CONCAT44(local_28 & 0x80000000 | symndx & 0x7fffffff,object) | 0x8000000000000000;
    uVar2 = add_got_entry(this,got_entry);
    (*(object->super_Object)._vptr_Object[0x2d])(object,symndx,got_type,uVar2,0,0);
    return true;
  }
                    /* WARNING: Subroutine does not return */
  do_gold_unreachable("../../gold/output.h",0xa50,"Got_entry");
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

undefined4 FUN_0011eee0(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)

{
  char cVar1;
  undefined4 uVar2;
  uint local_28;
  
  cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);
  if (cVar1 != '\0') {
    return 0;
  }
  local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;
  if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {
    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);
    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);
    return 1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00036db0
ADD EBX,0x28b117
SUB ESP,0x28
MOV EBP,dword ptr [ESP + 0x40]
MOV ESI,dword ptr [ESP + 0x44]
MOV EDI,dword ptr [ESP + 0x48]
MOV EAX,dword ptr [EBP]
PUSH 0x0
PUSH 0x0
PUSH EDI
PUSH ESI
PUSH EBP
CALL dword ptr [EAX + 0xac]
ADD ESP,0x20
TEST AL,AL
JNZ 0x0011efa0
MOV EAX,dword ptr [ESP + 0x4]
MOV EDX,ESI
MOV dword ptr [ESP + 0x8],0x0
AND EDX,0x7fffffff
MOV dword ptr [ESP + 0xc],0x0
AND EAX,0x80000000
OR EAX,EDX
MOV dword ptr [ESP + 0x4],EAX
SHR EAX,0x18
OR EAX,0xffffff80
MOV byte ptr [ESP + 0x7],AL
LEA EAX,[ESI + 0x80000003]
CMP EAX,0x2
JBE 0x0011efaa
CMP ESI,EDX
JNZ 0x0011efaa
MOV dword ptr [ESP],EBP
SUB ESP,0xc
PUSH dword ptr [ESP + 0x18]
PUSH dword ptr [ESP + 0x18]
PUSH dword ptr [ESP + 0x18]
PUSH EBP
PUSH dword ptr [ESP + 0x4c]
CALL 0x0011e770
ADD ESP,0x18
MOV EDX,dword ptr [EBP]
PUSH 0x0
PUSH 0x0
PUSH EAX
PUSH EDI
PUSH ESI
PUSH EBP
CALL dword ptr [EDX + 0xb4]
MOV EAX,0x1
ADD ESP,0x20
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD ESP,0x1c
XOR EAX,EAX
POP EBX
POP ESI
POP EDI
POP EBP
RET
PUSH EAX
LEA EAX,[EBX + 0xfff00de0]
PUSH EAX
LEA EAX,[EBX + 0xffef1371]
PUSH 0xa50
PUSH EAX
CALL 0x0007ac80
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nundefined4 FUN_0011eee0(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  uint local_28;\n  \n  cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);\n  if (cVar1 != '\0') {\n    return 0;\n  }\n  local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;\n  if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);\n}\n\n" comment (function_definition "undefined4 FUN_0011eee0(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  uint local_28;\n  \n  cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);\n  if (cVar1 != '\0') {\n    return 0;\n  }\n  local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;\n  if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);\n}" type_identifier (function_declarator "FUN_0011eee0(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)" identifier (parameter_list "(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  undefined4 uVar2;\n  uint local_28;\n  \n  cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);\n  if (cVar1 != '\0') {\n    return 0;\n  }\n  local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;\n  if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "uint local_28;" type_identifier identifier ;) (expression_statement "cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);" (assignment_expression "cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0)" identifier = (call_expression "(**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0)" (parenthesized_expression "(**(code **)(*param_2 + 0xac))" ( (pointer_expression "**(code **)(*param_2 + 0xac)" * (pointer_expression "*(code **)(*param_2 + 0xac)" * (cast_expression "(code **)(*param_2 + 0xac)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xac)" ( (binary_expression "*param_2 + 0xac" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,param_3,param_4,0,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (if_statement "if (cVar1 != '\0') {\n    return 0;\n  }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;" (assignment_expression "local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000" identifier = (binary_expression "local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000" (binary_expression "local_28 & 0x80000000 | param_3 & 0x7fffffff" (binary_expression "local_28 & 0x80000000" identifier & number_literal) | (binary_expression "param_3 & 0x7fffffff" identifier & number_literal)) | number_literal)) ;) (if_statement "if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }" if (parenthesized_expression "((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff)))" ( (binary_expression "(2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))" (parenthesized_expression "(2 < param_3 + 0x80000003)" ( (binary_expression "2 < param_3 + 0x80000003" number_literal < (binary_expression "param_3 + 0x80000003" identifier + number_literal)) )) && (parenthesized_expression "(param_3 == (param_3 & 0x7fffffff))" ( (binary_expression "param_3 == (param_3 & 0x7fffffff)" identifier == (parenthesized_expression "(param_3 & 0x7fffffff)" ( (binary_expression "param_3 & 0x7fffffff" identifier & number_literal) ))) ))) )) (compound_statement "{\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }" { (expression_statement "uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);" (assignment_expression "uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0)" identifier = (call_expression "FUN_0011e770(param_1,param_2,local_28,0,0)" identifier (argument_list "(param_1,param_2,local_28,0,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (expression_statement "(**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);" (call_expression "(**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0)" (parenthesized_expression "(**(code **)(*param_2 + 0xb4))" ( (pointer_expression "**(code **)(*param_2 + 0xb4)" * (pointer_expression "*(code **)(*param_2 + 0xb4)" * (cast_expression "(code **)(*param_2 + 0xb4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xb4)" ( (binary_expression "*param_2 + 0xb4" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,param_3,param_4,uVar2,0,0)" ( identifier , identifier , identifier , identifier , number_literal , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) comment (expression_statement "FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);" (call_expression "FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003)" identifier (argument_list "("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003)" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""Got_entry"" " string_content ") , (binary_expression "param_3 + 0x80000003" identifier + number_literal) ))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* DWARF original prototype: bool add_local_plt(Output_data_got<32,_false> * this, Relobj * object,\n   uint symndx, uint got_type) */\n\nbool __thiscall\ngold::Output_data_got<32,_false>::add_local_plt\n          (Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type)\n\n{\n  Got_entry got_entry;\n  int iVar1;\n  uint uVar2;\n  uint local_28;\n  \n  iVar1 = (*(object->super_Object)._vptr_Object[0x2b])(object,symndx,got_type,0,0);\n  if ((char)iVar1 != '\0') {\n    return false;\n  }\n  if ((2 < symndx + 0x80000003) && (symndx == (symndx & 0x7fffffff))) {\n    got_entry.addend_ = 0;\n    got_entry._0_8_ =\n         CONCAT44(local_28 & 0x80000000 | symndx & 0x7fffffff,object) | 0x8000000000000000;\n    uVar2 = add_got_entry(this,got_entry);\n    (*(object->super_Object)._vptr_Object[0x2d])(object,symndx,got_type,uVar2,0,0);\n    return true;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.h",0xa50,"Got_entry");\n}\n\n" comment comment (declaration "bool __thiscall\ngold::Output_data_got<32,_false>::add_local_plt\n          (Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type)\n\n{\n  Got_entry got_entry;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<32" < number_literal) , (ERROR "_false>::add_local_plt\n          (Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type)\n\n{\n  Got_entry" identifier > : : (function_declarator "add_local_plt\n          (Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type)" identifier (parameter_list "(Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type)" ( (parameter_declaration "Output_data_got" type_identifier) (ERROR "<32" < number_literal) , (parameter_declaration "_false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Relobj *object" type_identifier (pointer_declarator "*object" * identifier)) , (parameter_declaration "uint symndx" type_identifier identifier) , (parameter_declaration "uint got_type" type_identifier identifier) ))) { identifier) identifier ;) (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint local_28;" type_identifier identifier ;) (expression_statement "iVar1 = (*(object->super_Object)._vptr_Object[0x2b])(object,symndx,got_type,0,0);" (assignment_expression "iVar1 = (*(object->super_Object)._vptr_Object[0x2b])(object,symndx,got_type,0,0)" identifier = (call_expression "(*(object->super_Object)._vptr_Object[0x2b])(object,symndx,got_type,0,0)" (parenthesized_expression "(*(object->super_Object)._vptr_Object[0x2b])" ( (pointer_expression "*(object->super_Object)._vptr_Object[0x2b]" * (subscript_expression "(object->super_Object)._vptr_Object[0x2b]" (field_expression "(object->super_Object)._vptr_Object" (parenthesized_expression "(object->super_Object)" ( (field_expression "object->super_Object" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) )) (argument_list "(object,symndx,got_type,0,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (if_statement "if ((char)iVar1 != '\0') {\n    return false;\n  }" if (parenthesized_expression "((char)iVar1 != '\0')" ( (binary_expression "(char)iVar1 != '\0'" (cast_expression "(char)iVar1" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return false;\n  }" { (return_statement "return false;" return false ;) })) (if_statement "if ((2 < symndx + 0x80000003) && (symndx == (symndx & 0x7fffffff))) {\n    got_entry.addend_ = 0;\n    got_entry._0_8_ =\n         CONCAT44(local_28 & 0x80000000 | symndx & 0x7fffffff,object) | 0x8000000000000000;\n    uVar2 = add_got_entry(this,got_entry);\n    (*(object->super_Object)._vptr_Object[0x2d])(object,symndx,got_type,uVar2,0,0);\n    return true;\n  }" if (parenthesized_expression "((2 < symndx + 0x80000003) && (symndx == (symndx & 0x7fffffff)))" ( (binary_expression "(2 < symndx + 0x80000003) && (symndx == (symndx & 0x7fffffff))" (parenthesized_expression "(2 < symndx + 0x80000003)" ( (binary_expression "2 < symndx + 0x80000003" number_literal < (binary_expression "symndx + 0x80000003" identifier + number_literal)) )) && (parenthesized_expression "(symndx == (symndx & 0x7fffffff))" ( (binary_expression "symndx == (symndx & 0x7fffffff)" identifier == (parenthesized_expression "(symndx & 0x7fffffff)" ( (binary_expression "symndx & 0x7fffffff" identifier & number_literal) ))) ))) )) (compound_statement "{\n    got_entry.addend_ = 0;\n    got_entry._0_8_ =\n         CONCAT44(local_28 & 0x80000000 | symndx & 0x7fffffff,object) | 0x8000000000000000;\n    uVar2 = add_got_entry(this,got_entry);\n    (*(object->super_Object)._vptr_Object[0x2d])(object,symndx,got_type,uVar2,0,0);\n    return true;\n  }" { (expression_statement "got_entry.addend_ = 0;" (assignment_expression "got_entry.addend_ = 0" (field_expression "got_entry.addend_" identifier . field_identifier) = number_literal) ;) (expression_statement "got_entry._0_8_ =\n         CONCAT44(local_28 & 0x80000000 | symndx & 0x7fffffff,object) | 0x8000000000000000;" (assignment_expression "got_entry._0_8_ =\n         CONCAT44(local_28 & 0x80000000 | symndx & 0x7fffffff,object) | 0x8000000000000000" (field_expression "got_entry._0_8_" identifier . field_identifier) = (binary_expression "CONCAT44(local_28 & 0x80000000 | symndx & 0x7fffffff,object) | 0x8000000000000000" (call_expression "CONCAT44(local_28 & 0x80000000 | symndx & 0x7fffffff,object)" identifier (argument_list "(local_28 & 0x80000000 | symndx & 0x7fffffff,object)" ( (binary_expression "local_28 & 0x80000000 | symndx & 0x7fffffff" (binary_expression "local_28 & 0x80000000" identifier & number_literal) | (binary_expression "symndx & 0x7fffffff" identifier & number_literal)) , identifier ))) | number_literal)) ;) (expression_statement "uVar2 = add_got_entry(this,got_entry);" (assignment_expression "uVar2 = add_got_entry(this,got_entry)" identifier = (call_expression "add_got_entry(this,got_entry)" identifier (argument_list "(this,got_entry)" ( identifier , identifier )))) ;) (expression_statement "(*(object->super_Object)._vptr_Object[0x2d])(object,symndx,got_type,uVar2,0,0);" (call_expression "(*(object->super_Object)._vptr_Object[0x2d])(object,symndx,got_type,uVar2,0,0)" (parenthesized_expression "(*(object->super_Object)._vptr_Object[0x2d])" ( (pointer_expression "*(object->super_Object)._vptr_Object[0x2d]" * (subscript_expression "(object->super_Object)._vptr_Object[0x2d]" (field_expression "(object->super_Object)._vptr_Object" (parenthesized_expression "(object->super_Object)" ( (field_expression "object->super_Object" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) )) (argument_list "(object,symndx,got_type,uVar2,0,0)" ( identifier , identifier , identifier , identifier , number_literal , number_literal ))) ;) (return_statement "return true;" return true ;) })) comment (expression_statement "do_gold_unreachable("../../gold/output.h",0xa50,"Got_entry");" (call_expression "do_gold_unreachable("../../gold/output.h",0xa50,"Got_entry")" identifier (argument_list "("../../gold/output.h",0xa50,"Got_entry")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""Got_entry"" " string_content ") ))) ;) (ERROR "}" }))
(translation_unit "undefined4 FUN_0011eee0(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  uint local_28;\n  \n  cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);\n  if (cVar1 != '\0') {\n    return 0;\n  }\n  local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;\n  if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }\n                    \n  FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);\n}\n\n" (function_definition "undefined4 FUN_0011eee0(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  uint local_28;\n  \n  cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);\n  if (cVar1 != '\0') {\n    return 0;\n  }\n  local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;\n  if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }\n                    \n  FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);\n}" type_identifier (function_declarator "FUN_0011eee0(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)" identifier (parameter_list "(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  undefined4 uVar2;\n  uint local_28;\n  \n  cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);\n  if (cVar1 != '\0') {\n    return 0;\n  }\n  local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;\n  if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }\n                    \n  FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "uint local_28;" type_identifier identifier ;) (expression_statement "cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);" (assignment_expression "cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0)" identifier = (call_expression "(**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0)" (parenthesized_expression "(**(code **)(*param_2 + 0xac))" ( (pointer_expression "**(code **)(*param_2 + 0xac)" * (pointer_expression "*(code **)(*param_2 + 0xac)" * (cast_expression "(code **)(*param_2 + 0xac)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xac)" ( (binary_expression "*param_2 + 0xac" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,param_3,param_4,0,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (if_statement "if (cVar1 != '\0') {\n    return 0;\n  }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;" (assignment_expression "local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000" identifier = (binary_expression "local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000" (binary_expression "local_28 & 0x80000000 | param_3 & 0x7fffffff" (binary_expression "local_28 & 0x80000000" identifier & number_literal) | (binary_expression "param_3 & 0x7fffffff" identifier & number_literal)) | number_literal)) ;) (if_statement "if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }" if (parenthesized_expression "((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff)))" ( (binary_expression "(2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))" (parenthesized_expression "(2 < param_3 + 0x80000003)" ( (binary_expression "2 < param_3 + 0x80000003" number_literal < (binary_expression "param_3 + 0x80000003" identifier + number_literal)) )) && (parenthesized_expression "(param_3 == (param_3 & 0x7fffffff))" ( (binary_expression "param_3 == (param_3 & 0x7fffffff)" identifier == (parenthesized_expression "(param_3 & 0x7fffffff)" ( (binary_expression "param_3 & 0x7fffffff" identifier & number_literal) ))) ))) )) (compound_statement "{\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }" { (expression_statement "uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);" (assignment_expression "uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0)" identifier = (call_expression "FUN_0011e770(param_1,param_2,local_28,0,0)" identifier (argument_list "(param_1,param_2,local_28,0,0)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;) (expression_statement "(**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);" (call_expression "(**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0)" (parenthesized_expression "(**(code **)(*param_2 + 0xb4))" ( (pointer_expression "**(code **)(*param_2 + 0xb4)" * (pointer_expression "*(code **)(*param_2 + 0xb4)" * (cast_expression "(code **)(*param_2 + 0xb4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xb4)" ( (binary_expression "*param_2 + 0xb4" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,param_3,param_4,uVar2,0,0)" ( identifier , identifier , identifier , identifier , number_literal , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) (expression_statement "FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);" (call_expression "FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003)" identifier (argument_list "("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003)" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""Got_entry"" " string_content ") , (binary_expression "param_3 + 0x80000003" identifier + number_literal) ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (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 , IDENT , IDENT , LIT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT & LIT) | (binary_expression IDENT & LIT)) | LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT + LIT)) )) && (parenthesized_expression ( (binary_expression IDENT == (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT , LIT )))) ;) (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 , IDENT , IDENT , IDENT , LIT , LIT ))) ;) (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , (binary_expression IDENT + LIT) ))) ;) })))
(function_definition "undefined4 FUN_0011eee0(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  uint local_28;\n  \n  cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);\n  if (cVar1 != '\0') {\n    return 0;\n  }\n  local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;\n  if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }\n                    \n  FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);\n}" (type_identifier "undefined4") (function_declarator "FUN_0011eee0(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)" (identifier "FUN_0011eee0") (parameter_list "(undefined4 param_1,int *param_2,uint param_3,undefined4 param_4)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) () ")"))) (compound_statement "{\n  char cVar1;\n  undefined4 uVar2;\n  uint local_28;\n  \n  cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);\n  if (cVar1 != '\0') {\n    return 0;\n  }\n  local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;\n  if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }\n                    \n  FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "uint local_28;" (type_identifier "uint") (identifier "local_28") (; ";")) (expression_statement "cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);" (assignment_expression "cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0)" (identifier "cVar1") (= "=") (call_expression "(**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0)" (parenthesized_expression "(**(code **)(*param_2 + 0xac))" (( "(") (pointer_expression "**(code **)(*param_2 + 0xac)" (* "*") (pointer_expression "*(code **)(*param_2 + 0xac)" (* "*") (cast_expression "(code **)(*param_2 + 0xac)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0xac)" (( "(") (binary_expression "*param_2 + 0xac" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0xac")) () ")"))))) () ")")) (argument_list "(param_2,param_3,param_4,0,0)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (number_literal "0") (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (cVar1 != '\0') {\n    return 0;\n  }" (if "if") (parenthesized_expression "(cVar1 != '\0')" (( "(") (binary_expression "cVar1 != '\0'" (identifier "cVar1") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;" (assignment_expression "local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000" (identifier "local_28") (= "=") (binary_expression "local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000" (binary_expression "local_28 & 0x80000000 | param_3 & 0x7fffffff" (binary_expression "local_28 & 0x80000000" (identifier "local_28") (& "&") (number_literal "0x80000000")) (| "|") (binary_expression "param_3 & 0x7fffffff" (identifier "param_3") (& "&") (number_literal "0x7fffffff"))) (| "|") (number_literal "0x80000000"))) (; ";")) (if_statement "if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }" (if "if") (parenthesized_expression "((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff)))" (( "(") (binary_expression "(2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))" (parenthesized_expression "(2 < param_3 + 0x80000003)" (( "(") (binary_expression "2 < param_3 + 0x80000003" (number_literal "2") (< "<") (binary_expression "param_3 + 0x80000003" (identifier "param_3") (+ "+") (number_literal "0x80000003"))) () ")")) (&& "&&") (parenthesized_expression "(param_3 == (param_3 & 0x7fffffff))" (( "(") (binary_expression "param_3 == (param_3 & 0x7fffffff)" (identifier "param_3") (== "==") (parenthesized_expression "(param_3 & 0x7fffffff)" (( "(") (binary_expression "param_3 & 0x7fffffff" (identifier "param_3") (& "&") (number_literal "0x7fffffff")) () ")"))) () ")"))) () ")")) (compound_statement "{\n    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);\n    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);\n    return 1;\n  }" ({ "{") (expression_statement "uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);" (assignment_expression "uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0)" (identifier "uVar2") (= "=") (call_expression "FUN_0011e770(param_1,param_2,local_28,0,0)" (identifier "FUN_0011e770") (argument_list "(param_1,param_2,local_28,0,0)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "local_28") (, ",") (number_literal "0") (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "(**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);" (call_expression "(**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0)" (parenthesized_expression "(**(code **)(*param_2 + 0xb4))" (( "(") (pointer_expression "**(code **)(*param_2 + 0xb4)" (* "*") (pointer_expression "*(code **)(*param_2 + 0xb4)" (* "*") (cast_expression "(code **)(*param_2 + 0xb4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0xb4)" (( "(") (binary_expression "*param_2 + 0xb4" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0xb4")) () ")"))))) () ")")) (argument_list "(param_2,param_3,param_4,uVar2,0,0)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "uVar2") (, ",") (number_literal "0") (, ",") (number_literal "0") () ")"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);" (call_expression "FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003)" (identifier "FUN_0007ac80") (argument_list "("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003)" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0xa50") (, ",") (string_literal ""Got_entry"" (" """) (string_content "Got_entry") (" """)) (, ",") (binary_expression "param_3 + 0x80000003" (identifier "param_3") (+ "+") (number_literal "0x80000003")) () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* DWARF original prototype: bool add_local_plt(Output_data_got<32,_false> * this, Relobj * object,
   uint symndx, uint got_type) */

bool __thiscall
gold::Output_data_got<32,_false>::add_local_plt
          (Output_data_got<32,_false> *this,Relobj *object,type_1 var_1,type_1 got_type)

{
  Got_entry got_entry;
  int iVar1;
  type_1 uVar2;
  type_1 var_3;
  
  iVar1 = (*(object->super_Object)._vptr_Object[0x2b])(object,var_1,got_type,0,0);
  if ((char)iVar1 != '\0') {
    return false;
  }
  if ((2 < var_1 + 0x80000003) && (var_1 == (var_1 & 0x7fffffff))) {
    got_entry.addend_ = 0;
    got_entry._0_8_ =
         var_2(var_3 & 0x80000000 | var_1 & 0x7fffffff,object) | 0x8000000000000000;
    uVar2 = var_4(this,got_entry);
    (*(object->super_Object)._vptr_Object[0x2d])(object,var_1,got_type,uVar2,0,0);
    return true;
  }
                    /* WARNING: Subroutine does not return */
  var_5("../../gold/output.h",0xa50,"Got_entry");
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

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

{
  char cVar1;
  undefined4 uVar2;
  uint local_28;
  
  cVar1 = (**(code **)(*param_2 + 0xac))(param_2,param_3,param_4,0,0);
  if (cVar1 != '\0') {
    return 0;
  }
  local_28 = local_28 & 0x80000000 | param_3 & 0x7fffffff | 0x80000000;
  if ((2 < param_3 + 0x80000003) && (param_3 == (param_3 & 0x7fffffff))) {
    uVar2 = FUN_0011e770(param_1,param_2,local_28,0,0);
    (**(code **)(*param_2 + 0xb4))(param_2,param_3,param_4,uVar2,0,0);
    return 1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0007ac80("../../gold/output.h",0xa50,"Got_entry",param_3 + 0x80000003);
}

