
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* DWARF original prototype: uint do_get_reloc_target(Sized_elf_reloc_mapper<32,_false> * this,
   off_t reloc_offset, off_t * target_offset) */

uint __thiscall
gold::Sized_elf_reloc_mapper<32,_false>::do_get_reloc_target
          (Sized_elf_reloc_mapper<32,_false> *this,off_t reloc_offset,off_t *target_offset)

{
  Track_relocs<32,_false> *this_00;
  Object *object;
  uint symndx;
  uint uVar1;
  Xindex *this_01;
  uint uVar2;
  int iVar3;
  off_t oVar4;
  uint64_t uVar5;
  
  this_00 = &this->track_relocs_;
  Track_relocs<32,_false>::advance(this_00,reloc_offset);
  oVar4 = Track_relocs<32,_false>::next_offset(this_00);
  if (oVar4 != reloc_offset) {
    return 0;
  }
  symndx = Track_relocs<32,_false>::next_symndx(this_00);
  uVar1 = (symndx + 1) * 0x10;
  if ((int)(uint)((uint)this->symtab_size_ < uVar1) <= *(int *)((int)&this->symtab_size_ + 4)) {
    uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar1 - 2));
    iVar3 = *(int *)(this->symtab_ + (uVar1 - 0xc));
    if (0xfeff < uVar2) {
      if (uVar2 != 0xffff) {
        return 0;
      }
      object = this->object_;
      this_01 = object->xindex_;
      if (this_01 == (Xindex *)0x0) {
        this_01 = (Xindex *)(*object->_vptr_Object[0x1b])(object);
        object->xindex_ = this_01;
      }
      uVar2 = Xindex::sym_xindex_to_shndx(this_01,object,symndx);
    }
    if (this->reloc_type_ == 4) {
      uVar5 = Track_relocs<32,_false>::next_addend(this_00);
      iVar3 = iVar3 + (int)uVar5;
    }
    *(int *)target_offset = iVar3;
    *(undefined4 *)((int)target_offset + 4) = 0;
    return uVar2;
  }
                    /* WARNING: Subroutine does not return */
  do_gold_unreachable("../../gold/dwarf_reader.cc",0x3d,"symbol_section");
}



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

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

{
  int *piVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  longlong lVar7;
  
  iVar4 = param_1 + 0x18;
  FUN_00159dc0(iVar4,param_2,param_3);
  lVar7 = FUN_00159cd0(iVar4);
  if (lVar7 != CONCAT44(param_3,param_2)) {
    return 0;
  }
  iVar2 = FUN_00159d00(iVar4);
  uVar3 = (iVar2 + 1) * 0x10;
  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {
    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;
    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);
    iVar6 = *(int *)(iVar6 + 4);
    if (0xfeff < uVar3) {
      if (uVar3 != 0xffff) {
        return 0;
      }
      piVar1 = *(int **)(param_1 + 4);
      iVar5 = piVar1[0xc];
      if (iVar5 == 0) {
        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);
        piVar1[0xc] = iVar5;
      }
      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);
    }
    if (*(int *)(param_1 + 0x14) == 4) {
      iVar4 = FUN_00159d90(iVar4);
      iVar6 = iVar6 + iVar4;
    }
    *param_4 = iVar6;
    param_4[1] = 0;
    return uVar3;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00036db0
ADD EBX,0x1e94d7
SUB ESP,0x20
MOV EAX,dword ptr [ESP + 0x34]
MOV ESI,dword ptr [ESP + 0x38]
MOV EDI,dword ptr [ESP + 0x3c]
LEA EBP,[EAX + 0x18]
PUSH EDI
PUSH ESI
PUSH EBP
CALL 0x00159dc0
MOV dword ptr [ESP],EBP
CALL 0x00159cd0
ADD ESP,0x10
XOR EAX,ESI
XOR EDX,EDI
OR EDX,EAX
JZ 0x001c0b70
ADD ESP,0x1c
XOR ESI,ESI
POP EBX
MOV EAX,ESI
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0xc
PUSH EBP
CALL 0x00159d00
ADD ESP,0x10
MOV EDI,dword ptr [ESP + 0x30]
MOV EDX,EAX
LEA EAX,[EAX + 0x1]
MOV ECX,dword ptr [EDI + 0x10]
SHL EAX,0x4
CMP dword ptr [EDI + 0xc],EAX
SBB ECX,0x0
JL 0x001c0c29
MOV EDI,dword ptr [ESP + 0x30]
MOV ECX,dword ptr [EDI + 0x8]
LEA EAX,[ECX + EAX*0x1 + -0x10]
MOVZX ESI,word ptr [EAX + 0xe]
MOV EDI,dword ptr [EAX + 0x4]
CMP ESI,0xfeff
JBE 0x001c0bd7
CMP ESI,0xffff
JNZ 0x001c0b5c
MOV EAX,dword ptr [ESP + 0x30]
MOV ESI,dword ptr [EAX + 0x4]
MOV EAX,dword ptr [ESI + 0x30]
TEST EAX,EAX
JZ 0x001c0c10
SUB ESP,0x4
PUSH EDX
PUSH ESI
PUSH EAX
CALL 0x000c3d60
ADD ESP,0x10
MOV ESI,EAX
MOV EAX,dword ptr [ESP + 0x30]
CMP dword ptr [EAX + 0x14],0x4
JZ 0x001c0c00
MOV EAX,dword ptr [ESP + 0x3c]
MOV dword ptr [EAX],EDI
MOV dword ptr [EAX + 0x4],0x0
ADD ESP,0x1c
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0xc
PUSH EBP
CALL 0x00159d90
ADD ESP,0x10
ADD EDI,EAX
JMP 0x001c0be1
MOV dword ptr [ESP + 0xc],EDX
SUB ESP,0xc
MOV EAX,dword ptr [ESI]
PUSH ESI
CALL dword ptr [EAX + 0x6c]
MOV EDX,dword ptr [ESP + 0x1c]
MOV dword ptr [ESI + 0x30],EAX
ADD ESP,0x10
JMP 0x001c0bc7
PUSH EAX
LEA EAX,[EBX + 0xfff0d3cc]
PUSH EAX
LEA EAX,[EBX + 0xfff0d005]
PUSH 0x3d
PUSH EAX
CALL 0x0007ac80
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nuint FUN_001c0b20(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  longlong lVar7;\n  \n  iVar4 = param_1 + 0x18;\n  FUN_00159dc0(iVar4,param_2,param_3);\n  lVar7 = FUN_00159cd0(iVar4);\n  if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar2 = FUN_00159d00(iVar4);\n  uVar3 = (iVar2 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);\n}\n\n" comment (function_definition "uint FUN_001c0b20(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  longlong lVar7;\n  \n  iVar4 = param_1 + 0x18;\n  FUN_00159dc0(iVar4,param_2,param_3);\n  lVar7 = FUN_00159cd0(iVar4);\n  if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar2 = FUN_00159d00(iVar4);\n  uVar3 = (iVar2 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);\n}" type_identifier (function_declarator "FUN_001c0b20(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  longlong lVar7;\n  \n  iVar4 = param_1 + 0x18;\n  FUN_00159dc0(iVar4,param_2,param_3);\n  lVar7 = FUN_00159cd0(iVar4);\n  if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar2 = FUN_00159d00(iVar4);\n  uVar3 = (iVar2 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "longlong lVar7;" type_identifier identifier ;) (expression_statement "iVar4 = param_1 + 0x18;" (assignment_expression "iVar4 = param_1 + 0x18" identifier = (binary_expression "param_1 + 0x18" identifier + number_literal)) ;) (expression_statement "FUN_00159dc0(iVar4,param_2,param_3);" (call_expression "FUN_00159dc0(iVar4,param_2,param_3)" identifier (argument_list "(iVar4,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "lVar7 = FUN_00159cd0(iVar4);" (assignment_expression "lVar7 = FUN_00159cd0(iVar4)" identifier = (call_expression "FUN_00159cd0(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) (if_statement "if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }" if (parenthesized_expression "(lVar7 != CONCAT44(param_3,param_2))" ( (binary_expression "lVar7 != CONCAT44(param_3,param_2)" identifier != (call_expression "CONCAT44(param_3,param_2)" identifier (argument_list "(param_3,param_2)" ( identifier , identifier )))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar2 = FUN_00159d00(iVar4);" (assignment_expression "iVar2 = FUN_00159d00(iVar4)" identifier = (call_expression "FUN_00159d00(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) (expression_statement "uVar3 = (iVar2 + 1) * 0x10;" (assignment_expression "uVar3 = (iVar2 + 1) * 0x10" identifier = (binary_expression "(iVar2 + 1) * 0x10" (parenthesized_expression "(iVar2 + 1)" ( (binary_expression "iVar2 + 1" identifier + number_literal) )) * number_literal)) ;) (if_statement "if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }" if (parenthesized_expression "((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10))" ( (binary_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)" (cast_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar3)" ( (type_descriptor "int" primitive_type) ) (call_expression "(uint)(*(uint *)(param_1 + 0xc) < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_1 + 0xc) < uVar3)" ( (binary_expression "*(uint *)(param_1 + 0xc) < uVar3" (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) < identifier) )))) <= (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) )) (compound_statement "{\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }" { (expression_statement "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;" (assignment_expression "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3" identifier = (binary_expression "*(int *)(param_1 + 8) + -0x10 + uVar3" (binary_expression "*(int *)(param_1 + 8) + -0x10" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + number_literal) + identifier)) ;) (expression_statement "uVar3 = (uint)*(ushort *)(iVar6 + 0xe);" (assignment_expression "uVar3 = (uint)*(ushort *)(iVar6 + 0xe)" identifier = (binary_expression "(uint)*(ushort *)(iVar6 + 0xe)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar6 + 0xe)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0xe)" ( (binary_expression "iVar6 + 0xe" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = *(int *)(iVar6 + 4);" (assignment_expression "iVar6 = *(int *)(iVar6 + 4)" identifier = (pointer_expression "*(int *)(iVar6 + 4)" * (cast_expression "(int *)(iVar6 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) (if_statement "if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }" if (parenthesized_expression "(0xfeff < uVar3)" ( (binary_expression "0xfeff < uVar3" number_literal < identifier) )) (compound_statement "{\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }" { (if_statement "if (uVar3 != 0xffff) {\n        return 0;\n      }" if (parenthesized_expression "(uVar3 != 0xffff)" ( (binary_expression "uVar3 != 0xffff" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar1 = *(int **)(param_1 + 4);" (assignment_expression "piVar1 = *(int **)(param_1 + 4)" identifier = (pointer_expression "*(int **)(param_1 + 4)" * (cast_expression "(int **)(param_1 + 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (expression_statement "iVar5 = piVar1[0xc];" (assignment_expression "iVar5 = piVar1[0xc]" identifier = (subscript_expression "piVar1[0xc]" identifier [ number_literal ])) ;) (if_statement "if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }" { (expression_statement "iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);" (assignment_expression "iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x6c))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x6c))" ( (pointer_expression "**(code **)(*piVar1 + 0x6c)" * (pointer_expression "*(code **)(*piVar1 + 0x6c)" * (cast_expression "(code **)(*piVar1 + 0x6c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x6c)" ( (binary_expression "*piVar1 + 0x6c" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) (expression_statement "piVar1[0xc] = iVar5;" (assignment_expression "piVar1[0xc] = iVar5" (subscript_expression "piVar1[0xc]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);" (assignment_expression "uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2)" identifier = (call_expression "FUN_000c3d60(iVar5,piVar1,iVar2)" identifier (argument_list "(iVar5,piVar1,iVar2)" ( identifier , identifier , identifier )))) ;) })) (if_statement "if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x14) == 4)" ( (binary_expression "*(int *)(param_1 + 0x14) == 4" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }" { (expression_statement "iVar4 = FUN_00159d90(iVar4);" (assignment_expression "iVar4 = FUN_00159d90(iVar4)" identifier = (call_expression "FUN_00159d90(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) (expression_statement "iVar6 = iVar6 + iVar4;" (assignment_expression "iVar6 = iVar6 + iVar4" identifier = (binary_expression "iVar6 + iVar4" identifier + identifier)) ;) })) (expression_statement "*param_4 = iVar6;" (assignment_expression "*param_4 = iVar6" (pointer_expression "*param_4" * identifier) = identifier) ;) (expression_statement "param_4[1] = 0;" (assignment_expression "param_4[1] = 0" (subscript_expression "param_4[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return uVar3;" return identifier ;) })) comment (expression_statement "FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);" (call_expression "FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3)" identifier (argument_list "("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3)" ( (string_literal ""../../gold/dwarf_reader.cc"" " string_content ") , number_literal , (string_literal ""symbol_section"" " string_content ") , identifier ))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* DWARF original prototype: uint do_get_reloc_target(Sized_elf_reloc_mapper<32,_false> * this,\n   off_t reloc_offset, off_t * target_offset) */\n\nuint __thiscall\ngold::Sized_elf_reloc_mapper<32,_false>::do_get_reloc_target\n          (Sized_elf_reloc_mapper<32,_false> *this,off_t reloc_offset,off_t *target_offset)\n\n{\n  Track_relocs<32,_false> *this_00;\n  Object *object;\n  uint symndx;\n  uint uVar1;\n  Xindex *this_01;\n  uint uVar2;\n  int iVar3;\n  off_t oVar4;\n  uint64_t uVar5;\n  \n  this_00 = &this->track_relocs_;\n  Track_relocs<32,_false>::advance(this_00,reloc_offset);\n  oVar4 = Track_relocs<32,_false>::next_offset(this_00);\n  if (oVar4 != reloc_offset) {\n    return 0;\n  }\n  symndx = Track_relocs<32,_false>::next_symndx(this_00);\n  uVar1 = (symndx + 1) * 0x10;\n  if ((int)(uint)((uint)this->symtab_size_ < uVar1) <= *(int *)((int)&this->symtab_size_ + 4)) {\n    uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar1 - 2));\n    iVar3 = *(int *)(this->symtab_ + (uVar1 - 0xc));\n    if (0xfeff < uVar2) {\n      if (uVar2 != 0xffff) {\n        return 0;\n      }\n      object = this->object_;\n      this_01 = object->xindex_;\n      if (this_01 == (Xindex *)0x0) {\n        this_01 = (Xindex *)(*object->_vptr_Object[0x1b])(object);\n        object->xindex_ = this_01;\n      }\n      uVar2 = Xindex::sym_xindex_to_shndx(this_01,object,symndx);\n    }\n    if (this->reloc_type_ == 4) {\n      uVar5 = Track_relocs<32,_false>::next_addend(this_00);\n      iVar3 = iVar3 + (int)uVar5;\n    }\n    *(int *)target_offset = iVar3;\n    *(undefined4 *)((int)target_offset + 4) = 0;\n    return uVar2;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/dwarf_reader.cc",0x3d,"symbol_section");\n}\n\n" comment comment (declaration "uint __thiscall\ngold::Sized_elf_reloc_mapper<32,_false>::do_get_reloc_target\n          (Sized_elf_reloc_mapper<32,_false> *this,off_t reloc_offset,off_t *target_offset)\n\n{\n  Track_relocs<32,_false> *this_00;" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<32" < number_literal) , (ERROR "_false>::do_get_reloc_target\n          (Sized_elf_reloc_mapper<32,_false> *this,off_t reloc_offset,off_t *target_offset)\n\n{" identifier > : : (function_declarator "do_get_reloc_target\n          (Sized_elf_reloc_mapper<32,_false> *this,off_t reloc_offset,off_t *target_offset)" identifier (parameter_list "(Sized_elf_reloc_mapper<32,_false> *this,off_t reloc_offset,off_t *target_offset)" ( (parameter_declaration "Sized_elf_reloc_mapper" type_identifier) (ERROR "<32" < number_literal) , (parameter_declaration "_false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "off_t reloc_offset" type_identifier identifier) , (parameter_declaration "off_t *target_offset" type_identifier (pointer_declarator "*target_offset" * identifier)) ))) {) identifier (ERROR "<32" < number_literal) , (ERROR "_false>" identifier >) (pointer_declarator "*this_00" * identifier) ;) (declaration "Object *object;" type_identifier (pointer_declarator "*object" * identifier) ;) (declaration "uint symndx;" type_identifier identifier ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "Xindex *this_01;" type_identifier (pointer_declarator "*this_01" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "off_t oVar4;" type_identifier identifier ;) (declaration "uint64_t uVar5;" primitive_type identifier ;) (expression_statement "this_00 = &this->track_relocs_;" (assignment_expression "this_00 = &this->track_relocs_" identifier = (pointer_expression "&this->track_relocs_" & (field_expression "this->track_relocs_" identifier -> field_identifier))) ;) (expression_statement "Track_relocs<32,_false>::advance(this_00,reloc_offset);" (update_expression "Track_relocs<32,_false>::advance(this_00,reloc_offset)" (binary_expression "Track_relocs<32,_false>::advance(this_00,reloc_offset)" (binary_expression "Track_relocs<32" identifier < number_literal) (ERROR ",_false" , identifier) > (ERROR "::" : :) (call_expression "advance(this_00,reloc_offset)" identifier (argument_list "(this_00,reloc_offset)" ( identifier , identifier )))) --) ;) (expression_statement "oVar4 = Track_relocs<32,_false>::next_offset(this_00);" (update_expression "oVar4 = Track_relocs<32,_false>::next_offset(this_00)" (binary_expression "oVar4 = Track_relocs<32,_false>::next_offset(this_00)" (assignment_expression "oVar4 = Track_relocs<32" identifier = (binary_expression "Track_relocs<32" identifier < number_literal)) (ERROR ",_false" , identifier) > (ERROR "::" : :) (call_expression "next_offset(this_00)" identifier (argument_list "(this_00)" ( identifier )))) --) ;) (if_statement "if (oVar4 != reloc_offset) {\n    return 0;\n  }" if (parenthesized_expression "(oVar4 != reloc_offset)" ( (binary_expression "oVar4 != reloc_offset" identifier != identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "symndx = Track_relocs<32,_false>::next_symndx(this_00);" (update_expression "symndx = Track_relocs<32,_false>::next_symndx(this_00)" (binary_expression "symndx = Track_relocs<32,_false>::next_symndx(this_00)" (assignment_expression "symndx = Track_relocs<32" identifier = (binary_expression "Track_relocs<32" identifier < number_literal)) (ERROR ",_false" , identifier) > (ERROR "::" : :) (call_expression "next_symndx(this_00)" identifier (argument_list "(this_00)" ( identifier )))) --) ;) (expression_statement "uVar1 = (symndx + 1) * 0x10;" (assignment_expression "uVar1 = (symndx + 1) * 0x10" identifier = (binary_expression "(symndx + 1) * 0x10" (parenthesized_expression "(symndx + 1)" ( (binary_expression "symndx + 1" identifier + number_literal) )) * number_literal)) ;) (if_statement "if ((int)(uint)((uint)this->symtab_size_ < uVar1) <= *(int *)((int)&this->symtab_size_ + 4)) {\n    uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar1 - 2));\n    iVar3 = *(int *)(this->symtab_ + (uVar1 - 0xc));\n    if (0xfeff < uVar2) {\n      if (uVar2 != 0xffff) {\n        return 0;\n      }\n      object = this->object_;\n      this_01 = object->xindex_;\n      if (this_01 == (Xindex *)0x0) {\n        this_01 = (Xindex *)(*object->_vptr_Object[0x1b])(object);\n        object->xindex_ = this_01;\n      }\n      uVar2 = Xindex::sym_xindex_to_shndx(this_01,object,symndx);\n    }\n    if (this->reloc_type_ == 4) {\n      uVar5 = Track_relocs<32,_false>::next_addend(this_00);\n      iVar3 = iVar3 + (int)uVar5;\n    }\n    *(int *)target_offset = iVar3;\n    *(undefined4 *)((int)target_offset + 4) = 0;\n    return uVar2;\n  }" if (parenthesized_expression "((int)(uint)((uint)this->symtab_size_ < uVar1) <= *(int *)((int)&this->symtab_size_ + 4))" ( (binary_expression "(int)(uint)((uint)this->symtab_size_ < uVar1) <= *(int *)((int)&this->symtab_size_ + 4)" (cast_expression "(int)(uint)((uint)this->symtab_size_ < uVar1)" ( (type_descriptor "int" primitive_type) ) (call_expression "(uint)((uint)this->symtab_size_ < uVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint)this->symtab_size_ < uVar1)" ( (binary_expression "(uint)this->symtab_size_ < uVar1" (cast_expression "(uint)this->symtab_size_" ( (type_descriptor "uint" type_identifier) ) (field_expression "this->symtab_size_" identifier -> field_identifier)) < identifier) )))) <= (pointer_expression "*(int *)((int)&this->symtab_size_ + 4)" * (cast_expression "(int *)((int)&this->symtab_size_ + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&this->symtab_size_ + 4)" ( (binary_expression "(int)&this->symtab_size_ + 4" (cast_expression "(int)&this->symtab_size_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&this->symtab_size_" & (field_expression "this->symtab_size_" identifier -> field_identifier))) + number_literal) ))))) )) (compound_statement "{\n    uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar1 - 2));\n    iVar3 = *(int *)(this->symtab_ + (uVar1 - 0xc));\n    if (0xfeff < uVar2) {\n      if (uVar2 != 0xffff) {\n        return 0;\n      }\n      object = this->object_;\n      this_01 = object->xindex_;\n      if (this_01 == (Xindex *)0x0) {\n        this_01 = (Xindex *)(*object->_vptr_Object[0x1b])(object);\n        object->xindex_ = this_01;\n      }\n      uVar2 = Xindex::sym_xindex_to_shndx(this_01,object,symndx);\n    }\n    if (this->reloc_type_ == 4) {\n      uVar5 = Track_relocs<32,_false>::next_addend(this_00);\n      iVar3 = iVar3 + (int)uVar5;\n    }\n    *(int *)target_offset = iVar3;\n    *(undefined4 *)((int)target_offset + 4) = 0;\n    return uVar2;\n  }" { (expression_statement "uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar1 - 2));" (assignment_expression "uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar1 - 2))" identifier = (binary_expression "(uint)*(ushort *)(this->symtab_ + (uVar1 - 2))" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(this->symtab_ + (uVar1 - 2))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this->symtab_ + (uVar1 - 2))" ( (binary_expression "this->symtab_ + (uVar1 - 2)" (field_expression "this->symtab_" identifier -> field_identifier) + (parenthesized_expression "(uVar1 - 2)" ( (binary_expression "uVar1 - 2" identifier - number_literal) ))) ))))) ;) (expression_statement "iVar3 = *(int *)(this->symtab_ + (uVar1 - 0xc));" (assignment_expression "iVar3 = *(int *)(this->symtab_ + (uVar1 - 0xc))" identifier = (pointer_expression "*(int *)(this->symtab_ + (uVar1 - 0xc))" * (cast_expression "(int *)(this->symtab_ + (uVar1 - 0xc))" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this->symtab_ + (uVar1 - 0xc))" ( (binary_expression "this->symtab_ + (uVar1 - 0xc)" (field_expression "this->symtab_" identifier -> field_identifier) + (parenthesized_expression "(uVar1 - 0xc)" ( (binary_expression "uVar1 - 0xc" identifier - number_literal) ))) ))))) ;) (if_statement "if (0xfeff < uVar2) {\n      if (uVar2 != 0xffff) {\n        return 0;\n      }\n      object = this->object_;\n      this_01 = object->xindex_;\n      if (this_01 == (Xindex *)0x0) {\n        this_01 = (Xindex *)(*object->_vptr_Object[0x1b])(object);\n        object->xindex_ = this_01;\n      }\n      uVar2 = Xindex::sym_xindex_to_shndx(this_01,object,symndx);\n    }" if (parenthesized_expression "(0xfeff < uVar2)" ( (binary_expression "0xfeff < uVar2" number_literal < identifier) )) (compound_statement "{\n      if (uVar2 != 0xffff) {\n        return 0;\n      }\n      object = this->object_;\n      this_01 = object->xindex_;\n      if (this_01 == (Xindex *)0x0) {\n        this_01 = (Xindex *)(*object->_vptr_Object[0x1b])(object);\n        object->xindex_ = this_01;\n      }\n      uVar2 = Xindex::sym_xindex_to_shndx(this_01,object,symndx);\n    }" { (if_statement "if (uVar2 != 0xffff) {\n        return 0;\n      }" if (parenthesized_expression "(uVar2 != 0xffff)" ( (binary_expression "uVar2 != 0xffff" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "object = this->object_;" (assignment_expression "object = this->object_" identifier = (field_expression "this->object_" identifier -> field_identifier)) ;) (expression_statement "this_01 = object->xindex_;" (assignment_expression "this_01 = object->xindex_" identifier = (field_expression "object->xindex_" identifier -> field_identifier)) ;) (if_statement "if (this_01 == (Xindex *)0x0) {\n        this_01 = (Xindex *)(*object->_vptr_Object[0x1b])(object);\n        object->xindex_ = this_01;\n      }" if (parenthesized_expression "(this_01 == (Xindex *)0x0)" ( (binary_expression "this_01 == (Xindex *)0x0" identifier == (cast_expression "(Xindex *)0x0" ( (type_descriptor "Xindex *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        this_01 = (Xindex *)(*object->_vptr_Object[0x1b])(object);\n        object->xindex_ = this_01;\n      }" { (expression_statement "this_01 = (Xindex *)(*object->_vptr_Object[0x1b])(object);" (assignment_expression "this_01 = (Xindex *)(*object->_vptr_Object[0x1b])(object)" identifier = (cast_expression "(Xindex *)(*object->_vptr_Object[0x1b])(object)" ( (type_descriptor "Xindex *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*object->_vptr_Object[0x1b])(object)" (parenthesized_expression "(*object->_vptr_Object[0x1b])" ( (pointer_expression "*object->_vptr_Object[0x1b]" * (subscript_expression "object->_vptr_Object[0x1b]" (field_expression "object->_vptr_Object" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(object)" ( identifier ))))) ;) (expression_statement "object->xindex_ = this_01;" (assignment_expression "object->xindex_ = this_01" (field_expression "object->xindex_" identifier -> field_identifier) = identifier) ;) })) (ERROR "uVar2 = Xindex::" (assignment_expression "uVar2 = Xindex" identifier = identifier) : :) (expression_statement "sym_xindex_to_shndx(this_01,object,symndx);" (call_expression "sym_xindex_to_shndx(this_01,object,symndx)" identifier (argument_list "(this_01,object,symndx)" ( identifier , identifier , identifier ))) ;) })) (if_statement "if (this->reloc_type_ == 4) {\n      uVar5 = Track_relocs<32,_false>::next_addend(this_00);\n      iVar3 = iVar3 + (int)uVar5;\n    }" if (parenthesized_expression "(this->reloc_type_ == 4)" ( (binary_expression "this->reloc_type_ == 4" (field_expression "this->reloc_type_" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n      uVar5 = Track_relocs<32,_false>::next_addend(this_00);\n      iVar3 = iVar3 + (int)uVar5;\n    }" { (expression_statement "uVar5 = Track_relocs<32,_false>::next_addend(this_00);" (comma_expression "uVar5 = Track_relocs<32,_false>::next_addend(this_00)" (assignment_expression "uVar5 = Track_relocs<32" identifier = (binary_expression "Track_relocs<32" identifier < number_literal)) , (binary_expression "_false>::next_addend(this_00)" identifier > (ERROR "::" : :) (call_expression "next_addend(this_00)" identifier (argument_list "(this_00)" ( identifier ))))) ;) (expression_statement "iVar3 = iVar3 + (int)uVar5;" (assignment_expression "iVar3 = iVar3 + (int)uVar5" identifier = (binary_expression "iVar3 + (int)uVar5" identifier + (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier))) ;) })) (expression_statement "*(int *)target_offset = iVar3;" (assignment_expression "*(int *)target_offset = iVar3" (pointer_expression "*(int *)target_offset" * (cast_expression "(int *)target_offset" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(undefined4 *)((int)target_offset + 4) = 0;" (assignment_expression "*(undefined4 *)((int)target_offset + 4) = 0" (pointer_expression "*(undefined4 *)((int)target_offset + 4)" * (cast_expression "(undefined4 *)((int)target_offset + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)target_offset + 4)" ( (binary_expression "(int)target_offset + 4" (cast_expression "(int)target_offset" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (return_statement "return uVar2;" return identifier ;) })) comment (expression_statement "do_gold_unreachable("../../gold/dwarf_reader.cc",0x3d,"symbol_section");" (call_expression "do_gold_unreachable("../../gold/dwarf_reader.cc",0x3d,"symbol_section")" identifier (argument_list "("../../gold/dwarf_reader.cc",0x3d,"symbol_section")" ( (string_literal ""../../gold/dwarf_reader.cc"" " string_content ") , number_literal , (string_literal ""symbol_section"" " string_content ") ))) ;) (ERROR "}" }))
(translation_unit "uint FUN_001c0b20(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  longlong lVar7;\n  \n  iVar4 = param_1 + 0x18;\n  FUN_00159dc0(iVar4,param_2,param_3);\n  lVar7 = FUN_00159cd0(iVar4);\n  if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar2 = FUN_00159d00(iVar4);\n  uVar3 = (iVar2 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }\n                    \n  FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);\n}\n\n" (function_definition "uint FUN_001c0b20(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  longlong lVar7;\n  \n  iVar4 = param_1 + 0x18;\n  FUN_00159dc0(iVar4,param_2,param_3);\n  lVar7 = FUN_00159cd0(iVar4);\n  if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar2 = FUN_00159d00(iVar4);\n  uVar3 = (iVar2 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }\n                    \n  FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);\n}" type_identifier (function_declarator "FUN_001c0b20(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  longlong lVar7;\n  \n  iVar4 = param_1 + 0x18;\n  FUN_00159dc0(iVar4,param_2,param_3);\n  lVar7 = FUN_00159cd0(iVar4);\n  if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar2 = FUN_00159d00(iVar4);\n  uVar3 = (iVar2 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }\n                    \n  FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "longlong lVar7;" type_identifier identifier ;) (expression_statement "iVar4 = param_1 + 0x18;" (assignment_expression "iVar4 = param_1 + 0x18" identifier = (binary_expression "param_1 + 0x18" identifier + number_literal)) ;) (expression_statement "FUN_00159dc0(iVar4,param_2,param_3);" (call_expression "FUN_00159dc0(iVar4,param_2,param_3)" identifier (argument_list "(iVar4,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "lVar7 = FUN_00159cd0(iVar4);" (assignment_expression "lVar7 = FUN_00159cd0(iVar4)" identifier = (call_expression "FUN_00159cd0(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) (if_statement "if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }" if (parenthesized_expression "(lVar7 != CONCAT44(param_3,param_2))" ( (binary_expression "lVar7 != CONCAT44(param_3,param_2)" identifier != (call_expression "CONCAT44(param_3,param_2)" identifier (argument_list "(param_3,param_2)" ( identifier , identifier )))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar2 = FUN_00159d00(iVar4);" (assignment_expression "iVar2 = FUN_00159d00(iVar4)" identifier = (call_expression "FUN_00159d00(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) (expression_statement "uVar3 = (iVar2 + 1) * 0x10;" (assignment_expression "uVar3 = (iVar2 + 1) * 0x10" identifier = (binary_expression "(iVar2 + 1) * 0x10" (parenthesized_expression "(iVar2 + 1)" ( (binary_expression "iVar2 + 1" identifier + number_literal) )) * number_literal)) ;) (if_statement "if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }" if (parenthesized_expression "((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10))" ( (binary_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)" (cast_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar3)" ( (type_descriptor "int" primitive_type) ) (call_expression "(uint)(*(uint *)(param_1 + 0xc) < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_1 + 0xc) < uVar3)" ( (binary_expression "*(uint *)(param_1 + 0xc) < uVar3" (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) < identifier) )))) <= (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) )) (compound_statement "{\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }" { (expression_statement "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;" (assignment_expression "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3" identifier = (binary_expression "*(int *)(param_1 + 8) + -0x10 + uVar3" (binary_expression "*(int *)(param_1 + 8) + -0x10" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + number_literal) + identifier)) ;) (expression_statement "uVar3 = (uint)*(ushort *)(iVar6 + 0xe);" (assignment_expression "uVar3 = (uint)*(ushort *)(iVar6 + 0xe)" identifier = (binary_expression "(uint)*(ushort *)(iVar6 + 0xe)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar6 + 0xe)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0xe)" ( (binary_expression "iVar6 + 0xe" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = *(int *)(iVar6 + 4);" (assignment_expression "iVar6 = *(int *)(iVar6 + 4)" identifier = (pointer_expression "*(int *)(iVar6 + 4)" * (cast_expression "(int *)(iVar6 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) (if_statement "if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }" if (parenthesized_expression "(0xfeff < uVar3)" ( (binary_expression "0xfeff < uVar3" number_literal < identifier) )) (compound_statement "{\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }" { (if_statement "if (uVar3 != 0xffff) {\n        return 0;\n      }" if (parenthesized_expression "(uVar3 != 0xffff)" ( (binary_expression "uVar3 != 0xffff" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar1 = *(int **)(param_1 + 4);" (assignment_expression "piVar1 = *(int **)(param_1 + 4)" identifier = (pointer_expression "*(int **)(param_1 + 4)" * (cast_expression "(int **)(param_1 + 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (expression_statement "iVar5 = piVar1[0xc];" (assignment_expression "iVar5 = piVar1[0xc]" identifier = (subscript_expression "piVar1[0xc]" identifier [ number_literal ])) ;) (if_statement "if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }" { (expression_statement "iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);" (assignment_expression "iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x6c))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x6c))" ( (pointer_expression "**(code **)(*piVar1 + 0x6c)" * (pointer_expression "*(code **)(*piVar1 + 0x6c)" * (cast_expression "(code **)(*piVar1 + 0x6c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x6c)" ( (binary_expression "*piVar1 + 0x6c" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) (expression_statement "piVar1[0xc] = iVar5;" (assignment_expression "piVar1[0xc] = iVar5" (subscript_expression "piVar1[0xc]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);" (assignment_expression "uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2)" identifier = (call_expression "FUN_000c3d60(iVar5,piVar1,iVar2)" identifier (argument_list "(iVar5,piVar1,iVar2)" ( identifier , identifier , identifier )))) ;) })) (if_statement "if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x14) == 4)" ( (binary_expression "*(int *)(param_1 + 0x14) == 4" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }" { (expression_statement "iVar4 = FUN_00159d90(iVar4);" (assignment_expression "iVar4 = FUN_00159d90(iVar4)" identifier = (call_expression "FUN_00159d90(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) (expression_statement "iVar6 = iVar6 + iVar4;" (assignment_expression "iVar6 = iVar6 + iVar4" identifier = (binary_expression "iVar6 + iVar4" identifier + identifier)) ;) })) (expression_statement "*param_4 = iVar6;" (assignment_expression "*param_4 = iVar6" (pointer_expression "*param_4" * identifier) = identifier) ;) (expression_statement "param_4[1] = 0;" (assignment_expression "param_4[1] = 0" (subscript_expression "param_4[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return uVar3;" return identifier ;) })) (expression_statement "FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);" (call_expression "FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3)" identifier (argument_list "("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3)" ( (string_literal ""../../gold/dwarf_reader.cc"" " string_content ") , number_literal , (string_literal ""symbol_section"" " string_content ") , identifier ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (call_expression IDENT (argument_list ( IDENT , IDENT )))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < IDENT) )))) <= (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (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 )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;) })))
(function_definition "uint FUN_001c0b20(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  longlong lVar7;\n  \n  iVar4 = param_1 + 0x18;\n  FUN_00159dc0(iVar4,param_2,param_3);\n  lVar7 = FUN_00159cd0(iVar4);\n  if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar2 = FUN_00159d00(iVar4);\n  uVar3 = (iVar2 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }\n                    \n  FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);\n}" (type_identifier "uint") (function_declarator "FUN_001c0b20(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)" (identifier "FUN_001c0b20") (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3,int *param_4)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) (, ",") (parameter_declaration "int *param_4" (primitive_type "int") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  longlong lVar7;\n  \n  iVar4 = param_1 + 0x18;\n  FUN_00159dc0(iVar4,param_2,param_3);\n  lVar7 = FUN_00159cd0(iVar4);\n  if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar2 = FUN_00159d00(iVar4);\n  uVar3 = (iVar2 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }\n                    \n  FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "longlong lVar7;" (type_identifier "longlong") (identifier "lVar7") (; ";")) (expression_statement "iVar4 = param_1 + 0x18;" (assignment_expression "iVar4 = param_1 + 0x18" (identifier "iVar4") (= "=") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18"))) (; ";")) (expression_statement "FUN_00159dc0(iVar4,param_2,param_3);" (call_expression "FUN_00159dc0(iVar4,param_2,param_3)" (identifier "FUN_00159dc0") (argument_list "(iVar4,param_2,param_3)" (( "(") (identifier "iVar4") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "lVar7 = FUN_00159cd0(iVar4);" (assignment_expression "lVar7 = FUN_00159cd0(iVar4)" (identifier "lVar7") (= "=") (call_expression "FUN_00159cd0(iVar4)" (identifier "FUN_00159cd0") (argument_list "(iVar4)" (( "(") (identifier "iVar4") () ")")))) (; ";")) (if_statement "if (lVar7 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(lVar7 != CONCAT44(param_3,param_2))" (( "(") (binary_expression "lVar7 != CONCAT44(param_3,param_2)" (identifier "lVar7") (!= "!=") (call_expression "CONCAT44(param_3,param_2)" (identifier "CONCAT44") (argument_list "(param_3,param_2)" (( "(") (identifier "param_3") (, ",") (identifier "param_2") () ")")))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar2 = FUN_00159d00(iVar4);" (assignment_expression "iVar2 = FUN_00159d00(iVar4)" (identifier "iVar2") (= "=") (call_expression "FUN_00159d00(iVar4)" (identifier "FUN_00159d00") (argument_list "(iVar4)" (( "(") (identifier "iVar4") () ")")))) (; ";")) (expression_statement "uVar3 = (iVar2 + 1) * 0x10;" (assignment_expression "uVar3 = (iVar2 + 1) * 0x10" (identifier "uVar3") (= "=") (binary_expression "(iVar2 + 1) * 0x10" (parenthesized_expression "(iVar2 + 1)" (( "(") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "0x10"))) (; ";")) (if_statement "if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }" (if "if") (parenthesized_expression "((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10))" (( "(") (binary_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)" (cast_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar3)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (call_expression "(uint)(*(uint *)(param_1 + 0xc) < uVar3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(uint *)(param_1 + 0xc) < uVar3)" (( "(") (binary_expression "*(uint *)(param_1 + 0xc) < uVar3" (pointer_expression "*(uint *)(param_1 + 0xc)" (* "*") (cast_expression "(uint *)(param_1 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (< "<") (identifier "uVar3")) () ")")))) (<= "<=") (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (compound_statement "{\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;\n    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);\n    iVar6 = *(int *)(iVar6 + 4);\n    if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }\n    *param_4 = iVar6;\n    param_4[1] = 0;\n    return uVar3;\n  }" ({ "{") (expression_statement "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;" (assignment_expression "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3" (identifier "iVar6") (= "=") (binary_expression "*(int *)(param_1 + 8) + -0x10 + uVar3" (binary_expression "*(int *)(param_1 + 8) + -0x10" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "-0x10")) (+ "+") (identifier "uVar3"))) (; ";")) (expression_statement "uVar3 = (uint)*(ushort *)(iVar6 + 0xe);" (assignment_expression "uVar3 = (uint)*(ushort *)(iVar6 + 0xe)" (identifier "uVar3") (= "=") (binary_expression "(uint)*(ushort *)(iVar6 + 0xe)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(iVar6 + 0xe)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0xe)" (( "(") (binary_expression "iVar6 + 0xe" (identifier "iVar6") (+ "+") (number_literal "0xe")) () ")"))))) (; ";")) (expression_statement "iVar6 = *(int *)(iVar6 + 4);" (assignment_expression "iVar6 = *(int *)(iVar6 + 4)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(iVar6 + 4)" (* "*") (cast_expression "(int *)(iVar6 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4)" (( "(") (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (0xfeff < uVar3) {\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }" (if "if") (parenthesized_expression "(0xfeff < uVar3)" (( "(") (binary_expression "0xfeff < uVar3" (number_literal "0xfeff") (< "<") (identifier "uVar3")) () ")")) (compound_statement "{\n      if (uVar3 != 0xffff) {\n        return 0;\n      }\n      piVar1 = *(int **)(param_1 + 4);\n      iVar5 = piVar1[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }\n      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);\n    }" ({ "{") (if_statement "if (uVar3 != 0xffff) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(uVar3 != 0xffff)" (( "(") (binary_expression "uVar3 != 0xffff" (identifier "uVar3") (!= "!=") (number_literal "0xffff")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "piVar1 = *(int **)(param_1 + 4);" (assignment_expression "piVar1 = *(int **)(param_1 + 4)" (identifier "piVar1") (= "=") (pointer_expression "*(int **)(param_1 + 4)" (* "*") (cast_expression "(int **)(param_1 + 4)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "iVar5 = piVar1[0xc];" (assignment_expression "iVar5 = piVar1[0xc]" (identifier "iVar5") (= "=") (subscript_expression "piVar1[0xc]" (identifier "piVar1") ([ "[") (number_literal "0xc") (] "]"))) (; ";")) (if_statement "if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);\n        piVar1[0xc] = iVar5;\n      }" ({ "{") (expression_statement "iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);" (assignment_expression "iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1)" (identifier "iVar5") (= "=") (call_expression "(**(code **)(*piVar1 + 0x6c))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x6c))" (( "(") (pointer_expression "**(code **)(*piVar1 + 0x6c)" (* "*") (pointer_expression "*(code **)(*piVar1 + 0x6c)" (* "*") (cast_expression "(code **)(*piVar1 + 0x6c)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0x6c)" (( "(") (binary_expression "*piVar1 + 0x6c" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0x6c")) () ")"))))) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")")))) (; ";")) (expression_statement "piVar1[0xc] = iVar5;" (assignment_expression "piVar1[0xc] = iVar5" (subscript_expression "piVar1[0xc]" (identifier "piVar1") ([ "[") (number_literal "0xc") (] "]")) (= "=") (identifier "iVar5")) (; ";")) (} "}"))) (expression_statement "uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);" (assignment_expression "uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2)" (identifier "uVar3") (= "=") (call_expression "FUN_000c3d60(iVar5,piVar1,iVar2)" (identifier "FUN_000c3d60") (argument_list "(iVar5,piVar1,iVar2)" (( "(") (identifier "iVar5") (, ",") (identifier "piVar1") (, ",") (identifier "iVar2") () ")")))) (; ";")) (} "}"))) (if_statement "if (*(int *)(param_1 + 0x14) == 4) {\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x14) == 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x14) == 4" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (== "==") (number_literal "4")) () ")")) (compound_statement "{\n      iVar4 = FUN_00159d90(iVar4);\n      iVar6 = iVar6 + iVar4;\n    }" ({ "{") (expression_statement "iVar4 = FUN_00159d90(iVar4);" (assignment_expression "iVar4 = FUN_00159d90(iVar4)" (identifier "iVar4") (= "=") (call_expression "FUN_00159d90(iVar4)" (identifier "FUN_00159d90") (argument_list "(iVar4)" (( "(") (identifier "iVar4") () ")")))) (; ";")) (expression_statement "iVar6 = iVar6 + iVar4;" (assignment_expression "iVar6 = iVar6 + iVar4" (identifier "iVar6") (= "=") (binary_expression "iVar6 + iVar4" (identifier "iVar6") (+ "+") (identifier "iVar4"))) (; ";")) (} "}"))) (expression_statement "*param_4 = iVar6;" (assignment_expression "*param_4 = iVar6" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "param_4[1] = 0;" (assignment_expression "param_4[1] = 0" (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return uVar3;" (return "return") (identifier "uVar3") (; ";")) (} "}"))) (expression_statement "FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);" (call_expression "FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3)" (identifier "FUN_0007ac80") (argument_list "("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3)" (( "(") (string_literal ""../../gold/dwarf_reader.cc"" (" """) (string_content "../../gold/dwarf_reader.cc") (" """)) (, ",") (number_literal "0x3d") (, ",") (string_literal ""symbol_section"" (" """) (string_content "symbol_section") (" """)) (, ",") (identifier "uVar3") () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* DWARF original prototype: uint do_get_reloc_target(Sized_elf_reloc_mapper<32,_false> * this,
   off_t reloc_offset, off_t * target_offset) */

type_1 __thiscall
gold::Sized_elf_reloc_mapper<32,var_12>::do_get_reloc_target
          (Sized_elf_reloc_mapper<32,var_12> *this,type_4 var_5,type_4 *target_offset)

{
  var_1<32,var_12> *this_00;
  type_2 *object;
  type_1 var_7;
  type_1 var_8;
  type_3 *var_10;
  type_1 var_9;
  int var_14;
  type_4 var_4;
  uint64_t uVar5;
  
  this_00 = &this->track_relocs_;
  var_1<32,var_12>::var_2(this_00,var_5);
  var_4 = var_1<32,var_12>::var_3(this_00);
  if (var_4 != var_5) {
    return 0;
  }
  var_7 = var_1<32,var_12>::var_6(this_00);
  var_8 = (var_7 + 1) * 0x10;
  if ((int)(type_1)((type_1)this->symtab_size_ < var_8) <= *(int *)((int)&this->symtab_size_ + 4)) {
    var_9 = (type_1)*(type_5 *)(this->symtab_ + (var_8 - 2));
    var_14 = *(int *)(this->symtab_ + (var_8 - 0xc));
    if (0xfeff < var_9) {
      if (var_9 != 0xffff) {
        return 0;
      }
      object = this->object_;
      var_10 = object->xindex_;
      if (var_10 == (type_3 *)0x0) {
        var_10 = (type_3 *)(*object->_vptr_Object[0x1b])(object);
        object->xindex_ = var_10;
      }
      var_9 = type_3::var_11(var_10,object,var_7);
    }
    if (this->reloc_type_ == 4) {
      uVar5 = var_1<32,var_12>::var_13(this_00);
      var_14 = var_14 + (int)uVar5;
    }
    *(int *)target_offset = var_14;
    *(type_6 *)((int)target_offset + 4) = 0;
    return var_9;
  }
                    /* WARNING: Subroutine does not return */
  var_15("../../gold/dwarf_reader.cc",0x3d,"symbol_section");
}


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

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

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

{
  int *piVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  longlong lVar7;
  
  iVar4 = param_1 + 0x18;
  FUN_00159dc0(iVar4,param_2,param_3);
  lVar7 = FUN_00159cd0(iVar4);
  if (lVar7 != CONCAT44(param_3,param_2)) {
    return 0;
  }
  iVar2 = FUN_00159d00(iVar4);
  uVar3 = (iVar2 + 1) * 0x10;
  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar3) <= *(int *)(param_1 + 0x10)) {
    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar3;
    uVar3 = (uint)*(ushort *)(iVar6 + 0xe);
    iVar6 = *(int *)(iVar6 + 4);
    if (0xfeff < uVar3) {
      if (uVar3 != 0xffff) {
        return 0;
      }
      piVar1 = *(int **)(param_1 + 4);
      iVar5 = piVar1[0xc];
      if (iVar5 == 0) {
        iVar5 = (**(code **)(*piVar1 + 0x6c))(piVar1);
        piVar1[0xc] = iVar5;
      }
      uVar3 = FUN_000c3d60(iVar5,piVar1,iVar2);
    }
    if (*(int *)(param_1 + 0x14) == 4) {
      iVar4 = FUN_00159d90(iVar4);
      iVar6 = iVar6 + iVar4;
    }
    *param_4 = iVar6;
    param_4[1] = 0;
    return uVar3;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0007ac80("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar3);
}

