
void sparc_find_call(Sym *parent,bfd_vma p_lowpc,bfd_vma p_highpc)

{
  int iVar1;
  bfd_vma bVar2;
  Sym *child;
  ulong uVar3;
  
  if ((debug_level._1_1_ & 1) != 0) {
    printf("[find_call] %s: 0x%lx to 0x%lx\n",parent->name,p_lowpc,p_highpc);
  }
  uVar3 = p_lowpc + 3 & 0xfffffffffffffffc;
  do {
    while( true ) {
      if (p_highpc <= uVar3) {
        return;
      }
      bVar2 = (*core_bfd->xvec->bfd_getx32)
                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space));
      if ((bVar2 & 0xc0000000) != 0) break;
LAB_0010dc68:
      uVar3 = uVar3 + 4;
    }
    if ((debug_level._1_1_ & 1) != 0) {
      printf("[find_call] 0x%lx: callf",uVar3);
    }
    bVar2 = (uVar3 - 0x20000000) + ((ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000);
    iVar1 = hist_check_address((uint)bVar2);
    if ((iVar1 == 0) || (child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0)) {
LAB_0010dc50:
      if ((debug_level._1_1_ & 1) != 0) {
        puts("\tbut it\'s a botch");
      }
      goto LAB_0010dc68;
    }
    if ((debug_level._1_1_ & 1) == 0) {
      if (bVar2 != child->addr) goto LAB_0010dc68;
    }
    else {
      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name);
      if (child->addr != bVar2) goto LAB_0010dc50;
    }
    uVar3 = uVar3 + 4;
    arc_add(parent,child,0);
  } while( true );
}



void FUN_0010dbf0(long param_1,long param_2,ulong param_3)

{
  ulong uVar1;
  int iVar2;
  uint uVar3;
  ulong *puVar4;
  ulong uVar5;
  
  if ((DAT_001195e4._1_1_ & 1) != 0) {
    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);
  }
  uVar5 = param_2 + 3U & 0xfffffffffffffffc;
  do {
    while( true ) {
      if (param_3 <= uVar5) {
        return;
      }
      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))
                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);
      if ((uVar3 & 0xc0000000) != 0) break;
LAB_0010dc68:
      uVar5 = uVar5 + 4;
    }
    if ((DAT_001195e4._1_1_ & 1) != 0) {
      printf("[find_call] 0x%lx: callf",uVar5);
    }
    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);
    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);
    if ((iVar2 == 0) ||
       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {
LAB_0010dc50:
      if ((DAT_001195e4._1_1_ & 1) != 0) {
        puts("\tbut it\'s a botch");
      }
      goto LAB_0010dc68;
    }
    if ((DAT_001195e4._1_1_ & 1) == 0) {
      if (uVar1 != *puVar4) goto LAB_0010dc68;
    }
    else {
      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);
      if (*puVar4 != uVar1) goto LAB_0010dc50;
    }
    uVar5 = uVar5 + 4;
    FUN_00104520(param_1,puVar4,0);
  } while( true );
}


PUSH R15
PUSH R14
MOV R14,RDI
PUSH R13
PUSH R12
MOV R12,RDX
PUSH RBP
PUSH RBX
MOV RBX,RSI
SUB RSP,0x8
TEST byte ptr [0x001195e5],0x1
JNZ 0x0010dd28
ADD RBX,0x3
LEA R13,[0x11256b]
AND RBX,-0x4
CMP R12,RBX
JA 0x0010dc75
JMP 0x0010dd12
AND EBP,0x3fffffff
XOR RBP,0x20000000
LEA RBP,[RBX + RBP*0x1 + -0x20000000]
MOV EDI,EBP
CALL 0x0010b480
TEST EAX,EAX
JNZ 0x0010dcc8
TEST byte ptr [0x001195e5],0x1
JZ 0x0010dc68
MOV RDI,R13
CALL 0x001020c0
NOP dword ptr [RAX]
ADD RBX,0x4
CMP R12,RBX
JBE 0x0010dd12
MOV RAX,qword ptr [0x00119af8]
MOV RDI,RBX
SUB RDI,qword ptr [RAX + 0x28]
MOV RAX,qword ptr [0x00119ad8]
ADD RDI,qword ptr [0x00119ae0]
MOV RAX,qword ptr [RAX + 0x8]
CALL qword ptr [RAX + 0x38]
MOV RBP,RAX
TEST EAX,0xc0000000
JZ 0x0010dc68
TEST byte ptr [0x001195e5],0x1
JZ 0x0010dc30
MOV RSI,RBX
LEA RDI,[0x11269f]
XOR EAX,EAX
CALL 0x001021c0
JMP 0x0010dc30
MOV RSI,RBP
LEA RDI,[0x119b30]
CALL 0x0010c540
MOV R15,RAX
TEST RAX,RAX
JZ 0x0010dc50
MOV RCX,qword ptr [RAX]
TEST byte ptr [0x001195e5],0x1
JNZ 0x0010dd48
CMP RBP,RCX
JNZ 0x0010dc68
XOR EDX,EDX
MOV RSI,R15
MOV RDI,R14
ADD RBX,0x4
CALL 0x00104520
CMP R12,RBX
JA 0x0010dc75
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RSI,qword ptr [RDI + 0x10]
MOV RCX,RDX
LEA RDI,[0x112330]
XOR EAX,EAX
MOV RDX,RBX
CALL 0x001021c0
JMP 0x0010dc14
MOV RDX,qword ptr [RAX + 0x10]
MOV RSI,RBP
XOR EAX,EAX
LEA RDI,[0x112678]
CALL 0x001021c0
CMP qword ptr [R15],RBP
JNZ 0x0010dc50
JMP 0x0010dcf8
(translation_unit "void FUN_0010dbf0(long param_1,long param_2,ulong param_3)\n\n{\n  ulong uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong *puVar4;\n  ulong uVar5;\n  \n  if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }\n  uVar5 = param_2 + 3U & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );\n}\n\n" (function_definition "void FUN_0010dbf0(long param_1,long param_2,ulong param_3)\n\n{\n  ulong uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong *puVar4;\n  ulong uVar5;\n  \n  if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }\n  uVar5 = param_2 + 3U & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );\n}" primitive_type (function_declarator "FUN_0010dbf0(long param_1,long param_2,ulong param_3)" identifier (parameter_list "(long param_1,long param_2,ulong param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_3" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong *puVar4;\n  ulong uVar5;\n  \n  if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }\n  uVar5 = param_2 + 3U & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (if_statement "if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }" if (parenthesized_expression "((DAT_001195e4._1_1_ & 1) != 0)" ( (binary_expression "(DAT_001195e4._1_1_ & 1) != 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" ( (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }" { (expression_statement "printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);" (call_expression "printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3)" identifier (argument_list "("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3)" ( (string_literal ""[find_call] %s: 0x%lx to 0x%lx\n"" " string_content escape_sequence ") , (pointer_expression "*(undefined8 *)(param_1 + 0x10)" * (cast_expression "(undefined8 *)(param_1 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) , identifier , identifier ))) ;) })) (expression_statement "uVar5 = param_2 + 3U & 0xfffffffffffffffc;" (assignment_expression "uVar5 = param_2 + 3U & 0xfffffffffffffffc" identifier = (binary_expression "param_2 + 3U & 0xfffffffffffffffc" (binary_expression "param_2 + 3U" identifier + number_literal) & number_literal)) ;) (do_statement "do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );" do (compound_statement "{\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  }" { (while_statement "while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }" { (if_statement "if (param_3 <= uVar5) {\n        return;\n      }" if (parenthesized_expression "(param_3 <= uVar5)" ( (binary_expression "param_3 <= uVar5" identifier <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);" (assignment_expression "uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0)" identifier = (call_expression "(**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0)" (parenthesized_expression "(**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))" ( (pointer_expression "**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38)" * (pointer_expression "*(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38)" * (cast_expression "(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(DAT_00119ad8 + 8) + 0x38)" ( (binary_expression "*(long *)(DAT_00119ad8 + 8) + 0x38" (pointer_expression "*(long *)(DAT_00119ad8 + 8)" * (cast_expression "(long *)(DAT_00119ad8 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00119ad8 + 8)" ( (binary_expression "DAT_00119ad8 + 8" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0)" ( (binary_expression "(uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0" (parenthesized_expression "(uVar5 - *(long *)(DAT_00119af8 + 0x28))" ( (binary_expression "uVar5 - *(long *)(DAT_00119af8 + 0x28)" identifier - (pointer_expression "*(long *)(DAT_00119af8 + 0x28)" * (cast_expression "(long *)(DAT_00119af8 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00119af8 + 0x28)" ( (binary_expression "DAT_00119af8 + 0x28" identifier + number_literal) ))))) )) + identifier) )))) ;) (if_statement "if ((uVar3 & 0xc0000000) != 0) break;" if (parenthesized_expression "((uVar3 & 0xc0000000) != 0)" ( (binary_expression "(uVar3 & 0xc0000000) != 0" (parenthesized_expression "(uVar3 & 0xc0000000)" ( (binary_expression "uVar3 & 0xc0000000" identifier & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_0010dc68:\n      uVar5 = uVar5 + 4;" statement_identifier : (expression_statement "uVar5 = uVar5 + 4;" (assignment_expression "uVar5 = uVar5 + 4" identifier = (binary_expression "uVar5 + 4" identifier + number_literal)) ;)) })) (if_statement "if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }" if (parenthesized_expression "((DAT_001195e4._1_1_ & 1) != 0)" ( (binary_expression "(DAT_001195e4._1_1_ & 1) != 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" ( (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }" { (expression_statement "printf("[find_call] 0x%lx: callf",uVar5);" (call_expression "printf("[find_call] 0x%lx: callf",uVar5)" identifier (argument_list "("[find_call] 0x%lx: callf",uVar5)" ( (string_literal ""[find_call] 0x%lx: callf"" " string_content ") , identifier ))) ;) })) (expression_statement "uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);" (assignment_expression "uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000)" identifier = (binary_expression "(uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000)" (parenthesized_expression "(uVar5 - 0x20000000)" ( (binary_expression "uVar5 - 0x20000000" identifier - number_literal) )) + (parenthesized_expression "((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000)" ( (binary_expression "(ulong)(uVar3 & 0x3fffffff) ^ 0x20000000" (call_expression "(ulong)(uVar3 & 0x3fffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar3 & 0x3fffffff)" ( (binary_expression "uVar3 & 0x3fffffff" identifier & number_literal) ))) ^ number_literal) )))) ;) (expression_statement "iVar2 = FUN_0010b480(uVar1 & 0xffffffff);" (assignment_expression "iVar2 = FUN_0010b480(uVar1 & 0xffffffff)" identifier = (call_expression "FUN_0010b480(uVar1 & 0xffffffff)" identifier (argument_list "(uVar1 & 0xffffffff)" ( (binary_expression "uVar1 & 0xffffffff" identifier & number_literal) )))) ;) (if_statement "if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }" if (parenthesized_expression "((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0))" ( (binary_expression "(iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)" (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) || (parenthesized_expression "(puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)" ( (comma_expression "puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0" (assignment_expression "puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1)" identifier = (cast_expression "(ulong *)FUN_0010c540(&DAT_00119b30,uVar1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0010c540(&DAT_00119b30,uVar1)" identifier (argument_list "(&DAT_00119b30,uVar1)" ( (pointer_expression "&DAT_00119b30" & identifier) , identifier ))))) , (binary_expression "puVar4 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }" { (labeled_statement "LAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }" statement_identifier : (if_statement "if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }" if (parenthesized_expression "((DAT_001195e4._1_1_ & 1) != 0)" ( (binary_expression "(DAT_001195e4._1_1_ & 1) != 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" ( (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        puts("\tbut it\'s a botch");\n      }" { (expression_statement "puts("\tbut it\'s a botch");" (call_expression "puts("\tbut it\'s a botch")" identifier (argument_list "("\tbut it\'s a botch")" ( (string_literal ""\tbut it\'s a botch"" " escape_sequence string_content escape_sequence string_content ") ))) ;) }))) (goto_statement "goto LAB_0010dc68;" goto statement_identifier ;) })) (if_statement "if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }" if (parenthesized_expression "((DAT_001195e4._1_1_ & 1) == 0)" ( (binary_expression "(DAT_001195e4._1_1_ & 1) == 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" ( (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" identifier . field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }" { (if_statement "if (uVar1 != *puVar4) goto LAB_0010dc68;" if (parenthesized_expression "(uVar1 != *puVar4)" ( (binary_expression "uVar1 != *puVar4" identifier != (pointer_expression "*puVar4" * identifier)) )) (goto_statement "goto LAB_0010dc68;" goto statement_identifier ;)) }) (else_clause "else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }" else (compound_statement "{\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }" { (expression_statement "printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);" (call_expression "printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2])" identifier (argument_list "("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2])" ( (string_literal ""\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n"" " escape_sequence string_content escape_sequence ") , identifier , (subscript_expression "puVar4[2]" identifier [ number_literal ]) ))) ;) (if_statement "if (*puVar4 != uVar1) goto LAB_0010dc50;" if (parenthesized_expression "(*puVar4 != uVar1)" ( (binary_expression "*puVar4 != uVar1" (pointer_expression "*puVar4" * identifier) != identifier) )) (goto_statement "goto LAB_0010dc50;" goto statement_identifier ;)) }))) (expression_statement "uVar5 = uVar5 + 4;" (assignment_expression "uVar5 = uVar5 + 4" identifier = (binary_expression "uVar5 + 4" identifier + number_literal)) ;) (expression_statement "FUN_00104520(param_1,puVar4,0);" (call_expression "FUN_00104520(param_1,puVar4,0)" identifier (argument_list "(param_1,puVar4,0)" ( identifier , identifier , number_literal ))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "void sparc_find_call(Sym *parent,bfd_vma p_lowpc,bfd_vma p_highpc)\n\n{\n  int iVar1;\n  bfd_vma bVar2;\n  Sym *child;\n  ulong uVar3;\n  \n  if ((debug_level._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",parent->name,p_lowpc,p_highpc);\n  }\n  uVar3 = p_lowpc + 3 & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (p_highpc <= uVar3) {\n        return;\n      }\n      bVar2 = (*core_bfd->xvec->bfd_getx32)\n                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space));\n      if ((bVar2 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar3 = uVar3 + 4;\n    }\n    if ((debug_level._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar3);\n    }\n    bVar2 = (uVar3 - 0x20000000) + ((ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000);\n    iVar1 = hist_check_address((uint)bVar2);\n    if ((iVar1 == 0) || (child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0)) {\nLAB_0010dc50:\n      if ((debug_level._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((debug_level._1_1_ & 1) == 0) {\n      if (bVar2 != child->addr) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name);\n      if (child->addr != bVar2) goto LAB_0010dc50;\n    }\n    uVar3 = uVar3 + 4;\n    arc_add(parent,child,0);\n  } while( true );\n}\n\n" (function_definition "void sparc_find_call(Sym *parent,bfd_vma p_lowpc,bfd_vma p_highpc)\n\n{\n  int iVar1;\n  bfd_vma bVar2;\n  Sym *child;\n  ulong uVar3;\n  \n  if ((debug_level._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",parent->name,p_lowpc,p_highpc);\n  }\n  uVar3 = p_lowpc + 3 & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (p_highpc <= uVar3) {\n        return;\n      }\n      bVar2 = (*core_bfd->xvec->bfd_getx32)\n                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space));\n      if ((bVar2 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar3 = uVar3 + 4;\n    }\n    if ((debug_level._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar3);\n    }\n    bVar2 = (uVar3 - 0x20000000) + ((ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000);\n    iVar1 = hist_check_address((uint)bVar2);\n    if ((iVar1 == 0) || (child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0)) {\nLAB_0010dc50:\n      if ((debug_level._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((debug_level._1_1_ & 1) == 0) {\n      if (bVar2 != child->addr) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name);\n      if (child->addr != bVar2) goto LAB_0010dc50;\n    }\n    uVar3 = uVar3 + 4;\n    arc_add(parent,child,0);\n  } while( true );\n}" primitive_type (function_declarator "sparc_find_call(Sym *parent,bfd_vma p_lowpc,bfd_vma p_highpc)" identifier (parameter_list "(Sym *parent,bfd_vma p_lowpc,bfd_vma p_highpc)" ( (parameter_declaration "Sym *parent" type_identifier (pointer_declarator "*parent" * identifier)) , (parameter_declaration "bfd_vma p_lowpc" type_identifier identifier) , (parameter_declaration "bfd_vma p_highpc" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  bfd_vma bVar2;\n  Sym *child;\n  ulong uVar3;\n  \n  if ((debug_level._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",parent->name,p_lowpc,p_highpc);\n  }\n  uVar3 = p_lowpc + 3 & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (p_highpc <= uVar3) {\n        return;\n      }\n      bVar2 = (*core_bfd->xvec->bfd_getx32)\n                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space));\n      if ((bVar2 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar3 = uVar3 + 4;\n    }\n    if ((debug_level._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar3);\n    }\n    bVar2 = (uVar3 - 0x20000000) + ((ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000);\n    iVar1 = hist_check_address((uint)bVar2);\n    if ((iVar1 == 0) || (child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0)) {\nLAB_0010dc50:\n      if ((debug_level._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((debug_level._1_1_ & 1) == 0) {\n      if (bVar2 != child->addr) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name);\n      if (child->addr != bVar2) goto LAB_0010dc50;\n    }\n    uVar3 = uVar3 + 4;\n    arc_add(parent,child,0);\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "bfd_vma bVar2;" type_identifier identifier ;) (declaration "Sym *child;" type_identifier (pointer_declarator "*child" * identifier) ;) (declaration "ulong uVar3;" type_identifier identifier ;) (if_statement "if ((debug_level._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",parent->name,p_lowpc,p_highpc);\n  }" if (parenthesized_expression "((debug_level._1_1_ & 1) != 0)" ( (binary_expression "(debug_level._1_1_ & 1) != 0" (parenthesized_expression "(debug_level._1_1_ & 1)" ( (binary_expression "debug_level._1_1_ & 1" (field_expression "debug_level._1_1_" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",parent->name,p_lowpc,p_highpc);\n  }" { (expression_statement "printf("[find_call] %s: 0x%lx to 0x%lx\n",parent->name,p_lowpc,p_highpc);" (call_expression "printf("[find_call] %s: 0x%lx to 0x%lx\n",parent->name,p_lowpc,p_highpc)" identifier (argument_list "("[find_call] %s: 0x%lx to 0x%lx\n",parent->name,p_lowpc,p_highpc)" ( (string_literal ""[find_call] %s: 0x%lx to 0x%lx\n"" " string_content escape_sequence ") , (field_expression "parent->name" identifier -> field_identifier) , identifier , identifier ))) ;) })) (expression_statement "uVar3 = p_lowpc + 3 & 0xfffffffffffffffc;" (assignment_expression "uVar3 = p_lowpc + 3 & 0xfffffffffffffffc" identifier = (binary_expression "p_lowpc + 3 & 0xfffffffffffffffc" (binary_expression "p_lowpc + 3" identifier + number_literal) & number_literal)) ;) (do_statement "do {\n    while( true ) {\n      if (p_highpc <= uVar3) {\n        return;\n      }\n      bVar2 = (*core_bfd->xvec->bfd_getx32)\n                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space));\n      if ((bVar2 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar3 = uVar3 + 4;\n    }\n    if ((debug_level._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar3);\n    }\n    bVar2 = (uVar3 - 0x20000000) + ((ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000);\n    iVar1 = hist_check_address((uint)bVar2);\n    if ((iVar1 == 0) || (child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0)) {\nLAB_0010dc50:\n      if ((debug_level._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((debug_level._1_1_ & 1) == 0) {\n      if (bVar2 != child->addr) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name);\n      if (child->addr != bVar2) goto LAB_0010dc50;\n    }\n    uVar3 = uVar3 + 4;\n    arc_add(parent,child,0);\n  } while( true );" do (compound_statement "{\n    while( true ) {\n      if (p_highpc <= uVar3) {\n        return;\n      }\n      bVar2 = (*core_bfd->xvec->bfd_getx32)\n                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space));\n      if ((bVar2 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar3 = uVar3 + 4;\n    }\n    if ((debug_level._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar3);\n    }\n    bVar2 = (uVar3 - 0x20000000) + ((ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000);\n    iVar1 = hist_check_address((uint)bVar2);\n    if ((iVar1 == 0) || (child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0)) {\nLAB_0010dc50:\n      if ((debug_level._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((debug_level._1_1_ & 1) == 0) {\n      if (bVar2 != child->addr) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name);\n      if (child->addr != bVar2) goto LAB_0010dc50;\n    }\n    uVar3 = uVar3 + 4;\n    arc_add(parent,child,0);\n  }" { (while_statement "while( true ) {\n      if (p_highpc <= uVar3) {\n        return;\n      }\n      bVar2 = (*core_bfd->xvec->bfd_getx32)\n                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space));\n      if ((bVar2 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar3 = uVar3 + 4;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (p_highpc <= uVar3) {\n        return;\n      }\n      bVar2 = (*core_bfd->xvec->bfd_getx32)\n                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space));\n      if ((bVar2 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar3 = uVar3 + 4;\n    }" { (if_statement "if (p_highpc <= uVar3) {\n        return;\n      }" if (parenthesized_expression "(p_highpc <= uVar3)" ( (binary_expression "p_highpc <= uVar3" identifier <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "bVar2 = (*core_bfd->xvec->bfd_getx32)\n                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space));" (assignment_expression "bVar2 = (*core_bfd->xvec->bfd_getx32)\n                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space))" identifier = (call_expression "(*core_bfd->xvec->bfd_getx32)\n                        ((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space))" (parenthesized_expression "(*core_bfd->xvec->bfd_getx32)" ( (pointer_expression "*core_bfd->xvec->bfd_getx32" * (field_expression "core_bfd->xvec->bfd_getx32" (field_expression "core_bfd->xvec" identifier -> field_identifier) -> field_identifier)) )) (argument_list "((void *)((uVar3 - core_text_sect->vma) + (long)core_text_space))" ( (cast_expression "(void *)((uVar3 - core_text_sect->vma) + (long)core_text_space)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uVar3 - core_text_sect->vma) + (long)core_text_space)" ( (binary_expression "(uVar3 - core_text_sect->vma) + (long)core_text_space" (parenthesized_expression "(uVar3 - core_text_sect->vma)" ( (binary_expression "uVar3 - core_text_sect->vma" identifier - (field_expression "core_text_sect->vma" identifier -> field_identifier)) )) + (cast_expression "(long)core_text_space" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) )))) ;) (if_statement "if ((bVar2 & 0xc0000000) != 0) break;" if (parenthesized_expression "((bVar2 & 0xc0000000) != 0)" ( (binary_expression "(bVar2 & 0xc0000000) != 0" (parenthesized_expression "(bVar2 & 0xc0000000)" ( (binary_expression "bVar2 & 0xc0000000" identifier & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_0010dc68:\n      uVar3 = uVar3 + 4;" statement_identifier : (expression_statement "uVar3 = uVar3 + 4;" (assignment_expression "uVar3 = uVar3 + 4" identifier = (binary_expression "uVar3 + 4" identifier + number_literal)) ;)) })) (if_statement "if ((debug_level._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar3);\n    }" if (parenthesized_expression "((debug_level._1_1_ & 1) != 0)" ( (binary_expression "(debug_level._1_1_ & 1) != 0" (parenthesized_expression "(debug_level._1_1_ & 1)" ( (binary_expression "debug_level._1_1_ & 1" (field_expression "debug_level._1_1_" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n      printf("[find_call] 0x%lx: callf",uVar3);\n    }" { (expression_statement "printf("[find_call] 0x%lx: callf",uVar3);" (call_expression "printf("[find_call] 0x%lx: callf",uVar3)" identifier (argument_list "("[find_call] 0x%lx: callf",uVar3)" ( (string_literal ""[find_call] 0x%lx: callf"" " string_content ") , identifier ))) ;) })) (expression_statement "bVar2 = (uVar3 - 0x20000000) + ((ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000);" (assignment_expression "bVar2 = (uVar3 - 0x20000000) + ((ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000)" identifier = (binary_expression "(uVar3 - 0x20000000) + ((ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000)" (parenthesized_expression "(uVar3 - 0x20000000)" ( (binary_expression "uVar3 - 0x20000000" identifier - number_literal) )) + (parenthesized_expression "((ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000)" ( (binary_expression "(ulong)((uint)bVar2 & 0x3fffffff) ^ 0x20000000" (call_expression "(ulong)((uint)bVar2 & 0x3fffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)bVar2 & 0x3fffffff)" ( (binary_expression "(uint)bVar2 & 0x3fffffff" (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) ^ number_literal) )))) ;) (expression_statement "iVar1 = hist_check_address((uint)bVar2);" (assignment_expression "iVar1 = hist_check_address((uint)bVar2)" identifier = (call_expression "hist_check_address((uint)bVar2)" identifier (argument_list "((uint)bVar2)" ( (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) )))) ;) (if_statement "if ((iVar1 == 0) || (child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0)) {\nLAB_0010dc50:\n      if ((debug_level._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }" if (parenthesized_expression "((iVar1 == 0) || (child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0))" ( (binary_expression "(iVar1 == 0) || (child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0)" (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) || (parenthesized_expression "(child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0)" ( (comma_expression "child = sym_lookup(&symtab,bVar2), child == (Sym *)0x0" (assignment_expression "child = sym_lookup(&symtab,bVar2)" identifier = (call_expression "sym_lookup(&symtab,bVar2)" identifier (argument_list "(&symtab,bVar2)" ( (pointer_expression "&symtab" & identifier) , identifier )))) , (binary_expression "child == (Sym *)0x0" identifier == (cast_expression "(Sym *)0x0" ( (type_descriptor "Sym *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\nLAB_0010dc50:\n      if ((debug_level._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }" { (labeled_statement "LAB_0010dc50:\n      if ((debug_level._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }" statement_identifier : (if_statement "if ((debug_level._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }" if (parenthesized_expression "((debug_level._1_1_ & 1) != 0)" ( (binary_expression "(debug_level._1_1_ & 1) != 0" (parenthesized_expression "(debug_level._1_1_ & 1)" ( (binary_expression "debug_level._1_1_ & 1" (field_expression "debug_level._1_1_" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        puts("\tbut it\'s a botch");\n      }" { (expression_statement "puts("\tbut it\'s a botch");" (call_expression "puts("\tbut it\'s a botch")" identifier (argument_list "("\tbut it\'s a botch")" ( (string_literal ""\tbut it\'s a botch"" " escape_sequence string_content escape_sequence string_content ") ))) ;) }))) (goto_statement "goto LAB_0010dc68;" goto statement_identifier ;) })) (if_statement "if ((debug_level._1_1_ & 1) == 0) {\n      if (bVar2 != child->addr) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name);\n      if (child->addr != bVar2) goto LAB_0010dc50;\n    }" if (parenthesized_expression "((debug_level._1_1_ & 1) == 0)" ( (binary_expression "(debug_level._1_1_ & 1) == 0" (parenthesized_expression "(debug_level._1_1_ & 1)" ( (binary_expression "debug_level._1_1_ & 1" (field_expression "debug_level._1_1_" identifier . field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (bVar2 != child->addr) goto LAB_0010dc68;\n    }" { (if_statement "if (bVar2 != child->addr) goto LAB_0010dc68;" if (parenthesized_expression "(bVar2 != child->addr)" ( (binary_expression "bVar2 != child->addr" identifier != (field_expression "child->addr" identifier -> field_identifier)) )) (goto_statement "goto LAB_0010dc68;" goto statement_identifier ;)) }) (else_clause "else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name);\n      if (child->addr != bVar2) goto LAB_0010dc50;\n    }" else (compound_statement "{\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name);\n      if (child->addr != bVar2) goto LAB_0010dc50;\n    }" { (expression_statement "printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name);" (call_expression "printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name)" identifier (argument_list "("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",bVar2,child->name)" ( (string_literal ""\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n"" " escape_sequence string_content escape_sequence ") , identifier , (field_expression "child->name" identifier -> field_identifier) ))) ;) (if_statement "if (child->addr != bVar2) goto LAB_0010dc50;" if (parenthesized_expression "(child->addr != bVar2)" ( (binary_expression "child->addr != bVar2" (field_expression "child->addr" identifier -> field_identifier) != identifier) )) (goto_statement "goto LAB_0010dc50;" goto statement_identifier ;)) }))) (expression_statement "uVar3 = uVar3 + 4;" (assignment_expression "uVar3 = uVar3 + 4" identifier = (binary_expression "uVar3 + 4" identifier + number_literal)) ;) (expression_statement "arc_add(parent,child,0);" (call_expression "arc_add(parent,child,0)" identifier (argument_list "(parent,child,0)" ( identifier , identifier , number_literal ))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "void FUN_0010dbf0(long param_1,long param_2,ulong param_3)\n\n{\n  ulong uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong *puVar4;\n  ulong uVar5;\n  \n  if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }\n  uVar5 = param_2 + 3U & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );\n}\n\n" (function_definition "void FUN_0010dbf0(long param_1,long param_2,ulong param_3)\n\n{\n  ulong uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong *puVar4;\n  ulong uVar5;\n  \n  if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }\n  uVar5 = param_2 + 3U & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );\n}" primitive_type (function_declarator "FUN_0010dbf0(long param_1,long param_2,ulong param_3)" identifier (parameter_list "(long param_1,long param_2,ulong param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_3" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong *puVar4;\n  ulong uVar5;\n  \n  if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }\n  uVar5 = param_2 + 3U & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (if_statement "if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }" if (parenthesized_expression "((DAT_001195e4._1_1_ & 1) != 0)" ( (binary_expression "(DAT_001195e4._1_1_ & 1) != 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" ( (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }" { (expression_statement "printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);" (call_expression "printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3)" identifier (argument_list "("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3)" ( (string_literal ""[find_call] %s: 0x%lx to 0x%lx\n"" " string_content escape_sequence ") , (pointer_expression "*(undefined8 *)(param_1 + 0x10)" * (cast_expression "(undefined8 *)(param_1 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) , identifier , identifier ))) ;) })) (expression_statement "uVar5 = param_2 + 3U & 0xfffffffffffffffc;" (assignment_expression "uVar5 = param_2 + 3U & 0xfffffffffffffffc" identifier = (binary_expression "param_2 + 3U & 0xfffffffffffffffc" (binary_expression "param_2 + 3U" identifier + number_literal) & number_literal)) ;) (do_statement "do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );" do (compound_statement "{\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  }" { (while_statement "while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }" { (if_statement "if (param_3 <= uVar5) {\n        return;\n      }" if (parenthesized_expression "(param_3 <= uVar5)" ( (binary_expression "param_3 <= uVar5" identifier <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);" (assignment_expression "uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0)" identifier = (call_expression "(**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0)" (parenthesized_expression "(**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))" ( (pointer_expression "**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38)" * (pointer_expression "*(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38)" * (cast_expression "(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(DAT_00119ad8 + 8) + 0x38)" ( (binary_expression "*(long *)(DAT_00119ad8 + 8) + 0x38" (pointer_expression "*(long *)(DAT_00119ad8 + 8)" * (cast_expression "(long *)(DAT_00119ad8 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00119ad8 + 8)" ( (binary_expression "DAT_00119ad8 + 8" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0)" ( (binary_expression "(uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0" (parenthesized_expression "(uVar5 - *(long *)(DAT_00119af8 + 0x28))" ( (binary_expression "uVar5 - *(long *)(DAT_00119af8 + 0x28)" identifier - (pointer_expression "*(long *)(DAT_00119af8 + 0x28)" * (cast_expression "(long *)(DAT_00119af8 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00119af8 + 0x28)" ( (binary_expression "DAT_00119af8 + 0x28" identifier + number_literal) ))))) )) + identifier) )))) ;) (if_statement "if ((uVar3 & 0xc0000000) != 0) break;" if (parenthesized_expression "((uVar3 & 0xc0000000) != 0)" ( (binary_expression "(uVar3 & 0xc0000000) != 0" (parenthesized_expression "(uVar3 & 0xc0000000)" ( (binary_expression "uVar3 & 0xc0000000" identifier & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_0010dc68:\n      uVar5 = uVar5 + 4;" statement_identifier : (expression_statement "uVar5 = uVar5 + 4;" (assignment_expression "uVar5 = uVar5 + 4" identifier = (binary_expression "uVar5 + 4" identifier + number_literal)) ;)) })) (if_statement "if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }" if (parenthesized_expression "((DAT_001195e4._1_1_ & 1) != 0)" ( (binary_expression "(DAT_001195e4._1_1_ & 1) != 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" ( (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }" { (expression_statement "printf("[find_call] 0x%lx: callf",uVar5);" (call_expression "printf("[find_call] 0x%lx: callf",uVar5)" identifier (argument_list "("[find_call] 0x%lx: callf",uVar5)" ( (string_literal ""[find_call] 0x%lx: callf"" " string_content ") , identifier ))) ;) })) (expression_statement "uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);" (assignment_expression "uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000)" identifier = (binary_expression "(uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000)" (parenthesized_expression "(uVar5 - 0x20000000)" ( (binary_expression "uVar5 - 0x20000000" identifier - number_literal) )) + (parenthesized_expression "((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000)" ( (binary_expression "(ulong)(uVar3 & 0x3fffffff) ^ 0x20000000" (call_expression "(ulong)(uVar3 & 0x3fffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar3 & 0x3fffffff)" ( (binary_expression "uVar3 & 0x3fffffff" identifier & number_literal) ))) ^ number_literal) )))) ;) (expression_statement "iVar2 = FUN_0010b480(uVar1 & 0xffffffff);" (assignment_expression "iVar2 = FUN_0010b480(uVar1 & 0xffffffff)" identifier = (call_expression "FUN_0010b480(uVar1 & 0xffffffff)" identifier (argument_list "(uVar1 & 0xffffffff)" ( (binary_expression "uVar1 & 0xffffffff" identifier & number_literal) )))) ;) (if_statement "if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }" if (parenthesized_expression "((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0))" ( (binary_expression "(iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)" (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) || (parenthesized_expression "(puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)" ( (comma_expression "puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0" (assignment_expression "puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1)" identifier = (cast_expression "(ulong *)FUN_0010c540(&DAT_00119b30,uVar1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0010c540(&DAT_00119b30,uVar1)" identifier (argument_list "(&DAT_00119b30,uVar1)" ( (pointer_expression "&DAT_00119b30" & identifier) , identifier ))))) , (binary_expression "puVar4 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }" { (labeled_statement "LAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }" statement_identifier : (if_statement "if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }" if (parenthesized_expression "((DAT_001195e4._1_1_ & 1) != 0)" ( (binary_expression "(DAT_001195e4._1_1_ & 1) != 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" ( (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        puts("\tbut it\'s a botch");\n      }" { (expression_statement "puts("\tbut it\'s a botch");" (call_expression "puts("\tbut it\'s a botch")" identifier (argument_list "("\tbut it\'s a botch")" ( (string_literal ""\tbut it\'s a botch"" " escape_sequence string_content escape_sequence string_content ") ))) ;) }))) (goto_statement "goto LAB_0010dc68;" goto statement_identifier ;) })) (if_statement "if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }" if (parenthesized_expression "((DAT_001195e4._1_1_ & 1) == 0)" ( (binary_expression "(DAT_001195e4._1_1_ & 1) == 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" ( (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" identifier . field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }" { (if_statement "if (uVar1 != *puVar4) goto LAB_0010dc68;" if (parenthesized_expression "(uVar1 != *puVar4)" ( (binary_expression "uVar1 != *puVar4" identifier != (pointer_expression "*puVar4" * identifier)) )) (goto_statement "goto LAB_0010dc68;" goto statement_identifier ;)) }) (else_clause "else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }" else (compound_statement "{\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }" { (expression_statement "printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);" (call_expression "printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2])" identifier (argument_list "("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2])" ( (string_literal ""\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n"" " escape_sequence string_content escape_sequence ") , identifier , (subscript_expression "puVar4[2]" identifier [ number_literal ]) ))) ;) (if_statement "if (*puVar4 != uVar1) goto LAB_0010dc50;" if (parenthesized_expression "(*puVar4 != uVar1)" ( (binary_expression "*puVar4 != uVar1" (pointer_expression "*puVar4" * identifier) != identifier) )) (goto_statement "goto LAB_0010dc50;" goto statement_identifier ;)) }))) (expression_statement "uVar5 = uVar5 + 4;" (assignment_expression "uVar5 = uVar5 + 4" identifier = (binary_expression "uVar5 + 4" identifier + number_literal)) ;) (expression_statement "FUN_00104520(param_1,puVar4,0);" (call_expression "FUN_00104520(param_1,puVar4,0)" identifier (argument_list "(param_1,puVar4,0)" ( identifier , identifier , number_literal ))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (field_expression IDENT . field_identifier) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) & LIT)) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return ;) })) (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 * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (break_statement break ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (field_expression IDENT . field_identifier) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) + (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT & LIT) ))) ^ LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT ))))) , (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) ))) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (field_expression IDENT . field_identifier) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " escape_sequence string_content escape_sequence string_content ") ))) ;) }))) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (field_expression IDENT . field_identifier) & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * IDENT)) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " escape_sequence string_content escape_sequence ") , IDENT , (subscript_expression IDENT [ LIT ]) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != IDENT) )) (goto_statement goto statement_identifier ;)) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "void FUN_0010dbf0(long param_1,long param_2,ulong param_3)\n\n{\n  ulong uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong *puVar4;\n  ulong uVar5;\n  \n  if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }\n  uVar5 = param_2 + 3U & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );\n}" (primitive_type "void") (function_declarator "FUN_0010dbf0(long param_1,long param_2,ulong param_3)" (identifier "FUN_0010dbf0") (parameter_list "(long param_1,long param_2,ulong param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "ulong param_3" (type_identifier "ulong") (identifier "param_3")) () ")"))) (compound_statement "{\n  ulong uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong *puVar4;\n  ulong uVar5;\n  \n  if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }\n  uVar5 = param_2 + 3U & 0xfffffffffffffffc;\n  do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "ulong *puVar4;" (type_identifier "ulong") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (if_statement "if ((DAT_001195e4._1_1_ & 1) != 0) {\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }" (if "if") (parenthesized_expression "((DAT_001195e4._1_1_ & 1) != 0)" (( "(") (binary_expression "(DAT_001195e4._1_1_ & 1) != 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" (( "(") (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" (identifier "DAT_001195e4") (. ".") (field_identifier "_1_1_")) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);\n  }" ({ "{") (expression_statement "printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);" (call_expression "printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3)" (identifier "printf") (argument_list "("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3)" (( "(") (string_literal ""[find_call] %s: 0x%lx to 0x%lx\n"" (" """) (string_content "[find_call] %s: 0x%lx to 0x%lx") (escape_sequence "\n") (" """)) (, ",") (pointer_expression "*(undefined8 *)(param_1 + 0x10)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar5 = param_2 + 3U & 0xfffffffffffffffc;" (assignment_expression "uVar5 = param_2 + 3U & 0xfffffffffffffffc" (identifier "uVar5") (= "=") (binary_expression "param_2 + 3U & 0xfffffffffffffffc" (binary_expression "param_2 + 3U" (identifier "param_2") (+ "+") (number_literal "3U")) (& "&") (number_literal "0xfffffffffffffffc"))) (; ";")) (do_statement "do {\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  } while( true );" (do "do") (compound_statement "{\n    while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }\n    if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }\n    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);\n    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);\n    if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }\n    if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }\n    uVar5 = uVar5 + 4;\n    FUN_00104520(param_1,puVar4,0);\n  }" ({ "{") (while_statement "while( true ) {\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      if (param_3 <= uVar5) {\n        return;\n      }\n      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);\n      if ((uVar3 & 0xc0000000) != 0) break;\nLAB_0010dc68:\n      uVar5 = uVar5 + 4;\n    }" ({ "{") (if_statement "if (param_3 <= uVar5) {\n        return;\n      }" (if "if") (parenthesized_expression "(param_3 <= uVar5)" (( "(") (binary_expression "param_3 <= uVar5" (identifier "param_3") (<= "<=") (identifier "uVar5")) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);" (assignment_expression "uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0)" (identifier "uVar3") (= "=") (call_expression "(**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))\n                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0)" (parenthesized_expression "(**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))" (( "(") (pointer_expression "**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38)" (* "*") (pointer_expression "*(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38)" (* "*") (cast_expression "(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)(DAT_00119ad8 + 8) + 0x38)" (( "(") (binary_expression "*(long *)(DAT_00119ad8 + 8) + 0x38" (pointer_expression "*(long *)(DAT_00119ad8 + 8)" (* "*") (cast_expression "(long *)(DAT_00119ad8 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_00119ad8 + 8)" (( "(") (binary_expression "DAT_00119ad8 + 8" (identifier "DAT_00119ad8") (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "0x38")) () ")"))))) () ")")) (argument_list "((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0)" (( "(") (binary_expression "(uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0" (parenthesized_expression "(uVar5 - *(long *)(DAT_00119af8 + 0x28))" (( "(") (binary_expression "uVar5 - *(long *)(DAT_00119af8 + 0x28)" (identifier "uVar5") (- "-") (pointer_expression "*(long *)(DAT_00119af8 + 0x28)" (* "*") (cast_expression "(long *)(DAT_00119af8 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_00119af8 + 0x28)" (( "(") (binary_expression "DAT_00119af8 + 0x28" (identifier "DAT_00119af8") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (+ "+") (identifier "DAT_00119ae0")) () ")")))) (; ";")) (if_statement "if ((uVar3 & 0xc0000000) != 0) break;" (if "if") (parenthesized_expression "((uVar3 & 0xc0000000) != 0)" (( "(") (binary_expression "(uVar3 & 0xc0000000) != 0" (parenthesized_expression "(uVar3 & 0xc0000000)" (( "(") (binary_expression "uVar3 & 0xc0000000" (identifier "uVar3") (& "&") (number_literal "0xc0000000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (labeled_statement "LAB_0010dc68:\n      uVar5 = uVar5 + 4;" (statement_identifier "LAB_0010dc68") (: ":") (expression_statement "uVar5 = uVar5 + 4;" (assignment_expression "uVar5 = uVar5 + 4" (identifier "uVar5") (= "=") (binary_expression "uVar5 + 4" (identifier "uVar5") (+ "+") (number_literal "4"))) (; ";"))) (} "}"))) (if_statement "if ((DAT_001195e4._1_1_ & 1) != 0) {\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }" (if "if") (parenthesized_expression "((DAT_001195e4._1_1_ & 1) != 0)" (( "(") (binary_expression "(DAT_001195e4._1_1_ & 1) != 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" (( "(") (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" (identifier "DAT_001195e4") (. ".") (field_identifier "_1_1_")) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      printf("[find_call] 0x%lx: callf",uVar5);\n    }" ({ "{") (expression_statement "printf("[find_call] 0x%lx: callf",uVar5);" (call_expression "printf("[find_call] 0x%lx: callf",uVar5)" (identifier "printf") (argument_list "("[find_call] 0x%lx: callf",uVar5)" (( "(") (string_literal ""[find_call] 0x%lx: callf"" (" """) (string_content "[find_call] 0x%lx: callf") (" """)) (, ",") (identifier "uVar5") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);" (assignment_expression "uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000)" (identifier "uVar1") (= "=") (binary_expression "(uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000)" (parenthesized_expression "(uVar5 - 0x20000000)" (( "(") (binary_expression "uVar5 - 0x20000000" (identifier "uVar5") (- "-") (number_literal "0x20000000")) () ")")) (+ "+") (parenthesized_expression "((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000)" (( "(") (binary_expression "(ulong)(uVar3 & 0x3fffffff) ^ 0x20000000" (call_expression "(ulong)(uVar3 & 0x3fffffff)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar3 & 0x3fffffff)" (( "(") (binary_expression "uVar3 & 0x3fffffff" (identifier "uVar3") (& "&") (number_literal "0x3fffffff")) () ")"))) (^ "^") (number_literal "0x20000000")) () ")")))) (; ";")) (expression_statement "iVar2 = FUN_0010b480(uVar1 & 0xffffffff);" (assignment_expression "iVar2 = FUN_0010b480(uVar1 & 0xffffffff)" (identifier "iVar2") (= "=") (call_expression "FUN_0010b480(uVar1 & 0xffffffff)" (identifier "FUN_0010b480") (argument_list "(uVar1 & 0xffffffff)" (( "(") (binary_expression "uVar1 & 0xffffffff" (identifier "uVar1") (& "&") (number_literal "0xffffffff")) () ")")))) (; ";")) (if_statement "if ((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }" (if "if") (parenthesized_expression "((iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0))" (( "(") (binary_expression "(iVar2 == 0) ||\n       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)" (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)" (( "(") (comma_expression "puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0" (assignment_expression "puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1)" (identifier "puVar4") (= "=") (cast_expression "(ulong *)FUN_0010c540(&DAT_00119b30,uVar1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0010c540(&DAT_00119b30,uVar1)" (identifier "FUN_0010c540") (argument_list "(&DAT_00119b30,uVar1)" (( "(") (pointer_expression "&DAT_00119b30" (& "&") (identifier "DAT_00119b30")) (, ",") (identifier "uVar1") () ")"))))) (, ",") (binary_expression "puVar4 == (ulong *)0x0" (identifier "puVar4") (== "==") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) () ")"))) () ")")) (compound_statement "{\nLAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }\n      goto LAB_0010dc68;\n    }" ({ "{") (labeled_statement "LAB_0010dc50:\n      if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }" (statement_identifier "LAB_0010dc50") (: ":") (if_statement "if ((DAT_001195e4._1_1_ & 1) != 0) {\n        puts("\tbut it\'s a botch");\n      }" (if "if") (parenthesized_expression "((DAT_001195e4._1_1_ & 1) != 0)" (( "(") (binary_expression "(DAT_001195e4._1_1_ & 1) != 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" (( "(") (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" (identifier "DAT_001195e4") (. ".") (field_identifier "_1_1_")) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        puts("\tbut it\'s a botch");\n      }" ({ "{") (expression_statement "puts("\tbut it\'s a botch");" (call_expression "puts("\tbut it\'s a botch")" (identifier "puts") (argument_list "("\tbut it\'s a botch")" (( "(") (string_literal ""\tbut it\'s a botch"" (" """) (escape_sequence "\t") (string_content "but it") (escape_sequence "\'") (string_content "s a botch") (" """)) () ")"))) (; ";")) (} "}")))) (goto_statement "goto LAB_0010dc68;" (goto "goto") (statement_identifier "LAB_0010dc68") (; ";")) (} "}"))) (if_statement "if ((DAT_001195e4._1_1_ & 1) == 0) {\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }\n    else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }" (if "if") (parenthesized_expression "((DAT_001195e4._1_1_ & 1) == 0)" (( "(") (binary_expression "(DAT_001195e4._1_1_ & 1) == 0" (parenthesized_expression "(DAT_001195e4._1_1_ & 1)" (( "(") (binary_expression "DAT_001195e4._1_1_ & 1" (field_expression "DAT_001195e4._1_1_" (identifier "DAT_001195e4") (. ".") (field_identifier "_1_1_")) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (uVar1 != *puVar4) goto LAB_0010dc68;\n    }" ({ "{") (if_statement "if (uVar1 != *puVar4) goto LAB_0010dc68;" (if "if") (parenthesized_expression "(uVar1 != *puVar4)" (( "(") (binary_expression "uVar1 != *puVar4" (identifier "uVar1") (!= "!=") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))) () ")")) (goto_statement "goto LAB_0010dc68;" (goto "goto") (statement_identifier "LAB_0010dc68") (; ";"))) (} "}")) (else_clause "else {\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }" (else "else") (compound_statement "{\n      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);\n      if (*puVar4 != uVar1) goto LAB_0010dc50;\n    }" ({ "{") (expression_statement "printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);" (call_expression "printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2])" (identifier "printf") (argument_list "("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2])" (( "(") (string_literal ""\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n"" (" """) (escape_sequence "\t") (string_content "dest_pc=0x%lx, (name=%s, addr=0x%lx)") (escape_sequence "\n") (" """)) (, ",") (identifier "uVar1") (, ",") (subscript_expression "puVar4[2]" (identifier "puVar4") ([ "[") (number_literal "2") (] "]")) () ")"))) (; ";")) (if_statement "if (*puVar4 != uVar1) goto LAB_0010dc50;" (if "if") (parenthesized_expression "(*puVar4 != uVar1)" (( "(") (binary_expression "*puVar4 != uVar1" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (!= "!=") (identifier "uVar1")) () ")")) (goto_statement "goto LAB_0010dc50;" (goto "goto") (statement_identifier "LAB_0010dc50") (; ";"))) (} "}")))) (expression_statement "uVar5 = uVar5 + 4;" (assignment_expression "uVar5 = uVar5 + 4" (identifier "uVar5") (= "=") (binary_expression "uVar5 + 4" (identifier "uVar5") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "FUN_00104520(param_1,puVar4,0);" (call_expression "FUN_00104520(param_1,puVar4,0)" (identifier "FUN_00104520") (argument_list "(param_1,puVar4,0)" (( "(") (identifier "param_1") (, ",") (identifier "puVar4") (, ",") (number_literal "0") () ")"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

void function_1(type_1 *parent,type_2 var_2,type_2 var_3)

{
  int var_7;
  type_2 var_5;
  type_1 *var_9;
  type_3 var_4;
  
  if ((debug_level._1_1_ & 1) != 0) {
    var_1("[find_call] %s: 0x%lx to 0x%lx\n",parent->name,var_2,var_3);
  }
  var_4 = var_2 + 3 & 0xfffffffffffffffc;
  do {
    while( true ) {
      if (var_3 <= var_4) {
        return;
      }
      var_5 = (*core_bfd->xvec->bfd_getx32)
                        ((void *)((var_4 - core_text_sect->vma) + (long)core_text_space));
      if ((var_5 & 0xc0000000) != 0) break;
LAB_0010dc68:
      var_4 = var_4 + 4;
    }
    if ((debug_level._1_1_ & 1) != 0) {
      var_1("[find_call] 0x%lx: callf",var_4);
    }
    var_5 = (var_4 - 0x20000000) + ((type_3)((type_4)var_5 & 0x3fffffff) ^ 0x20000000);
    var_7 = var_6((type_4)var_5);
    if ((var_7 == 0) || (var_9 = var_8(&symtab,var_5), var_9 == (type_1 *)0x0)) {
LAB_0010dc50:
      if ((debug_level._1_1_ & 1) != 0) {
        var_10("\tbut it\'s a botch");
      }
      goto LAB_0010dc68;
    }
    if ((debug_level._1_1_ & 1) == 0) {
      if (var_5 != var_9->addr) goto LAB_0010dc68;
    }
    else {
      var_1("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",var_5,var_9->name);
      if (var_9->addr != var_5) goto LAB_0010dc50;
    }
    var_4 = var_4 + 4;
    var_11(parent,var_9,0);
  } while( true );
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence)) (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))))) (identifier) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_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: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (break_statement)) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier))))) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (escape_sequence) (string_content) (escape_sequence) (string_content)))))))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier)))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (escape_sequence) (string_content) (escape_sequence)) (identifier) (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))) consequence: (goto_statement label: (statement_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) (number_literal))))) condition: (parenthesized_expression (true))))))

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

{
  ulong uVar1;
  int iVar2;
  uint uVar3;
  ulong *puVar4;
  ulong uVar5;
  
  if ((DAT_001195e4._1_1_ & 1) != 0) {
    printf("[find_call] %s: 0x%lx to 0x%lx\n",*(undefined8 *)(param_1 + 0x10),param_2,param_3);
  }
  uVar5 = param_2 + 3U & 0xfffffffffffffffc;
  do {
    while( true ) {
      if (param_3 <= uVar5) {
        return;
      }
      uVar3 = (**(code **)(*(long *)(DAT_00119ad8 + 8) + 0x38))
                        ((uVar5 - *(long *)(DAT_00119af8 + 0x28)) + DAT_00119ae0);
      if ((uVar3 & 0xc0000000) != 0) break;
LAB_0010dc68:
      uVar5 = uVar5 + 4;
    }
    if ((DAT_001195e4._1_1_ & 1) != 0) {
      printf("[find_call] 0x%lx: callf",uVar5);
    }
    uVar1 = (uVar5 - 0x20000000) + ((ulong)(uVar3 & 0x3fffffff) ^ 0x20000000);
    iVar2 = FUN_0010b480(uVar1 & 0xffffffff);
    if ((iVar2 == 0) ||
       (puVar4 = (ulong *)FUN_0010c540(&DAT_00119b30,uVar1), puVar4 == (ulong *)0x0)) {
LAB_0010dc50:
      if ((DAT_001195e4._1_1_ & 1) != 0) {
        puts("\tbut it\'s a botch");
      }
      goto LAB_0010dc68;
    }
    if ((DAT_001195e4._1_1_ & 1) == 0) {
      if (uVar1 != *puVar4) goto LAB_0010dc68;
    }
    else {
      printf("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n",uVar1,puVar4[2]);
      if (*puVar4 != uVar1) goto LAB_0010dc50;
    }
    uVar5 = uVar5 + 4;
    FUN_00104520(param_1,puVar4,0);
  } while( true );
}

