
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "STT": Some values do not have unique names */
/* DWARF original prototype: uint64_t value_from_output_section(Loadaddr_expression * this,
   Expression_eval_info * eei, Output_section * os) */

uint64_t __thiscall
gold::Loadaddr_expression::value_from_output_section
          (Loadaddr_expression *this,Expression_eval_info *eei,Output_section *os)

{
  _func_int_varargs *UNRECOVERED_JUMPTABLE;
  byte bVar1;
  int iVar2;
  undefined4 extraout_EDX;
  
  UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[4];
  if (UNRECOVERED_JUMPTABLE == Output_section::do_has_load_address) {
    bVar1 = (byte)os->field_0x90 >> 7;
  }
  else {
    iVar2 = (*UNRECOVERED_JUMPTABLE)(os);
    bVar1 = (byte)iVar2;
  }
  if (bVar1 == 0) {
    if (eei->result_section_pointer != (Output_section **)0x0) {
      *eei->result_section_pointer = os;
    }
    if (((os->super_Output_data).field_0x1c & 1) != 0) {
      return (os->super_Output_data).address_;
    }
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/output.h",0xc5,"address");
  }
  UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[5];
  if (UNRECOVERED_JUMPTABLE != Output_section::do_load_address) {
                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    iVar2 = (*UNRECOVERED_JUMPTABLE)();
    return CONCAT44(extraout_EDX,iVar2);
  }
  if ((char)os->field_0x90 < '\0') {
    return os->load_address_;
  }
                    /* WARNING: Subroutine does not return */
  do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");
}



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

undefined8 FUN_001bcc10(undefined4 param_1,int param_2,int *param_3)

{
  undefined4 *puVar1;
  byte bVar2;
  undefined8 uVar3;
  
  if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {
    bVar2 = *(byte *)(param_3 + 0x24) >> 7;
  }
  else {
    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);
  }
  if (bVar2 == 0) {
    puVar1 = *(undefined4 **)(param_2 + 0x18);
    if (puVar1 != (undefined4 *)0x0) {
      *puVar1 = param_3;
    }
    if ((*(byte *)(param_3 + 7) & 1) != 0) {
      return *(undefined8 *)(param_3 + 1);
    }
                    /* WARNING: Subroutine does not return */
    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);
  }
  if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {
                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    uVar3 = (**(code **)(*param_3 + 0x14))();
    return uVar3;
  }
  if ((char)param_3[0x24] < '\0') {
    return *(undefined8 *)(param_3 + 0xd);
  }
                    /* WARNING: Subroutine does not return */
  FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);
}


PUSH EDI
PUSH ESI
PUSH EBX
MOV ESI,dword ptr [ESP + 0x18]
CALL 0x00035840
ADD EBX,0x1d23e4
MOV EDI,dword ptr [ESP + 0x14]
MOV EAX,dword ptr [ESI]
MOV EAX,dword ptr [EAX + 0x10]
LEA EDX,[EBX + 0xffd15930]
CMP EAX,EDX
JNZ 0x001bcc88
MOVZX EAX,byte ptr [ESI + 0x90]
SHR AL,0x7
TEST AL,AL
JNZ 0x001bcc60
MOV EAX,dword ptr [EDI + 0x18]
TEST EAX,EAX
JZ 0x001bcc4c
MOV dword ptr [EAX],ESI
TEST byte ptr [ESI + 0x1c],0x1
JZ 0x001bcca1
MOV EAX,dword ptr [ESI + 0x4]
MOV EDX,dword ptr [ESI + 0x8]
POP EBX
POP ESI
POP EDI
RET
MOV EAX,dword ptr [ESI]
LEA EDX,[EBX + 0xffd15bf0]
MOV EAX,dword ptr [EAX + 0x14]
CMP EAX,EDX
JNZ 0x001bcc98
CMP byte ptr [ESI + 0x90],0x0
JNS 0x001bccba
MOV EAX,dword ptr [ESI + 0x34]
MOV EDX,dword ptr [ESI + 0x38]
POP EBX
POP ESI
POP EDI
RET
SUB ESP,0xc
PUSH ESI
CALL EAX
ADD ESP,0x10
JMP 0x001bcc3f
MOV dword ptr [ESP + 0x10],ESI
POP EBX
POP ESI
POP EDI
JMP EAX
PUSH EAX
LEA EAX,[EBX + 0xfff10510]
PUSH EAX
LEA EAX,[EBX + 0xffef8eac]
PUSH 0xc5
PUSH EAX
CALL 0x00069d00
LEA EAX,[EBX + 0xfff104f0]
PUSH EDX
PUSH EAX
LEA EAX,[EBX + 0xffef8eac]
PUSH 0x107b
PUSH EAX
CALL 0x00069d00
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nundefined8 FUN_001bcc10(undefined4 param_1,int param_2,int *param_3)\n\n{\n  undefined4 *puVar1;\n  byte bVar2;\n  undefined8 uVar3;\n  \n  if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }\n  if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }\n  if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }\n  if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);\n}\n\n" comment (function_definition "undefined8 FUN_001bcc10(undefined4 param_1,int param_2,int *param_3)\n\n{\n  undefined4 *puVar1;\n  byte bVar2;\n  undefined8 uVar3;\n  \n  if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }\n  if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }\n  if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }\n  if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);\n}" type_identifier (function_declarator "FUN_001bcc10(undefined4 param_1,int param_2,int *param_3)" identifier (parameter_list "(undefined4 param_1,int param_2,int *param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  undefined4 *puVar1;\n  byte bVar2;\n  undefined8 uVar3;\n  \n  if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }\n  if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }\n  if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }\n  if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (if_statement "if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }" if (parenthesized_expression "(*(code **)(*param_3 + 0x10) == FUN_000a4930)" ( (binary_expression "*(code **)(*param_3 + 0x10) == FUN_000a4930" (pointer_expression "*(code **)(*param_3 + 0x10)" * (cast_expression "(code **)(*param_3 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0x10)" ( (binary_expression "*param_3 + 0x10" (pointer_expression "*param_3" * identifier) + number_literal) )))) == identifier) )) (compound_statement "{\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }" { (expression_statement "bVar2 = *(byte *)(param_3 + 0x24) >> 7;" (assignment_expression "bVar2 = *(byte *)(param_3 + 0x24) >> 7" identifier = (binary_expression "*(byte *)(param_3 + 0x24) >> 7" (pointer_expression "*(byte *)(param_3 + 0x24)" * (cast_expression "(byte *)(param_3 + 0x24)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x24)" ( (binary_expression "param_3 + 0x24" identifier + number_literal) )))) >> number_literal)) ;) }) (else_clause "else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }" else (compound_statement "{\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }" { (expression_statement "bVar2 = (**(code **)(*param_3 + 0x10))(param_3);" (assignment_expression "bVar2 = (**(code **)(*param_3 + 0x10))(param_3)" identifier = (call_expression "(**(code **)(*param_3 + 0x10))(param_3)" (parenthesized_expression "(**(code **)(*param_3 + 0x10))" ( (pointer_expression "**(code **)(*param_3 + 0x10)" * (pointer_expression "*(code **)(*param_3 + 0x10)" * (cast_expression "(code **)(*param_3 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0x10)" ( (binary_expression "*param_3 + 0x10" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "(param_3)" ( identifier )))) ;) }))) (if_statement "if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }" if (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }" { (expression_statement "puVar1 = *(undefined4 **)(param_2 + 0x18);" (assignment_expression "puVar1 = *(undefined4 **)(param_2 + 0x18)" identifier = (pointer_expression "*(undefined4 **)(param_2 + 0x18)" * (cast_expression "(undefined4 **)(param_2 + 0x18)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }" if (parenthesized_expression "(puVar1 != (undefined4 *)0x0)" ( (binary_expression "puVar1 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *puVar1 = param_3;\n    }" { (expression_statement "*puVar1 = param_3;" (assignment_expression "*puVar1 = param_3" (pointer_expression "*puVar1" * identifier) = identifier) ;) })) (if_statement "if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }" if (parenthesized_expression "((*(byte *)(param_3 + 7) & 1) != 0)" ( (binary_expression "(*(byte *)(param_3 + 7) & 1) != 0" (parenthesized_expression "(*(byte *)(param_3 + 7) & 1)" ( (binary_expression "*(byte *)(param_3 + 7) & 1" (pointer_expression "*(byte *)(param_3 + 7)" * (cast_expression "(byte *)(param_3 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 7)" ( (binary_expression "param_3 + 7" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      return *(undefined8 *)(param_3 + 1);\n    }" { (return_statement "return *(undefined8 *)(param_3 + 1);" return (pointer_expression "*(undefined8 *)(param_3 + 1)" * (cast_expression "(undefined8 *)(param_3 + 1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) ;) })) comment (expression_statement "FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);" (call_expression "FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1)" identifier (argument_list "("../../gold/output.h",0xc5,"address",puVar1)" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""address"" " string_content ") , identifier ))) ;) })) (if_statement "if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }" if (parenthesized_expression "(*(code **)(*param_3 + 0x14) != FUN_000a4bf0)" ( (binary_expression "*(code **)(*param_3 + 0x14) != FUN_000a4bf0" (pointer_expression "*(code **)(*param_3 + 0x14)" * (cast_expression "(code **)(*param_3 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0x14)" ( (binary_expression "*param_3 + 0x14" (pointer_expression "*param_3" * identifier) + number_literal) )))) != identifier) )) (compound_statement "{\n                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }" { comment comment (expression_statement "uVar3 = (**(code **)(*param_3 + 0x14))();" (assignment_expression "uVar3 = (**(code **)(*param_3 + 0x14))()" identifier = (call_expression "(**(code **)(*param_3 + 0x14))()" (parenthesized_expression "(**(code **)(*param_3 + 0x14))" ( (pointer_expression "**(code **)(*param_3 + 0x14)" * (pointer_expression "*(code **)(*param_3 + 0x14)" * (cast_expression "(code **)(*param_3 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0x14)" ( (binary_expression "*param_3 + 0x14" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (return_statement "return uVar3;" return identifier ;) })) (if_statement "if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }" if (parenthesized_expression "((char)param_3[0x24] < '\0')" ( (binary_expression "(char)param_3[0x24] < '\0'" (cast_expression "(char)param_3[0x24]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_3[0x24]" identifier [ number_literal ])) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return *(undefined8 *)(param_3 + 0xd);\n  }" { (return_statement "return *(undefined8 *)(param_3 + 0xd);" return (pointer_expression "*(undefined8 *)(param_3 + 0xd)" * (cast_expression "(undefined8 *)(param_3 + 0xd)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xd)" ( (binary_expression "param_3 + 0xd" identifier + number_literal) )))) ;) })) comment (expression_statement "FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);" (call_expression "FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0)" identifier (argument_list "("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0)" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""do_load_address"" " string_content ") , identifier ))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Enum "STT": Some values do not have unique names */\n/* DWARF original prototype: uint64_t value_from_output_section(Loadaddr_expression * this,\n   Expression_eval_info * eei, Output_section * os) */\n\nuint64_t __thiscall\ngold::Loadaddr_expression::value_from_output_section\n          (Loadaddr_expression *this,Expression_eval_info *eei,Output_section *os)\n\n{\n  _func_int_varargs *UNRECOVERED_JUMPTABLE;\n  byte bVar1;\n  int iVar2;\n  undefined4 extraout_EDX;\n  \n  UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[4];\n  if (UNRECOVERED_JUMPTABLE == Output_section::do_has_load_address) {\n    bVar1 = (byte)os->field_0x90 >> 7;\n  }\n  else {\n    iVar2 = (*UNRECOVERED_JUMPTABLE)(os);\n    bVar1 = (byte)iVar2;\n  }\n  if (bVar1 == 0) {\n    if (eei->result_section_pointer != (Output_section **)0x0) {\n      *eei->result_section_pointer = os;\n    }\n    if (((os->super_Output_data).field_0x1c & 1) != 0) {\n      return (os->super_Output_data).address_;\n    }\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }\n  UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[5];\n  if (UNRECOVERED_JUMPTABLE != Output_section::do_load_address) {\n                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    iVar2 = (*UNRECOVERED_JUMPTABLE)();\n    return CONCAT44(extraout_EDX,iVar2);\n  }\n  if ((char)os->field_0x90 < '\0') {\n    return os->load_address_;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n}\n\n" comment comment comment comment (function_definition "uint64_t __thiscall\ngold::Loadaddr_expression::value_from_output_section\n          (Loadaddr_expression *this,Expression_eval_info *eei,Output_section *os)\n\n{\n  _func_int_varargs *UNRECOVERED_JUMPTABLE;\n  byte bVar1;\n  int iVar2;\n  undefined4 extraout_EDX;\n  \n  UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[4];\n  if (UNRECOVERED_JUMPTABLE == Output_section::do_has_load_address) {\n    bVar1 = (byte)os->field_0x90 >> 7;\n  }\n  else {\n    iVar2 = (*UNRECOVERED_JUMPTABLE)(os);\n    bVar1 = (byte)iVar2;\n  }\n  if (bVar1 == 0) {\n    if (eei->result_section_pointer != (Output_section **)0x0) {\n      *eei->result_section_pointer = os;\n    }\n    if (((os->super_Output_data).field_0x1c & 1) != 0) {\n      return (os->super_Output_data).address_;\n    }\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }\n  UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[5];\n  if (UNRECOVERED_JUMPTABLE != Output_section::do_load_address) {\n                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    iVar2 = (*UNRECOVERED_JUMPTABLE)();\n    return CONCAT44(extraout_EDX,iVar2);\n  }\n  if ((char)os->field_0x90 < '\0') {\n    return os->load_address_;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Loadaddr_expression::" identifier : : identifier : :) (function_declarator "value_from_output_section\n          (Loadaddr_expression *this,Expression_eval_info *eei,Output_section *os)" identifier (parameter_list "(Loadaddr_expression *this,Expression_eval_info *eei,Output_section *os)" ( (parameter_declaration "Loadaddr_expression *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Expression_eval_info *eei" type_identifier (pointer_declarator "*eei" * identifier)) , (parameter_declaration "Output_section *os" type_identifier (pointer_declarator "*os" * identifier)) ))) (compound_statement "{\n  _func_int_varargs *UNRECOVERED_JUMPTABLE;\n  byte bVar1;\n  int iVar2;\n  undefined4 extraout_EDX;\n  \n  UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[4];\n  if (UNRECOVERED_JUMPTABLE == Output_section::do_has_load_address) {\n    bVar1 = (byte)os->field_0x90 >> 7;\n  }\n  else {\n    iVar2 = (*UNRECOVERED_JUMPTABLE)(os);\n    bVar1 = (byte)iVar2;\n  }\n  if (bVar1 == 0) {\n    if (eei->result_section_pointer != (Output_section **)0x0) {\n      *eei->result_section_pointer = os;\n    }\n    if (((os->super_Output_data).field_0x1c & 1) != 0) {\n      return (os->super_Output_data).address_;\n    }\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }\n  UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[5];\n  if (UNRECOVERED_JUMPTABLE != Output_section::do_load_address) {\n                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    iVar2 = (*UNRECOVERED_JUMPTABLE)();\n    return CONCAT44(extraout_EDX,iVar2);\n  }\n  if ((char)os->field_0x90 < '\0') {\n    return os->load_address_;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n}" { (declaration "_func_int_varargs *UNRECOVERED_JUMPTABLE;" type_identifier (pointer_declarator "*UNRECOVERED_JUMPTABLE" * identifier) ;) (declaration "byte bVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 extraout_EDX;" type_identifier identifier ;) (expression_statement "UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[4];" (assignment_expression "UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[4]" identifier = (subscript_expression "(os->super_Output_data)._vptr_Output_data[4]" (field_expression "(os->super_Output_data)._vptr_Output_data" (parenthesized_expression "(os->super_Output_data)" ( (field_expression "os->super_Output_data" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (if_statement "if (UNRECOVERED_JUMPTABLE == Output_section::do_has_load_address) {\n    bVar1 = (byte)os->field_0x90 >> 7;\n  }\n  else {\n    iVar2 = (*UNRECOVERED_JUMPTABLE)(os);\n    bVar1 = (byte)iVar2;\n  }" if (parenthesized_expression "(UNRECOVERED_JUMPTABLE == Output_section::do_has_load_address)" ( (binary_expression "UNRECOVERED_JUMPTABLE == Output_section" identifier == identifier) (ERROR "::do_has_load_address" : : identifier) )) (compound_statement "{\n    bVar1 = (byte)os->field_0x90 >> 7;\n  }" { (expression_statement "bVar1 = (byte)os->field_0x90 >> 7;" (assignment_expression "bVar1 = (byte)os->field_0x90 >> 7" identifier = (binary_expression "(byte)os->field_0x90 >> 7" (cast_expression "(byte)os->field_0x90" ( (type_descriptor "byte" type_identifier) ) (field_expression "os->field_0x90" identifier -> field_identifier)) >> number_literal)) ;) }) (else_clause "else {\n    iVar2 = (*UNRECOVERED_JUMPTABLE)(os);\n    bVar1 = (byte)iVar2;\n  }" else (compound_statement "{\n    iVar2 = (*UNRECOVERED_JUMPTABLE)(os);\n    bVar1 = (byte)iVar2;\n  }" { (expression_statement "iVar2 = (*UNRECOVERED_JUMPTABLE)(os);" (assignment_expression "iVar2 = (*UNRECOVERED_JUMPTABLE)(os)" identifier = (call_expression "(*UNRECOVERED_JUMPTABLE)(os)" (parenthesized_expression "(*UNRECOVERED_JUMPTABLE)" ( (pointer_expression "*UNRECOVERED_JUMPTABLE" * identifier) )) (argument_list "(os)" ( identifier )))) ;) (expression_statement "bVar1 = (byte)iVar2;" (assignment_expression "bVar1 = (byte)iVar2" identifier = (cast_expression "(byte)iVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) }))) (if_statement "if (bVar1 == 0) {\n    if (eei->result_section_pointer != (Output_section **)0x0) {\n      *eei->result_section_pointer = os;\n    }\n    if (((os->super_Output_data).field_0x1c & 1) != 0) {\n      return (os->super_Output_data).address_;\n    }\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }" if (parenthesized_expression "(bVar1 == 0)" ( (binary_expression "bVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    if (eei->result_section_pointer != (Output_section **)0x0) {\n      *eei->result_section_pointer = os;\n    }\n    if (((os->super_Output_data).field_0x1c & 1) != 0) {\n      return (os->super_Output_data).address_;\n    }\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }" { (if_statement "if (eei->result_section_pointer != (Output_section **)0x0) {\n      *eei->result_section_pointer = os;\n    }" if (parenthesized_expression "(eei->result_section_pointer != (Output_section **)0x0)" ( (binary_expression "eei->result_section_pointer != (Output_section **)0x0" (field_expression "eei->result_section_pointer" identifier -> field_identifier) != (cast_expression "(Output_section **)0x0" ( (type_descriptor "Output_section **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n      *eei->result_section_pointer = os;\n    }" { (expression_statement "*eei->result_section_pointer = os;" (assignment_expression "*eei->result_section_pointer = os" (pointer_expression "*eei->result_section_pointer" * (field_expression "eei->result_section_pointer" identifier -> field_identifier)) = identifier) ;) })) (if_statement "if (((os->super_Output_data).field_0x1c & 1) != 0) {\n      return (os->super_Output_data).address_;\n    }" if (parenthesized_expression "(((os->super_Output_data).field_0x1c & 1) != 0)" ( (binary_expression "((os->super_Output_data).field_0x1c & 1) != 0" (parenthesized_expression "((os->super_Output_data).field_0x1c & 1)" ( (binary_expression "(os->super_Output_data).field_0x1c & 1" (field_expression "(os->super_Output_data).field_0x1c" (parenthesized_expression "(os->super_Output_data)" ( (field_expression "os->super_Output_data" identifier -> field_identifier) )) . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n      return (os->super_Output_data).address_;\n    }" { (return_statement "return (os->super_Output_data).address_;" return (field_expression "(os->super_Output_data).address_" (parenthesized_expression "(os->super_Output_data)" ( (field_expression "os->super_Output_data" identifier -> field_identifier) )) . field_identifier) ;) })) comment (expression_statement "do_gold_unreachable("../../gold/output.h",0xc5,"address");" (call_expression "do_gold_unreachable("../../gold/output.h",0xc5,"address")" identifier (argument_list "("../../gold/output.h",0xc5,"address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""address"" " string_content ") ))) ;) })) (expression_statement "UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[5];" (assignment_expression "UNRECOVERED_JUMPTABLE = (os->super_Output_data)._vptr_Output_data[5]" identifier = (subscript_expression "(os->super_Output_data)._vptr_Output_data[5]" (field_expression "(os->super_Output_data)._vptr_Output_data" (parenthesized_expression "(os->super_Output_data)" ( (field_expression "os->super_Output_data" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (if_statement "if (UNRECOVERED_JUMPTABLE != Output_section::do_load_address) {\n                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    iVar2 = (*UNRECOVERED_JUMPTABLE)();\n    return CONCAT44(extraout_EDX,iVar2);\n  }" if (parenthesized_expression "(UNRECOVERED_JUMPTABLE != Output_section::do_load_address)" ( (binary_expression "UNRECOVERED_JUMPTABLE != Output_section" identifier != identifier) (ERROR "::do_load_address" : : identifier) )) (compound_statement "{\n                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    iVar2 = (*UNRECOVERED_JUMPTABLE)();\n    return CONCAT44(extraout_EDX,iVar2);\n  }" { comment comment (expression_statement "iVar2 = (*UNRECOVERED_JUMPTABLE)();" (assignment_expression "iVar2 = (*UNRECOVERED_JUMPTABLE)()" identifier = (call_expression "(*UNRECOVERED_JUMPTABLE)()" (parenthesized_expression "(*UNRECOVERED_JUMPTABLE)" ( (pointer_expression "*UNRECOVERED_JUMPTABLE" * identifier) )) (argument_list "()" ( )))) ;) (return_statement "return CONCAT44(extraout_EDX,iVar2);" return (call_expression "CONCAT44(extraout_EDX,iVar2)" identifier (argument_list "(extraout_EDX,iVar2)" ( identifier , identifier ))) ;) })) (if_statement "if ((char)os->field_0x90 < '\0') {\n    return os->load_address_;\n  }" if (parenthesized_expression "((char)os->field_0x90 < '\0')" ( (binary_expression "(char)os->field_0x90 < '\0'" (cast_expression "(char)os->field_0x90" ( (type_descriptor "char" primitive_type) ) (field_expression "os->field_0x90" identifier -> field_identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return os->load_address_;\n  }" { (return_statement "return os->load_address_;" return (field_expression "os->load_address_" identifier -> field_identifier) ;) })) comment (expression_statement "do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");" (call_expression "do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address")" identifier (argument_list "("../../gold/output.h",0x107b,"do_load_address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""do_load_address"" " string_content ") ))) ;) })))
(translation_unit "undefined8 FUN_001bcc10(undefined4 param_1,int param_2,int *param_3)\n\n{\n  undefined4 *puVar1;\n  byte bVar2;\n  undefined8 uVar3;\n  \n  if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }\n  if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    \n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }\n  if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    \n                    \n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }\n  if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }\n                    \n  FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);\n}\n\n" (function_definition "undefined8 FUN_001bcc10(undefined4 param_1,int param_2,int *param_3)\n\n{\n  undefined4 *puVar1;\n  byte bVar2;\n  undefined8 uVar3;\n  \n  if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }\n  if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    \n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }\n  if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    \n                    \n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }\n  if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }\n                    \n  FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);\n}" type_identifier (function_declarator "FUN_001bcc10(undefined4 param_1,int param_2,int *param_3)" identifier (parameter_list "(undefined4 param_1,int param_2,int *param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  undefined4 *puVar1;\n  byte bVar2;\n  undefined8 uVar3;\n  \n  if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }\n  if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    \n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }\n  if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    \n                    \n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }\n  if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }\n                    \n  FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (if_statement "if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }" if (parenthesized_expression "(*(code **)(*param_3 + 0x10) == FUN_000a4930)" ( (binary_expression "*(code **)(*param_3 + 0x10) == FUN_000a4930" (pointer_expression "*(code **)(*param_3 + 0x10)" * (cast_expression "(code **)(*param_3 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0x10)" ( (binary_expression "*param_3 + 0x10" (pointer_expression "*param_3" * identifier) + number_literal) )))) == identifier) )) (compound_statement "{\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }" { (expression_statement "bVar2 = *(byte *)(param_3 + 0x24) >> 7;" (assignment_expression "bVar2 = *(byte *)(param_3 + 0x24) >> 7" identifier = (binary_expression "*(byte *)(param_3 + 0x24) >> 7" (pointer_expression "*(byte *)(param_3 + 0x24)" * (cast_expression "(byte *)(param_3 + 0x24)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x24)" ( (binary_expression "param_3 + 0x24" identifier + number_literal) )))) >> number_literal)) ;) }) (else_clause "else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }" else (compound_statement "{\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }" { (expression_statement "bVar2 = (**(code **)(*param_3 + 0x10))(param_3);" (assignment_expression "bVar2 = (**(code **)(*param_3 + 0x10))(param_3)" identifier = (call_expression "(**(code **)(*param_3 + 0x10))(param_3)" (parenthesized_expression "(**(code **)(*param_3 + 0x10))" ( (pointer_expression "**(code **)(*param_3 + 0x10)" * (pointer_expression "*(code **)(*param_3 + 0x10)" * (cast_expression "(code **)(*param_3 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0x10)" ( (binary_expression "*param_3 + 0x10" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "(param_3)" ( identifier )))) ;) }))) (if_statement "if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    \n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }" if (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    \n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }" { (expression_statement "puVar1 = *(undefined4 **)(param_2 + 0x18);" (assignment_expression "puVar1 = *(undefined4 **)(param_2 + 0x18)" identifier = (pointer_expression "*(undefined4 **)(param_2 + 0x18)" * (cast_expression "(undefined4 **)(param_2 + 0x18)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }" if (parenthesized_expression "(puVar1 != (undefined4 *)0x0)" ( (binary_expression "puVar1 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *puVar1 = param_3;\n    }" { (expression_statement "*puVar1 = param_3;" (assignment_expression "*puVar1 = param_3" (pointer_expression "*puVar1" * identifier) = identifier) ;) })) (if_statement "if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }" if (parenthesized_expression "((*(byte *)(param_3 + 7) & 1) != 0)" ( (binary_expression "(*(byte *)(param_3 + 7) & 1) != 0" (parenthesized_expression "(*(byte *)(param_3 + 7) & 1)" ( (binary_expression "*(byte *)(param_3 + 7) & 1" (pointer_expression "*(byte *)(param_3 + 7)" * (cast_expression "(byte *)(param_3 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 7)" ( (binary_expression "param_3 + 7" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      return *(undefined8 *)(param_3 + 1);\n    }" { (return_statement "return *(undefined8 *)(param_3 + 1);" return (pointer_expression "*(undefined8 *)(param_3 + 1)" * (cast_expression "(undefined8 *)(param_3 + 1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) ;) })) (expression_statement "FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);" (call_expression "FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1)" identifier (argument_list "("../../gold/output.h",0xc5,"address",puVar1)" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""address"" " string_content ") , identifier ))) ;) })) (if_statement "if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    \n                    \n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }" if (parenthesized_expression "(*(code **)(*param_3 + 0x14) != FUN_000a4bf0)" ( (binary_expression "*(code **)(*param_3 + 0x14) != FUN_000a4bf0" (pointer_expression "*(code **)(*param_3 + 0x14)" * (cast_expression "(code **)(*param_3 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0x14)" ( (binary_expression "*param_3 + 0x14" (pointer_expression "*param_3" * identifier) + number_literal) )))) != identifier) )) (compound_statement "{\n                    \n                    \n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }" { (expression_statement "uVar3 = (**(code **)(*param_3 + 0x14))();" (assignment_expression "uVar3 = (**(code **)(*param_3 + 0x14))()" identifier = (call_expression "(**(code **)(*param_3 + 0x14))()" (parenthesized_expression "(**(code **)(*param_3 + 0x14))" ( (pointer_expression "**(code **)(*param_3 + 0x14)" * (pointer_expression "*(code **)(*param_3 + 0x14)" * (cast_expression "(code **)(*param_3 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_3 + 0x14)" ( (binary_expression "*param_3 + 0x14" (pointer_expression "*param_3" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (return_statement "return uVar3;" return identifier ;) })) (if_statement "if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }" if (parenthesized_expression "((char)param_3[0x24] < '\0')" ( (binary_expression "(char)param_3[0x24] < '\0'" (cast_expression "(char)param_3[0x24]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_3[0x24]" identifier [ number_literal ])) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    return *(undefined8 *)(param_3 + 0xd);\n  }" { (return_statement "return *(undefined8 *)(param_3 + 0xd);" return (pointer_expression "*(undefined8 *)(param_3 + 0xd)" * (cast_expression "(undefined8 *)(param_3 + 0xd)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xd)" ( (binary_expression "param_3 + 0xd" identifier + number_literal) )))) ;) })) (expression_statement "FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);" (call_expression "FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0)" identifier (argument_list "("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0)" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""do_load_address"" " string_content ") , identifier ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (return_statement return (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( )))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) < (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;) })))
(function_definition "undefined8 FUN_001bcc10(undefined4 param_1,int param_2,int *param_3)\n\n{\n  undefined4 *puVar1;\n  byte bVar2;\n  undefined8 uVar3;\n  \n  if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }\n  if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    \n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }\n  if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    \n                    \n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }\n  if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }\n                    \n  FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);\n}" (type_identifier "undefined8") (function_declarator "FUN_001bcc10(undefined4 param_1,int param_2,int *param_3)" (identifier "FUN_001bcc10") (parameter_list "(undefined4 param_1,int param_2,int *param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  undefined4 *puVar1;\n  byte bVar2;\n  undefined8 uVar3;\n  \n  if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }\n  if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    \n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }\n  if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    \n                    \n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }\n  if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }\n                    \n  FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);\n}" ({ "{") (declaration "undefined4 *puVar1;" (type_identifier "undefined4") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (if_statement "if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }\n  else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }" (if "if") (parenthesized_expression "(*(code **)(*param_3 + 0x10) == FUN_000a4930)" (( "(") (binary_expression "*(code **)(*param_3 + 0x10) == FUN_000a4930" (pointer_expression "*(code **)(*param_3 + 0x10)" (* "*") (cast_expression "(code **)(*param_3 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_3 + 0x10)" (( "(") (binary_expression "*param_3 + 0x10" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "0x10")) () ")")))) (== "==") (identifier "FUN_000a4930")) () ")")) (compound_statement "{\n    bVar2 = *(byte *)(param_3 + 0x24) >> 7;\n  }" ({ "{") (expression_statement "bVar2 = *(byte *)(param_3 + 0x24) >> 7;" (assignment_expression "bVar2 = *(byte *)(param_3 + 0x24) >> 7" (identifier "bVar2") (= "=") (binary_expression "*(byte *)(param_3 + 0x24) >> 7" (pointer_expression "*(byte *)(param_3 + 0x24)" (* "*") (cast_expression "(byte *)(param_3 + 0x24)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x24)" (( "(") (binary_expression "param_3 + 0x24" (identifier "param_3") (+ "+") (number_literal "0x24")) () ")")))) (>> ">>") (number_literal "7"))) (; ";")) (} "}")) (else_clause "else {\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }" (else "else") (compound_statement "{\n    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);\n  }" ({ "{") (expression_statement "bVar2 = (**(code **)(*param_3 + 0x10))(param_3);" (assignment_expression "bVar2 = (**(code **)(*param_3 + 0x10))(param_3)" (identifier "bVar2") (= "=") (call_expression "(**(code **)(*param_3 + 0x10))(param_3)" (parenthesized_expression "(**(code **)(*param_3 + 0x10))" (( "(") (pointer_expression "**(code **)(*param_3 + 0x10)" (* "*") (pointer_expression "*(code **)(*param_3 + 0x10)" (* "*") (cast_expression "(code **)(*param_3 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_3 + 0x10)" (( "(") (binary_expression "*param_3 + 0x10" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "(param_3)" (( "(") (identifier "param_3") () ")")))) (; ";")) (} "}")))) (if_statement "if (bVar2 == 0) {\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    \n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }" (if "if") (parenthesized_expression "(bVar2 == 0)" (( "(") (binary_expression "bVar2 == 0" (identifier "bVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    puVar1 = *(undefined4 **)(param_2 + 0x18);\n    if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }\n    if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }\n                    \n    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);\n  }" ({ "{") (expression_statement "puVar1 = *(undefined4 **)(param_2 + 0x18);" (assignment_expression "puVar1 = *(undefined4 **)(param_2 + 0x18)" (identifier "puVar1") (= "=") (pointer_expression "*(undefined4 **)(param_2 + 0x18)" (* "*") (cast_expression "(undefined4 **)(param_2 + 0x18)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if (puVar1 != (undefined4 *)0x0) {\n      *puVar1 = param_3;\n    }" (if "if") (parenthesized_expression "(puVar1 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar1 != (undefined4 *)0x0" (identifier "puVar1") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      *puVar1 = param_3;\n    }" ({ "{") (expression_statement "*puVar1 = param_3;" (assignment_expression "*puVar1 = param_3" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (identifier "param_3")) (; ";")) (} "}"))) (if_statement "if ((*(byte *)(param_3 + 7) & 1) != 0) {\n      return *(undefined8 *)(param_3 + 1);\n    }" (if "if") (parenthesized_expression "((*(byte *)(param_3 + 7) & 1) != 0)" (( "(") (binary_expression "(*(byte *)(param_3 + 7) & 1) != 0" (parenthesized_expression "(*(byte *)(param_3 + 7) & 1)" (( "(") (binary_expression "*(byte *)(param_3 + 7) & 1" (pointer_expression "*(byte *)(param_3 + 7)" (* "*") (cast_expression "(byte *)(param_3 + 7)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 7)" (( "(") (binary_expression "param_3 + 7" (identifier "param_3") (+ "+") (number_literal "7")) () ")")))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return *(undefined8 *)(param_3 + 1);\n    }" ({ "{") (return_statement "return *(undefined8 *)(param_3 + 1);" (return "return") (pointer_expression "*(undefined8 *)(param_3 + 1)" (* "*") (cast_expression "(undefined8 *)(param_3 + 1)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 1)" (( "(") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")")))) (; ";")) (} "}"))) (expression_statement "FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);" (call_expression "FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1)" (identifier "FUN_00069d00") (argument_list "("../../gold/output.h",0xc5,"address",puVar1)" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0xc5") (, ",") (string_literal ""address"" (" """) (string_content "address") (" """)) (, ",") (identifier "puVar1") () ")"))) (; ";")) (} "}"))) (if_statement "if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {\n                    \n                    \n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }" (if "if") (parenthesized_expression "(*(code **)(*param_3 + 0x14) != FUN_000a4bf0)" (( "(") (binary_expression "*(code **)(*param_3 + 0x14) != FUN_000a4bf0" (pointer_expression "*(code **)(*param_3 + 0x14)" (* "*") (cast_expression "(code **)(*param_3 + 0x14)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_3 + 0x14)" (( "(") (binary_expression "*param_3 + 0x14" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "0x14")) () ")")))) (!= "!=") (identifier "FUN_000a4bf0")) () ")")) (compound_statement "{\n                    \n                    \n    uVar3 = (**(code **)(*param_3 + 0x14))();\n    return uVar3;\n  }" ({ "{") (expression_statement "uVar3 = (**(code **)(*param_3 + 0x14))();" (assignment_expression "uVar3 = (**(code **)(*param_3 + 0x14))()" (identifier "uVar3") (= "=") (call_expression "(**(code **)(*param_3 + 0x14))()" (parenthesized_expression "(**(code **)(*param_3 + 0x14))" (( "(") (pointer_expression "**(code **)(*param_3 + 0x14)" (* "*") (pointer_expression "*(code **)(*param_3 + 0x14)" (* "*") (cast_expression "(code **)(*param_3 + 0x14)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_3 + 0x14)" (( "(") (binary_expression "*param_3 + 0x14" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar3;" (return "return") (identifier "uVar3") (; ";")) (} "}"))) (if_statement "if ((char)param_3[0x24] < '\0') {\n    return *(undefined8 *)(param_3 + 0xd);\n  }" (if "if") (parenthesized_expression "((char)param_3[0x24] < '\0')" (( "(") (binary_expression "(char)param_3[0x24] < '\0'" (cast_expression "(char)param_3[0x24]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "param_3[0x24]" (identifier "param_3") ([ "[") (number_literal "0x24") (] "]"))) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    return *(undefined8 *)(param_3 + 0xd);\n  }" ({ "{") (return_statement "return *(undefined8 *)(param_3 + 0xd);" (return "return") (pointer_expression "*(undefined8 *)(param_3 + 0xd)" (* "*") (cast_expression "(undefined8 *)(param_3 + 0xd)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0xd)" (( "(") (binary_expression "param_3 + 0xd" (identifier "param_3") (+ "+") (number_literal "0xd")) () ")")))) (; ";")) (} "}"))) (expression_statement "FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);" (call_expression "FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0)" (identifier "FUN_00069d00") (argument_list "("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0)" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0x107b") (, ",") (string_literal ""do_load_address"" (" """) (string_content "do_load_address") (" """)) (, ",") (identifier "FUN_000a4bf0") () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "STT": Some values do not have unique names */
/* DWARF original prototype: uint64_t value_from_output_section(Loadaddr_expression * this,
   Expression_eval_info * eei, Output_section * os) */

uint64_t __thiscall
gold::type_1::function_1
          (type_1 *this,type_2 *eei,type_3 *os)

{
  type_4 *var_1;
  type_5 var_2;
  int iVar2;
  type_6 extraout_EDX;
  
  var_1 = (os->super_Output_data)._vptr_Output_data[4];
  if (var_1 == type_3::do_has_load_address) {
    var_2 = (type_5)os->field_0x90 >> 7;
  }
  else {
    iVar2 = (*var_1)(os);
    var_2 = (type_5)iVar2;
  }
  if (var_2 == 0) {
    if (eei->result_section_pointer != (type_3 **)0x0) {
      *eei->result_section_pointer = os;
    }
    if (((os->super_Output_data).field_0x1c & 1) != 0) {
      return (os->super_Output_data).address_;
    }
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/output.h",0xc5,"address");
  }
  var_1 = (os->super_Output_data)._vptr_Output_data[5];
  if (var_1 != type_3::do_load_address) {
                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    iVar2 = (*var_1)();
    return var_4(extraout_EDX,iVar2);
  }
  if ((char)os->field_0x90 < '\0') {
    return os->load_address_;
  }
                    /* WARNING: Subroutine does not return */
  var_3("../../gold/output.h",0x107b,"do_load_address");
}


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

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

undefined8 MASKED(undefined4 param_1,int param_2,int *param_3)

{
  undefined4 *puVar1;
  byte bVar2;
  undefined8 uVar3;
  
  if (*(code **)(*param_3 + 0x10) == FUN_000a4930) {
    bVar2 = *(byte *)(param_3 + 0x24) >> 7;
  }
  else {
    bVar2 = (**(code **)(*param_3 + 0x10))(param_3);
  }
  if (bVar2 == 0) {
    puVar1 = *(undefined4 **)(param_2 + 0x18);
    if (puVar1 != (undefined4 *)0x0) {
      *puVar1 = param_3;
    }
    if ((*(byte *)(param_3 + 7) & 1) != 0) {
      return *(undefined8 *)(param_3 + 1);
    }
                    /* WARNING: Subroutine does not return */
    FUN_00069d00("../../gold/output.h",0xc5,"address",puVar1);
  }
  if (*(code **)(*param_3 + 0x14) != FUN_000a4bf0) {
                    /* WARNING: Could not recover jumptable at 0x001bcc9f. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    uVar3 = (**(code **)(*param_3 + 0x14))();
    return uVar3;
  }
  if ((char)param_3[0x24] < '\0') {
    return *(undefined8 *)(param_3 + 0xd);
  }
                    /* WARNING: Subroutine does not return */
  FUN_00069d00("../../gold/output.h",0x107b,"do_load_address",FUN_000a4bf0);
}

