
/* 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<64,_false> * this,
   off_t reloc_offset, off_t * target_offset) */

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

{
  Track_relocs<64,_false> *this_00;
  Object *object;
  longlong lVar1;
  uint symndx;
  uint uVar2;
  Xindex *this_01;
  off_t oVar3;
  uint64_t uVar4;
  
  this_00 = &this->track_relocs_;
  Track_relocs<64,_false>::advance(this_00,reloc_offset);
  oVar3 = Track_relocs<64,_false>::next_offset(this_00);
  if (oVar3 != reloc_offset) {
    return 0;
  }
  symndx = Track_relocs<64,_false>::next_symndx(this_00);
  uVar2 = (symndx * 3 + 3) * 8;
  if ((int)(uint)((uint)this->symtab_size_ < uVar2) <= *(int *)((int)&this->symtab_size_ + 4)) {
    lVar1 = *(longlong *)(this->symtab_ + (uVar2 - 0x10));
    uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar2 - 0x12));
    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) {
      uVar4 = Track_relocs<64,_false>::next_addend(this_00);
      lVar1 = uVar4 + lVar1;
    }
    *target_offset = lVar1;
    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_001776d0(int param_1,undefined4 param_2,undefined4 param_3,longlong *param_4)

{
  int iVar1;
  int *piVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  longlong lVar6;
  longlong lVar7;
  
  iVar1 = param_1 + 0x18;
  FUN_00128310(iVar1,param_2,param_3);
  lVar6 = FUN_00128220(iVar1);
  if (lVar6 != CONCAT44(param_3,param_2)) {
    return 0;
  }
  iVar3 = FUN_00128250(iVar1);
  uVar4 = (iVar3 * 3 + 3) * 8;
  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {
    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;
    lVar6 = *(longlong *)(iVar5 + 8);
    uVar4 = (uint)*(ushort *)(iVar5 + 6);
    if (0xfeff < uVar4) {
      if (uVar4 != 0xffff) {
        return 0;
      }
      piVar2 = *(int **)(param_1 + 4);
      iVar5 = piVar2[0xc];
      if (iVar5 == 0) {
        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);
        piVar2[0xc] = iVar5;
      }
      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);
    }
    if (*(int *)(param_1 + 0x14) == 4) {
      lVar7 = FUN_001282e0(iVar1);
      lVar6 = lVar7 + lVar6;
    }
    *param_4 = lVar6;
    return uVar4;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00035680
ADD EBX,0x1c7927
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 0x00128310
MOV dword ptr [ESP],EBP
CALL 0x00128220
ADD ESP,0x10
XOR EAX,ESI
XOR EDX,EDI
OR EDX,EAX
JZ 0x00177720
ADD ESP,0x1c
XOR ESI,ESI
POP EBX
MOV EAX,ESI
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0xc
PUSH EBP
CALL 0x00128250
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x30]
MOV EDI,EAX
LEA EAX,[EAX + EAX*0x2 + 0x3]
MOV EDX,dword ptr [ECX + 0x10]
SHL EAX,0x3
CMP dword ptr [ECX + 0xc],EAX
SBB EDX,0x0
JL 0x001777f1
MOV ECX,dword ptr [ESP + 0x30]
MOV EDX,dword ptr [ECX + 0x8]
LEA EAX,[EDX + EAX*0x1 + -0x18]
MOV EDX,dword ptr [EAX + 0x8]
MOV ECX,dword ptr [EAX + 0xc]
MOVZX ESI,word ptr [EAX + 0x6]
MOV dword ptr [ESP + 0x8],EDX
MOV dword ptr [ESP + 0xc],ECX
CMP ESI,0xfeff
JBE 0x00177793
CMP ESI,0xffff
JNZ 0x0017770c
MOV EAX,dword ptr [ESP + 0x30]
MOV ESI,dword ptr [EAX + 0x4]
MOV EAX,dword ptr [ESI + 0x30]
TEST EAX,EAX
JZ 0x001777e0
SUB ESP,0x4
PUSH EDI
PUSH ESI
PUSH EAX
CALL 0x000beba0
ADD ESP,0x10
MOV ESI,EAX
MOV EAX,dword ptr [ESP + 0x30]
CMP dword ptr [EAX + 0x14],0x4
JZ 0x001777c0
MOV EAX,dword ptr [ESP + 0x3c]
MOV EBX,dword ptr [ESP + 0xc]
MOV ECX,dword ptr [ESP + 0x8]
MOV dword ptr [EAX + 0x4],EBX
MOV dword ptr [EAX],ECX
ADD ESP,0x1c
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0xc
PUSH EBP
CALL 0x001282e0
ADD dword ptr [ESP + 0x18],EAX
ADC dword ptr [ESP + 0x1c],EDX
ADD ESP,0x10
JMP 0x0017779d
SUB ESP,0xc
MOV EAX,dword ptr [ESI]
PUSH ESI
CALL dword ptr [EAX + 0x6c]
MOV dword ptr [ESI + 0x30],EAX
ADD ESP,0x10
JMP 0x00177783
PUSH EAX
LEA EAX,[EBX + 0xfff28a44]
PUSH EAX
LEA EAX,[EBX + 0xfff28763]
PUSH 0x3d
PUSH EAX
CALL 0x0008b620
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nuint FUN_001776d0(int param_1,undefined4 param_2,undefined4 param_3,longlong *param_4)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  longlong lVar6;\n  longlong lVar7;\n  \n  iVar1 = param_1 + 0x18;\n  FUN_00128310(iVar1,param_2,param_3);\n  lVar6 = FUN_00128220(iVar1);\n  if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_00128250(iVar1);\n  uVar4 = (iVar3 * 3 + 3) * 8;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}\n\n" comment (function_definition "uint FUN_001776d0(int param_1,undefined4 param_2,undefined4 param_3,longlong *param_4)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  longlong lVar6;\n  longlong lVar7;\n  \n  iVar1 = param_1 + 0x18;\n  FUN_00128310(iVar1,param_2,param_3);\n  lVar6 = FUN_00128220(iVar1);\n  if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_00128250(iVar1);\n  uVar4 = (iVar3 * 3 + 3) * 8;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" type_identifier (function_declarator "FUN_001776d0(int param_1,undefined4 param_2,undefined4 param_3,longlong *param_4)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3,longlong *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 "longlong *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  longlong lVar6;\n  longlong lVar7;\n  \n  iVar1 = param_1 + 0x18;\n  FUN_00128310(iVar1,param_2,param_3);\n  lVar6 = FUN_00128220(iVar1);\n  if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_00128250(iVar1);\n  uVar4 = (iVar3 * 3 + 3) * 8;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "longlong lVar6;" type_identifier identifier ;) (declaration "longlong lVar7;" type_identifier identifier ;) (expression_statement "iVar1 = param_1 + 0x18;" (assignment_expression "iVar1 = param_1 + 0x18" identifier = (binary_expression "param_1 + 0x18" identifier + number_literal)) ;) (expression_statement "FUN_00128310(iVar1,param_2,param_3);" (call_expression "FUN_00128310(iVar1,param_2,param_3)" identifier (argument_list "(iVar1,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "lVar6 = FUN_00128220(iVar1);" (assignment_expression "lVar6 = FUN_00128220(iVar1)" identifier = (call_expression "FUN_00128220(iVar1)" identifier (argument_list "(iVar1)" ( identifier )))) ;) (if_statement "if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }" if (parenthesized_expression "(lVar6 != CONCAT44(param_3,param_2))" ( (binary_expression "lVar6 != 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 "iVar3 = FUN_00128250(iVar1);" (assignment_expression "iVar3 = FUN_00128250(iVar1)" identifier = (call_expression "FUN_00128250(iVar1)" identifier (argument_list "(iVar1)" ( identifier )))) ;) (expression_statement "uVar4 = (iVar3 * 3 + 3) * 8;" (assignment_expression "uVar4 = (iVar3 * 3 + 3) * 8" identifier = (binary_expression "(iVar3 * 3 + 3) * 8" (parenthesized_expression "(iVar3 * 3 + 3)" ( (binary_expression "iVar3 * 3 + 3" (binary_expression "iVar3 * 3" identifier * number_literal) + number_literal) )) * number_literal)) ;) (if_statement "if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }" if (parenthesized_expression "((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10))" ( (binary_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)" (cast_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar4)" ( (type_descriptor "int" primitive_type) ) (call_expression "(uint)(*(uint *)(param_1 + 0xc) < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_1 + 0xc) < uVar4)" ( (binary_expression "*(uint *)(param_1 + 0xc) < uVar4" (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    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }" { (expression_statement "iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;" (assignment_expression "iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4" identifier = (binary_expression "*(int *)(param_1 + 8) + -0x18 + uVar4" (binary_expression "*(int *)(param_1 + 8) + -0x18" (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 "lVar6 = *(longlong *)(iVar5 + 8);" (assignment_expression "lVar6 = *(longlong *)(iVar5 + 8)" identifier = (pointer_expression "*(longlong *)(iVar5 + 8)" * (cast_expression "(longlong *)(iVar5 + 8)" ( (type_descriptor "longlong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 8)" ( (binary_expression "iVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = (uint)*(ushort *)(iVar5 + 6);" (assignment_expression "uVar4 = (uint)*(ushort *)(iVar5 + 6)" identifier = (binary_expression "(uint)*(ushort *)(iVar5 + 6)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar5 + 6)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 6)" ( (binary_expression "iVar5 + 6" identifier + number_literal) ))))) ;) (if_statement "if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }" if (parenthesized_expression "(0xfeff < uVar4)" ( (binary_expression "0xfeff < uVar4" number_literal < identifier) )) (compound_statement "{\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }" { (if_statement "if (uVar4 != 0xffff) {\n        return 0;\n      }" if (parenthesized_expression "(uVar4 != 0xffff)" ( (binary_expression "uVar4 != 0xffff" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar2 = *(int **)(param_1 + 4);" (assignment_expression "piVar2 = *(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 = piVar2[0xc];" (assignment_expression "iVar5 = piVar2[0xc]" identifier = (subscript_expression "piVar2[0xc]" identifier [ number_literal ])) ;) (if_statement "if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }" { (expression_statement "iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);" (assignment_expression "iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2)" identifier = (call_expression "(**(code **)(*piVar2 + 0x6c))(piVar2)" (parenthesized_expression "(**(code **)(*piVar2 + 0x6c))" ( (pointer_expression "**(code **)(*piVar2 + 0x6c)" * (pointer_expression "*(code **)(*piVar2 + 0x6c)" * (cast_expression "(code **)(*piVar2 + 0x6c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar2 + 0x6c)" ( (binary_expression "*piVar2 + 0x6c" (pointer_expression "*piVar2" * identifier) + number_literal) ))))) )) (argument_list "(piVar2)" ( identifier )))) ;) (expression_statement "piVar2[0xc] = iVar5;" (assignment_expression "piVar2[0xc] = iVar5" (subscript_expression "piVar2[0xc]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);" (assignment_expression "uVar4 = FUN_000beba0(iVar5,piVar2,iVar3)" identifier = (call_expression "FUN_000beba0(iVar5,piVar2,iVar3)" identifier (argument_list "(iVar5,piVar2,iVar3)" ( identifier , identifier , identifier )))) ;) })) (if_statement "if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\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      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }" { (expression_statement "lVar7 = FUN_001282e0(iVar1);" (assignment_expression "lVar7 = FUN_001282e0(iVar1)" identifier = (call_expression "FUN_001282e0(iVar1)" identifier (argument_list "(iVar1)" ( identifier )))) ;) (expression_statement "lVar6 = lVar7 + lVar6;" (assignment_expression "lVar6 = lVar7 + lVar6" identifier = (binary_expression "lVar7 + lVar6" identifier + identifier)) ;) })) (expression_statement "*param_4 = lVar6;" (assignment_expression "*param_4 = lVar6" (pointer_expression "*param_4" * identifier) = identifier) ;) (return_statement "return uVar4;" return identifier ;) })) comment (expression_statement "FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);" (call_expression "FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4)" identifier (argument_list "("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4)" ( (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<64,_false> * this,\n   off_t reloc_offset, off_t * target_offset) */\n\nuint __thiscall\ngold::Sized_elf_reloc_mapper<64,_false>::do_get_reloc_target\n          (Sized_elf_reloc_mapper<64,_false> *this,off_t reloc_offset,off_t *target_offset)\n\n{\n  Track_relocs<64,_false> *this_00;\n  Object *object;\n  longlong lVar1;\n  uint symndx;\n  uint uVar2;\n  Xindex *this_01;\n  off_t oVar3;\n  uint64_t uVar4;\n  \n  this_00 = &this->track_relocs_;\n  Track_relocs<64,_false>::advance(this_00,reloc_offset);\n  oVar3 = Track_relocs<64,_false>::next_offset(this_00);\n  if (oVar3 != reloc_offset) {\n    return 0;\n  }\n  symndx = Track_relocs<64,_false>::next_symndx(this_00);\n  uVar2 = (symndx * 3 + 3) * 8;\n  if ((int)(uint)((uint)this->symtab_size_ < uVar2) <= *(int *)((int)&this->symtab_size_ + 4)) {\n    lVar1 = *(longlong *)(this->symtab_ + (uVar2 - 0x10));\n    uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar2 - 0x12));\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      uVar4 = Track_relocs<64,_false>::next_addend(this_00);\n      lVar1 = uVar4 + lVar1;\n    }\n    *target_offset = lVar1;\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<64,_false>::do_get_reloc_target\n          (Sized_elf_reloc_mapper<64,_false> *this,off_t reloc_offset,off_t *target_offset)\n\n{\n  Track_relocs<64,_false> *this_00;" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<64" < number_literal) , (ERROR "_false>::do_get_reloc_target\n          (Sized_elf_reloc_mapper<64,_false> *this,off_t reloc_offset,off_t *target_offset)\n\n{" identifier > : : (function_declarator "do_get_reloc_target\n          (Sized_elf_reloc_mapper<64,_false> *this,off_t reloc_offset,off_t *target_offset)" identifier (parameter_list "(Sized_elf_reloc_mapper<64,_false> *this,off_t reloc_offset,off_t *target_offset)" ( (parameter_declaration "Sized_elf_reloc_mapper" type_identifier) (ERROR "<64" < 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 "<64" < number_literal) , (ERROR "_false>" identifier >) (pointer_declarator "*this_00" * identifier) ;) (declaration "Object *object;" type_identifier (pointer_declarator "*object" * identifier) ;) (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "uint symndx;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "Xindex *this_01;" type_identifier (pointer_declarator "*this_01" * identifier) ;) (declaration "off_t oVar3;" type_identifier identifier ;) (declaration "uint64_t uVar4;" 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<64,_false>::advance(this_00,reloc_offset);" (update_expression "Track_relocs<64,_false>::advance(this_00,reloc_offset)" (binary_expression "Track_relocs<64,_false>::advance(this_00,reloc_offset)" (binary_expression "Track_relocs<64" 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 "oVar3 = Track_relocs<64,_false>::next_offset(this_00);" (update_expression "oVar3 = Track_relocs<64,_false>::next_offset(this_00)" (binary_expression "oVar3 = Track_relocs<64,_false>::next_offset(this_00)" (assignment_expression "oVar3 = Track_relocs<64" identifier = (binary_expression "Track_relocs<64" identifier < number_literal)) (ERROR ",_false" , identifier) > (ERROR "::" : :) (call_expression "next_offset(this_00)" identifier (argument_list "(this_00)" ( identifier )))) --) ;) (if_statement "if (oVar3 != reloc_offset) {\n    return 0;\n  }" if (parenthesized_expression "(oVar3 != reloc_offset)" ( (binary_expression "oVar3 != reloc_offset" identifier != identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "symndx = Track_relocs<64,_false>::next_symndx(this_00);" (update_expression "symndx = Track_relocs<64,_false>::next_symndx(this_00)" (binary_expression "symndx = Track_relocs<64,_false>::next_symndx(this_00)" (assignment_expression "symndx = Track_relocs<64" identifier = (binary_expression "Track_relocs<64" identifier < number_literal)) (ERROR ",_false" , identifier) > (ERROR "::" : :) (call_expression "next_symndx(this_00)" identifier (argument_list "(this_00)" ( identifier )))) --) ;) (expression_statement "uVar2 = (symndx * 3 + 3) * 8;" (assignment_expression "uVar2 = (symndx * 3 + 3) * 8" identifier = (binary_expression "(symndx * 3 + 3) * 8" (parenthesized_expression "(symndx * 3 + 3)" ( (binary_expression "symndx * 3 + 3" (binary_expression "symndx * 3" identifier * number_literal) + number_literal) )) * number_literal)) ;) (if_statement "if ((int)(uint)((uint)this->symtab_size_ < uVar2) <= *(int *)((int)&this->symtab_size_ + 4)) {\n    lVar1 = *(longlong *)(this->symtab_ + (uVar2 - 0x10));\n    uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar2 - 0x12));\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      uVar4 = Track_relocs<64,_false>::next_addend(this_00);\n      lVar1 = uVar4 + lVar1;\n    }\n    *target_offset = lVar1;\n    return uVar2;\n  }" if (parenthesized_expression "((int)(uint)((uint)this->symtab_size_ < uVar2) <= *(int *)((int)&this->symtab_size_ + 4))" ( (binary_expression "(int)(uint)((uint)this->symtab_size_ < uVar2) <= *(int *)((int)&this->symtab_size_ + 4)" (cast_expression "(int)(uint)((uint)this->symtab_size_ < uVar2)" ( (type_descriptor "int" primitive_type) ) (call_expression "(uint)((uint)this->symtab_size_ < uVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint)this->symtab_size_ < uVar2)" ( (binary_expression "(uint)this->symtab_size_ < uVar2" (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    lVar1 = *(longlong *)(this->symtab_ + (uVar2 - 0x10));\n    uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar2 - 0x12));\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      uVar4 = Track_relocs<64,_false>::next_addend(this_00);\n      lVar1 = uVar4 + lVar1;\n    }\n    *target_offset = lVar1;\n    return uVar2;\n  }" { (expression_statement "lVar1 = *(longlong *)(this->symtab_ + (uVar2 - 0x10));" (assignment_expression "lVar1 = *(longlong *)(this->symtab_ + (uVar2 - 0x10))" identifier = (pointer_expression "*(longlong *)(this->symtab_ + (uVar2 - 0x10))" * (cast_expression "(longlong *)(this->symtab_ + (uVar2 - 0x10))" ( (type_descriptor "longlong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this->symtab_ + (uVar2 - 0x10))" ( (binary_expression "this->symtab_ + (uVar2 - 0x10)" (field_expression "this->symtab_" identifier -> field_identifier) + (parenthesized_expression "(uVar2 - 0x10)" ( (binary_expression "uVar2 - 0x10" identifier - number_literal) ))) ))))) ;) (expression_statement "uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar2 - 0x12));" (assignment_expression "uVar2 = (uint)*(ushort *)(this->symtab_ + (uVar2 - 0x12))" identifier = (binary_expression "(uint)*(ushort *)(this->symtab_ + (uVar2 - 0x12))" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(this->symtab_ + (uVar2 - 0x12))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this->symtab_ + (uVar2 - 0x12))" ( (binary_expression "this->symtab_ + (uVar2 - 0x12)" (field_expression "this->symtab_" identifier -> field_identifier) + (parenthesized_expression "(uVar2 - 0x12)" ( (binary_expression "uVar2 - 0x12" 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      uVar4 = Track_relocs<64,_false>::next_addend(this_00);\n      lVar1 = uVar4 + lVar1;\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      uVar4 = Track_relocs<64,_false>::next_addend(this_00);\n      lVar1 = uVar4 + lVar1;\n    }" { (expression_statement "uVar4 = Track_relocs<64,_false>::next_addend(this_00);" (comma_expression "uVar4 = Track_relocs<64,_false>::next_addend(this_00)" (assignment_expression "uVar4 = Track_relocs<64" identifier = (binary_expression "Track_relocs<64" 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 "lVar1 = uVar4 + lVar1;" (assignment_expression "lVar1 = uVar4 + lVar1" identifier = (binary_expression "uVar4 + lVar1" identifier + identifier)) ;) })) (expression_statement "*target_offset = lVar1;" (assignment_expression "*target_offset = lVar1" (pointer_expression "*target_offset" * identifier) = identifier) ;) (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_001776d0(int param_1,undefined4 param_2,undefined4 param_3,longlong *param_4)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  longlong lVar6;\n  longlong lVar7;\n  \n  iVar1 = param_1 + 0x18;\n  FUN_00128310(iVar1,param_2,param_3);\n  lVar6 = FUN_00128220(iVar1);\n  if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_00128250(iVar1);\n  uVar4 = (iVar3 * 3 + 3) * 8;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }\n                    \n  FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}\n\n" (function_definition "uint FUN_001776d0(int param_1,undefined4 param_2,undefined4 param_3,longlong *param_4)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  longlong lVar6;\n  longlong lVar7;\n  \n  iVar1 = param_1 + 0x18;\n  FUN_00128310(iVar1,param_2,param_3);\n  lVar6 = FUN_00128220(iVar1);\n  if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_00128250(iVar1);\n  uVar4 = (iVar3 * 3 + 3) * 8;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }\n                    \n  FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" type_identifier (function_declarator "FUN_001776d0(int param_1,undefined4 param_2,undefined4 param_3,longlong *param_4)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3,longlong *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 "longlong *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  longlong lVar6;\n  longlong lVar7;\n  \n  iVar1 = param_1 + 0x18;\n  FUN_00128310(iVar1,param_2,param_3);\n  lVar6 = FUN_00128220(iVar1);\n  if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_00128250(iVar1);\n  uVar4 = (iVar3 * 3 + 3) * 8;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }\n                    \n  FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "longlong lVar6;" type_identifier identifier ;) (declaration "longlong lVar7;" type_identifier identifier ;) (expression_statement "iVar1 = param_1 + 0x18;" (assignment_expression "iVar1 = param_1 + 0x18" identifier = (binary_expression "param_1 + 0x18" identifier + number_literal)) ;) (expression_statement "FUN_00128310(iVar1,param_2,param_3);" (call_expression "FUN_00128310(iVar1,param_2,param_3)" identifier (argument_list "(iVar1,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "lVar6 = FUN_00128220(iVar1);" (assignment_expression "lVar6 = FUN_00128220(iVar1)" identifier = (call_expression "FUN_00128220(iVar1)" identifier (argument_list "(iVar1)" ( identifier )))) ;) (if_statement "if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }" if (parenthesized_expression "(lVar6 != CONCAT44(param_3,param_2))" ( (binary_expression "lVar6 != 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 "iVar3 = FUN_00128250(iVar1);" (assignment_expression "iVar3 = FUN_00128250(iVar1)" identifier = (call_expression "FUN_00128250(iVar1)" identifier (argument_list "(iVar1)" ( identifier )))) ;) (expression_statement "uVar4 = (iVar3 * 3 + 3) * 8;" (assignment_expression "uVar4 = (iVar3 * 3 + 3) * 8" identifier = (binary_expression "(iVar3 * 3 + 3) * 8" (parenthesized_expression "(iVar3 * 3 + 3)" ( (binary_expression "iVar3 * 3 + 3" (binary_expression "iVar3 * 3" identifier * number_literal) + number_literal) )) * number_literal)) ;) (if_statement "if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }" if (parenthesized_expression "((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10))" ( (binary_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)" (cast_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar4)" ( (type_descriptor "int" primitive_type) ) (call_expression "(uint)(*(uint *)(param_1 + 0xc) < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(uint *)(param_1 + 0xc) < uVar4)" ( (binary_expression "*(uint *)(param_1 + 0xc) < uVar4" (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    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }" { (expression_statement "iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;" (assignment_expression "iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4" identifier = (binary_expression "*(int *)(param_1 + 8) + -0x18 + uVar4" (binary_expression "*(int *)(param_1 + 8) + -0x18" (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 "lVar6 = *(longlong *)(iVar5 + 8);" (assignment_expression "lVar6 = *(longlong *)(iVar5 + 8)" identifier = (pointer_expression "*(longlong *)(iVar5 + 8)" * (cast_expression "(longlong *)(iVar5 + 8)" ( (type_descriptor "longlong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 8)" ( (binary_expression "iVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = (uint)*(ushort *)(iVar5 + 6);" (assignment_expression "uVar4 = (uint)*(ushort *)(iVar5 + 6)" identifier = (binary_expression "(uint)*(ushort *)(iVar5 + 6)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar5 + 6)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 6)" ( (binary_expression "iVar5 + 6" identifier + number_literal) ))))) ;) (if_statement "if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }" if (parenthesized_expression "(0xfeff < uVar4)" ( (binary_expression "0xfeff < uVar4" number_literal < identifier) )) (compound_statement "{\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }" { (if_statement "if (uVar4 != 0xffff) {\n        return 0;\n      }" if (parenthesized_expression "(uVar4 != 0xffff)" ( (binary_expression "uVar4 != 0xffff" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar2 = *(int **)(param_1 + 4);" (assignment_expression "piVar2 = *(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 = piVar2[0xc];" (assignment_expression "iVar5 = piVar2[0xc]" identifier = (subscript_expression "piVar2[0xc]" identifier [ number_literal ])) ;) (if_statement "if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }" { (expression_statement "iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);" (assignment_expression "iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2)" identifier = (call_expression "(**(code **)(*piVar2 + 0x6c))(piVar2)" (parenthesized_expression "(**(code **)(*piVar2 + 0x6c))" ( (pointer_expression "**(code **)(*piVar2 + 0x6c)" * (pointer_expression "*(code **)(*piVar2 + 0x6c)" * (cast_expression "(code **)(*piVar2 + 0x6c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar2 + 0x6c)" ( (binary_expression "*piVar2 + 0x6c" (pointer_expression "*piVar2" * identifier) + number_literal) ))))) )) (argument_list "(piVar2)" ( identifier )))) ;) (expression_statement "piVar2[0xc] = iVar5;" (assignment_expression "piVar2[0xc] = iVar5" (subscript_expression "piVar2[0xc]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);" (assignment_expression "uVar4 = FUN_000beba0(iVar5,piVar2,iVar3)" identifier = (call_expression "FUN_000beba0(iVar5,piVar2,iVar3)" identifier (argument_list "(iVar5,piVar2,iVar3)" ( identifier , identifier , identifier )))) ;) })) (if_statement "if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\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      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }" { (expression_statement "lVar7 = FUN_001282e0(iVar1);" (assignment_expression "lVar7 = FUN_001282e0(iVar1)" identifier = (call_expression "FUN_001282e0(iVar1)" identifier (argument_list "(iVar1)" ( identifier )))) ;) (expression_statement "lVar6 = lVar7 + lVar6;" (assignment_expression "lVar6 = lVar7 + lVar6" identifier = (binary_expression "lVar7 + lVar6" identifier + identifier)) ;) })) (expression_statement "*param_4 = lVar6;" (assignment_expression "*param_4 = lVar6" (pointer_expression "*param_4" * identifier) = identifier) ;) (return_statement "return uVar4;" return identifier ;) })) (expression_statement "FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);" (call_expression "FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4)" identifier (argument_list "("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4)" ( (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 IDENT ;) (declaration TYPE (pointer_declarator * 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 (binary_expression IDENT * LIT) + 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 = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (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) ;) (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_001776d0(int param_1,undefined4 param_2,undefined4 param_3,longlong *param_4)\n\n{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  longlong lVar6;\n  longlong lVar7;\n  \n  iVar1 = param_1 + 0x18;\n  FUN_00128310(iVar1,param_2,param_3);\n  lVar6 = FUN_00128220(iVar1);\n  if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_00128250(iVar1);\n  uVar4 = (iVar3 * 3 + 3) * 8;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }\n                    \n  FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" (type_identifier "uint") (function_declarator "FUN_001776d0(int param_1,undefined4 param_2,undefined4 param_3,longlong *param_4)" (identifier "FUN_001776d0") (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3,longlong *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 "longlong *param_4" (type_identifier "longlong") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  longlong lVar6;\n  longlong lVar7;\n  \n  iVar1 = param_1 + 0x18;\n  FUN_00128310(iVar1,param_2,param_3);\n  lVar6 = FUN_00128220(iVar1);\n  if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_00128250(iVar1);\n  uVar4 = (iVar3 * 3 + 3) * 8;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }\n                    \n  FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "longlong lVar6;" (type_identifier "longlong") (identifier "lVar6") (; ";")) (declaration "longlong lVar7;" (type_identifier "longlong") (identifier "lVar7") (; ";")) (expression_statement "iVar1 = param_1 + 0x18;" (assignment_expression "iVar1 = param_1 + 0x18" (identifier "iVar1") (= "=") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18"))) (; ";")) (expression_statement "FUN_00128310(iVar1,param_2,param_3);" (call_expression "FUN_00128310(iVar1,param_2,param_3)" (identifier "FUN_00128310") (argument_list "(iVar1,param_2,param_3)" (( "(") (identifier "iVar1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "lVar6 = FUN_00128220(iVar1);" (assignment_expression "lVar6 = FUN_00128220(iVar1)" (identifier "lVar6") (= "=") (call_expression "FUN_00128220(iVar1)" (identifier "FUN_00128220") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")")))) (; ";")) (if_statement "if (lVar6 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(lVar6 != CONCAT44(param_3,param_2))" (( "(") (binary_expression "lVar6 != CONCAT44(param_3,param_2)" (identifier "lVar6") (!= "!=") (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 "iVar3 = FUN_00128250(iVar1);" (assignment_expression "iVar3 = FUN_00128250(iVar1)" (identifier "iVar3") (= "=") (call_expression "FUN_00128250(iVar1)" (identifier "FUN_00128250") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")")))) (; ";")) (expression_statement "uVar4 = (iVar3 * 3 + 3) * 8;" (assignment_expression "uVar4 = (iVar3 * 3 + 3) * 8" (identifier "uVar4") (= "=") (binary_expression "(iVar3 * 3 + 3) * 8" (parenthesized_expression "(iVar3 * 3 + 3)" (( "(") (binary_expression "iVar3 * 3 + 3" (binary_expression "iVar3 * 3" (identifier "iVar3") (* "*") (number_literal "3")) (+ "+") (number_literal "3")) () ")")) (* "*") (number_literal "8"))) (; ";")) (if_statement "if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }" (if "if") (parenthesized_expression "((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10))" (( "(") (binary_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)" (cast_expression "(int)(uint)(*(uint *)(param_1 + 0xc) < uVar4)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (call_expression "(uint)(*(uint *)(param_1 + 0xc) < uVar4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(uint *)(param_1 + 0xc) < uVar4)" (( "(") (binary_expression "*(uint *)(param_1 + 0xc) < uVar4" (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 "uVar4")) () ")")))) (<= "<=") (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    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;\n    lVar6 = *(longlong *)(iVar5 + 8);\n    uVar4 = (uint)*(ushort *)(iVar5 + 6);\n    if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }\n    if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }\n    *param_4 = lVar6;\n    return uVar4;\n  }" ({ "{") (expression_statement "iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;" (assignment_expression "iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4" (identifier "iVar5") (= "=") (binary_expression "*(int *)(param_1 + 8) + -0x18 + uVar4" (binary_expression "*(int *)(param_1 + 8) + -0x18" (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 "-0x18")) (+ "+") (identifier "uVar4"))) (; ";")) (expression_statement "lVar6 = *(longlong *)(iVar5 + 8);" (assignment_expression "lVar6 = *(longlong *)(iVar5 + 8)" (identifier "lVar6") (= "=") (pointer_expression "*(longlong *)(iVar5 + 8)" (* "*") (cast_expression "(longlong *)(iVar5 + 8)" (( "(") (type_descriptor "longlong *" (type_identifier "longlong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 8)" (( "(") (binary_expression "iVar5 + 8" (identifier "iVar5") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar4 = (uint)*(ushort *)(iVar5 + 6);" (assignment_expression "uVar4 = (uint)*(ushort *)(iVar5 + 6)" (identifier "uVar4") (= "=") (binary_expression "(uint)*(ushort *)(iVar5 + 6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(iVar5 + 6)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 6)" (( "(") (binary_expression "iVar5 + 6" (identifier "iVar5") (+ "+") (number_literal "6")) () ")"))))) (; ";")) (if_statement "if (0xfeff < uVar4) {\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }" (if "if") (parenthesized_expression "(0xfeff < uVar4)" (( "(") (binary_expression "0xfeff < uVar4" (number_literal "0xfeff") (< "<") (identifier "uVar4")) () ")")) (compound_statement "{\n      if (uVar4 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar5 = piVar2[0xc];\n      if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }\n      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);\n    }" ({ "{") (if_statement "if (uVar4 != 0xffff) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(uVar4 != 0xffff)" (( "(") (binary_expression "uVar4 != 0xffff" (identifier "uVar4") (!= "!=") (number_literal "0xffff")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "piVar2 = *(int **)(param_1 + 4);" (assignment_expression "piVar2 = *(int **)(param_1 + 4)" (identifier "piVar2") (= "=") (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 = piVar2[0xc];" (assignment_expression "iVar5 = piVar2[0xc]" (identifier "iVar5") (= "=") (subscript_expression "piVar2[0xc]" (identifier "piVar2") ([ "[") (number_literal "0xc") (] "]"))) (; ";")) (if_statement "if (iVar5 == 0) {\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar5;\n      }" ({ "{") (expression_statement "iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);" (assignment_expression "iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2)" (identifier "iVar5") (= "=") (call_expression "(**(code **)(*piVar2 + 0x6c))(piVar2)" (parenthesized_expression "(**(code **)(*piVar2 + 0x6c))" (( "(") (pointer_expression "**(code **)(*piVar2 + 0x6c)" (* "*") (pointer_expression "*(code **)(*piVar2 + 0x6c)" (* "*") (cast_expression "(code **)(*piVar2 + 0x6c)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar2 + 0x6c)" (( "(") (binary_expression "*piVar2 + 0x6c" (pointer_expression "*piVar2" (* "*") (identifier "piVar2")) (+ "+") (number_literal "0x6c")) () ")"))))) () ")")) (argument_list "(piVar2)" (( "(") (identifier "piVar2") () ")")))) (; ";")) (expression_statement "piVar2[0xc] = iVar5;" (assignment_expression "piVar2[0xc] = iVar5" (subscript_expression "piVar2[0xc]" (identifier "piVar2") ([ "[") (number_literal "0xc") (] "]")) (= "=") (identifier "iVar5")) (; ";")) (} "}"))) (expression_statement "uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);" (assignment_expression "uVar4 = FUN_000beba0(iVar5,piVar2,iVar3)" (identifier "uVar4") (= "=") (call_expression "FUN_000beba0(iVar5,piVar2,iVar3)" (identifier "FUN_000beba0") (argument_list "(iVar5,piVar2,iVar3)" (( "(") (identifier "iVar5") (, ",") (identifier "piVar2") (, ",") (identifier "iVar3") () ")")))) (; ";")) (} "}"))) (if_statement "if (*(int *)(param_1 + 0x14) == 4) {\n      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\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      lVar7 = FUN_001282e0(iVar1);\n      lVar6 = lVar7 + lVar6;\n    }" ({ "{") (expression_statement "lVar7 = FUN_001282e0(iVar1);" (assignment_expression "lVar7 = FUN_001282e0(iVar1)" (identifier "lVar7") (= "=") (call_expression "FUN_001282e0(iVar1)" (identifier "FUN_001282e0") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")")))) (; ";")) (expression_statement "lVar6 = lVar7 + lVar6;" (assignment_expression "lVar6 = lVar7 + lVar6" (identifier "lVar6") (= "=") (binary_expression "lVar7 + lVar6" (identifier "lVar7") (+ "+") (identifier "lVar6"))) (; ";")) (} "}"))) (expression_statement "*param_4 = lVar6;" (assignment_expression "*param_4 = lVar6" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "lVar6")) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (expression_statement "FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);" (call_expression "FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4)" (identifier "FUN_0008b620") (argument_list "("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4)" (( "(") (string_literal ""../../gold/dwarf_reader.cc"" (" """) (string_content "../../gold/dwarf_reader.cc") (" """)) (, ",") (number_literal "0x3d") (, ",") (string_literal ""symbol_section"" (" """) (string_content "symbol_section") (" """)) (, ",") (identifier "uVar4") () ")"))) (; ";")) (} "}")))

/* 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<64,_false> * this,
   off_t reloc_offset, off_t * target_offset) */

type_1 __thiscall
gold::Sized_elf_reloc_mapper<64,var_11>::do_get_reloc_target
          (Sized_elf_reloc_mapper<64,var_11> *this,type_5 var_5,type_5 *target_offset)

{
  var_1<64,var_11> *this_00;
  type_2 *object;
  type_3 var_14;
  type_1 var_7;
  type_1 var_8;
  type_4 *var_9;
  type_5 var_4;
  uint64_t var_13;
  
  this_00 = &this->track_relocs_;
  var_1<64,var_11>::var_2(this_00,var_5);
  var_4 = var_1<64,var_11>::var_3(this_00);
  if (var_4 != var_5) {
    return 0;
  }
  var_7 = var_1<64,var_11>::var_6(this_00);
  var_8 = (var_7 * 3 + 3) * 8;
  if ((int)(type_1)((type_1)this->symtab_size_ < var_8) <= *(int *)((int)&this->symtab_size_ + 4)) {
    var_14 = *(type_3 *)(this->symtab_ + (var_8 - 0x10));
    var_8 = (type_1)*(type_6 *)(this->symtab_ + (var_8 - 0x12));
    if (0xfeff < var_8) {
      if (var_8 != 0xffff) {
        return 0;
      }
      object = this->object_;
      var_9 = object->xindex_;
      if (var_9 == (type_4 *)0x0) {
        var_9 = (type_4 *)(*object->_vptr_Object[0x1b])(object);
        object->xindex_ = var_9;
      }
      var_8 = type_4::var_10(var_9,object,var_7);
    }
    if (this->reloc_type_ == 4) {
      var_13 = var_1<64,var_11>::var_12(this_00);
      var_14 = var_13 + var_14;
    }
    *target_offset = var_14;
    return var_8;
  }
                    /* 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: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (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: (type_identifier) 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: (binary_expression left: (identifier) right: (number_literal)) 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: (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))))))) (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))))))) (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))) (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,longlong *param_4)

{
  int iVar1;
  int *piVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  longlong lVar6;
  longlong lVar7;
  
  iVar1 = param_1 + 0x18;
  FUN_00128310(iVar1,param_2,param_3);
  lVar6 = FUN_00128220(iVar1);
  if (lVar6 != CONCAT44(param_3,param_2)) {
    return 0;
  }
  iVar3 = FUN_00128250(iVar1);
  uVar4 = (iVar3 * 3 + 3) * 8;
  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {
    iVar5 = *(int *)(param_1 + 8) + -0x18 + uVar4;
    lVar6 = *(longlong *)(iVar5 + 8);
    uVar4 = (uint)*(ushort *)(iVar5 + 6);
    if (0xfeff < uVar4) {
      if (uVar4 != 0xffff) {
        return 0;
      }
      piVar2 = *(int **)(param_1 + 4);
      iVar5 = piVar2[0xc];
      if (iVar5 == 0) {
        iVar5 = (**(code **)(*piVar2 + 0x6c))(piVar2);
        piVar2[0xc] = iVar5;
      }
      uVar4 = FUN_000beba0(iVar5,piVar2,iVar3);
    }
    if (*(int *)(param_1 + 0x14) == 4) {
      lVar7 = FUN_001282e0(iVar1);
      lVar6 = lVar7 + lVar6;
    }
    *param_4 = lVar6;
    return uVar4;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0008b620("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);
}

