
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void reserve_tlsdesc_entries(Target_x86_64<32> * this, Symbol_table *
   symtab, Layout * layout) */

void __thiscall
anon_unknown.dwarf_358c2b::Target_x86_64<32>::reserve_tlsdesc_entries
          (Target_x86_64<32> *this,Symbol_table *symtab,Layout *layout)

{
  undefined1 auVar1 [24];
  uint uVar2;
  uint64_t uVar3;
  Output_data_got<64,_false> *this_00;
  undefined4 uStack_2c;
  undefined8 local_28;
  
  uVar3 = (this->x86_64_info).abi_pagesize;
  if (uVar3 == 0) {
    make_plt_section(this,symtab,layout);
    uVar3 = (this->x86_64_info).abi_pagesize;
  }
  if (*(int *)(uVar3 + 0x70) != -1) {
    return;
  }
  this_00 = got_section(this,symtab,layout);
  auVar1._4_4_ = uStack_2c;
  auVar1._0_4_ = 0x7ffffffe;
  auVar1._8_8_ = local_28;
  auVar1._16_8_ = 0;
  uVar2 = gold::Output_data_got<64,_false>::add_got_entry(this_00,(Got_entry)(auVar1 << 0x40));
  *(uint *)((this->x86_64_info).abi_pagesize + 0x70) = uVar2;
  return;
}



void FUN_001ad590(long param_1,undefined8 param_2,undefined8 param_3)

{
  undefined4 uVar1;
  long lVar2;
  undefined8 uVar3;
  
  lVar2 = *(long *)(param_1 + 0x28);
  if (lVar2 == 0) {
    FUN_001ad480();
    lVar2 = *(long *)(param_1 + 0x28);
  }
  if (*(int *)(lVar2 + 0x70) != -1) {
    return;
  }
  uVar3 = FUN_001ad0d0(param_1,param_2,param_3);
  uVar1 = FUN_003e4520(uVar3);
  *(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;
  return;
}


PUSH R12
MOV R12,RDX
PUSH RBP
MOV RBP,RSI
PUSH RBX
MOV RBX,RDI
SUB RSP,0x20
MOV RAX,qword ptr [RDI + 0x28]
TEST RAX,RAX
JZ 0x001ad600
CMP dword ptr [RAX + 0x70],-0x1
JZ 0x001ad5c0
ADD RSP,0x20
POP RBX
POP RBP
POP R12
RET
MOV RDX,R12
MOV RSI,RBP
MOV RDI,RBX
CALL 0x001ad0d0
MOV dword ptr [RSP + 0x8],0x7ffffffe
SUB RSP,0x8
PUSH qword ptr [RSP + 0x18]
MOV RDI,RAX
PUSH qword ptr [RSP + 0x18]
PUSH 0x0
CALL 0x003e4520
MOV RDX,qword ptr [RBX + 0x28]
ADD RSP,0x20
MOV dword ptr [RDX + 0x70],EAX
ADD RSP,0x20
POP RBX
POP RBP
POP R12
RET
CALL 0x001ad480
MOV RAX,qword ptr [RBX + 0x28]
JMP 0x001ad5aa
(translation_unit "void FUN_001ad590(long param_1,undefined8 param_2,undefined8 param_3)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  undefined8 uVar3;\n  \n  lVar2 = *(long *)(param_1 + 0x28);\n  if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }\n  if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }\n  uVar3 = FUN_001ad0d0(param_1,param_2,param_3);\n  uVar1 = FUN_003e4520(uVar3);\n  *(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;\n  return;\n}\n\n" (function_definition "void FUN_001ad590(long param_1,undefined8 param_2,undefined8 param_3)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  undefined8 uVar3;\n  \n  lVar2 = *(long *)(param_1 + 0x28);\n  if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }\n  if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }\n  uVar3 = FUN_001ad0d0(param_1,param_2,param_3);\n  uVar1 = FUN_003e4520(uVar3);\n  *(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;\n  return;\n}" primitive_type (function_declarator "FUN_001ad590(long param_1,undefined8 param_2,undefined8 param_3)" identifier (parameter_list "(long param_1,undefined8 param_2,undefined8 param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  long lVar2;\n  undefined8 uVar3;\n  \n  lVar2 = *(long *)(param_1 + 0x28);\n  if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }\n  if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }\n  uVar3 = FUN_001ad0d0(param_1,param_2,param_3);\n  uVar1 = FUN_003e4520(uVar3);\n  *(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;\n  return;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (expression_statement "lVar2 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar2 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }" { (expression_statement "FUN_001ad480();" (call_expression "FUN_001ad480()" identifier (argument_list "()" ( ))) ;) (expression_statement "lVar2 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar2 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) })) (if_statement "if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }" if (parenthesized_expression "(*(int *)(lVar2 + 0x70) != -1)" ( (binary_expression "*(int *)(lVar2 + 0x70) != -1" (pointer_expression "*(int *)(lVar2 + 0x70)" * (cast_expression "(int *)(lVar2 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x70)" ( (binary_expression "lVar2 + 0x70" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar3 = FUN_001ad0d0(param_1,param_2,param_3);" (assignment_expression "uVar3 = FUN_001ad0d0(param_1,param_2,param_3)" identifier = (call_expression "FUN_001ad0d0(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar1 = FUN_003e4520(uVar3);" (assignment_expression "uVar1 = FUN_003e4520(uVar3)" identifier = (call_expression "FUN_003e4520(uVar3)" identifier (argument_list "(uVar3)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;" (assignment_expression "*(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1" (pointer_expression "*(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70)" * (cast_expression "(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0x28) + 0x70)" ( (binary_expression "*(long *)(param_1 + 0x28) + 0x70" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: void reserve_tlsdesc_entries(Target_x86_64<32> * this, Symbol_table *\n   symtab, Layout * layout) */\n\nvoid __thiscall\nanon_unknown.dwarf_358c2b::Target_x86_64<32>::reserve_tlsdesc_entries\n          (Target_x86_64<32> *this,Symbol_table *symtab,Layout *layout)\n\n{\n  undefined1 auVar1 [24];\n  uint uVar2;\n  uint64_t uVar3;\n  Output_data_got<64,_false> *this_00;\n  undefined4 uStack_2c;\n  undefined8 local_28;\n  \n  uVar3 = (this->x86_64_info).abi_pagesize;\n  if (uVar3 == 0) {\n    make_plt_section(this,symtab,layout);\n    uVar3 = (this->x86_64_info).abi_pagesize;\n  }\n  if (*(int *)(uVar3 + 0x70) != -1) {\n    return;\n  }\n  this_00 = got_section(this,symtab,layout);\n  auVar1._4_4_ = uStack_2c;\n  auVar1._0_4_ = 0x7ffffffe;\n  auVar1._8_8_ = local_28;\n  auVar1._16_8_ = 0;\n  uVar2 = gold::Output_data_got<64,_false>::add_got_entry(this_00,(Got_entry)(auVar1 << 0x40));\n  *(uint *)((this->x86_64_info).abi_pagesize + 0x70) = uVar2;\n  return;\n}\n\n" comment comment (function_definition "void __thiscall\nanon_unknown.dwarf_358c2b::Target_x86_64<32>::reserve_tlsdesc_entries\n          (Target_x86_64<32> *this,Symbol_table *symtab,Layout *layout)\n\n{\n  undefined1 auVar1 [24];\n  uint uVar2;\n  uint64_t uVar3;\n  Output_data_got<64,_false> *this_00;\n  undefined4 uStack_2c;\n  undefined8 local_28;\n  \n  uVar3 = (this->x86_64_info).abi_pagesize;\n  if (uVar3 == 0) {\n    make_plt_section(this,symtab,layout);\n    uVar3 = (this->x86_64_info).abi_pagesize;\n  }\n  if (*(int *)(uVar3 + 0x70) != -1) {\n    return;\n  }\n  this_00 = got_section(this,symtab,layout);\n  auVar1._4_4_ = uStack_2c;\n  auVar1._0_4_ = 0x7ffffffe;\n  auVar1._8_8_ = local_28;\n  auVar1._16_8_ = 0;\n  uVar2 = gold::Output_data_got<64,_false>::add_got_entry(this_00,(Got_entry)(auVar1 << 0x40));\n  *(uint *)((this->x86_64_info).abi_pagesize + 0x70) = uVar2;\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "anon_unknown.dwarf_358c2b::Target_x86_64<32>::" identifier . identifier : : identifier < number_literal > : :) (function_declarator "reserve_tlsdesc_entries\n          (Target_x86_64<32> *this,Symbol_table *symtab,Layout *layout)" identifier (parameter_list "(Target_x86_64<32> *this,Symbol_table *symtab,Layout *layout)" ( (parameter_declaration "Target_x86_64<32> *this" type_identifier (ERROR "<32>" < number_literal >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Symbol_table *symtab" type_identifier (pointer_declarator "*symtab" * identifier)) , (parameter_declaration "Layout *layout" type_identifier (pointer_declarator "*layout" * identifier)) ))) (compound_statement "{\n  undefined1 auVar1 [24];\n  uint uVar2;\n  uint64_t uVar3;\n  Output_data_got<64,_false> *this_00;\n  undefined4 uStack_2c;\n  undefined8 local_28;\n  \n  uVar3 = (this->x86_64_info).abi_pagesize;\n  if (uVar3 == 0) {\n    make_plt_section(this,symtab,layout);\n    uVar3 = (this->x86_64_info).abi_pagesize;\n  }\n  if (*(int *)(uVar3 + 0x70) != -1) {\n    return;\n  }\n  this_00 = got_section(this,symtab,layout);\n  auVar1._4_4_ = uStack_2c;\n  auVar1._0_4_ = 0x7ffffffe;\n  auVar1._8_8_ = local_28;\n  auVar1._16_8_ = 0;\n  uVar2 = gold::Output_data_got<64,_false>::add_got_entry(this_00,(Got_entry)(auVar1 << 0x40));\n  *(uint *)((this->x86_64_info).abi_pagesize + 0x70) = uVar2;\n  return;\n}" { (declaration "undefined1 auVar1 [24];" type_identifier (array_declarator "auVar1 [24]" identifier [ number_literal ]) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint64_t uVar3;" primitive_type identifier ;) (expression_statement "Output_data_got<64,_false> *this_00;" (comma_expression "Output_data_got<64,_false> *this_00" (binary_expression "Output_data_got<64" identifier < number_literal) , (binary_expression "_false> *this_00" identifier > (pointer_expression "*this_00" * identifier))) ;) (declaration "undefined4 uStack_2c;" type_identifier identifier ;) (declaration "undefined8 local_28;" type_identifier identifier ;) (expression_statement "uVar3 = (this->x86_64_info).abi_pagesize;" (assignment_expression "uVar3 = (this->x86_64_info).abi_pagesize" identifier = (field_expression "(this->x86_64_info).abi_pagesize" (parenthesized_expression "(this->x86_64_info)" ( (field_expression "this->x86_64_info" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (uVar3 == 0) {\n    make_plt_section(this,symtab,layout);\n    uVar3 = (this->x86_64_info).abi_pagesize;\n  }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    make_plt_section(this,symtab,layout);\n    uVar3 = (this->x86_64_info).abi_pagesize;\n  }" { (expression_statement "make_plt_section(this,symtab,layout);" (call_expression "make_plt_section(this,symtab,layout)" identifier (argument_list "(this,symtab,layout)" ( identifier , identifier , identifier ))) ;) (expression_statement "uVar3 = (this->x86_64_info).abi_pagesize;" (assignment_expression "uVar3 = (this->x86_64_info).abi_pagesize" identifier = (field_expression "(this->x86_64_info).abi_pagesize" (parenthesized_expression "(this->x86_64_info)" ( (field_expression "this->x86_64_info" identifier -> field_identifier) )) . field_identifier)) ;) })) (if_statement "if (*(int *)(uVar3 + 0x70) != -1) {\n    return;\n  }" if (parenthesized_expression "(*(int *)(uVar3 + 0x70) != -1)" ( (binary_expression "*(int *)(uVar3 + 0x70) != -1" (pointer_expression "*(int *)(uVar3 + 0x70)" * (cast_expression "(int *)(uVar3 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar3 + 0x70)" ( (binary_expression "uVar3 + 0x70" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "this_00 = got_section(this,symtab,layout);" (assignment_expression "this_00 = got_section(this,symtab,layout)" identifier = (call_expression "got_section(this,symtab,layout)" identifier (argument_list "(this,symtab,layout)" ( identifier , identifier , identifier )))) ;) (expression_statement "auVar1._4_4_ = uStack_2c;" (assignment_expression "auVar1._4_4_ = uStack_2c" (field_expression "auVar1._4_4_" identifier . field_identifier) = identifier) ;) (expression_statement "auVar1._0_4_ = 0x7ffffffe;" (assignment_expression "auVar1._0_4_ = 0x7ffffffe" (field_expression "auVar1._0_4_" identifier . field_identifier) = number_literal) ;) (expression_statement "auVar1._8_8_ = local_28;" (assignment_expression "auVar1._8_8_ = local_28" (field_expression "auVar1._8_8_" identifier . field_identifier) = identifier) ;) (expression_statement "auVar1._16_8_ = 0;" (assignment_expression "auVar1._16_8_ = 0" (field_expression "auVar1._16_8_" identifier . field_identifier) = number_literal) ;) (ERROR "uVar2 = gold::" (assignment_expression "uVar2 = gold" identifier = identifier) : :) (expression_statement "Output_data_got<64,_false>::add_got_entry(this_00,(Got_entry)(auVar1 << 0x40));" (comma_expression "Output_data_got<64,_false>::add_got_entry(this_00,(Got_entry)(auVar1 << 0x40))" (binary_expression "Output_data_got<64" identifier < number_literal) , (binary_expression "_false>::add_got_entry(this_00,(Got_entry)(auVar1 << 0x40))" identifier > (ERROR "::" : :) (call_expression "add_got_entry(this_00,(Got_entry)(auVar1 << 0x40))" identifier (argument_list "(this_00,(Got_entry)(auVar1 << 0x40))" ( identifier , (call_expression "(Got_entry)(auVar1 << 0x40)" (parenthesized_expression "(Got_entry)" ( identifier )) (argument_list "(auVar1 << 0x40)" ( (binary_expression "auVar1 << 0x40" identifier << number_literal) ))) ))))) ;) (expression_statement "*(uint *)((this->x86_64_info).abi_pagesize + 0x70) = uVar2;" (assignment_expression "*(uint *)((this->x86_64_info).abi_pagesize + 0x70) = uVar2" (pointer_expression "*(uint *)((this->x86_64_info).abi_pagesize + 0x70)" * (cast_expression "(uint *)((this->x86_64_info).abi_pagesize + 0x70)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((this->x86_64_info).abi_pagesize + 0x70)" ( (binary_expression "(this->x86_64_info).abi_pagesize + 0x70" (field_expression "(this->x86_64_info).abi_pagesize" (parenthesized_expression "(this->x86_64_info)" ( (field_expression "this->x86_64_info" identifier -> field_identifier) )) . field_identifier) + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_001ad590(long param_1,undefined8 param_2,undefined8 param_3)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  undefined8 uVar3;\n  \n  lVar2 = *(long *)(param_1 + 0x28);\n  if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }\n  if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }\n  uVar3 = FUN_001ad0d0(param_1,param_2,param_3);\n  uVar1 = FUN_003e4520(uVar3);\n  *(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;\n  return;\n}\n\n" (function_definition "void FUN_001ad590(long param_1,undefined8 param_2,undefined8 param_3)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  undefined8 uVar3;\n  \n  lVar2 = *(long *)(param_1 + 0x28);\n  if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }\n  if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }\n  uVar3 = FUN_001ad0d0(param_1,param_2,param_3);\n  uVar1 = FUN_003e4520(uVar3);\n  *(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;\n  return;\n}" primitive_type (function_declarator "FUN_001ad590(long param_1,undefined8 param_2,undefined8 param_3)" identifier (parameter_list "(long param_1,undefined8 param_2,undefined8 param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  long lVar2;\n  undefined8 uVar3;\n  \n  lVar2 = *(long *)(param_1 + 0x28);\n  if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }\n  if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }\n  uVar3 = FUN_001ad0d0(param_1,param_2,param_3);\n  uVar1 = FUN_003e4520(uVar3);\n  *(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;\n  return;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (expression_statement "lVar2 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar2 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }" { (expression_statement "FUN_001ad480();" (call_expression "FUN_001ad480()" identifier (argument_list "()" ( ))) ;) (expression_statement "lVar2 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar2 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) })) (if_statement "if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }" if (parenthesized_expression "(*(int *)(lVar2 + 0x70) != -1)" ( (binary_expression "*(int *)(lVar2 + 0x70) != -1" (pointer_expression "*(int *)(lVar2 + 0x70)" * (cast_expression "(int *)(lVar2 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x70)" ( (binary_expression "lVar2 + 0x70" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar3 = FUN_001ad0d0(param_1,param_2,param_3);" (assignment_expression "uVar3 = FUN_001ad0d0(param_1,param_2,param_3)" identifier = (call_expression "FUN_001ad0d0(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar1 = FUN_003e4520(uVar3);" (assignment_expression "uVar1 = FUN_003e4520(uVar3)" identifier = (call_expression "FUN_003e4520(uVar3)" identifier (argument_list "(uVar3)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;" (assignment_expression "*(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1" (pointer_expression "*(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70)" * (cast_expression "(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0x28) + 0x70)" ( (binary_expression "*(long *)(param_1 + 0x28) + 0x70" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) = IDENT) ;) (return_statement return ;) })))
(function_definition "void FUN_001ad590(long param_1,undefined8 param_2,undefined8 param_3)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  undefined8 uVar3;\n  \n  lVar2 = *(long *)(param_1 + 0x28);\n  if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }\n  if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }\n  uVar3 = FUN_001ad0d0(param_1,param_2,param_3);\n  uVar1 = FUN_003e4520(uVar3);\n  *(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001ad590(long param_1,undefined8 param_2,undefined8 param_3)" (identifier "FUN_001ad590") (parameter_list "(long param_1,undefined8 param_2,undefined8 param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  long lVar2;\n  undefined8 uVar3;\n  \n  lVar2 = *(long *)(param_1 + 0x28);\n  if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }\n  if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }\n  uVar3 = FUN_001ad0d0(param_1,param_2,param_3);\n  uVar1 = FUN_003e4520(uVar3);\n  *(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;\n  return;\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (expression_statement "lVar2 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar2 = *(long *)(param_1 + 0x28)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if (lVar2 == 0) {\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }" (if "if") (parenthesized_expression "(lVar2 == 0)" (( "(") (binary_expression "lVar2 == 0" (identifier "lVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_001ad480();\n    lVar2 = *(long *)(param_1 + 0x28);\n  }" ({ "{") (expression_statement "FUN_001ad480();" (call_expression "FUN_001ad480()" (identifier "FUN_001ad480") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "lVar2 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar2 = *(long *)(param_1 + 0x28)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (} "}"))) (if_statement "if (*(int *)(lVar2 + 0x70) != -1) {\n    return;\n  }" (if "if") (parenthesized_expression "(*(int *)(lVar2 + 0x70) != -1)" (( "(") (binary_expression "*(int *)(lVar2 + 0x70) != -1" (pointer_expression "*(int *)(lVar2 + 0x70)" (* "*") (cast_expression "(int *)(lVar2 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x70)" (( "(") (binary_expression "lVar2 + 0x70" (identifier "lVar2") (+ "+") (number_literal "0x70")) () ")")))) (!= "!=") (number_literal "-1")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar3 = FUN_001ad0d0(param_1,param_2,param_3);" (assignment_expression "uVar3 = FUN_001ad0d0(param_1,param_2,param_3)" (identifier "uVar3") (= "=") (call_expression "FUN_001ad0d0(param_1,param_2,param_3)" (identifier "FUN_001ad0d0") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "uVar1 = FUN_003e4520(uVar3);" (assignment_expression "uVar1 = FUN_003e4520(uVar3)" (identifier "uVar1") (= "=") (call_expression "FUN_003e4520(uVar3)" (identifier "FUN_003e4520") (argument_list "(uVar3)" (( "(") (identifier "uVar3") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;" (assignment_expression "*(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1" (pointer_expression "*(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70)" (* "*") (cast_expression "(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_1 + 0x28) + 0x70)" (( "(") (binary_expression "*(long *)(param_1 + 0x28) + 0x70" (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (+ "+") (number_literal "0x70")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void reserve_tlsdesc_entries(Target_x86_64<32> * this, Symbol_table *
   symtab, Layout * layout) */

void __thiscall
anon_unknown.dwarf_358c2b::type_1<32>::function_1
          (type_1<32> *this,type_2 *symtab,type_3 *layout)

{
  type_4 var_7 [24];
  type_5 uVar2;
  uint64_t var_3;
  var_1<64,var_2> *this_00;
  type_6 uStack_2c;
  type_7 local_28;
  
  var_3 = (this->x86_64_info).abi_pagesize;
  if (var_3 == 0) {
    var_4(this,symtab,layout);
    var_3 = (this->x86_64_info).abi_pagesize;
  }
  if (*(int *)(var_3 + 0x70) != -1) {
    return;
  }
  this_00 = var_5(this,symtab,layout);
  var_7._4_4_ = uStack_2c;
  var_7._0_4_ = 0x7ffffffe;
  var_7._8_8_ = local_28;
  var_7._16_8_ = 0;
  uVar2 = gold::var_1<64,var_2>::var_6(this_00,(Got_entry)(var_7 << 0x40));
  *(type_5 *)((this->x86_64_info).abi_pagesize + 0x70) = uVar2;
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) right: (identifier))) (return_statement))))

void MASKED(long param_1,undefined8 param_2,undefined8 param_3)

{
  undefined4 uVar1;
  long lVar2;
  undefined8 uVar3;
  
  lVar2 = *(long *)(param_1 + 0x28);
  if (lVar2 == 0) {
    FUN_001ad480();
    lVar2 = *(long *)(param_1 + 0x28);
  }
  if (*(int *)(lVar2 + 0x70) != -1) {
    return;
  }
  uVar3 = FUN_001ad0d0(param_1,param_2,param_3);
  uVar1 = FUN_003e4520(uVar3);
  *(undefined4 *)(*(long *)(param_1 + 0x28) + 0x70) = uVar1;
  return;
}

