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

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

{
}



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

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

{
  ushort uVar1;
  int *piVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  longlong lVar8;
  
  iVar5 = param_1 + 0x18;
  FUN_0031a0c0(iVar5,param_2,param_3);
  lVar8 = FUN_00319fd0(iVar5);
  if (lVar8 != CONCAT44(param_3,param_2)) {
    return 0;
  }
  iVar3 = FUN_0031a000(iVar5);
  uVar4 = (iVar3 + 1) * 0x10;
  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {
    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;
    uVar1 = *(ushort *)(iVar6 + 0xe);
    uVar4 = *(uint *)(iVar6 + 4);
    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);
    if (0xfeff < uVar7) {
      if (uVar7 != 0xffff) {
        return 0;
      }
      piVar2 = *(int **)(param_1 + 4);
      iVar6 = piVar2[0xc];
      if (iVar6 == 0) {
        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);
        piVar2[0xc] = iVar6;
      }
      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);
    }
    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;
    if (*(int *)(param_1 + 0x14) == 4) {
      iVar5 = FUN_0031a090(iVar5);
      uVar4 = uVar4 + iVar5;
    }
    *param_4 = uVar4;
    param_4[1] = 0;
    return uVar7;
  }
                    /* WARNING: Subroutine does not return */
  FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00050b50
ADD EBX,0x273c77
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 0x0031a0c0
MOV dword ptr [ESP],EBP
CALL 0x00319fd0
ADD ESP,0x10
XOR EAX,ESI
XOR EDX,EDI
OR EDX,EAX
JZ 0x003763d0
ADD ESP,0x1c
XOR ESI,ESI
POP EBX
MOV EAX,ESI
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0xc
PUSH EBP
CALL 0x0031a000
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 0x00376499
MOV ECX,dword ptr [ESP + 0x30]
MOV ECX,dword ptr [ECX + 0x8]
LEA EAX,[ECX + EAX*0x1 + -0x10]
MOVZX ESI,word ptr [EAX + 0xe]
MOV EDI,dword ptr [EAX + 0x4]
ROL SI,0x8
MOVZX ESI,SI
CMP ESI,0xfeff
JBE 0x0037643e
CMP ESI,0xffff
JNZ 0x003763bc
MOV EAX,dword ptr [ESP + 0x30]
MOV ESI,dword ptr [EAX + 0x4]
MOV EAX,dword ptr [ESI + 0x30]
TEST EAX,EAX
JZ 0x00376480
SUB ESP,0x4
PUSH EDX
PUSH ESI
PUSH EAX
CALL 0x0028b7d0
ADD ESP,0x10
MOV ESI,EAX
MOV EAX,dword ptr [ESP + 0x30]
BSWAP EDI
CMP dword ptr [EAX + 0x14],0x4
JZ 0x00376468
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 0x0031a090
ADD ESP,0x10
ADD EDI,EAX
JMP 0x0037644a
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 0x0037642e
PUSH EAX
LEA EAX,[EBX + 0xffeb4168]
PUSH EAX
LEA EAX,[EBX + 0xffeb3db1]
PUSH 0x3d
PUSH EAX
CALL 0x002446e0
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nuint FUN_00376380(int param_1,undefined4 param_2,undefined4 param_3,uint *param_4)\n\n{\n  ushort uVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  longlong lVar8;\n  \n  iVar5 = param_1 + 0x18;\n  FUN_0031a0c0(iVar5,param_2,param_3);\n  lVar8 = FUN_00319fd0(iVar5);\n  if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_0031a000(iVar5);\n  uVar4 = (iVar3 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}\n\n" comment (function_definition "uint FUN_00376380(int param_1,undefined4 param_2,undefined4 param_3,uint *param_4)\n\n{\n  ushort uVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  longlong lVar8;\n  \n  iVar5 = param_1 + 0x18;\n  FUN_0031a0c0(iVar5,param_2,param_3);\n  lVar8 = FUN_00319fd0(iVar5);\n  if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_0031a000(iVar5);\n  uVar4 = (iVar3 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" type_identifier (function_declarator "FUN_00376380(int param_1,undefined4 param_2,undefined4 param_3,uint *param_4)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3,uint *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 "uint *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  ushort uVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  longlong lVar8;\n  \n  iVar5 = param_1 + 0x18;\n  FUN_0031a0c0(iVar5,param_2,param_3);\n  lVar8 = FUN_00319fd0(iVar5);\n  if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_0031a000(iVar5);\n  uVar4 = (iVar3 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" { (declaration "ushort uVar1;" type_identifier 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 "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "longlong lVar8;" type_identifier identifier ;) (expression_statement "iVar5 = param_1 + 0x18;" (assignment_expression "iVar5 = param_1 + 0x18" identifier = (binary_expression "param_1 + 0x18" identifier + number_literal)) ;) (expression_statement "FUN_0031a0c0(iVar5,param_2,param_3);" (call_expression "FUN_0031a0c0(iVar5,param_2,param_3)" identifier (argument_list "(iVar5,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "lVar8 = FUN_00319fd0(iVar5);" (assignment_expression "lVar8 = FUN_00319fd0(iVar5)" identifier = (call_expression "FUN_00319fd0(iVar5)" identifier (argument_list "(iVar5)" ( identifier )))) ;) (if_statement "if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }" if (parenthesized_expression "(lVar8 != CONCAT44(param_3,param_2))" ( (binary_expression "lVar8 != 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_0031a000(iVar5);" (assignment_expression "iVar3 = FUN_0031a000(iVar5)" identifier = (call_expression "FUN_0031a000(iVar5)" identifier (argument_list "(iVar5)" ( identifier )))) ;) (expression_statement "uVar4 = (iVar3 + 1) * 0x10;" (assignment_expression "uVar4 = (iVar3 + 1) * 0x10" identifier = (binary_expression "(iVar3 + 1) * 0x10" (parenthesized_expression "(iVar3 + 1)" ( (binary_expression "iVar3 + 1" identifier + number_literal) )) * number_literal)) ;) (if_statement "if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\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    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }" { (expression_statement "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;" (assignment_expression "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4" identifier = (binary_expression "*(int *)(param_1 + 8) + -0x10 + uVar4" (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 "uVar1 = *(ushort *)(iVar6 + 0xe);" (assignment_expression "uVar1 = *(ushort *)(iVar6 + 0xe)" identifier = (pointer_expression "*(ushort *)(iVar6 + 0xe)" * (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 "uVar4 = *(uint *)(iVar6 + 4);" (assignment_expression "uVar4 = *(uint *)(iVar6 + 4)" identifier = (pointer_expression "*(uint *)(iVar6 + 4)" * (cast_expression "(uint *)(iVar6 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);" (assignment_expression "uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8)" identifier = (call_expression "(uint)(ushort)(uVar1 << 8 | uVar1 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(uVar1 << 8 | uVar1 >> 8)" ( (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" identifier << number_literal) | (binary_expression "uVar1 >> 8" identifier >> number_literal)) )))) ;) (if_statement "if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }" if (parenthesized_expression "(0xfeff < uVar7)" ( (binary_expression "0xfeff < uVar7" number_literal < identifier) )) (compound_statement "{\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }" { (if_statement "if (uVar7 != 0xffff) {\n        return 0;\n      }" if (parenthesized_expression "(uVar7 != 0xffff)" ( (binary_expression "uVar7 != 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 "iVar6 = piVar2[0xc];" (assignment_expression "iVar6 = piVar2[0xc]" identifier = (subscript_expression "piVar2[0xc]" identifier [ number_literal ])) ;) (if_statement "if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }" { (expression_statement "iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);" (assignment_expression "iVar6 = (**(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] = iVar6;" (assignment_expression "piVar2[0xc] = iVar6" (subscript_expression "piVar2[0xc]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);" (assignment_expression "uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3)" identifier = (call_expression "FUN_0028b7d0(iVar6,piVar2,iVar3)" identifier (argument_list "(iVar6,piVar2,iVar3)" ( identifier , identifier , identifier )))) ;) })) (expression_statement "uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;" (assignment_expression "uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" identifier = (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 << 0x18" identifier << number_literal))) ;) (if_statement "if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\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      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }" { (expression_statement "iVar5 = FUN_0031a090(iVar5);" (assignment_expression "iVar5 = FUN_0031a090(iVar5)" identifier = (call_expression "FUN_0031a090(iVar5)" identifier (argument_list "(iVar5)" ( identifier )))) ;) (expression_statement "uVar4 = uVar4 + iVar5;" (assignment_expression "uVar4 = uVar4 + iVar5" identifier = (binary_expression "uVar4 + iVar5" identifier + identifier)) ;) })) (expression_statement "*param_4 = uVar4;" (assignment_expression "*param_4 = uVar4" (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 uVar7;" return identifier ;) })) comment (expression_statement "FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);" (call_expression "FUN_002446e0("../../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<32,_true> * this, off_t\n   reloc_offset, off_t * target_offset) */\n\nuint __thiscall\ngold::Sized_elf_reloc_mapper<32,_true>::do_get_reloc_target\n          (Sized_elf_reloc_mapper<32,_true> *this,off_t reloc_offset,off_t *target_offset)\n\n{\n}\n\n" comment comment (ERROR "uint __thiscall\ngold::Sized_elf_reloc_mapper<32,_true>::do_get_reloc_target\n          (Sized_elf_reloc_mapper<32,_true> *this,off_t reloc_offset,off_t *target_offset)" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<32" < number_literal) , (ERROR "_true>::" identifier > : :) (function_declarator "do_get_reloc_target\n          (Sized_elf_reloc_mapper<32,_true> *this,off_t reloc_offset,off_t *target_offset)" identifier (parameter_list "(Sized_elf_reloc_mapper<32,_true> *this,off_t reloc_offset,off_t *target_offset)" ( (parameter_declaration "Sized_elf_reloc_mapper" type_identifier) (ERROR "<32" < number_literal) , (parameter_declaration "_true> *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)) )))) (compound_statement "{\n}" { }))
(translation_unit "uint FUN_00376380(int param_1,undefined4 param_2,undefined4 param_3,uint *param_4)\n\n{\n  ushort uVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  longlong lVar8;\n  \n  iVar5 = param_1 + 0x18;\n  FUN_0031a0c0(iVar5,param_2,param_3);\n  lVar8 = FUN_00319fd0(iVar5);\n  if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_0031a000(iVar5);\n  uVar4 = (iVar3 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }\n                    \n  FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}\n\n" (function_definition "uint FUN_00376380(int param_1,undefined4 param_2,undefined4 param_3,uint *param_4)\n\n{\n  ushort uVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  longlong lVar8;\n  \n  iVar5 = param_1 + 0x18;\n  FUN_0031a0c0(iVar5,param_2,param_3);\n  lVar8 = FUN_00319fd0(iVar5);\n  if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_0031a000(iVar5);\n  uVar4 = (iVar3 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }\n                    \n  FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" type_identifier (function_declarator "FUN_00376380(int param_1,undefined4 param_2,undefined4 param_3,uint *param_4)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3,uint *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 "uint *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  ushort uVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  longlong lVar8;\n  \n  iVar5 = param_1 + 0x18;\n  FUN_0031a0c0(iVar5,param_2,param_3);\n  lVar8 = FUN_00319fd0(iVar5);\n  if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_0031a000(iVar5);\n  uVar4 = (iVar3 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }\n                    \n  FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" { (declaration "ushort uVar1;" type_identifier 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 "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "longlong lVar8;" type_identifier identifier ;) (expression_statement "iVar5 = param_1 + 0x18;" (assignment_expression "iVar5 = param_1 + 0x18" identifier = (binary_expression "param_1 + 0x18" identifier + number_literal)) ;) (expression_statement "FUN_0031a0c0(iVar5,param_2,param_3);" (call_expression "FUN_0031a0c0(iVar5,param_2,param_3)" identifier (argument_list "(iVar5,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "lVar8 = FUN_00319fd0(iVar5);" (assignment_expression "lVar8 = FUN_00319fd0(iVar5)" identifier = (call_expression "FUN_00319fd0(iVar5)" identifier (argument_list "(iVar5)" ( identifier )))) ;) (if_statement "if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }" if (parenthesized_expression "(lVar8 != CONCAT44(param_3,param_2))" ( (binary_expression "lVar8 != 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_0031a000(iVar5);" (assignment_expression "iVar3 = FUN_0031a000(iVar5)" identifier = (call_expression "FUN_0031a000(iVar5)" identifier (argument_list "(iVar5)" ( identifier )))) ;) (expression_statement "uVar4 = (iVar3 + 1) * 0x10;" (assignment_expression "uVar4 = (iVar3 + 1) * 0x10" identifier = (binary_expression "(iVar3 + 1) * 0x10" (parenthesized_expression "(iVar3 + 1)" ( (binary_expression "iVar3 + 1" identifier + number_literal) )) * number_literal)) ;) (if_statement "if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\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    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }" { (expression_statement "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;" (assignment_expression "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4" identifier = (binary_expression "*(int *)(param_1 + 8) + -0x10 + uVar4" (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 "uVar1 = *(ushort *)(iVar6 + 0xe);" (assignment_expression "uVar1 = *(ushort *)(iVar6 + 0xe)" identifier = (pointer_expression "*(ushort *)(iVar6 + 0xe)" * (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 "uVar4 = *(uint *)(iVar6 + 4);" (assignment_expression "uVar4 = *(uint *)(iVar6 + 4)" identifier = (pointer_expression "*(uint *)(iVar6 + 4)" * (cast_expression "(uint *)(iVar6 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);" (assignment_expression "uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8)" identifier = (call_expression "(uint)(ushort)(uVar1 << 8 | uVar1 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(uVar1 << 8 | uVar1 >> 8)" ( (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" identifier << number_literal) | (binary_expression "uVar1 >> 8" identifier >> number_literal)) )))) ;) (if_statement "if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }" if (parenthesized_expression "(0xfeff < uVar7)" ( (binary_expression "0xfeff < uVar7" number_literal < identifier) )) (compound_statement "{\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }" { (if_statement "if (uVar7 != 0xffff) {\n        return 0;\n      }" if (parenthesized_expression "(uVar7 != 0xffff)" ( (binary_expression "uVar7 != 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 "iVar6 = piVar2[0xc];" (assignment_expression "iVar6 = piVar2[0xc]" identifier = (subscript_expression "piVar2[0xc]" identifier [ number_literal ])) ;) (if_statement "if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }" { (expression_statement "iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);" (assignment_expression "iVar6 = (**(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] = iVar6;" (assignment_expression "piVar2[0xc] = iVar6" (subscript_expression "piVar2[0xc]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);" (assignment_expression "uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3)" identifier = (call_expression "FUN_0028b7d0(iVar6,piVar2,iVar3)" identifier (argument_list "(iVar6,piVar2,iVar3)" ( identifier , identifier , identifier )))) ;) })) (expression_statement "uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;" (assignment_expression "uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" identifier = (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 << 0x18" identifier << number_literal))) ;) (if_statement "if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\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      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }" { (expression_statement "iVar5 = FUN_0031a090(iVar5);" (assignment_expression "iVar5 = FUN_0031a090(iVar5)" identifier = (call_expression "FUN_0031a090(iVar5)" identifier (argument_list "(iVar5)" ( identifier )))) ;) (expression_statement "uVar4 = uVar4 + iVar5;" (assignment_expression "uVar4 = uVar4 + iVar5" identifier = (binary_expression "uVar4 + iVar5" identifier + identifier)) ;) })) (expression_statement "*param_4 = uVar4;" (assignment_expression "*param_4 = uVar4" (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 uVar7;" return identifier ;) })) (expression_statement "FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);" (call_expression "FUN_002446e0("../../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 ;) (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 = (pointer_expression * (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) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression (binary_expression IDENT << LIT) | (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 )))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (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_00376380(int param_1,undefined4 param_2,undefined4 param_3,uint *param_4)\n\n{\n  ushort uVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  longlong lVar8;\n  \n  iVar5 = param_1 + 0x18;\n  FUN_0031a0c0(iVar5,param_2,param_3);\n  lVar8 = FUN_00319fd0(iVar5);\n  if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_0031a000(iVar5);\n  uVar4 = (iVar3 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }\n                    \n  FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" (type_identifier "uint") (function_declarator "FUN_00376380(int param_1,undefined4 param_2,undefined4 param_3,uint *param_4)" (identifier "FUN_00376380") (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3,uint *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 "uint *param_4" (type_identifier "uint") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  ushort uVar1;\n  int *piVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  longlong lVar8;\n  \n  iVar5 = param_1 + 0x18;\n  FUN_0031a0c0(iVar5,param_2,param_3);\n  lVar8 = FUN_00319fd0(iVar5);\n  if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }\n  iVar3 = FUN_0031a000(iVar5);\n  uVar4 = (iVar3 + 1) * 0x10;\n  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }\n                    \n  FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);\n}" ({ "{") (declaration "ushort uVar1;" (type_identifier "ushort") (identifier "uVar1") (; ";")) (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 "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "longlong lVar8;" (type_identifier "longlong") (identifier "lVar8") (; ";")) (expression_statement "iVar5 = param_1 + 0x18;" (assignment_expression "iVar5 = param_1 + 0x18" (identifier "iVar5") (= "=") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18"))) (; ";")) (expression_statement "FUN_0031a0c0(iVar5,param_2,param_3);" (call_expression "FUN_0031a0c0(iVar5,param_2,param_3)" (identifier "FUN_0031a0c0") (argument_list "(iVar5,param_2,param_3)" (( "(") (identifier "iVar5") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "lVar8 = FUN_00319fd0(iVar5);" (assignment_expression "lVar8 = FUN_00319fd0(iVar5)" (identifier "lVar8") (= "=") (call_expression "FUN_00319fd0(iVar5)" (identifier "FUN_00319fd0") (argument_list "(iVar5)" (( "(") (identifier "iVar5") () ")")))) (; ";")) (if_statement "if (lVar8 != CONCAT44(param_3,param_2)) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(lVar8 != CONCAT44(param_3,param_2))" (( "(") (binary_expression "lVar8 != CONCAT44(param_3,param_2)" (identifier "lVar8") (!= "!=") (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_0031a000(iVar5);" (assignment_expression "iVar3 = FUN_0031a000(iVar5)" (identifier "iVar3") (= "=") (call_expression "FUN_0031a000(iVar5)" (identifier "FUN_0031a000") (argument_list "(iVar5)" (( "(") (identifier "iVar5") () ")")))) (; ";")) (expression_statement "uVar4 = (iVar3 + 1) * 0x10;" (assignment_expression "uVar4 = (iVar3 + 1) * 0x10" (identifier "uVar4") (= "=") (binary_expression "(iVar3 + 1) * 0x10" (parenthesized_expression "(iVar3 + 1)" (( "(") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "0x10"))) (; ";")) (if_statement "if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {\n    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\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    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;\n    uVar1 = *(ushort *)(iVar6 + 0xe);\n    uVar4 = *(uint *)(iVar6 + 4);\n    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);\n    if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }\n    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }\n    *param_4 = uVar4;\n    param_4[1] = 0;\n    return uVar7;\n  }" ({ "{") (expression_statement "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;" (assignment_expression "iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4" (identifier "iVar6") (= "=") (binary_expression "*(int *)(param_1 + 8) + -0x10 + uVar4" (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 "uVar4"))) (; ";")) (expression_statement "uVar1 = *(ushort *)(iVar6 + 0xe);" (assignment_expression "uVar1 = *(ushort *)(iVar6 + 0xe)" (identifier "uVar1") (= "=") (pointer_expression "*(ushort *)(iVar6 + 0xe)" (* "*") (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 "uVar4 = *(uint *)(iVar6 + 4);" (assignment_expression "uVar4 = *(uint *)(iVar6 + 4)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(iVar6 + 4)" (* "*") (cast_expression "(uint *)(iVar6 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4)" (( "(") (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);" (assignment_expression "uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8)" (identifier "uVar7") (= "=") (call_expression "(uint)(ushort)(uVar1 << 8 | uVar1 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(ushort)" (( "(") (identifier "ushort") () ")"))) (argument_list "(uVar1 << 8 | uVar1 >> 8)" (( "(") (binary_expression "uVar1 << 8 | uVar1 >> 8" (binary_expression "uVar1 << 8" (identifier "uVar1") (<< "<<") (number_literal "8")) (| "|") (binary_expression "uVar1 >> 8" (identifier "uVar1") (>> ">>") (number_literal "8"))) () ")")))) (; ";")) (if_statement "if (0xfeff < uVar7) {\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }" (if "if") (parenthesized_expression "(0xfeff < uVar7)" (( "(") (binary_expression "0xfeff < uVar7" (number_literal "0xfeff") (< "<") (identifier "uVar7")) () ")")) (compound_statement "{\n      if (uVar7 != 0xffff) {\n        return 0;\n      }\n      piVar2 = *(int **)(param_1 + 4);\n      iVar6 = piVar2[0xc];\n      if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }\n      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);\n    }" ({ "{") (if_statement "if (uVar7 != 0xffff) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(uVar7 != 0xffff)" (( "(") (binary_expression "uVar7 != 0xffff" (identifier "uVar7") (!= "!=") (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 "iVar6 = piVar2[0xc];" (assignment_expression "iVar6 = piVar2[0xc]" (identifier "iVar6") (= "=") (subscript_expression "piVar2[0xc]" (identifier "piVar2") ([ "[") (number_literal "0xc") (] "]"))) (; ";")) (if_statement "if (iVar6 == 0) {\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);\n        piVar2[0xc] = iVar6;\n      }" ({ "{") (expression_statement "iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);" (assignment_expression "iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2)" (identifier "iVar6") (= "=") (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] = iVar6;" (assignment_expression "piVar2[0xc] = iVar6" (subscript_expression "piVar2[0xc]" (identifier "piVar2") ([ "[") (number_literal "0xc") (] "]")) (= "=") (identifier "iVar6")) (; ";")) (} "}"))) (expression_statement "uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);" (assignment_expression "uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3)" (identifier "uVar7") (= "=") (call_expression "FUN_0028b7d0(iVar6,piVar2,iVar3)" (identifier "FUN_0028b7d0") (argument_list "(iVar6,piVar2,iVar3)" (( "(") (identifier "iVar6") (, ",") (identifier "piVar2") (, ",") (identifier "iVar3") () ")")))) (; ";")) (} "}"))) (expression_statement "uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;" (assignment_expression "uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (identifier "uVar4") (= "=") (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" (identifier "uVar4") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" (( "(") (binary_expression "uVar4 & 0xff0000" (identifier "uVar4") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" (( "(") (binary_expression "uVar4 & 0xff00" (identifier "uVar4") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar4 << 0x18" (identifier "uVar4") (<< "<<") (number_literal "0x18")))) (; ";")) (if_statement "if (*(int *)(param_1 + 0x14) == 4) {\n      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\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      iVar5 = FUN_0031a090(iVar5);\n      uVar4 = uVar4 + iVar5;\n    }" ({ "{") (expression_statement "iVar5 = FUN_0031a090(iVar5);" (assignment_expression "iVar5 = FUN_0031a090(iVar5)" (identifier "iVar5") (= "=") (call_expression "FUN_0031a090(iVar5)" (identifier "FUN_0031a090") (argument_list "(iVar5)" (( "(") (identifier "iVar5") () ")")))) (; ";")) (expression_statement "uVar4 = uVar4 + iVar5;" (assignment_expression "uVar4 = uVar4 + iVar5" (identifier "uVar4") (= "=") (binary_expression "uVar4 + iVar5" (identifier "uVar4") (+ "+") (identifier "iVar5"))) (; ";")) (} "}"))) (expression_statement "*param_4 = uVar4;" (assignment_expression "*param_4 = uVar4" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "uVar4")) (; ";")) (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 uVar7;" (return "return") (identifier "uVar7") (; ";")) (} "}"))) (expression_statement "FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);" (call_expression "FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4)" (identifier "FUN_002446e0") (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<32,_true> * this, off_t
   reloc_offset, off_t * target_offset) */

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

{
}


(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: (type_identifier) 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: (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: (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: (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: (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: (call_expression function: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (identifier))) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (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))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (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,uint *param_4)

{
  ushort uVar1;
  int *piVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  longlong lVar8;
  
  iVar5 = param_1 + 0x18;
  FUN_0031a0c0(iVar5,param_2,param_3);
  lVar8 = FUN_00319fd0(iVar5);
  if (lVar8 != CONCAT44(param_3,param_2)) {
    return 0;
  }
  iVar3 = FUN_0031a000(iVar5);
  uVar4 = (iVar3 + 1) * 0x10;
  if ((int)(uint)(*(uint *)(param_1 + 0xc) < uVar4) <= *(int *)(param_1 + 0x10)) {
    iVar6 = *(int *)(param_1 + 8) + -0x10 + uVar4;
    uVar1 = *(ushort *)(iVar6 + 0xe);
    uVar4 = *(uint *)(iVar6 + 4);
    uVar7 = (uint)(ushort)(uVar1 << 8 | uVar1 >> 8);
    if (0xfeff < uVar7) {
      if (uVar7 != 0xffff) {
        return 0;
      }
      piVar2 = *(int **)(param_1 + 4);
      iVar6 = piVar2[0xc];
      if (iVar6 == 0) {
        iVar6 = (**(code **)(*piVar2 + 0x6c))(piVar2);
        piVar2[0xc] = iVar6;
      }
      uVar7 = FUN_0028b7d0(iVar6,piVar2,iVar3);
    }
    uVar4 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;
    if (*(int *)(param_1 + 0x14) == 4) {
      iVar5 = FUN_0031a090(iVar5);
      uVar4 = uVar4 + iVar5;
    }
    *param_4 = uVar4;
    param_4[1] = 0;
    return uVar7;
  }
                    /* WARNING: Subroutine does not return */
  FUN_002446e0("../../gold/dwarf_reader.cc",0x3d,"symbol_section",uVar4);
}

