
/* DWARF original prototype: void add_local_with_rel(Output_data_got<32,_false> * this, Relobj *
   object, uint symndx, uint got_type, Output_data_reloc_generic * rel_dyn, uint r_type, uint64_t
   addend) */

void __thiscall
gold::Output_data_got<32,_false>::add_local_with_rel
          (Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type,
          Output_data_reloc_generic *rel_dyn,uint r_type,uint64_t addend)

{
  int iVar1;
  uint uVar2;
  undefined4 uStack_54;
  undefined4 uStack_4c;
  
  iVar1 = (*(object->super_Object)._vptr_Object[0x2b])(object,(ulong)symndx,(ulong)got_type,addend);
  if ((char)iVar1 != '\0') {
    return;
  }
  uVar2 = add_got_entry(this,(Got_entry)
                             (ZEXT1224(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)) << 0x20))
  ;
  (*(object->super_Object)._vptr_Object[0x2d])
            (object,(ulong)symndx,(ulong)got_type,(ulong)uVar2,addend);
                    /* WARNING: Could not recover jumptable at 0x003e24b2. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (*(rel_dyn->super_Output_section_data_build).super_Output_section_data.super_Output_data.
    _vptr_Output_data[0x1b])(rel_dyn,object,(ulong)symndx,(ulong)r_type,this,(ulong)uVar2);
  return;
}



void FUN_003e23e0(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,
                 long *param_5,undefined4 param_6,undefined8 param_7)

{
  char cVar1;
  undefined4 uVar2;
  
  cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);
  if (cVar1 != '\0') {
    return;
  }
  uVar2 = FUN_003e1b00(param_1);
  (**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);
                    /* WARNING: Could not recover jumptable at 0x003e24b2. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);
  return;
}


PUSH R15
MOV R15,RSI
PUSH R14
MOV R14,RDI
MOV RDI,R15
PUSH R13
MOV R13,R8
PUSH R12
MOV R12D,ECX
PUSH RBP
PUSH RBX
MOV EBX,EDX
MOV EDX,R12D
SUB RSP,0x38
MOV RAX,qword ptr [RSI]
MOV ESI,EBX
MOV RBP,qword ptr [RSP + 0x70]
MOV dword ptr [RSP + 0x8],R9D
MOV RCX,RBP
CALL qword ptr [RAX + 0x158]
TEST AL,AL
JZ 0x003e2430
ADD RSP,0x38
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV dword ptr [RSP + 0x18],0x7ffffffd
SUB RSP,0x8
MOV RDI,R14
MOV qword ptr [RSP + 0x28],0x0
MOV dword ptr [RSP + 0x18],0x0
PUSH qword ptr [RSP + 0x28]
PUSH qword ptr [RSP + 0x28]
PUSH qword ptr [RSP + 0x28]
CALL 0x003e1b00
MOV R9,qword ptr [R15]
ADD RSP,0x20
MOV R8,RBP
MOV EDX,R12D
MOV ESI,EBX
MOV RDI,R15
MOV ECX,EAX
MOV dword ptr [RSP + 0xc],EAX
CALL qword ptr [R9 + 0x168]
MOV RDX,qword ptr [R13]
MOV qword ptr [RSP + 0x70],RBP
MOV R8,R14
MOV R9D,dword ptr [RSP + 0xc]
MOV ECX,dword ptr [RSP + 0x8]
MOV RSI,R15
MOV RDI,R13
MOV R11,qword ptr [RDX + 0xd8]
ADD RSP,0x38
MOV EDX,EBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
JMP R11
(translation_unit "void FUN_003e23e0(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  \n  cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);\n  if (cVar1 != '\0') {\n    return;\n  }\n  uVar2 = FUN_003e1b00(param_1);\n  (**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);\n                    /* WARNING: Could not recover jumptable at 0x003e24b2. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);\n  return;\n}\n\n" (function_definition "void FUN_003e23e0(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  \n  cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);\n  if (cVar1 != '\0') {\n    return;\n  }\n  uVar2 = FUN_003e1b00(param_1);\n  (**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);\n                    /* WARNING: Could not recover jumptable at 0x003e24b2. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);\n  return;\n}" primitive_type (function_declarator "FUN_003e23e0(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)" identifier (parameter_list "(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "long *param_5" (sized_type_specifier "long" long) (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "undefined8 param_7" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  undefined4 uVar2;\n  \n  cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);\n  if (cVar1 != '\0') {\n    return;\n  }\n  uVar2 = FUN_003e1b00(param_1);\n  (**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);\n                    /* WARNING: Could not recover jumptable at 0x003e24b2. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (expression_statement "cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);" (assignment_expression "cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7)" identifier = (call_expression "(**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7)" (parenthesized_expression "(**(code **)(*param_2 + 0x158))" ( (pointer_expression "**(code **)(*param_2 + 0x158)" * (pointer_expression "*(code **)(*param_2 + 0x158)" * (cast_expression "(code **)(*param_2 + 0x158)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x158)" ( (binary_expression "*param_2 + 0x158" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,param_3,param_4,param_7)" ( identifier , identifier , identifier , identifier )))) ;) (if_statement "if (cVar1 != '\0') {\n    return;\n  }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar2 = FUN_003e1b00(param_1);" (assignment_expression "uVar2 = FUN_003e1b00(param_1)" identifier = (call_expression "FUN_003e1b00(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "(**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);" (call_expression "(**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7)" (parenthesized_expression "(**(code **)(*param_2 + 0x168))" ( (pointer_expression "**(code **)(*param_2 + 0x168)" * (pointer_expression "*(code **)(*param_2 + 0x168)" * (cast_expression "(code **)(*param_2 + 0x168)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x168)" ( (binary_expression "*param_2 + 0x168" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,param_3,param_4,uVar2,param_7)" ( identifier , identifier , identifier , identifier , identifier ))) ;) comment comment (expression_statement "(**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);" (call_expression "(**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2)" (parenthesized_expression "(**(code **)(*param_5 + 0xd8))" ( (pointer_expression "**(code **)(*param_5 + 0xd8)" * (pointer_expression "*(code **)(*param_5 + 0xd8)" * (cast_expression "(code **)(*param_5 + 0xd8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_5 + 0xd8)" ( (binary_expression "*param_5 + 0xd8" (pointer_expression "*param_5" * identifier) + number_literal) ))))) )) (argument_list "(param_5,param_2,param_3,param_6,param_1,uVar2)" ( identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void add_local_with_rel(Output_data_got<32,_false> * this, Relobj *\n   object, uint symndx, uint got_type, Output_data_reloc_generic * rel_dyn, uint r_type, uint64_t\n   addend) */\n\nvoid __thiscall\ngold::Output_data_got<32,_false>::add_local_with_rel\n          (Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type,\n          Output_data_reloc_generic *rel_dyn,uint r_type,uint64_t addend)\n\n{\n  int iVar1;\n  uint uVar2;\n  undefined4 uStack_54;\n  undefined4 uStack_4c;\n  \n  iVar1 = (*(object->super_Object)._vptr_Object[0x2b])(object,(ulong)symndx,(ulong)got_type,addend);\n  if ((char)iVar1 != '\0') {\n    return;\n  }\n  uVar2 = add_got_entry(this,(Got_entry)\n                             (ZEXT1224(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)) << 0x20))\n  ;\n  (*(object->super_Object)._vptr_Object[0x2d])\n            (object,(ulong)symndx,(ulong)got_type,(ulong)uVar2,addend);\n                    /* WARNING: Could not recover jumptable at 0x003e24b2. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (*(rel_dyn->super_Output_section_data_build).super_Output_section_data.super_Output_data.\n    _vptr_Output_data[0x1b])(rel_dyn,object,(ulong)symndx,(ulong)r_type,this,(ulong)uVar2);\n  return;\n}\n\n" comment (declaration "void __thiscall\ngold::Output_data_got<32,_false>::add_local_with_rel\n          (Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type,\n          Output_data_reloc_generic *rel_dyn,uint r_type,uint64_t addend)\n\n{\n  int iVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<32" < number_literal) , (ERROR "_false>::add_local_with_rel\n          (Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type,\n          Output_data_reloc_generic *rel_dyn,uint r_type,uint64_t addend)\n\n{\n  int" identifier > : : (function_declarator "add_local_with_rel\n          (Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type,\n          Output_data_reloc_generic *rel_dyn,uint r_type,uint64_t addend)" identifier (parameter_list "(Output_data_got<32,_false> *this,Relobj *object,uint symndx,uint got_type,\n          Output_data_reloc_generic *rel_dyn,uint r_type,uint64_t addend)" ( (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) , (parameter_declaration "Output_data_reloc_generic *rel_dyn" type_identifier (pointer_declarator "*rel_dyn" * identifier)) , (parameter_declaration "uint r_type" type_identifier identifier) , (parameter_declaration "uint64_t addend" primitive_type identifier) ))) { primitive_type) identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "undefined4 uStack_54;" type_identifier identifier ;) (declaration "undefined4 uStack_4c;" type_identifier identifier ;) (expression_statement "iVar1 = (*(object->super_Object)._vptr_Object[0x2b])(object,(ulong)symndx,(ulong)got_type,addend);" (assignment_expression "iVar1 = (*(object->super_Object)._vptr_Object[0x2b])(object,(ulong)symndx,(ulong)got_type,addend)" identifier = (call_expression "(*(object->super_Object)._vptr_Object[0x2b])(object,(ulong)symndx,(ulong)got_type,addend)" (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,(ulong)symndx,(ulong)got_type,addend)" ( identifier , (cast_expression "(ulong)symndx" ( (type_descriptor "ulong" type_identifier) ) identifier) , (cast_expression "(ulong)got_type" ( (type_descriptor "ulong" type_identifier) ) identifier) , identifier )))) ;) (if_statement "if ((char)iVar1 != '\0') {\n    return;\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;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar2 = add_got_entry(this,(Got_entry)\n                             (ZEXT1224(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)) << 0x20))\n  ;" (assignment_expression "uVar2 = add_got_entry(this,(Got_entry)\n                             (ZEXT1224(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)) << 0x20))" identifier = (call_expression "add_got_entry(this,(Got_entry)\n                             (ZEXT1224(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)) << 0x20))" identifier (argument_list "(this,(Got_entry)\n                             (ZEXT1224(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)) << 0x20))" ( identifier , (call_expression "(Got_entry)\n                             (ZEXT1224(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)) << 0x20)" (parenthesized_expression "(Got_entry)" ( identifier )) (argument_list "(ZEXT1224(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)) << 0x20)" ( (binary_expression "ZEXT1224(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)) << 0x20" (call_expression "ZEXT1224(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54))" identifier (argument_list "(CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54))" ( (call_expression "CONCAT84(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)" identifier (argument_list "(CONCAT44(uStack_4c,0x7ffffffd),uStack_54)" ( (call_expression "CONCAT44(uStack_4c,0x7ffffffd)" identifier (argument_list "(uStack_4c,0x7ffffffd)" ( identifier , number_literal ))) , identifier ))) ))) << number_literal) ))) )))) ;) (expression_statement "(*(object->super_Object)._vptr_Object[0x2d])\n            (object,(ulong)symndx,(ulong)got_type,(ulong)uVar2,addend);" (call_expression "(*(object->super_Object)._vptr_Object[0x2d])\n            (object,(ulong)symndx,(ulong)got_type,(ulong)uVar2,addend)" (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,(ulong)symndx,(ulong)got_type,(ulong)uVar2,addend)" ( identifier , (cast_expression "(ulong)symndx" ( (type_descriptor "ulong" type_identifier) ) identifier) , (cast_expression "(ulong)got_type" ( (type_descriptor "ulong" type_identifier) ) identifier) , (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier) , identifier ))) ;) comment comment (expression_statement "(*(rel_dyn->super_Output_section_data_build).super_Output_section_data.super_Output_data.\n    _vptr_Output_data[0x1b])(rel_dyn,object,(ulong)symndx,(ulong)r_type,this,(ulong)uVar2);" (call_expression "(*(rel_dyn->super_Output_section_data_build).super_Output_section_data.super_Output_data.\n    _vptr_Output_data[0x1b])(rel_dyn,object,(ulong)symndx,(ulong)r_type,this,(ulong)uVar2)" (parenthesized_expression "(*(rel_dyn->super_Output_section_data_build).super_Output_section_data.super_Output_data.\n    _vptr_Output_data[0x1b])" ( (pointer_expression "*(rel_dyn->super_Output_section_data_build).super_Output_section_data.super_Output_data.\n    _vptr_Output_data[0x1b]" * (subscript_expression "(rel_dyn->super_Output_section_data_build).super_Output_section_data.super_Output_data.\n    _vptr_Output_data[0x1b]" (field_expression "(rel_dyn->super_Output_section_data_build).super_Output_section_data.super_Output_data.\n    _vptr_Output_data" (field_expression "(rel_dyn->super_Output_section_data_build).super_Output_section_data.super_Output_data" (field_expression "(rel_dyn->super_Output_section_data_build).super_Output_section_data" (parenthesized_expression "(rel_dyn->super_Output_section_data_build)" ( (field_expression "rel_dyn->super_Output_section_data_build" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) [ number_literal ])) )) (argument_list "(rel_dyn,object,(ulong)symndx,(ulong)r_type,this,(ulong)uVar2)" ( identifier , identifier , (cast_expression "(ulong)symndx" ( (type_descriptor "ulong" type_identifier) ) identifier) , (cast_expression "(ulong)r_type" ( (type_descriptor "ulong" type_identifier) ) identifier) , identifier , (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier) ))) ;) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_003e23e0(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  \n  cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);\n  if (cVar1 != '\0') {\n    return;\n  }\n  uVar2 = FUN_003e1b00(param_1);\n  (**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);\n                    \n                    \n  (**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);\n  return;\n}\n\n" (function_definition "void FUN_003e23e0(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  \n  cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);\n  if (cVar1 != '\0') {\n    return;\n  }\n  uVar2 = FUN_003e1b00(param_1);\n  (**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);\n                    \n                    \n  (**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);\n  return;\n}" primitive_type (function_declarator "FUN_003e23e0(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)" identifier (parameter_list "(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "long *param_5" (sized_type_specifier "long" long) (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "undefined8 param_7" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  undefined4 uVar2;\n  \n  cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);\n  if (cVar1 != '\0') {\n    return;\n  }\n  uVar2 = FUN_003e1b00(param_1);\n  (**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);\n                    \n                    \n  (**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (expression_statement "cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);" (assignment_expression "cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7)" identifier = (call_expression "(**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7)" (parenthesized_expression "(**(code **)(*param_2 + 0x158))" ( (pointer_expression "**(code **)(*param_2 + 0x158)" * (pointer_expression "*(code **)(*param_2 + 0x158)" * (cast_expression "(code **)(*param_2 + 0x158)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x158)" ( (binary_expression "*param_2 + 0x158" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,param_3,param_4,param_7)" ( identifier , identifier , identifier , identifier )))) ;) (if_statement "if (cVar1 != '\0') {\n    return;\n  }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar2 = FUN_003e1b00(param_1);" (assignment_expression "uVar2 = FUN_003e1b00(param_1)" identifier = (call_expression "FUN_003e1b00(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "(**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);" (call_expression "(**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7)" (parenthesized_expression "(**(code **)(*param_2 + 0x168))" ( (pointer_expression "**(code **)(*param_2 + 0x168)" * (pointer_expression "*(code **)(*param_2 + 0x168)" * (cast_expression "(code **)(*param_2 + 0x168)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x168)" ( (binary_expression "*param_2 + 0x168" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,param_3,param_4,uVar2,param_7)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "(**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);" (call_expression "(**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2)" (parenthesized_expression "(**(code **)(*param_5 + 0xd8))" ( (pointer_expression "**(code **)(*param_5 + 0xd8)" * (pointer_expression "*(code **)(*param_5 + 0xd8)" * (cast_expression "(code **)(*param_5 + 0xd8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_5 + 0xd8)" ( (binary_expression "*param_5 + 0xd8" (pointer_expression "*param_5" * identifier) + number_literal) ))))) )) (argument_list "(param_5,param_2,param_3,param_6,param_1,uVar2)" ( identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (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 , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (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 , IDENT ))) ;) (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 , IDENT , IDENT ))) ;) (return_statement return ;) })))
(function_definition "void FUN_003e23e0(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)\n\n{\n  char cVar1;\n  undefined4 uVar2;\n  \n  cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);\n  if (cVar1 != '\0') {\n    return;\n  }\n  uVar2 = FUN_003e1b00(param_1);\n  (**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);\n                    \n                    \n  (**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_003e23e0(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)" (identifier "FUN_003e23e0") (parameter_list "(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,\n                 long *param_5,undefined4 param_6,undefined8 param_7)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "long *param_5" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) (, ",") (parameter_declaration "undefined4 param_6" (type_identifier "undefined4") (identifier "param_6")) (, ",") (parameter_declaration "undefined8 param_7" (type_identifier "undefined8") (identifier "param_7")) () ")"))) (compound_statement "{\n  char cVar1;\n  undefined4 uVar2;\n  \n  cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);\n  if (cVar1 != '\0') {\n    return;\n  }\n  uVar2 = FUN_003e1b00(param_1);\n  (**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);\n                    \n                    \n  (**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);\n  return;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (expression_statement "cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);" (assignment_expression "cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7)" (identifier "cVar1") (= "=") (call_expression "(**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7)" (parenthesized_expression "(**(code **)(*param_2 + 0x158))" (( "(") (pointer_expression "**(code **)(*param_2 + 0x158)" (* "*") (pointer_expression "*(code **)(*param_2 + 0x158)" (* "*") (cast_expression "(code **)(*param_2 + 0x158)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x158)" (( "(") (binary_expression "*param_2 + 0x158" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x158")) () ")"))))) () ")")) (argument_list "(param_2,param_3,param_4,param_7)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "param_7") () ")")))) (; ";")) (if_statement "if (cVar1 != '\0') {\n    return;\n  }" (if "if") (parenthesized_expression "(cVar1 != '\0')" (( "(") (binary_expression "cVar1 != '\0'" (identifier "cVar1") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar2 = FUN_003e1b00(param_1);" (assignment_expression "uVar2 = FUN_003e1b00(param_1)" (identifier "uVar2") (= "=") (call_expression "FUN_003e1b00(param_1)" (identifier "FUN_003e1b00") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "(**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);" (call_expression "(**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7)" (parenthesized_expression "(**(code **)(*param_2 + 0x168))" (( "(") (pointer_expression "**(code **)(*param_2 + 0x168)" (* "*") (pointer_expression "*(code **)(*param_2 + 0x168)" (* "*") (cast_expression "(code **)(*param_2 + 0x168)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x168)" (( "(") (binary_expression "*param_2 + 0x168" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x168")) () ")"))))) () ")")) (argument_list "(param_2,param_3,param_4,uVar2,param_7)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "uVar2") (, ",") (identifier "param_7") () ")"))) (; ";")) (expression_statement "(**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);" (call_expression "(**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2)" (parenthesized_expression "(**(code **)(*param_5 + 0xd8))" (( "(") (pointer_expression "**(code **)(*param_5 + 0xd8)" (* "*") (pointer_expression "*(code **)(*param_5 + 0xd8)" (* "*") (cast_expression "(code **)(*param_5 + 0xd8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_5 + 0xd8)" (( "(") (binary_expression "*param_5 + 0xd8" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (+ "+") (number_literal "0xd8")) () ")"))))) () ")")) (argument_list "(param_5,param_2,param_3,param_6,param_1,uVar2)" (( "(") (identifier "param_5") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_6") (, ",") (identifier "param_1") (, ",") (identifier "uVar2") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void add_local_with_rel(Output_data_got<32,_false> * this, Relobj *
   object, uint symndx, uint got_type, Output_data_reloc_generic * rel_dyn, uint r_type, uint64_t
   addend) */

void __thiscall
gold::Output_data_got<32,_false>::add_local_with_rel
          (Output_data_got<32,_false> *this,Relobj *object,type_1 symndx,type_1 got_type,
          Output_data_reloc_generic *rel_dyn,type_1 r_type,uint64_t addend)

{
  int iVar1;
  type_1 uVar2;
  type_2 uStack_54;
  type_2 uStack_4c;
  
  iVar1 = (*(object->super_Object)._vptr_Object[0x2b])(object,(type_3)symndx,(type_3)got_type,addend);
  if ((char)iVar1 != '\0') {
    return;
  }
  uVar2 = var_1(this,(Got_entry)
                             (var_2(var_3(var_4(uStack_4c,0x7ffffffd),uStack_54)) << 0x20))
  ;
  (*(object->super_Object)._vptr_Object[0x2d])
            (object,(type_3)symndx,(type_3)got_type,(type_3)uVar2,addend);
                    /* WARNING: Could not recover jumptable at 0x003e24b2. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (*(rel_dyn->super_Output_section_data_build).super_Output_section_data.super_Output_data.
    _vptr_Output_data[0x1b])(rel_dyn,object,(type_3)symndx,(type_3)r_type,this,(type_3)uVar2);
  return;
}


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

void MASKED(undefined8 param_1,long *param_2,undefined4 param_3,undefined4 param_4,
                 long *param_5,undefined4 param_6,undefined8 param_7)

{
  char cVar1;
  undefined4 uVar2;
  
  cVar1 = (**(code **)(*param_2 + 0x158))(param_2,param_3,param_4,param_7);
  if (cVar1 != '\0') {
    return;
  }
  uVar2 = FUN_003e1b00(param_1);
  (**(code **)(*param_2 + 0x168))(param_2,param_3,param_4,uVar2,param_7);
                    /* WARNING: Could not recover jumptable at 0x003e24b2. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*param_5 + 0xd8))(param_5,param_2,param_3,param_6,param_1,uVar2);
  return;
}

