
/* DWARF original prototype: Output_section * output_section(Symbol * this) */

Output_section * __thiscall gold::Symbol::output_section(Symbol *this)

{
  uint uVar1;
  Output_segment *pOVar2;
  Output_data *UNRECOVERED_JUMPTABLE;
  pointer ppOVar3;
  byte bVar4;
  int iVar5;
  long lVar6;
  undefined4 extraout_var;
  Output_section *pOVar7;
  
  bVar4 = this->field_0x3a & 7;
  if (bVar4 == 1) {
                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    iVar5 = (*((this->u1_).object)->_vptr_Object[9])();
    return (Output_section *)CONCAT44(extraout_var,iVar5);
  }
  if (bVar4 == 0) {
    uVar1 = (this->u2_).shndx;
    if ((uVar1 != 0) && ((this->field_0x3b & 0x20) != 0)) {
      if (((ulong)((this->u1_).output_segment)->output_lists_[2].
                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.
                  _M_impl._M_finish & 0x100000000) != 0) {
                    /* WARNING: Subroutine does not return */
        do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section");
      }
      lVar6 = (*(code *)((this->u1_).output_segment)->output_lists_[0].
                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.
                        _M_impl._M_start[5])();
      if (lVar6 != 0) {
                    /* WARNING: Subroutine does not return */
        do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section");
      }
      pOVar2 = (this->u1_).output_segment;
      UNRECOVERED_JUMPTABLE =
           pOVar2->output_lists_[0].
           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.
           _M_start[0x18];
      if (UNRECOVERED_JUMPTABLE != (Output_data *)Relobj::do_output_section) {
                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
        pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1);
        return pOVar7;
      }
      ppOVar3 = pOVar2->output_lists_[3].
                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.
                _M_finish;
      if ((ulong)uVar1 <
          (ulong)((long)pOVar2->output_lists_[3].
                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.
                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)) {
        return (Output_section *)ppOVar3[uVar1];
      }
                    /* WARNING: Subroutine does not return */
      do_gold_unreachable("../../gold/object.h",0x5c8,"do_output_section");
    }
  }
  else if (4 < bVar4) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/symtab.cc",0x1ff,"output_section");
  }
  return (Output_section *)0x0;
}



undefined8 FUN_0021ea20(long param_1)

{
  uint uVar1;
  long *plVar2;
  byte bVar3;
  long lVar4;
  undefined8 uVar5;
  
  bVar3 = *(byte *)(param_1 + 0x3a) & 7;
  if (bVar3 == 1) {
                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();
    return uVar5;
  }
  if (bVar3 == 0) {
    uVar1 = *(uint *)(param_1 + 0x18);
    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {
      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");
      }
      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();
      if (lVar4 != 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");
      }
      plVar2 = *(long **)(param_1 + 0x10);
      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {
                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);
        return uVar5;
      }
      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {
        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);
      }
                    /* WARNING: Subroutine does not return */
      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");
    }
  }
  else if (4 < bVar3) {
                    /* WARNING: Subroutine does not return */
    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");
  }
  return 0;
}


MOVZX EAX,byte ptr [RDI + 0x3a]
AND EAX,0x7
CMP AL,0x1
JZ 0x0021eab8
PUSH RBP
PUSH RBX
MOV RBX,RDI
SUB RSP,0x8
TEST AL,AL
JZ 0x0021ea50
CMP AL,0x4
JA 0x0021eac2
ADD RSP,0x8
XOR EAX,EAX
POP RBX
POP RBP
RET
MOV EBP,dword ptr [RDI + 0x18]
TEST EBP,EBP
JZ 0x0021ea44
TEST byte ptr [RDI + 0x3b],0x20
JZ 0x0021ea44
MOV RDI,qword ptr [RDI + 0x10]
TEST byte ptr [RDI + 0x3c],0x1
JNZ 0x0021eb1a
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x28]
TEST RAX,RAX
JNZ 0x0021eb02
MOV RDI,qword ptr [RBX + 0x10]
LEA RDX,[0x14c900]
MOV RAX,qword ptr [RDI]
MOV RAX,qword ptr [RAX + 0xc0]
CMP RAX,RDX
JNZ 0x0021eae0
MOV RDX,qword ptr [RDI + 0x50]
MOV RAX,qword ptr [RDI + 0x58]
SUB RAX,RDX
SAR RAX,0x3
CMP RBP,RAX
JNC 0x0021eaea
MOV RAX,qword ptr [RDX + RBP*0x8]
ADD RSP,0x8
POP RBX
POP RBP
RET
MOV RDI,qword ptr [RDI + 0x10]
MOV RAX,qword ptr [RDI]
JMP qword ptr [RAX + 0x48]
LEA RDX,[0x31f8d8]
MOV ESI,0x1ff
LEA RDI,[0x31ed51]
CALL 0x0016cdf0
ADD RSP,0x8
MOV ESI,EBP
POP RBX
POP RBP
JMP RAX
LEA RDX,[0x31f8c0]
MOV ESI,0x5c8
LEA RDI,[0x307016]
CALL 0x0016cdf0
LEA RDX,[0x31f8d8]
MOV ESI,0x1ef
LEA RDI,[0x31ed51]
CALL 0x0016cdf0
LEA RDX,[0x31f8d8]
MOV ESI,0x1ee
LEA RDI,[0x31ed51]
CALL 0x0016cdf0
(translation_unit "undefined8 FUN_0021ea20(long param_1)\n\n{\n  uint uVar1;\n  long *plVar2;\n  byte bVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  bVar3 = *(byte *)(param_1 + 0x3a) & 7;\n  if (bVar3 == 1) {\n                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }\n  if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    /* WARNING: Subroutine does not return */\n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_0021ea20(long param_1)\n\n{\n  uint uVar1;\n  long *plVar2;\n  byte bVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  bVar3 = *(byte *)(param_1 + 0x3a) & 7;\n  if (bVar3 == 1) {\n                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }\n  if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    /* WARNING: Subroutine does not return */\n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0021ea20(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  uint uVar1;\n  long *plVar2;\n  byte bVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  bVar3 = *(byte *)(param_1 + 0x3a) & 7;\n  if (bVar3 == 1) {\n                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }\n  if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    /* WARNING: Subroutine does not return */\n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }\n  return 0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (expression_statement "bVar3 = *(byte *)(param_1 + 0x3a) & 7;" (assignment_expression "bVar3 = *(byte *)(param_1 + 0x3a) & 7" identifier = (binary_expression "*(byte *)(param_1 + 0x3a) & 7" (pointer_expression "*(byte *)(param_1 + 0x3a)" * (cast_expression "(byte *)(param_1 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3a)" ( (binary_expression "param_1 + 0x3a" identifier + number_literal) )))) & number_literal)) ;) (if_statement "if (bVar3 == 1) {\n                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }" if (parenthesized_expression "(bVar3 == 1)" ( (binary_expression "bVar3 == 1" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }" { comment comment (expression_statement "uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();" (assignment_expression "uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))()" identifier = (call_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x48))()" (parenthesized_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x48))" ( (pointer_expression "**(code **)(**(long **)(param_1 + 0x10) + 0x48)" * (pointer_expression "*(code **)(**(long **)(param_1 + 0x10) + 0x48)" * (cast_expression "(code **)(**(long **)(param_1 + 0x10) + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(param_1 + 0x10) + 0x48)" ( (binary_expression "**(long **)(param_1 + 0x10) + 0x48" (pointer_expression "**(long **)(param_1 + 0x10)" * (pointer_expression "*(long **)(param_1 + 0x10)" * (cast_expression "(long **)(param_1 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (return_statement "return uVar5;" return identifier ;) })) (if_statement "if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    /* WARNING: Subroutine does not return */\n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" if (parenthesized_expression "(bVar3 == 0)" ( (binary_expression "bVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    /* WARNING: Subroutine does not return */\n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }" { (expression_statement "uVar1 = *(uint *)(param_1 + 0x18);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x18)" identifier = (pointer_expression "*(uint *)(param_1 + 0x18)" * (cast_expression "(uint *)(param_1 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    /* WARNING: Subroutine does not return */\n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }" if (parenthesized_expression "((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0))" ( (binary_expression "(uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)" (parenthesized_expression "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) )) && (parenthesized_expression "((*(byte *)(param_1 + 0x3b) & 0x20) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0x3b) & 0x20) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0x3b) & 0x20)" ( (binary_expression "*(byte *)(param_1 + 0x3b) & 0x20" (pointer_expression "*(byte *)(param_1 + 0x3b)" * (cast_expression "(byte *)(param_1 + 0x3b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3b)" ( (binary_expression "param_1 + 0x3b" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    /* WARNING: Subroutine does not return */\n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }" { (if_statement "if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }" if (parenthesized_expression "((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0)" ( (binary_expression "(*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0" (parenthesized_expression "(*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1)" ( (binary_expression "*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1" (pointer_expression "*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c)" * (cast_expression "(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)*(long **)(param_1 + 0x10) + 0x3c)" ( (binary_expression "(long)*(long **)(param_1 + 0x10) + 0x3c" (cast_expression "(long)*(long **)(param_1 + 0x10)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(long **)(param_1 + 0x10)" * (cast_expression "(long **)(param_1 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }" { comment (expression_statement "FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");" (call_expression "FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section")" identifier (argument_list "("../../gold/symtab.cc",0x1ee,"output_section")" ( (string_literal ""../../gold/symtab.cc"" " string_content ") , number_literal , (string_literal ""output_section"" " string_content ") ))) ;) })) (expression_statement "lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();" (assignment_expression "lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))()" identifier = (call_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x28))()" (parenthesized_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x28))" ( (pointer_expression "**(code **)(**(long **)(param_1 + 0x10) + 0x28)" * (pointer_expression "*(code **)(**(long **)(param_1 + 0x10) + 0x28)" * (cast_expression "(code **)(**(long **)(param_1 + 0x10) + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(param_1 + 0x10) + 0x28)" ( (binary_expression "**(long **)(param_1 + 0x10) + 0x28" (pointer_expression "**(long **)(param_1 + 0x10)" * (pointer_expression "*(long **)(param_1 + 0x10)" * (cast_expression "(long **)(param_1 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (if_statement "if (lVar4 != 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }" if (parenthesized_expression "(lVar4 != 0)" ( (binary_expression "lVar4 != 0" identifier != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }" { comment (expression_statement "FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");" (call_expression "FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section")" identifier (argument_list "("../../gold/symtab.cc",0x1ef,"output_section")" ( (string_literal ""../../gold/symtab.cc"" " string_content ") , number_literal , (string_literal ""output_section"" " string_content ") ))) ;) })) (expression_statement "plVar2 = *(long **)(param_1 + 0x10);" (assignment_expression "plVar2 = *(long **)(param_1 + 0x10)" identifier = (pointer_expression "*(long **)(param_1 + 0x10)" * (cast_expression "(long **)(param_1 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }" if (parenthesized_expression "(*(code **)(*plVar2 + 0xc0) != FUN_0014c900)" ( (binary_expression "*(code **)(*plVar2 + 0xc0) != FUN_0014c900" (pointer_expression "*(code **)(*plVar2 + 0xc0)" * (cast_expression "(code **)(*plVar2 + 0xc0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0xc0)" ( (binary_expression "*plVar2 + 0xc0" (pointer_expression "*plVar2" * identifier) + number_literal) )))) != identifier) )) (compound_statement "{\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }" { comment comment (expression_statement "uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);" (assignment_expression "uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1)" identifier = (call_expression "(**(code **)(*plVar2 + 0xc0))(plVar2,uVar1)" (parenthesized_expression "(**(code **)(*plVar2 + 0xc0))" ( (pointer_expression "**(code **)(*plVar2 + 0xc0)" * (pointer_expression "*(code **)(*plVar2 + 0xc0)" * (cast_expression "(code **)(*plVar2 + 0xc0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0xc0)" ( (binary_expression "*plVar2 + 0xc0" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(plVar2,uVar1)" ( identifier , identifier )))) ;) (return_statement "return uVar5;" return identifier ;) })) (if_statement "if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }" if (parenthesized_expression "((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3))" ( (binary_expression "(ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) < (call_expression "(ulong)(plVar2[0xb] - plVar2[10] >> 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(plVar2[0xb] - plVar2[10] >> 3)" ( (binary_expression "plVar2[0xb] - plVar2[10] >> 3" (binary_expression "plVar2[0xb] - plVar2[10]" (subscript_expression "plVar2[0xb]" identifier [ number_literal ]) - (subscript_expression "plVar2[10]" identifier [ number_literal ])) >> number_literal) )))) )) (compound_statement "{\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }" { (return_statement "return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);" return (pointer_expression "*(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8)" * (cast_expression "(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar2[10] + (ulong)uVar1 * 8)" ( (binary_expression "plVar2[10] + (ulong)uVar1 * 8" (subscript_expression "plVar2[10]" identifier [ number_literal ]) + (binary_expression "(ulong)uVar1 * 8" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) )))) ;) })) comment (expression_statement "FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");" (call_expression "FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section")" identifier (argument_list "("../../gold/object.h",0x5c8,"do_output_section")" ( (string_literal ""../../gold/object.h"" " string_content ") , number_literal , (string_literal ""do_output_section"" " string_content ") ))) ;) })) }) (else_clause "else if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" else (if_statement "if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" if (parenthesized_expression "(4 < bVar3)" ( (binary_expression "4 < bVar3" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" { comment (expression_statement "FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");" (call_expression "FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section")" identifier (argument_list "("../../gold/symtab.cc",0x1ff,"output_section")" ( (string_literal ""../../gold/symtab.cc"" " string_content ") , number_literal , (string_literal ""output_section"" " string_content ") ))) ;) })))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* DWARF original prototype: Output_section * output_section(Symbol * this) */\n\nOutput_section * __thiscall gold::Symbol::output_section(Symbol *this)\n\n{\n  uint uVar1;\n  Output_segment *pOVar2;\n  Output_data *UNRECOVERED_JUMPTABLE;\n  pointer ppOVar3;\n  byte bVar4;\n  int iVar5;\n  long lVar6;\n  undefined4 extraout_var;\n  Output_section *pOVar7;\n  \n  bVar4 = this->field_0x3a & 7;\n  if (bVar4 == 1) {\n                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    iVar5 = (*((this->u1_).object)->_vptr_Object[9])();\n    return (Output_section *)CONCAT44(extraout_var,iVar5);\n  }\n  if (bVar4 == 0) {\n    uVar1 = (this->u2_).shndx;\n    if ((uVar1 != 0) && ((this->field_0x3b & 0x20) != 0)) {\n      if (((ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000) != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar6 = (*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5])();\n      if (lVar6 != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      pOVar2 = (this->u1_).output_segment;\n      UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n           _M_start[0x18];\n      if (UNRECOVERED_JUMPTABLE != (Output_data *)Relobj::do_output_section) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1);\n        return pOVar7;\n      }\n      ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n                _M_finish;\n      if ((ulong)uVar1 <\n          (ulong)((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)) {\n        return (Output_section *)ppOVar3[uVar1];\n      }\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/symtab.cc",0x1ff,"output_section");\n  }\n  return (Output_section *)0x0;\n}\n\n" comment (ERROR "Output_section * __thiscall gold::Symbol::output_section(Symbol *this)" (binary_expression "Output_section * __thiscall gold::Symbol::output_section(Symbol *this" (binary_expression "Output_section * __thiscall" identifier * identifier) (ERROR "gold::Symbol::output_section(Symbol" identifier : : identifier : : identifier ( identifier) * identifier) )) (compound_statement "{\n  uint uVar1;\n  Output_segment *pOVar2;\n  Output_data *UNRECOVERED_JUMPTABLE;\n  pointer ppOVar3;\n  byte bVar4;\n  int iVar5;\n  long lVar6;\n  undefined4 extraout_var;\n  Output_section *pOVar7;\n  \n  bVar4 = this->field_0x3a & 7;\n  if (bVar4 == 1) {\n                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    iVar5 = (*((this->u1_).object)->_vptr_Object[9])();\n    return (Output_section *)CONCAT44(extraout_var,iVar5);\n  }\n  if (bVar4 == 0) {\n    uVar1 = (this->u2_).shndx;\n    if ((uVar1 != 0) && ((this->field_0x3b & 0x20) != 0)) {\n      if (((ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000) != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar6 = (*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5])();\n      if (lVar6 != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      pOVar2 = (this->u1_).output_segment;\n      UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n           _M_start[0x18];\n      if (UNRECOVERED_JUMPTABLE != (Output_data *)Relobj::do_output_section) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1);\n        return pOVar7;\n      }\n      ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n                _M_finish;\n      if ((ulong)uVar1 <\n          (ulong)((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)) {\n        return (Output_section *)ppOVar3[uVar1];\n      }\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/symtab.cc",0x1ff,"output_section");\n  }\n  return (Output_section *)0x0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "Output_segment *pOVar2;" type_identifier (pointer_declarator "*pOVar2" * identifier) ;) (declaration "Output_data *UNRECOVERED_JUMPTABLE;" type_identifier (pointer_declarator "*UNRECOVERED_JUMPTABLE" * identifier) ;) (declaration "pointer ppOVar3;" type_identifier identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 extraout_var;" type_identifier identifier ;) (declaration "Output_section *pOVar7;" type_identifier (pointer_declarator "*pOVar7" * identifier) ;) (expression_statement "bVar4 = this->field_0x3a & 7;" (assignment_expression "bVar4 = this->field_0x3a & 7" identifier = (binary_expression "this->field_0x3a & 7" (field_expression "this->field_0x3a" identifier -> field_identifier) & number_literal)) ;) (if_statement "if (bVar4 == 1) {\n                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    iVar5 = (*((this->u1_).object)->_vptr_Object[9])();\n    return (Output_section *)CONCAT44(extraout_var,iVar5);\n  }" if (parenthesized_expression "(bVar4 == 1)" ( (binary_expression "bVar4 == 1" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n    iVar5 = (*((this->u1_).object)->_vptr_Object[9])();\n    return (Output_section *)CONCAT44(extraout_var,iVar5);\n  }" { comment comment (expression_statement "iVar5 = (*((this->u1_).object)->_vptr_Object[9])();" (assignment_expression "iVar5 = (*((this->u1_).object)->_vptr_Object[9])()" identifier = (call_expression "(*((this->u1_).object)->_vptr_Object[9])()" (parenthesized_expression "(*((this->u1_).object)->_vptr_Object[9])" ( (pointer_expression "*((this->u1_).object)->_vptr_Object[9]" * (subscript_expression "((this->u1_).object)->_vptr_Object[9]" (field_expression "((this->u1_).object)->_vptr_Object" (parenthesized_expression "((this->u1_).object)" ( (field_expression "(this->u1_).object" (parenthesized_expression "(this->u1_)" ( (field_expression "this->u1_" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( )))) ;) (return_statement "return (Output_section *)CONCAT44(extraout_var,iVar5);" return (cast_expression "(Output_section *)CONCAT44(extraout_var,iVar5)" ( (type_descriptor "Output_section *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "CONCAT44(extraout_var,iVar5)" identifier (argument_list "(extraout_var,iVar5)" ( identifier , identifier )))) ;) })) (if_statement "if (bVar4 == 0) {\n    uVar1 = (this->u2_).shndx;\n    if ((uVar1 != 0) && ((this->field_0x3b & 0x20) != 0)) {\n      if (((ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000) != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar6 = (*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5])();\n      if (lVar6 != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      pOVar2 = (this->u1_).output_segment;\n      UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n           _M_start[0x18];\n      if (UNRECOVERED_JUMPTABLE != (Output_data *)Relobj::do_output_section) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1);\n        return pOVar7;\n      }\n      ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n                _M_finish;\n      if ((ulong)uVar1 <\n          (ulong)((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)) {\n        return (Output_section *)ppOVar3[uVar1];\n      }\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/symtab.cc",0x1ff,"output_section");\n  }" if (parenthesized_expression "(bVar4 == 0)" ( (binary_expression "bVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar1 = (this->u2_).shndx;\n    if ((uVar1 != 0) && ((this->field_0x3b & 0x20) != 0)) {\n      if (((ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000) != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar6 = (*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5])();\n      if (lVar6 != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      pOVar2 = (this->u1_).output_segment;\n      UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n           _M_start[0x18];\n      if (UNRECOVERED_JUMPTABLE != (Output_data *)Relobj::do_output_section) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1);\n        return pOVar7;\n      }\n      ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n                _M_finish;\n      if ((ulong)uVar1 <\n          (ulong)((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)) {\n        return (Output_section *)ppOVar3[uVar1];\n      }\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }" { (expression_statement "uVar1 = (this->u2_).shndx;" (assignment_expression "uVar1 = (this->u2_).shndx" identifier = (field_expression "(this->u2_).shndx" (parenthesized_expression "(this->u2_)" ( (field_expression "this->u2_" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if ((uVar1 != 0) && ((this->field_0x3b & 0x20) != 0)) {\n      if (((ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000) != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar6 = (*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5])();\n      if (lVar6 != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      pOVar2 = (this->u1_).output_segment;\n      UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n           _M_start[0x18];\n      if (UNRECOVERED_JUMPTABLE != (Output_data *)Relobj::do_output_section) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1);\n        return pOVar7;\n      }\n      ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n                _M_finish;\n      if ((ulong)uVar1 <\n          (ulong)((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)) {\n        return (Output_section *)ppOVar3[uVar1];\n      }\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/object.h",0x5c8,"do_output_section");\n    }" if (parenthesized_expression "((uVar1 != 0) && ((this->field_0x3b & 0x20) != 0))" ( (binary_expression "(uVar1 != 0) && ((this->field_0x3b & 0x20) != 0)" (parenthesized_expression "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) )) && (parenthesized_expression "((this->field_0x3b & 0x20) != 0)" ( (binary_expression "(this->field_0x3b & 0x20) != 0" (parenthesized_expression "(this->field_0x3b & 0x20)" ( (binary_expression "this->field_0x3b & 0x20" (field_expression "this->field_0x3b" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n      if (((ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000) != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar6 = (*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5])();\n      if (lVar6 != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      pOVar2 = (this->u1_).output_segment;\n      UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n           _M_start[0x18];\n      if (UNRECOVERED_JUMPTABLE != (Output_data *)Relobj::do_output_section) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1);\n        return pOVar7;\n      }\n      ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n                _M_finish;\n      if ((ulong)uVar1 <\n          (ulong)((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)) {\n        return (Output_section *)ppOVar3[uVar1];\n      }\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/object.h",0x5c8,"do_output_section");\n    }" { (if_statement "if (((ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000) != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section");\n      }" if (parenthesized_expression "(((ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000) != 0)" ( (binary_expression "((ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000) != 0" (parenthesized_expression "((ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000)" ( (binary_expression "(ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish & 0x100000000" (field_expression "(ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl._M_finish" (field_expression "(ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                  _M_impl" (binary_expression "(ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_" (binary_expression "(ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std::allocator<gold" (binary_expression "(ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold::Output_data*,_std" (binary_expression "(ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base<gold" (field_expression "(ulong)((this->u1_).output_segment)->output_lists_[2].\n                  super__Vector_base" (subscript_expression "(ulong)((this->u1_).output_segment)->output_lists_[2]" (field_expression "(ulong)((this->u1_).output_segment)->output_lists_" (call_expression "(ulong)((this->u1_).output_segment)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((this->u1_).output_segment)" ( (field_expression "(this->u1_).output_segment" (parenthesized_expression "(this->u1_)" ( (field_expression "this->u1_" identifier -> field_identifier) )) . field_identifier) ))) -> field_identifier) [ number_literal ]) . field_identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section");\n      }" { comment (expression_statement "do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section");" (call_expression "do_gold_unreachable("../../gold/symtab.cc",0x1ee,"output_section")" identifier (argument_list "("../../gold/symtab.cc",0x1ee,"output_section")" ( (string_literal ""../../gold/symtab.cc"" " string_content ") , number_literal , (string_literal ""output_section"" " string_content ") ))) ;) })) (expression_statement "lVar6 = (*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5])();" (assignment_expression "lVar6 = (*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5])()" identifier = (call_expression "(*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5])()" (parenthesized_expression "(*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5])" ( (subscript_expression "*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start[5]" (field_expression "*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_start" (field_expression "*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl" (binary_expression "*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_" (binary_expression "*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold" (binary_expression "*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold::Output_data*,_std" (binary_expression "*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base<gold" (pointer_expression "*(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base" * (cast_expression "(code *)((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "((this->u1_).output_segment)->output_lists_[0].\n                        super__Vector_base" (subscript_expression "((this->u1_).output_segment)->output_lists_[0]" (field_expression "((this->u1_).output_segment)->output_lists_" (parenthesized_expression "((this->u1_).output_segment)" ( (field_expression "(this->u1_).output_segment" (parenthesized_expression "(this->u1_)" ( (field_expression "this->u1_" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) [ number_literal ]) . field_identifier))) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) [ number_literal ]) )) (argument_list "()" ( )))) ;) (if_statement "if (lVar6 != 0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section");\n      }" if (parenthesized_expression "(lVar6 != 0)" ( (binary_expression "lVar6 != 0" identifier != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section");\n      }" { comment (expression_statement "do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section");" (call_expression "do_gold_unreachable("../../gold/symtab.cc",0x1ef,"output_section")" identifier (argument_list "("../../gold/symtab.cc",0x1ef,"output_section")" ( (string_literal ""../../gold/symtab.cc"" " string_content ") , number_literal , (string_literal ""output_section"" " string_content ") ))) ;) })) (expression_statement "pOVar2 = (this->u1_).output_segment;" (assignment_expression "pOVar2 = (this->u1_).output_segment" identifier = (field_expression "(this->u1_).output_segment" (parenthesized_expression "(this->u1_)" ( (field_expression "this->u1_" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n           _M_start[0x18];" (subscript_expression "UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n           _M_start[0x18]" (field_expression "UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n           _M_start" (field_expression "UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl" (binary_expression "UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_" (binary_expression "UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std::allocator<gold" (binary_expression "UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold::Output_data*,_std" (assignment_expression "UNRECOVERED_JUMPTABLE =\n           pOVar2->output_lists_[0].\n           super__Vector_base<gold" identifier = (binary_expression "pOVar2->output_lists_[0].\n           super__Vector_base<gold" (field_expression "pOVar2->output_lists_[0].\n           super__Vector_base" (subscript_expression "pOVar2->output_lists_[0]" (field_expression "pOVar2->output_lists_" identifier -> field_identifier) [ number_literal ]) . field_identifier) < identifier)) (ERROR "::Output_data" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) [ number_literal ]) ;) (if_statement "if (UNRECOVERED_JUMPTABLE != (Output_data *)Relobj::do_output_section) {\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1);\n        return pOVar7;\n      }" if (parenthesized_expression "(UNRECOVERED_JUMPTABLE != (Output_data *)Relobj::do_output_section)" ( (binary_expression "UNRECOVERED_JUMPTABLE != (Output_data *)Relobj" identifier != (cast_expression "(Output_data *)Relobj" ( (type_descriptor "Output_data *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) (ERROR "::do_output_section" : : identifier) )) (compound_statement "{\n                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n        pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1);\n        return pOVar7;\n      }" { comment comment (expression_statement "pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1);" (assignment_expression "pOVar7 = (Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1)" identifier = (cast_expression "(Output_section *)(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1)" ( (type_descriptor "Output_section *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)UNRECOVERED_JUMPTABLE)(pOVar2,uVar1)" (parenthesized_expression "(*(code *)UNRECOVERED_JUMPTABLE)" ( (pointer_expression "*(code *)UNRECOVERED_JUMPTABLE" * (cast_expression "(code *)UNRECOVERED_JUMPTABLE" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pOVar2,uVar1)" ( identifier , identifier ))))) ;) (return_statement "return pOVar7;" return identifier ;) })) (expression_statement "ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n                _M_finish;" (field_expression "ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl.\n                _M_finish" (field_expression "ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>._M_impl" (binary_expression "ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_" (binary_expression "ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std::allocator<gold" (binary_expression "ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold::Output_data*,_std" (assignment_expression "ppOVar3 = pOVar2->output_lists_[3].\n                super__Vector_base<gold" identifier = (binary_expression "pOVar2->output_lists_[3].\n                super__Vector_base<gold" (field_expression "pOVar2->output_lists_[3].\n                super__Vector_base" (subscript_expression "pOVar2->output_lists_[3]" (field_expression "pOVar2->output_lists_" identifier -> field_identifier) [ number_literal ]) . field_identifier) < identifier)) (ERROR "::Output_data" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if ((ulong)uVar1 <\n          (ulong)((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)) {\n        return (Output_section *)ppOVar3[uVar1];\n      }" if (parenthesized_expression "((ulong)uVar1 <\n          (ulong)((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3))" ( (binary_expression "(ulong)uVar1 <\n          (ulong)((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) < (call_expression "(ulong)((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)" ( (binary_expression "(long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3" (binary_expression "(long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage - (long)ppOVar3" (field_expression "(long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl._M_end_of_storage" (field_expression "(long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                        _M_impl" (binary_expression "(long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_" (binary_expression "(long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std::allocator<gold" (binary_expression "(long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold::Output_data*,_std" (binary_expression "(long)pOVar2->output_lists_[3].\n                        super__Vector_base<gold" (cast_expression "(long)pOVar2->output_lists_[3].\n                        super__Vector_base" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pOVar2->output_lists_[3].\n                        super__Vector_base" (subscript_expression "pOVar2->output_lists_[3]" (field_expression "pOVar2->output_lists_" identifier -> field_identifier) [ number_literal ]) . field_identifier)) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) - (cast_expression "(long)ppOVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )))) )) (compound_statement "{\n        return (Output_section *)ppOVar3[uVar1];\n      }" { (return_statement "return (Output_section *)ppOVar3[uVar1];" return (cast_expression "(Output_section *)ppOVar3[uVar1]" ( (type_descriptor "Output_section *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "ppOVar3[uVar1]" identifier [ identifier ])) ;) })) comment (expression_statement "do_gold_unreachable("../../gold/object.h",0x5c8,"do_output_section");" (call_expression "do_gold_unreachable("../../gold/object.h",0x5c8,"do_output_section")" identifier (argument_list "("../../gold/object.h",0x5c8,"do_output_section")" ( (string_literal ""../../gold/object.h"" " string_content ") , number_literal , (string_literal ""do_output_section"" " string_content ") ))) ;) })) }) (else_clause "else if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/symtab.cc",0x1ff,"output_section");\n  }" else (if_statement "if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/symtab.cc",0x1ff,"output_section");\n  }" if (parenthesized_expression "(4 < bVar4)" ( (binary_expression "4 < bVar4" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/symtab.cc",0x1ff,"output_section");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/symtab.cc",0x1ff,"output_section");" (call_expression "do_gold_unreachable("../../gold/symtab.cc",0x1ff,"output_section")" identifier (argument_list "("../../gold/symtab.cc",0x1ff,"output_section")" ( (string_literal ""../../gold/symtab.cc"" " string_content ") , number_literal , (string_literal ""output_section"" " string_content ") ))) ;) })))) (return_statement "return (Output_section *)0x0;" return (cast_expression "(Output_section *)0x0" ( (type_descriptor "Output_section *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))
(translation_unit "undefined8 FUN_0021ea20(long param_1)\n\n{\n  uint uVar1;\n  long *plVar2;\n  byte bVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  bVar3 = *(byte *)(param_1 + 0x3a) & 7;\n  if (bVar3 == 1) {\n                    \n                    \n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }\n  if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_0021ea20(long param_1)\n\n{\n  uint uVar1;\n  long *plVar2;\n  byte bVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  bVar3 = *(byte *)(param_1 + 0x3a) & 7;\n  if (bVar3 == 1) {\n                    \n                    \n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }\n  if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0021ea20(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  uint uVar1;\n  long *plVar2;\n  byte bVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  bVar3 = *(byte *)(param_1 + 0x3a) & 7;\n  if (bVar3 == 1) {\n                    \n                    \n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }\n  if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }\n  return 0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (expression_statement "bVar3 = *(byte *)(param_1 + 0x3a) & 7;" (assignment_expression "bVar3 = *(byte *)(param_1 + 0x3a) & 7" identifier = (binary_expression "*(byte *)(param_1 + 0x3a) & 7" (pointer_expression "*(byte *)(param_1 + 0x3a)" * (cast_expression "(byte *)(param_1 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3a)" ( (binary_expression "param_1 + 0x3a" identifier + number_literal) )))) & number_literal)) ;) (if_statement "if (bVar3 == 1) {\n                    \n                    \n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }" if (parenthesized_expression "(bVar3 == 1)" ( (binary_expression "bVar3 == 1" identifier == number_literal) )) (compound_statement "{\n                    \n                    \n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }" { (expression_statement "uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();" (assignment_expression "uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))()" identifier = (call_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x48))()" (parenthesized_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x48))" ( (pointer_expression "**(code **)(**(long **)(param_1 + 0x10) + 0x48)" * (pointer_expression "*(code **)(**(long **)(param_1 + 0x10) + 0x48)" * (cast_expression "(code **)(**(long **)(param_1 + 0x10) + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(param_1 + 0x10) + 0x48)" ( (binary_expression "**(long **)(param_1 + 0x10) + 0x48" (pointer_expression "**(long **)(param_1 + 0x10)" * (pointer_expression "*(long **)(param_1 + 0x10)" * (cast_expression "(long **)(param_1 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (return_statement "return uVar5;" return identifier ;) })) (if_statement "if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" if (parenthesized_expression "(bVar3 == 0)" ( (binary_expression "bVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }" { (expression_statement "uVar1 = *(uint *)(param_1 + 0x18);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x18)" identifier = (pointer_expression "*(uint *)(param_1 + 0x18)" * (cast_expression "(uint *)(param_1 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }" if (parenthesized_expression "((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0))" ( (binary_expression "(uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)" (parenthesized_expression "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) )) && (parenthesized_expression "((*(byte *)(param_1 + 0x3b) & 0x20) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0x3b) & 0x20) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0x3b) & 0x20)" ( (binary_expression "*(byte *)(param_1 + 0x3b) & 0x20" (pointer_expression "*(byte *)(param_1 + 0x3b)" * (cast_expression "(byte *)(param_1 + 0x3b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3b)" ( (binary_expression "param_1 + 0x3b" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }" { (if_statement "if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }" if (parenthesized_expression "((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0)" ( (binary_expression "(*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0" (parenthesized_expression "(*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1)" ( (binary_expression "*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1" (pointer_expression "*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c)" * (cast_expression "(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)*(long **)(param_1 + 0x10) + 0x3c)" ( (binary_expression "(long)*(long **)(param_1 + 0x10) + 0x3c" (cast_expression "(long)*(long **)(param_1 + 0x10)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(long **)(param_1 + 0x10)" * (cast_expression "(long **)(param_1 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }" { (expression_statement "FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");" (call_expression "FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section")" identifier (argument_list "("../../gold/symtab.cc",0x1ee,"output_section")" ( (string_literal ""../../gold/symtab.cc"" " string_content ") , number_literal , (string_literal ""output_section"" " string_content ") ))) ;) })) (expression_statement "lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();" (assignment_expression "lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))()" identifier = (call_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x28))()" (parenthesized_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x28))" ( (pointer_expression "**(code **)(**(long **)(param_1 + 0x10) + 0x28)" * (pointer_expression "*(code **)(**(long **)(param_1 + 0x10) + 0x28)" * (cast_expression "(code **)(**(long **)(param_1 + 0x10) + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(param_1 + 0x10) + 0x28)" ( (binary_expression "**(long **)(param_1 + 0x10) + 0x28" (pointer_expression "**(long **)(param_1 + 0x10)" * (pointer_expression "*(long **)(param_1 + 0x10)" * (cast_expression "(long **)(param_1 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (if_statement "if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }" if (parenthesized_expression "(lVar4 != 0)" ( (binary_expression "lVar4 != 0" identifier != number_literal) )) (compound_statement "{\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }" { (expression_statement "FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");" (call_expression "FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section")" identifier (argument_list "("../../gold/symtab.cc",0x1ef,"output_section")" ( (string_literal ""../../gold/symtab.cc"" " string_content ") , number_literal , (string_literal ""output_section"" " string_content ") ))) ;) })) (expression_statement "plVar2 = *(long **)(param_1 + 0x10);" (assignment_expression "plVar2 = *(long **)(param_1 + 0x10)" identifier = (pointer_expression "*(long **)(param_1 + 0x10)" * (cast_expression "(long **)(param_1 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }" if (parenthesized_expression "(*(code **)(*plVar2 + 0xc0) != FUN_0014c900)" ( (binary_expression "*(code **)(*plVar2 + 0xc0) != FUN_0014c900" (pointer_expression "*(code **)(*plVar2 + 0xc0)" * (cast_expression "(code **)(*plVar2 + 0xc0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0xc0)" ( (binary_expression "*plVar2 + 0xc0" (pointer_expression "*plVar2" * identifier) + number_literal) )))) != identifier) )) (compound_statement "{\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }" { (expression_statement "uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);" (assignment_expression "uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1)" identifier = (call_expression "(**(code **)(*plVar2 + 0xc0))(plVar2,uVar1)" (parenthesized_expression "(**(code **)(*plVar2 + 0xc0))" ( (pointer_expression "**(code **)(*plVar2 + 0xc0)" * (pointer_expression "*(code **)(*plVar2 + 0xc0)" * (cast_expression "(code **)(*plVar2 + 0xc0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0xc0)" ( (binary_expression "*plVar2 + 0xc0" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(plVar2,uVar1)" ( identifier , identifier )))) ;) (return_statement "return uVar5;" return identifier ;) })) (if_statement "if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }" if (parenthesized_expression "((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3))" ( (binary_expression "(ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) < (call_expression "(ulong)(plVar2[0xb] - plVar2[10] >> 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(plVar2[0xb] - plVar2[10] >> 3)" ( (binary_expression "plVar2[0xb] - plVar2[10] >> 3" (binary_expression "plVar2[0xb] - plVar2[10]" (subscript_expression "plVar2[0xb]" identifier [ number_literal ]) - (subscript_expression "plVar2[10]" identifier [ number_literal ])) >> number_literal) )))) )) (compound_statement "{\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }" { (return_statement "return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);" return (pointer_expression "*(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8)" * (cast_expression "(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar2[10] + (ulong)uVar1 * 8)" ( (binary_expression "plVar2[10] + (ulong)uVar1 * 8" (subscript_expression "plVar2[10]" identifier [ number_literal ]) + (binary_expression "(ulong)uVar1 * 8" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) )))) ;) })) (expression_statement "FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");" (call_expression "FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section")" identifier (argument_list "("../../gold/object.h",0x5c8,"do_output_section")" ( (string_literal ""../../gold/object.h"" " string_content ") , number_literal , (string_literal ""do_output_section"" " string_content ") ))) ;) })) }) (else_clause "else if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" else (if_statement "if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" if (parenthesized_expression "(4 < bVar3)" ( (binary_expression "4 < bVar3" number_literal < identifier) )) (compound_statement "{\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" { (expression_statement "FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");" (call_expression "FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section")" identifier (argument_list "("../../gold/symtab.cc",0x1ff,"output_section")" ( (string_literal ""../../gold/symtab.cc"" " string_content ") , number_literal , (string_literal ""output_section"" " string_content ") ))) ;) })))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) )) (argument_list ( )))) ;) (return_statement return 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 *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (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 { (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 (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (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 * (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) )) (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (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 ( IDENT , IDENT )))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) - (subscript_expression IDENT [ LIT ])) >> LIT) )))) )) (compound_statement { (return_statement return (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) )))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })))) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_0021ea20(long param_1)\n\n{\n  uint uVar1;\n  long *plVar2;\n  byte bVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  bVar3 = *(byte *)(param_1 + 0x3a) & 7;\n  if (bVar3 == 1) {\n                    \n                    \n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }\n  if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "FUN_0021ea20(long param_1)" (identifier "FUN_0021ea20") (parameter_list "(long param_1)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) () ")"))) (compound_statement "{\n  uint uVar1;\n  long *plVar2;\n  byte bVar3;\n  long lVar4;\n  undefined8 uVar5;\n  \n  bVar3 = *(byte *)(param_1 + 0x3a) & 7;\n  if (bVar3 == 1) {\n                    \n                    \n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }\n  if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }\n  return 0;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (expression_statement "bVar3 = *(byte *)(param_1 + 0x3a) & 7;" (assignment_expression "bVar3 = *(byte *)(param_1 + 0x3a) & 7" (identifier "bVar3") (= "=") (binary_expression "*(byte *)(param_1 + 0x3a) & 7" (pointer_expression "*(byte *)(param_1 + 0x3a)" (* "*") (cast_expression "(byte *)(param_1 + 0x3a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3a)" (( "(") (binary_expression "param_1 + 0x3a" (identifier "param_1") (+ "+") (number_literal "0x3a")) () ")")))) (& "&") (number_literal "7"))) (; ";")) (if_statement "if (bVar3 == 1) {\n                    \n                    \n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }" (if "if") (parenthesized_expression "(bVar3 == 1)" (( "(") (binary_expression "bVar3 == 1" (identifier "bVar3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n                    \n                    \n    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();\n    return uVar5;\n  }" ({ "{") (expression_statement "uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();" (assignment_expression "uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))()" (identifier "uVar5") (= "=") (call_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x48))()" (parenthesized_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x48))" (( "(") (pointer_expression "**(code **)(**(long **)(param_1 + 0x10) + 0x48)" (* "*") (pointer_expression "*(code **)(**(long **)(param_1 + 0x10) + 0x48)" (* "*") (cast_expression "(code **)(**(long **)(param_1 + 0x10) + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(long **)(param_1 + 0x10) + 0x48)" (( "(") (binary_expression "**(long **)(param_1 + 0x10) + 0x48" (pointer_expression "**(long **)(param_1 + 0x10)" (* "*") (pointer_expression "*(long **)(param_1 + 0x10)" (* "*") (cast_expression "(long **)(param_1 + 0x10)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar5;" (return "return") (identifier "uVar5") (; ";")) (} "}"))) (if_statement "if (bVar3 == 0) {\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" (if "if") (parenthesized_expression "(bVar3 == 0)" (( "(") (binary_expression "bVar3 == 0" (identifier "bVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar1 = *(uint *)(param_1 + 0x18);\n    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }\n  }" ({ "{") (expression_statement "uVar1 = *(uint *)(param_1 + 0x18);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x18)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_1 + 0x18)" (* "*") (cast_expression "(uint *)(param_1 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }" (if "if") (parenthesized_expression "((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0))" (( "(") (binary_expression "(uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)" (parenthesized_expression "(uVar1 != 0)" (( "(") (binary_expression "uVar1 != 0" (identifier "uVar1") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(byte *)(param_1 + 0x3b) & 0x20) != 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x3b) & 0x20) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0x3b) & 0x20)" (( "(") (binary_expression "*(byte *)(param_1 + 0x3b) & 0x20" (pointer_expression "*(byte *)(param_1 + 0x3b)" (* "*") (cast_expression "(byte *)(param_1 + 0x3b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3b)" (( "(") (binary_expression "param_1 + 0x3b" (identifier "param_1") (+ "+") (number_literal "0x3b")) () ")")))) (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }\n      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();\n      if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }\n      plVar2 = *(long **)(param_1 + 0x10);\n      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }\n      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }\n                    \n      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");\n    }" ({ "{") (if_statement "if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }" (if "if") (parenthesized_expression "((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0)" (( "(") (binary_expression "(*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0" (parenthesized_expression "(*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1)" (( "(") (binary_expression "*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1" (pointer_expression "*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c)" (* "*") (cast_expression "(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)*(long **)(param_1 + 0x10) + 0x3c)" (( "(") (binary_expression "(long)*(long **)(param_1 + 0x10) + 0x3c" (cast_expression "(long)*(long **)(param_1 + 0x10)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(long **)(param_1 + 0x10)" (* "*") (cast_expression "(long **)(param_1 + 0x10)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (+ "+") (number_literal "0x3c")) () ")")))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");\n      }" ({ "{") (expression_statement "FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");" (call_expression "FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section")" (identifier "FUN_0016cdf0") (argument_list "("../../gold/symtab.cc",0x1ee,"output_section")" (( "(") (string_literal ""../../gold/symtab.cc"" (" """) (string_content "../../gold/symtab.cc") (" """)) (, ",") (number_literal "0x1ee") (, ",") (string_literal ""output_section"" (" """) (string_content "output_section") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();" (assignment_expression "lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))()" (identifier "lVar4") (= "=") (call_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x28))()" (parenthesized_expression "(**(code **)(**(long **)(param_1 + 0x10) + 0x28))" (( "(") (pointer_expression "**(code **)(**(long **)(param_1 + 0x10) + 0x28)" (* "*") (pointer_expression "*(code **)(**(long **)(param_1 + 0x10) + 0x28)" (* "*") (cast_expression "(code **)(**(long **)(param_1 + 0x10) + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(long **)(param_1 + 0x10) + 0x28)" (( "(") (binary_expression "**(long **)(param_1 + 0x10) + 0x28" (pointer_expression "**(long **)(param_1 + 0x10)" (* "*") (pointer_expression "*(long **)(param_1 + 0x10)" (* "*") (cast_expression "(long **)(param_1 + 0x10)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (lVar4 != 0) {\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }" (if "if") (parenthesized_expression "(lVar4 != 0)" (( "(") (binary_expression "lVar4 != 0" (identifier "lVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");\n      }" ({ "{") (expression_statement "FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");" (call_expression "FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section")" (identifier "FUN_0016cdf0") (argument_list "("../../gold/symtab.cc",0x1ef,"output_section")" (( "(") (string_literal ""../../gold/symtab.cc"" (" """) (string_content "../../gold/symtab.cc") (" """)) (, ",") (number_literal "0x1ef") (, ",") (string_literal ""output_section"" (" """) (string_content "output_section") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "plVar2 = *(long **)(param_1 + 0x10);" (assignment_expression "plVar2 = *(long **)(param_1 + 0x10)" (identifier "plVar2") (= "=") (pointer_expression "*(long **)(param_1 + 0x10)" (* "*") (cast_expression "(long **)(param_1 + 0x10)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (if_statement "if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }" (if "if") (parenthesized_expression "(*(code **)(*plVar2 + 0xc0) != FUN_0014c900)" (( "(") (binary_expression "*(code **)(*plVar2 + 0xc0) != FUN_0014c900" (pointer_expression "*(code **)(*plVar2 + 0xc0)" (* "*") (cast_expression "(code **)(*plVar2 + 0xc0)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar2 + 0xc0)" (( "(") (binary_expression "*plVar2 + 0xc0" (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (+ "+") (number_literal "0xc0")) () ")")))) (!= "!=") (identifier "FUN_0014c900")) () ")")) (compound_statement "{\n                    \n                    \n        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);\n        return uVar5;\n      }" ({ "{") (expression_statement "uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);" (assignment_expression "uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1)" (identifier "uVar5") (= "=") (call_expression "(**(code **)(*plVar2 + 0xc0))(plVar2,uVar1)" (parenthesized_expression "(**(code **)(*plVar2 + 0xc0))" (( "(") (pointer_expression "**(code **)(*plVar2 + 0xc0)" (* "*") (pointer_expression "*(code **)(*plVar2 + 0xc0)" (* "*") (cast_expression "(code **)(*plVar2 + 0xc0)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar2 + 0xc0)" (( "(") (binary_expression "*plVar2 + 0xc0" (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (+ "+") (number_literal "0xc0")) () ")"))))) () ")")) (argument_list "(plVar2,uVar1)" (( "(") (identifier "plVar2") (, ",") (identifier "uVar1") () ")")))) (; ";")) (return_statement "return uVar5;" (return "return") (identifier "uVar5") (; ";")) (} "}"))) (if_statement "if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }" (if "if") (parenthesized_expression "((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3))" (( "(") (binary_expression "(ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)" (cast_expression "(ulong)uVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar1")) (< "<") (call_expression "(ulong)(plVar2[0xb] - plVar2[10] >> 3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(plVar2[0xb] - plVar2[10] >> 3)" (( "(") (binary_expression "plVar2[0xb] - plVar2[10] >> 3" (binary_expression "plVar2[0xb] - plVar2[10]" (subscript_expression "plVar2[0xb]" (identifier "plVar2") ([ "[") (number_literal "0xb") (] "]")) (- "-") (subscript_expression "plVar2[10]" (identifier "plVar2") ([ "[") (number_literal "10") (] "]"))) (>> ">>") (number_literal "3")) () ")")))) () ")")) (compound_statement "{\n        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);\n      }" ({ "{") (return_statement "return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);" (return "return") (pointer_expression "*(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8)" (* "*") (cast_expression "(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar2[10] + (ulong)uVar1 * 8)" (( "(") (binary_expression "plVar2[10] + (ulong)uVar1 * 8" (subscript_expression "plVar2[10]" (identifier "plVar2") ([ "[") (number_literal "10") (] "]")) (+ "+") (binary_expression "(ulong)uVar1 * 8" (cast_expression "(ulong)uVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar1")) (* "*") (number_literal "8"))) () ")")))) (; ";")) (} "}"))) (expression_statement "FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");" (call_expression "FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section")" (identifier "FUN_0016cdf0") (argument_list "("../../gold/object.h",0x5c8,"do_output_section")" (( "(") (string_literal ""../../gold/object.h"" (" """) (string_content "../../gold/object.h") (" """)) (, ",") (number_literal "0x5c8") (, ",") (string_literal ""do_output_section"" (" """) (string_content "do_output_section") (" """)) () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" (else "else") (if_statement "if (4 < bVar3) {\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" (if "if") (parenthesized_expression "(4 < bVar3)" (( "(") (binary_expression "4 < bVar3" (number_literal "4") (< "<") (identifier "bVar3")) () ")")) (compound_statement "{\n                    \n    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");\n  }" ({ "{") (expression_statement "FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");" (call_expression "FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section")" (identifier "FUN_0016cdf0") (argument_list "("../../gold/symtab.cc",0x1ff,"output_section")" (( "(") (string_literal ""../../gold/symtab.cc"" (" """) (string_content "../../gold/symtab.cc") (" """)) (, ",") (number_literal "0x1ff") (, ",") (string_literal ""output_section"" (" """) (string_content "output_section") (" """)) () ")"))) (; ";")) (} "}"))))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* DWARF original prototype: Output_section * output_section(Symbol * this) */

type_7 * __thiscall var_4::Symbol::output_section(Symbol *this)

{
  type_1 var_3;
  type_2 *pOVar2;
  type_3 *var_9;
  type_4 ppOVar3;
  type_5 var_1;
  int iVar5;
  long var_8;
  type_6 extraout_var;
  type_7 *pOVar7;
  
  var_1 = this->field_0x3a & 7;
  if (var_1 == 1) {
                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    iVar5 = (*((this->u1_).object)->_vptr_Object[9])();
    return (type_7 *)var_2(extraout_var,iVar5);
  }
  if (var_1 == 0) {
    var_3 = (this->u2_).shndx;
    if ((var_3 != 0) && ((this->field_0x3b & 0x20) != 0)) {
      if (((type_9)((this->u1_).output_segment)->output_lists_[2].
                  super__Vector_base<var_4::type_3*,var_5::allocator<var_4::type_3*>var_6>.
                  _M_impl._M_finish & 0x100000000) != 0) {
                    /* WARNING: Subroutine does not return */
        var_7("../../gold/symtab.cc",0x1ee,"output_section");
      }
      var_8 = (*(type_8 *)((this->u1_).output_segment)->output_lists_[0].
                        super__Vector_base<var_4::type_3*,var_5::allocator<var_4::type_3*>var_6>.
                        _M_impl._M_start[5])();
      if (var_8 != 0) {
                    /* WARNING: Subroutine does not return */
        var_7("../../gold/symtab.cc",0x1ef,"output_section");
      }
      pOVar2 = (this->u1_).output_segment;
      var_9 =
           pOVar2->output_lists_[0].
           super__Vector_base<var_4::type_3*,var_5::allocator<var_4::type_3*>var_6>._M_impl.
           _M_start[0x18];
      if (var_9 != (type_3 *)Relobj::do_output_section) {
                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
        pOVar7 = (type_7 *)(*(type_8 *)var_9)(pOVar2,var_3);
        return pOVar7;
      }
      ppOVar3 = pOVar2->output_lists_[3].
                super__Vector_base<var_4::type_3*,var_5::allocator<var_4::type_3*>var_6>._M_impl.
                _M_finish;
      if ((type_9)var_3 <
          (type_9)((long)pOVar2->output_lists_[3].
                        super__Vector_base<var_4::type_3*,var_5::allocator<var_4::type_3*>var_6>.
                        _M_impl._M_end_of_storage - (long)ppOVar3 >> 3)) {
        return (type_7 *)ppOVar3[var_3];
      }
                    /* WARNING: Subroutine does not return */
      var_7("../../gold/object.h",0x5c8,"do_output_section");
    }
  }
  else if (4 < var_1) {
                    /* WARNING: Subroutine does not return */
    var_7("../../gold/symtab.cc",0x1ff,"output_section");
  }
  return (type_7 *)0x0;
}


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

undefined8 MASKED(long param_1)

{
  uint uVar1;
  long *plVar2;
  byte bVar3;
  long lVar4;
  undefined8 uVar5;
  
  bVar3 = *(byte *)(param_1 + 0x3a) & 7;
  if (bVar3 == 1) {
                    /* WARNING: Could not recover jumptable at 0x0021eabf. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    uVar5 = (**(code **)(**(long **)(param_1 + 0x10) + 0x48))();
    return uVar5;
  }
  if (bVar3 == 0) {
    uVar1 = *(uint *)(param_1 + 0x18);
    if ((uVar1 != 0) && ((*(byte *)(param_1 + 0x3b) & 0x20) != 0)) {
      if ((*(byte *)((long)*(long **)(param_1 + 0x10) + 0x3c) & 1) != 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0016cdf0("../../gold/symtab.cc",0x1ee,"output_section");
      }
      lVar4 = (**(code **)(**(long **)(param_1 + 0x10) + 0x28))();
      if (lVar4 != 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0016cdf0("../../gold/symtab.cc",0x1ef,"output_section");
      }
      plVar2 = *(long **)(param_1 + 0x10);
      if (*(code **)(*plVar2 + 0xc0) != FUN_0014c900) {
                    /* WARNING: Could not recover jumptable at 0x0021eae8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
        uVar5 = (**(code **)(*plVar2 + 0xc0))(plVar2,uVar1);
        return uVar5;
      }
      if ((ulong)uVar1 < (ulong)(plVar2[0xb] - plVar2[10] >> 3)) {
        return *(undefined8 *)(plVar2[10] + (ulong)uVar1 * 8);
      }
                    /* WARNING: Subroutine does not return */
      FUN_0016cdf0("../../gold/object.h",0x5c8,"do_output_section");
    }
  }
  else if (4 < bVar3) {
                    /* WARNING: Subroutine does not return */
    FUN_0016cdf0("../../gold/symtab.cc",0x1ff,"output_section");
  }
  return 0;
}

