
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void do_write(Output_fill_debug_line * this, Output_file * of, off_t
   off, size_t len) */

void __thiscall
gold::Output_fill_debug_line::do_write
          (Output_fill_debug_line *this,Output_file *of,off_t off,size_t len)

{
  void *__s;
  uint uVar1;
  int iVar2;
  ulong uVar3;
  undefined4 extraout_var;
  uint uVar4;
  code *this_1;
  _func_int_varargs *size;
  _func_int_varargs *extraout_RDX;
  uint *puVar5;
  char *start;
  Errors *this_00;
  
  start = (char *)of;
  this_00 = (Errors *)this;
  if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 0x10) != 0)) {
    this_00 = parameters->errors_;
    start = "fill_debug_line(%08lx, %08lx)";
    Errors::debug(this_00,"fill_debug_line(%08lx, %08lx)");
  }
  this_1 = do_minimum_hole_size;
  size = (this->super_Output_fill)._vptr_Output_fill[2];
  uVar3 = 0x1d;
  if (size != do_minimum_hole_size) {
    this_00 = (Errors *)this;
    iVar2 = (*size)();
    uVar3 = CONCAT44(extraout_var,iVar2);
    size = extraout_RDX;
  }
  if (uVar3 <= len) {
    if ((-1 < off) && ((long)(len + off) <= of->file_size_)) {
      puVar5 = (uint *)(of->base_ + off);
      uVar4 = (int)len - 4;
      uVar1 = (int)len - 10;
      if ((this->super_Output_fill).is_big_endian_ == false) {
        *puVar5 = uVar4;
        *(undefined2 *)(puVar5 + 1) = 3;
        *(uint *)((long)puVar5 + 6) = uVar1;
      }
      else {
        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |
                  uVar4 * 0x1000000;
        *(undefined2 *)(puVar5 + 1) = 0x300;
        *(uint *)((long)puVar5 + 6) =
             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;
      }
      __s = (void *)((long)puVar5 + 0x1d);
      *(undefined1 *)(puVar5 + 7) = 0;
      *(undefined8 *)((long)puVar5 + 10) = 0x101000d05000001;
      *(undefined8 *)((long)puVar5 + 0x12) = 0x10000000101;
      *(undefined2 *)((long)puVar5 + 0x1a) = 1;
      if ((void *)((long)puVar5 + len) <= __s) {
        return;
      }
      memset(__s,7,(long)((long)puVar5 + len) - (long)__s);
      return;
    }
    Output_file::get_output_view
              ((Output_file *)this_00,(off_t)start,(size_t)size,(Output_file *)this_1);
  }
                    /* WARNING: Subroutine does not return */
  do_gold_unreachable("../../gold/output.cc",0x848,"do_write");
}



void FUN_001f4bc0(long *param_1,long param_2,long param_3,ulong param_4)

{
  void *__s;
  uint uVar1;
  ulong uVar2;
  uint uVar3;
  uint *puVar4;
  
  if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {
    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");
  }
  uVar2 = 0x1d;
  if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {
    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);
  }
  if (uVar2 <= param_4) {
    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {
      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));
      uVar3 = (int)param_4 - 4;
      uVar1 = (int)param_4 - 10;
      if ((char)param_1[1] == '\0') {
        *puVar4 = uVar3;
        *(undefined2 *)(puVar4 + 1) = 3;
        *(uint *)((long)puVar4 + 6) = uVar1;
      }
      else {
        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |
                  uVar3 * 0x1000000;
        *(undefined2 *)(puVar4 + 1) = 0x300;
        *(uint *)((long)puVar4 + 6) =
             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;
      }
      __s = (void *)((long)puVar4 + 0x1d);
      *(undefined1 *)(puVar4 + 7) = 0;
      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;
      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;
      *(undefined2 *)((long)puVar4 + 0x1a) = 1;
      if ((void *)((long)puVar4 + param_4) <= __s) {
        return;
      }
      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);
      return;
    }
    FUN_001f4570();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0017c650("../../gold/output.cc",0x848,"do_write");
}


PUSH R13
MOV R13,RSI
PUSH R12
MOV R12,RDI
PUSH RBP
MOV RBP,RCX
PUSH RBX
MOV RBX,RDX
SUB RSP,0x8
MOV RAX,qword ptr [0x0043e6b0]
CMP qword ptr [RAX + 0x10],0x0
JZ 0x001f4bee
TEST byte ptr [RAX + 0x24],0x10
JNZ 0x001f4ca8
MOV RAX,qword ptr [R12]
LEA RCX,[0x1f44c0]
MOV RDX,qword ptr [RAX + 0x10]
MOV EAX,0x1d
CMP RDX,RCX
JNZ 0x001f4ce0
CMP RBP,RAX
JC 0x001f4cef
TEST RBX,RBX
JS 0x001f4cea
LEA RAX,[RBP + RBX*0x1]
CMP RAX,qword ptr [R13 + 0x10]
JG 0x001f4cea
ADD RBX,qword ptr [R13 + 0x18]
LEA ECX,[RBP + -0x4]
LEA EAX,[RBP + -0xa]
CMP byte ptr [R12 + 0x8],0x0
MOV RDX,RBX
JNZ 0x001f4c90
MOV dword ptr [RBX],ECX
MOV ECX,0x3
MOV word ptr [RBX + 0x4],CX
MOV dword ptr [RBX + 0x6],EAX
MOV RAX,0x101000d05000001
LEA RDI,[RDX + 0x1d]
MOV byte ptr [RDX + 0x1c],0x0
MOV qword ptr [RDX + 0xa],RAX
MOV RAX,0x10000000101
MOV qword ptr [RDX + 0x12],RAX
MOV EAX,0x1
MOV word ptr [RDX + 0x1a],AX
ADD RDX,RBP
CMP RDX,RDI
JA 0x001f4cc0
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
RET
MOV ESI,0x300
BSWAP ECX
BSWAP EAX
MOV dword ptr [RBX],ECX
MOV word ptr [RBX + 0x4],SI
MOV dword ptr [RBX + 0x6],EAX
JMP 0x001f4c4f
MOV RDI,qword ptr [RAX]
LEA RSI,[0x37e8e4]
XOR EAX,EAX
CALL 0x00178100
JMP 0x001f4bee
ADD RSP,0x8
SUB RDX,RDI
MOV ESI,0x7
POP RBX
POP RBP
POP R12
POP R13
JMP 0x00147100
MOV RDI,R12
CALL RDX
JMP 0x001f4c0b
CALL 0x001f4570
LEA RDX,[0x3809f0]
MOV ESI,0x848
LEA RDI,[0x37e8cf]
CALL 0x0017c650
(translation_unit "void FUN_001f4bc0(long *param_1,long param_2,long param_3,ulong param_4)\n\n{\n  void *__s;\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  uint *puVar4;\n  \n  if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }\n  uVar2 = 0x1d;\n  if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }\n  if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0017c650("../../gold/output.cc",0x848,"do_write");\n}\n\n" (function_definition "void FUN_001f4bc0(long *param_1,long param_2,long param_3,ulong param_4)\n\n{\n  void *__s;\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  uint *puVar4;\n  \n  if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }\n  uVar2 = 0x1d;\n  if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }\n  if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0017c650("../../gold/output.cc",0x848,"do_write");\n}" primitive_type (function_declarator "FUN_001f4bc0(long *param_1,long param_2,long param_3,ulong param_4)" identifier (parameter_list "(long *param_1,long param_2,long param_3,ulong param_4)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) ))) (compound_statement "{\n  void *__s;\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  uint *puVar4;\n  \n  if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }\n  uVar2 = 0x1d;\n  if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }\n  if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0017c650("../../gold/output.cc",0x848,"do_write");\n}" { (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (if_statement "if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }" if (parenthesized_expression "((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0))" ( (binary_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x10" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)" ( (binary_expression "(PTR_DAT_0043e6b0[0x24] & 0x10) != 0" (parenthesized_expression "(PTR_DAT_0043e6b0[0x24] & 0x10)" ( (binary_expression "PTR_DAT_0043e6b0[0x24] & 0x10" (subscript_expression "PTR_DAT_0043e6b0[0x24]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }" { (expression_statement "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");" (call_expression "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)")" identifier (argument_list "(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)")" ( (pointer_expression "*(undefined8 *)PTR_DAT_0043e6b0" * (cast_expression "(undefined8 *)PTR_DAT_0043e6b0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (string_literal ""fill_debug_line(%08lx, %08lx)"" " string_content ") ))) ;) })) (expression_statement "uVar2 = 0x1d;" (assignment_expression "uVar2 = 0x1d" identifier = number_literal) ;) (if_statement "if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }" if (parenthesized_expression "(*(code **)(*param_1 + 0x10) != FUN_001f44c0)" ( (binary_expression "*(code **)(*param_1 + 0x10) != FUN_001f44c0" (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) != identifier) )) (compound_statement "{\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }" { (expression_statement "uVar2 = (**(code **)(*param_1 + 0x10))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x10))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x10))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) })) (if_statement "if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }" if (parenthesized_expression "(uVar2 <= param_4)" ( (binary_expression "uVar2 <= param_4" identifier <= identifier) )) (compound_statement "{\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }" { (if_statement "if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }" if (parenthesized_expression "((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10)))" ( (binary_expression "(-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))" (parenthesized_expression "(-1 < param_3)" ( (binary_expression "-1 < param_3" number_literal < identifier) )) && (parenthesized_expression "((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))" ( (binary_expression "(long)(param_4 + param_3) <= *(long *)(param_2 + 0x10)" (cast_expression "(long)(param_4 + param_3)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_4 + param_3)" ( (binary_expression "param_4 + param_3" identifier + identifier) ))) <= (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) ))))) ))) )) (compound_statement "{\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }" { (expression_statement "puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));" (assignment_expression "puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18))" identifier = (cast_expression "(uint *)(param_3 + *(long *)(param_2 + 0x18))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + *(long *)(param_2 + 0x18))" ( (binary_expression "param_3 + *(long *)(param_2 + 0x18)" identifier + (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) ))))) )))) ;) (expression_statement "uVar3 = (int)param_4 - 4;" (assignment_expression "uVar3 = (int)param_4 - 4" identifier = (binary_expression "(int)param_4 - 4" (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal)) ;) (expression_statement "uVar1 = (int)param_4 - 10;" (assignment_expression "uVar1 = (int)param_4 - 10" identifier = (binary_expression "(int)param_4 - 10" (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal)) ;) (if_statement "if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" if (parenthesized_expression "((char)param_1[1] == '\0')" ( (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }" { (expression_statement "*puVar4 = uVar3;" (assignment_expression "*puVar4 = uVar3" (pointer_expression "*puVar4" * identifier) = identifier) ;) (expression_statement "*(undefined2 *)(puVar4 + 1) = 3;" (assignment_expression "*(undefined2 *)(puVar4 + 1) = 3" (pointer_expression "*(undefined2 *)(puVar4 + 1)" * (cast_expression "(undefined2 *)(puVar4 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 1)" ( (binary_expression "puVar4 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)((long)puVar4 + 6) = uVar1;" (assignment_expression "*(uint *)((long)puVar4 + 6) = uVar1" (pointer_expression "*(uint *)((long)puVar4 + 6)" * (cast_expression "(uint *)((long)puVar4 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 6)" ( (binary_expression "(long)puVar4 + 6" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) }) (else_clause "else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" else (compound_statement "{\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" { (expression_statement "*puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;" (assignment_expression "*puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000" (pointer_expression "*puVar4" * identifier) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 * 0x1000000" identifier * number_literal))) ;) (expression_statement "*(undefined2 *)(puVar4 + 1) = 0x300;" (assignment_expression "*(undefined2 *)(puVar4 + 1) = 0x300" (pointer_expression "*(undefined2 *)(puVar4 + 1)" * (cast_expression "(undefined2 *)(puVar4 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 1)" ( (binary_expression "puVar4 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;" (assignment_expression "*(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000" (pointer_expression "*(uint *)((long)puVar4 + 6)" * (cast_expression "(uint *)((long)puVar4 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 6)" ( (binary_expression "(long)puVar4 + 6" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8" (binary_expression "uVar1 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff0000) >> 8" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00) << 8" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 * 0x1000000" identifier * number_literal))) ;) }))) (expression_statement "__s = (void *)((long)puVar4 + 0x1d);" (assignment_expression "__s = (void *)((long)puVar4 + 0x1d)" identifier = (cast_expression "(void *)((long)puVar4 + 0x1d)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x1d)" ( (binary_expression "(long)puVar4 + 0x1d" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "*(undefined1 *)(puVar4 + 7) = 0;" (assignment_expression "*(undefined1 *)(puVar4 + 7) = 0" (pointer_expression "*(undefined1 *)(puVar4 + 7)" * (cast_expression "(undefined1 *)(puVar4 + 7)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 7)" ( (binary_expression "puVar4 + 7" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;" (assignment_expression "*(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001" (pointer_expression "*(undefined8 *)((long)puVar4 + 10)" * (cast_expression "(undefined8 *)((long)puVar4 + 10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 10)" ( (binary_expression "(long)puVar4 + 10" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;" (assignment_expression "*(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101" (pointer_expression "*(undefined8 *)((long)puVar4 + 0x12)" * (cast_expression "(undefined8 *)((long)puVar4 + 0x12)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x12)" ( (binary_expression "(long)puVar4 + 0x12" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined2 *)((long)puVar4 + 0x1a) = 1;" (assignment_expression "*(undefined2 *)((long)puVar4 + 0x1a) = 1" (pointer_expression "*(undefined2 *)((long)puVar4 + 0x1a)" * (cast_expression "(undefined2 *)((long)puVar4 + 0x1a)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x1a)" ( (binary_expression "(long)puVar4 + 0x1a" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (if_statement "if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }" if (parenthesized_expression "((void *)((long)puVar4 + param_4) <= __s)" ( (binary_expression "(void *)((long)puVar4 + param_4) <= __s" (cast_expression "(void *)((long)puVar4 + param_4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + param_4)" ( (binary_expression "(long)puVar4 + param_4" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);" (call_expression "memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s)" identifier (argument_list "(__s,7,(long)((long)puVar4 + param_4) - (long)__s)" ( identifier , number_literal , (binary_expression "(long)((long)puVar4 + param_4) - (long)__s" (cast_expression "(long)((long)puVar4 + param_4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)puVar4 + param_4)" ( (binary_expression "(long)puVar4 + param_4" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) - (cast_expression "(long)__s" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_001f4570();" (call_expression "FUN_001f4570()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "FUN_0017c650("../../gold/output.cc",0x848,"do_write");" (call_expression "FUN_0017c650("../../gold/output.cc",0x848,"do_write")" identifier (argument_list "("../../gold/output.cc",0x848,"do_write")" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""do_write"" " string_content ") ))) ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: void do_write(Output_fill_debug_line * this, Output_file * of, off_t\n   off, size_t len) */\n\nvoid __thiscall\ngold::Output_fill_debug_line::do_write\n          (Output_fill_debug_line *this,Output_file *of,off_t off,size_t len)\n\n{\n  void *__s;\n  uint uVar1;\n  int iVar2;\n  ulong uVar3;\n  undefined4 extraout_var;\n  uint uVar4;\n  code *this_1;\n  _func_int_varargs *size;\n  _func_int_varargs *extraout_RDX;\n  uint *puVar5;\n  char *start;\n  Errors *this_00;\n  \n  start = (char *)of;\n  this_00 = (Errors *)this;\n  if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 0x10) != 0)) {\n    this_00 = parameters->errors_;\n    start = "fill_debug_line(%08lx, %08lx)";\n    Errors::debug(this_00,"fill_debug_line(%08lx, %08lx)");\n  }\n  this_1 = do_minimum_hole_size;\n  size = (this->super_Output_fill)._vptr_Output_fill[2];\n  uVar3 = 0x1d;\n  if (size != do_minimum_hole_size) {\n    this_00 = (Errors *)this;\n    iVar2 = (*size)();\n    uVar3 = CONCAT44(extraout_var,iVar2);\n    size = extraout_RDX;\n  }\n  if (uVar3 <= len) {\n    if ((-1 < off) && ((long)(len + off) <= of->file_size_)) {\n      puVar5 = (uint *)(of->base_ + off);\n      uVar4 = (int)len - 4;\n      uVar1 = (int)len - 10;\n      if ((this->super_Output_fill).is_big_endian_ == false) {\n        *puVar5 = uVar4;\n        *(undefined2 *)(puVar5 + 1) = 3;\n        *(uint *)((long)puVar5 + 6) = uVar1;\n      }\n      else {\n        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;\n        *(undefined2 *)(puVar5 + 1) = 0x300;\n        *(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar5 + 0x1d);\n      *(undefined1 *)(puVar5 + 7) = 0;\n      *(undefined8 *)((long)puVar5 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar5 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar5 + 0x1a) = 1;\n      if ((void *)((long)puVar5 + len) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar5 + len) - (long)__s);\n      return;\n    }\n    Output_file::get_output_view\n              ((Output_file *)this_00,(off_t)start,(size_t)size,(Output_file *)this_1);\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.cc",0x848,"do_write");\n}\n\n" comment comment (function_definition "void __thiscall\ngold::Output_fill_debug_line::do_write\n          (Output_fill_debug_line *this,Output_file *of,off_t off,size_t len)\n\n{\n  void *__s;\n  uint uVar1;\n  int iVar2;\n  ulong uVar3;\n  undefined4 extraout_var;\n  uint uVar4;\n  code *this_1;\n  _func_int_varargs *size;\n  _func_int_varargs *extraout_RDX;\n  uint *puVar5;\n  char *start;\n  Errors *this_00;\n  \n  start = (char *)of;\n  this_00 = (Errors *)this;\n  if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 0x10) != 0)) {\n    this_00 = parameters->errors_;\n    start = "fill_debug_line(%08lx, %08lx)";\n    Errors::debug(this_00,"fill_debug_line(%08lx, %08lx)");\n  }\n  this_1 = do_minimum_hole_size;\n  size = (this->super_Output_fill)._vptr_Output_fill[2];\n  uVar3 = 0x1d;\n  if (size != do_minimum_hole_size) {\n    this_00 = (Errors *)this;\n    iVar2 = (*size)();\n    uVar3 = CONCAT44(extraout_var,iVar2);\n    size = extraout_RDX;\n  }\n  if (uVar3 <= len) {\n    if ((-1 < off) && ((long)(len + off) <= of->file_size_)) {\n      puVar5 = (uint *)(of->base_ + off);\n      uVar4 = (int)len - 4;\n      uVar1 = (int)len - 10;\n      if ((this->super_Output_fill).is_big_endian_ == false) {\n        *puVar5 = uVar4;\n        *(undefined2 *)(puVar5 + 1) = 3;\n        *(uint *)((long)puVar5 + 6) = uVar1;\n      }\n      else {\n        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;\n        *(undefined2 *)(puVar5 + 1) = 0x300;\n        *(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar5 + 0x1d);\n      *(undefined1 *)(puVar5 + 7) = 0;\n      *(undefined8 *)((long)puVar5 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar5 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar5 + 0x1a) = 1;\n      if ((void *)((long)puVar5 + len) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar5 + len) - (long)__s);\n      return;\n    }\n    Output_file::get_output_view\n              ((Output_file *)this_00,(off_t)start,(size_t)size,(Output_file *)this_1);\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.cc",0x848,"do_write");\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Output_fill_debug_line::" identifier : : identifier : :) (function_declarator "do_write\n          (Output_fill_debug_line *this,Output_file *of,off_t off,size_t len)" identifier (parameter_list "(Output_fill_debug_line *this,Output_file *of,off_t off,size_t len)" ( (parameter_declaration "Output_fill_debug_line *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Output_file *of" type_identifier (pointer_declarator "*of" * identifier)) , (parameter_declaration "off_t off" type_identifier identifier) , (parameter_declaration "size_t len" primitive_type identifier) ))) (compound_statement "{\n  void *__s;\n  uint uVar1;\n  int iVar2;\n  ulong uVar3;\n  undefined4 extraout_var;\n  uint uVar4;\n  code *this_1;\n  _func_int_varargs *size;\n  _func_int_varargs *extraout_RDX;\n  uint *puVar5;\n  char *start;\n  Errors *this_00;\n  \n  start = (char *)of;\n  this_00 = (Errors *)this;\n  if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 0x10) != 0)) {\n    this_00 = parameters->errors_;\n    start = "fill_debug_line(%08lx, %08lx)";\n    Errors::debug(this_00,"fill_debug_line(%08lx, %08lx)");\n  }\n  this_1 = do_minimum_hole_size;\n  size = (this->super_Output_fill)._vptr_Output_fill[2];\n  uVar3 = 0x1d;\n  if (size != do_minimum_hole_size) {\n    this_00 = (Errors *)this;\n    iVar2 = (*size)();\n    uVar3 = CONCAT44(extraout_var,iVar2);\n    size = extraout_RDX;\n  }\n  if (uVar3 <= len) {\n    if ((-1 < off) && ((long)(len + off) <= of->file_size_)) {\n      puVar5 = (uint *)(of->base_ + off);\n      uVar4 = (int)len - 4;\n      uVar1 = (int)len - 10;\n      if ((this->super_Output_fill).is_big_endian_ == false) {\n        *puVar5 = uVar4;\n        *(undefined2 *)(puVar5 + 1) = 3;\n        *(uint *)((long)puVar5 + 6) = uVar1;\n      }\n      else {\n        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;\n        *(undefined2 *)(puVar5 + 1) = 0x300;\n        *(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar5 + 0x1d);\n      *(undefined1 *)(puVar5 + 7) = 0;\n      *(undefined8 *)((long)puVar5 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar5 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar5 + 0x1a) = 1;\n      if ((void *)((long)puVar5 + len) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar5 + len) - (long)__s);\n      return;\n    }\n    Output_file::get_output_view\n              ((Output_file *)this_00,(off_t)start,(size_t)size,(Output_file *)this_1);\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/output.cc",0x848,"do_write");\n}" { (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "undefined4 extraout_var;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "code *this_1;" type_identifier (pointer_declarator "*this_1" * identifier) ;) (declaration "_func_int_varargs *size;" type_identifier (pointer_declarator "*size" * identifier) ;) (declaration "_func_int_varargs *extraout_RDX;" type_identifier (pointer_declarator "*extraout_RDX" * identifier) ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "char *start;" primitive_type (pointer_declarator "*start" * identifier) ;) (declaration "Errors *this_00;" type_identifier (pointer_declarator "*this_00" * identifier) ;) (expression_statement "start = (char *)of;" (assignment_expression "start = (char *)of" identifier = (cast_expression "(char *)of" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "this_00 = (Errors *)this;" (assignment_expression "this_00 = (Errors *)this" identifier = (cast_expression "(Errors *)this" ( (type_descriptor "Errors *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 0x10) != 0)) {\n    this_00 = parameters->errors_;\n    start = "fill_debug_line(%08lx, %08lx)";\n    Errors::debug(this_00,"fill_debug_line(%08lx, %08lx)");\n  }" if (parenthesized_expression "((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 0x10) != 0))" ( (binary_expression "(parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 0x10) != 0)" (parenthesized_expression "(parameters->options_ != (General_options *)0x0)" ( (binary_expression "parameters->options_ != (General_options *)0x0" (field_expression "parameters->options_" identifier -> field_identifier) != (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "((parameters->debug_ & 0x10) != 0)" ( (binary_expression "(parameters->debug_ & 0x10) != 0" (parenthesized_expression "(parameters->debug_ & 0x10)" ( (binary_expression "parameters->debug_ & 0x10" (field_expression "parameters->debug_" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    this_00 = parameters->errors_;\n    start = "fill_debug_line(%08lx, %08lx)";\n    Errors::debug(this_00,"fill_debug_line(%08lx, %08lx)");\n  }" { (expression_statement "this_00 = parameters->errors_;" (assignment_expression "this_00 = parameters->errors_" identifier = (field_expression "parameters->errors_" identifier -> field_identifier)) ;) (expression_statement "start = "fill_debug_line(%08lx, %08lx)";" (assignment_expression "start = "fill_debug_line(%08lx, %08lx)"" identifier = (string_literal ""fill_debug_line(%08lx, %08lx)"" " string_content ")) ;) (labeled_statement "Errors::debug(this_00,"fill_debug_line(%08lx, %08lx)");" statement_identifier : (ERROR ":" :) (expression_statement "debug(this_00,"fill_debug_line(%08lx, %08lx)");" (call_expression "debug(this_00,"fill_debug_line(%08lx, %08lx)")" identifier (argument_list "(this_00,"fill_debug_line(%08lx, %08lx)")" ( identifier , (string_literal ""fill_debug_line(%08lx, %08lx)"" " string_content ") ))) ;)) })) (expression_statement "this_1 = do_minimum_hole_size;" (assignment_expression "this_1 = do_minimum_hole_size" identifier = identifier) ;) (expression_statement "size = (this->super_Output_fill)._vptr_Output_fill[2];" (assignment_expression "size = (this->super_Output_fill)._vptr_Output_fill[2]" identifier = (subscript_expression "(this->super_Output_fill)._vptr_Output_fill[2]" (field_expression "(this->super_Output_fill)._vptr_Output_fill" (parenthesized_expression "(this->super_Output_fill)" ( (field_expression "this->super_Output_fill" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "uVar3 = 0x1d;" (assignment_expression "uVar3 = 0x1d" identifier = number_literal) ;) (if_statement "if (size != do_minimum_hole_size) {\n    this_00 = (Errors *)this;\n    iVar2 = (*size)();\n    uVar3 = CONCAT44(extraout_var,iVar2);\n    size = extraout_RDX;\n  }" if (parenthesized_expression "(size != do_minimum_hole_size)" ( (binary_expression "size != do_minimum_hole_size" identifier != identifier) )) (compound_statement "{\n    this_00 = (Errors *)this;\n    iVar2 = (*size)();\n    uVar3 = CONCAT44(extraout_var,iVar2);\n    size = extraout_RDX;\n  }" { (expression_statement "this_00 = (Errors *)this;" (assignment_expression "this_00 = (Errors *)this" identifier = (cast_expression "(Errors *)this" ( (type_descriptor "Errors *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "iVar2 = (*size)();" (assignment_expression "iVar2 = (*size)()" identifier = (call_expression "(*size)()" (parenthesized_expression "(*size)" ( (pointer_expression "*size" * identifier) )) (argument_list "()" ( )))) ;) (expression_statement "uVar3 = CONCAT44(extraout_var,iVar2);" (assignment_expression "uVar3 = CONCAT44(extraout_var,iVar2)" identifier = (call_expression "CONCAT44(extraout_var,iVar2)" identifier (argument_list "(extraout_var,iVar2)" ( identifier , identifier )))) ;) (expression_statement "size = extraout_RDX;" (assignment_expression "size = extraout_RDX" identifier = identifier) ;) })) (if_statement "if (uVar3 <= len) {\n    if ((-1 < off) && ((long)(len + off) <= of->file_size_)) {\n      puVar5 = (uint *)(of->base_ + off);\n      uVar4 = (int)len - 4;\n      uVar1 = (int)len - 10;\n      if ((this->super_Output_fill).is_big_endian_ == false) {\n        *puVar5 = uVar4;\n        *(undefined2 *)(puVar5 + 1) = 3;\n        *(uint *)((long)puVar5 + 6) = uVar1;\n      }\n      else {\n        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;\n        *(undefined2 *)(puVar5 + 1) = 0x300;\n        *(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar5 + 0x1d);\n      *(undefined1 *)(puVar5 + 7) = 0;\n      *(undefined8 *)((long)puVar5 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar5 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar5 + 0x1a) = 1;\n      if ((void *)((long)puVar5 + len) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar5 + len) - (long)__s);\n      return;\n    }\n    Output_file::get_output_view\n              ((Output_file *)this_00,(off_t)start,(size_t)size,(Output_file *)this_1);\n  }" if (parenthesized_expression "(uVar3 <= len)" ( (binary_expression "uVar3 <= len" identifier <= identifier) )) (compound_statement "{\n    if ((-1 < off) && ((long)(len + off) <= of->file_size_)) {\n      puVar5 = (uint *)(of->base_ + off);\n      uVar4 = (int)len - 4;\n      uVar1 = (int)len - 10;\n      if ((this->super_Output_fill).is_big_endian_ == false) {\n        *puVar5 = uVar4;\n        *(undefined2 *)(puVar5 + 1) = 3;\n        *(uint *)((long)puVar5 + 6) = uVar1;\n      }\n      else {\n        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;\n        *(undefined2 *)(puVar5 + 1) = 0x300;\n        *(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar5 + 0x1d);\n      *(undefined1 *)(puVar5 + 7) = 0;\n      *(undefined8 *)((long)puVar5 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar5 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar5 + 0x1a) = 1;\n      if ((void *)((long)puVar5 + len) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar5 + len) - (long)__s);\n      return;\n    }\n    Output_file::get_output_view\n              ((Output_file *)this_00,(off_t)start,(size_t)size,(Output_file *)this_1);\n  }" { (if_statement "if ((-1 < off) && ((long)(len + off) <= of->file_size_)) {\n      puVar5 = (uint *)(of->base_ + off);\n      uVar4 = (int)len - 4;\n      uVar1 = (int)len - 10;\n      if ((this->super_Output_fill).is_big_endian_ == false) {\n        *puVar5 = uVar4;\n        *(undefined2 *)(puVar5 + 1) = 3;\n        *(uint *)((long)puVar5 + 6) = uVar1;\n      }\n      else {\n        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;\n        *(undefined2 *)(puVar5 + 1) = 0x300;\n        *(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar5 + 0x1d);\n      *(undefined1 *)(puVar5 + 7) = 0;\n      *(undefined8 *)((long)puVar5 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar5 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar5 + 0x1a) = 1;\n      if ((void *)((long)puVar5 + len) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar5 + len) - (long)__s);\n      return;\n    }" if (parenthesized_expression "((-1 < off) && ((long)(len + off) <= of->file_size_))" ( (binary_expression "(-1 < off) && ((long)(len + off) <= of->file_size_)" (parenthesized_expression "(-1 < off)" ( (binary_expression "-1 < off" number_literal < identifier) )) && (parenthesized_expression "((long)(len + off) <= of->file_size_)" ( (binary_expression "(long)(len + off) <= of->file_size_" (cast_expression "(long)(len + off)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(len + off)" ( (binary_expression "len + off" identifier + identifier) ))) <= (field_expression "of->file_size_" identifier -> field_identifier)) ))) )) (compound_statement "{\n      puVar5 = (uint *)(of->base_ + off);\n      uVar4 = (int)len - 4;\n      uVar1 = (int)len - 10;\n      if ((this->super_Output_fill).is_big_endian_ == false) {\n        *puVar5 = uVar4;\n        *(undefined2 *)(puVar5 + 1) = 3;\n        *(uint *)((long)puVar5 + 6) = uVar1;\n      }\n      else {\n        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;\n        *(undefined2 *)(puVar5 + 1) = 0x300;\n        *(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar5 + 0x1d);\n      *(undefined1 *)(puVar5 + 7) = 0;\n      *(undefined8 *)((long)puVar5 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar5 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar5 + 0x1a) = 1;\n      if ((void *)((long)puVar5 + len) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar5 + len) - (long)__s);\n      return;\n    }" { (expression_statement "puVar5 = (uint *)(of->base_ + off);" (assignment_expression "puVar5 = (uint *)(of->base_ + off)" identifier = (cast_expression "(uint *)(of->base_ + off)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(of->base_ + off)" ( (binary_expression "of->base_ + off" (field_expression "of->base_" identifier -> field_identifier) + identifier) )))) ;) (expression_statement "uVar4 = (int)len - 4;" (assignment_expression "uVar4 = (int)len - 4" identifier = (binary_expression "(int)len - 4" (cast_expression "(int)len" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal)) ;) (expression_statement "uVar1 = (int)len - 10;" (assignment_expression "uVar1 = (int)len - 10" identifier = (binary_expression "(int)len - 10" (cast_expression "(int)len" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal)) ;) (if_statement "if ((this->super_Output_fill).is_big_endian_ == false) {\n        *puVar5 = uVar4;\n        *(undefined2 *)(puVar5 + 1) = 3;\n        *(uint *)((long)puVar5 + 6) = uVar1;\n      }\n      else {\n        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;\n        *(undefined2 *)(puVar5 + 1) = 0x300;\n        *(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" if (parenthesized_expression "((this->super_Output_fill).is_big_endian_ == false)" ( (binary_expression "(this->super_Output_fill).is_big_endian_ == false" (field_expression "(this->super_Output_fill).is_big_endian_" (parenthesized_expression "(this->super_Output_fill)" ( (field_expression "this->super_Output_fill" identifier -> field_identifier) )) . field_identifier) == false) )) (compound_statement "{\n        *puVar5 = uVar4;\n        *(undefined2 *)(puVar5 + 1) = 3;\n        *(uint *)((long)puVar5 + 6) = uVar1;\n      }" { (expression_statement "*puVar5 = uVar4;" (assignment_expression "*puVar5 = uVar4" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "*(undefined2 *)(puVar5 + 1) = 3;" (assignment_expression "*(undefined2 *)(puVar5 + 1) = 3" (pointer_expression "*(undefined2 *)(puVar5 + 1)" * (cast_expression "(undefined2 *)(puVar5 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 1)" ( (binary_expression "puVar5 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)((long)puVar5 + 6) = uVar1;" (assignment_expression "*(uint *)((long)puVar5 + 6) = uVar1" (pointer_expression "*(uint *)((long)puVar5 + 6)" * (cast_expression "(uint *)((long)puVar5 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar5 + 6)" ( (binary_expression "(long)puVar5 + 6" (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) }) (else_clause "else {\n        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;\n        *(undefined2 *)(puVar5 + 1) = 0x300;\n        *(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" else (compound_statement "{\n        *puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;\n        *(undefined2 *)(puVar5 + 1) = 0x300;\n        *(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" { (expression_statement "*puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000;" (assignment_expression "*puVar5 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000" (pointer_expression "*puVar5" * identifier) = (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                  uVar4 * 0x1000000" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 * 0x1000000" identifier * number_literal))) ;) (expression_statement "*(undefined2 *)(puVar5 + 1) = 0x300;" (assignment_expression "*(undefined2 *)(puVar5 + 1) = 0x300" (pointer_expression "*(undefined2 *)(puVar5 + 1)" * (cast_expression "(undefined2 *)(puVar5 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 1)" ( (binary_expression "puVar5 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;" (assignment_expression "*(uint *)((long)puVar5 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000" (pointer_expression "*(uint *)((long)puVar5 + 6)" * (cast_expression "(uint *)((long)puVar5 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar5 + 6)" ( (binary_expression "(long)puVar5 + 6" (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8" (binary_expression "uVar1 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff0000) >> 8" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00) << 8" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 * 0x1000000" identifier * number_literal))) ;) }))) (expression_statement "__s = (void *)((long)puVar5 + 0x1d);" (assignment_expression "__s = (void *)((long)puVar5 + 0x1d)" identifier = (cast_expression "(void *)((long)puVar5 + 0x1d)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar5 + 0x1d)" ( (binary_expression "(long)puVar5 + 0x1d" (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "*(undefined1 *)(puVar5 + 7) = 0;" (assignment_expression "*(undefined1 *)(puVar5 + 7) = 0" (pointer_expression "*(undefined1 *)(puVar5 + 7)" * (cast_expression "(undefined1 *)(puVar5 + 7)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 7)" ( (binary_expression "puVar5 + 7" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)((long)puVar5 + 10) = 0x101000d05000001;" (assignment_expression "*(undefined8 *)((long)puVar5 + 10) = 0x101000d05000001" (pointer_expression "*(undefined8 *)((long)puVar5 + 10)" * (cast_expression "(undefined8 *)((long)puVar5 + 10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar5 + 10)" ( (binary_expression "(long)puVar5 + 10" (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)((long)puVar5 + 0x12) = 0x10000000101;" (assignment_expression "*(undefined8 *)((long)puVar5 + 0x12) = 0x10000000101" (pointer_expression "*(undefined8 *)((long)puVar5 + 0x12)" * (cast_expression "(undefined8 *)((long)puVar5 + 0x12)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar5 + 0x12)" ( (binary_expression "(long)puVar5 + 0x12" (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined2 *)((long)puVar5 + 0x1a) = 1;" (assignment_expression "*(undefined2 *)((long)puVar5 + 0x1a) = 1" (pointer_expression "*(undefined2 *)((long)puVar5 + 0x1a)" * (cast_expression "(undefined2 *)((long)puVar5 + 0x1a)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar5 + 0x1a)" ( (binary_expression "(long)puVar5 + 0x1a" (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (if_statement "if ((void *)((long)puVar5 + len) <= __s) {\n        return;\n      }" if (parenthesized_expression "((void *)((long)puVar5 + len) <= __s)" ( (binary_expression "(void *)((long)puVar5 + len) <= __s" (cast_expression "(void *)((long)puVar5 + len)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar5 + len)" ( (binary_expression "(long)puVar5 + len" (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "memset(__s,7,(long)((long)puVar5 + len) - (long)__s);" (call_expression "memset(__s,7,(long)((long)puVar5 + len) - (long)__s)" identifier (argument_list "(__s,7,(long)((long)puVar5 + len) - (long)__s)" ( identifier , number_literal , (binary_expression "(long)((long)puVar5 + len) - (long)__s" (cast_expression "(long)((long)puVar5 + len)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)puVar5 + len)" ( (binary_expression "(long)puVar5 + len" (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) - (cast_expression "(long)__s" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) (return_statement "return;" return ;) })) (labeled_statement "Output_file::get_output_view\n              ((Output_file *)this_00,(off_t)start,(size_t)size,(Output_file *)this_1);" statement_identifier : (ERROR ":" :) (expression_statement "get_output_view\n              ((Output_file *)this_00,(off_t)start,(size_t)size,(Output_file *)this_1);" (call_expression "get_output_view\n              ((Output_file *)this_00,(off_t)start,(size_t)size,(Output_file *)this_1)" identifier (argument_list "((Output_file *)this_00,(off_t)start,(size_t)size,(Output_file *)this_1)" ( (cast_expression "(Output_file *)this_00" ( (type_descriptor "Output_file *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(off_t)start" ( (type_descriptor "off_t" type_identifier) ) identifier) , (cast_expression "(size_t)size" ( (type_descriptor "size_t" primitive_type) ) identifier) , (cast_expression "(Output_file *)this_1" ( (type_descriptor "Output_file *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;)) })) comment (expression_statement "do_gold_unreachable("../../gold/output.cc",0x848,"do_write");" (call_expression "do_gold_unreachable("../../gold/output.cc",0x848,"do_write")" identifier (argument_list "("../../gold/output.cc",0x848,"do_write")" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""do_write"" " string_content ") ))) ;) })))
(translation_unit "void FUN_001f4bc0(long *param_1,long param_2,long param_3,ulong param_4)\n\n{\n  void *__s;\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  uint *puVar4;\n  \n  if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }\n  uVar2 = 0x1d;\n  if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }\n  if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }\n                    \n  FUN_0017c650("../../gold/output.cc",0x848,"do_write");\n}\n\n" (function_definition "void FUN_001f4bc0(long *param_1,long param_2,long param_3,ulong param_4)\n\n{\n  void *__s;\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  uint *puVar4;\n  \n  if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }\n  uVar2 = 0x1d;\n  if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }\n  if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }\n                    \n  FUN_0017c650("../../gold/output.cc",0x848,"do_write");\n}" primitive_type (function_declarator "FUN_001f4bc0(long *param_1,long param_2,long param_3,ulong param_4)" identifier (parameter_list "(long *param_1,long param_2,long param_3,ulong param_4)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) ))) (compound_statement "{\n  void *__s;\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  uint *puVar4;\n  \n  if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }\n  uVar2 = 0x1d;\n  if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }\n  if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }\n                    \n  FUN_0017c650("../../gold/output.cc",0x848,"do_write");\n}" { (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (if_statement "if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }" if (parenthesized_expression "((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0))" ( (binary_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x10" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)" ( (binary_expression "(PTR_DAT_0043e6b0[0x24] & 0x10) != 0" (parenthesized_expression "(PTR_DAT_0043e6b0[0x24] & 0x10)" ( (binary_expression "PTR_DAT_0043e6b0[0x24] & 0x10" (subscript_expression "PTR_DAT_0043e6b0[0x24]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }" { (expression_statement "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");" (call_expression "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)")" identifier (argument_list "(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)")" ( (pointer_expression "*(undefined8 *)PTR_DAT_0043e6b0" * (cast_expression "(undefined8 *)PTR_DAT_0043e6b0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (string_literal ""fill_debug_line(%08lx, %08lx)"" " string_content ") ))) ;) })) (expression_statement "uVar2 = 0x1d;" (assignment_expression "uVar2 = 0x1d" identifier = number_literal) ;) (if_statement "if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }" if (parenthesized_expression "(*(code **)(*param_1 + 0x10) != FUN_001f44c0)" ( (binary_expression "*(code **)(*param_1 + 0x10) != FUN_001f44c0" (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) != identifier) )) (compound_statement "{\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }" { (expression_statement "uVar2 = (**(code **)(*param_1 + 0x10))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x10))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x10))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) })) (if_statement "if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }" if (parenthesized_expression "(uVar2 <= param_4)" ( (binary_expression "uVar2 <= param_4" identifier <= identifier) )) (compound_statement "{\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }" { (if_statement "if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }" if (parenthesized_expression "((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10)))" ( (binary_expression "(-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))" (parenthesized_expression "(-1 < param_3)" ( (binary_expression "-1 < param_3" number_literal < identifier) )) && (parenthesized_expression "((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))" ( (binary_expression "(long)(param_4 + param_3) <= *(long *)(param_2 + 0x10)" (cast_expression "(long)(param_4 + param_3)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_4 + param_3)" ( (binary_expression "param_4 + param_3" identifier + identifier) ))) <= (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) ))))) ))) )) (compound_statement "{\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }" { (expression_statement "puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));" (assignment_expression "puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18))" identifier = (cast_expression "(uint *)(param_3 + *(long *)(param_2 + 0x18))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + *(long *)(param_2 + 0x18))" ( (binary_expression "param_3 + *(long *)(param_2 + 0x18)" identifier + (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) ))))) )))) ;) (expression_statement "uVar3 = (int)param_4 - 4;" (assignment_expression "uVar3 = (int)param_4 - 4" identifier = (binary_expression "(int)param_4 - 4" (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal)) ;) (expression_statement "uVar1 = (int)param_4 - 10;" (assignment_expression "uVar1 = (int)param_4 - 10" identifier = (binary_expression "(int)param_4 - 10" (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal)) ;) (if_statement "if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" if (parenthesized_expression "((char)param_1[1] == '\0')" ( (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }" { (expression_statement "*puVar4 = uVar3;" (assignment_expression "*puVar4 = uVar3" (pointer_expression "*puVar4" * identifier) = identifier) ;) (expression_statement "*(undefined2 *)(puVar4 + 1) = 3;" (assignment_expression "*(undefined2 *)(puVar4 + 1) = 3" (pointer_expression "*(undefined2 *)(puVar4 + 1)" * (cast_expression "(undefined2 *)(puVar4 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 1)" ( (binary_expression "puVar4 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)((long)puVar4 + 6) = uVar1;" (assignment_expression "*(uint *)((long)puVar4 + 6) = uVar1" (pointer_expression "*(uint *)((long)puVar4 + 6)" * (cast_expression "(uint *)((long)puVar4 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 6)" ( (binary_expression "(long)puVar4 + 6" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) }) (else_clause "else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" else (compound_statement "{\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" { (expression_statement "*puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;" (assignment_expression "*puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000" (pointer_expression "*puVar4" * identifier) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 * 0x1000000" identifier * number_literal))) ;) (expression_statement "*(undefined2 *)(puVar4 + 1) = 0x300;" (assignment_expression "*(undefined2 *)(puVar4 + 1) = 0x300" (pointer_expression "*(undefined2 *)(puVar4 + 1)" * (cast_expression "(undefined2 *)(puVar4 + 1)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 1)" ( (binary_expression "puVar4 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;" (assignment_expression "*(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000" (pointer_expression "*(uint *)((long)puVar4 + 6)" * (cast_expression "(uint *)((long)puVar4 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 6)" ( (binary_expression "(long)puVar4 + 6" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8" (binary_expression "uVar1 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff0000) >> 8" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00) << 8" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 * 0x1000000" identifier * number_literal))) ;) }))) (expression_statement "__s = (void *)((long)puVar4 + 0x1d);" (assignment_expression "__s = (void *)((long)puVar4 + 0x1d)" identifier = (cast_expression "(void *)((long)puVar4 + 0x1d)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x1d)" ( (binary_expression "(long)puVar4 + 0x1d" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "*(undefined1 *)(puVar4 + 7) = 0;" (assignment_expression "*(undefined1 *)(puVar4 + 7) = 0" (pointer_expression "*(undefined1 *)(puVar4 + 7)" * (cast_expression "(undefined1 *)(puVar4 + 7)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 7)" ( (binary_expression "puVar4 + 7" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;" (assignment_expression "*(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001" (pointer_expression "*(undefined8 *)((long)puVar4 + 10)" * (cast_expression "(undefined8 *)((long)puVar4 + 10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 10)" ( (binary_expression "(long)puVar4 + 10" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;" (assignment_expression "*(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101" (pointer_expression "*(undefined8 *)((long)puVar4 + 0x12)" * (cast_expression "(undefined8 *)((long)puVar4 + 0x12)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x12)" ( (binary_expression "(long)puVar4 + 0x12" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined2 *)((long)puVar4 + 0x1a) = 1;" (assignment_expression "*(undefined2 *)((long)puVar4 + 0x1a) = 1" (pointer_expression "*(undefined2 *)((long)puVar4 + 0x1a)" * (cast_expression "(undefined2 *)((long)puVar4 + 0x1a)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x1a)" ( (binary_expression "(long)puVar4 + 0x1a" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (if_statement "if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }" if (parenthesized_expression "((void *)((long)puVar4 + param_4) <= __s)" ( (binary_expression "(void *)((long)puVar4 + param_4) <= __s" (cast_expression "(void *)((long)puVar4 + param_4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + param_4)" ( (binary_expression "(long)puVar4 + param_4" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);" (call_expression "memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s)" identifier (argument_list "(__s,7,(long)((long)puVar4 + param_4) - (long)__s)" ( identifier , number_literal , (binary_expression "(long)((long)puVar4 + param_4) - (long)__s" (cast_expression "(long)((long)puVar4 + param_4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((long)puVar4 + param_4)" ( (binary_expression "(long)puVar4 + param_4" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) - (cast_expression "(long)__s" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_001f4570();" (call_expression "FUN_001f4570()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_0017c650("../../gold/output.cc",0x848,"do_write");" (call_expression "FUN_0017c650("../../gold/output.cc",0x848,"do_write")" identifier (argument_list "("../../gold/output.cc",0x848,"do_write")" ( (string_literal ""../../gold/output.cc"" " string_content ") , number_literal , (string_literal ""do_write"" " string_content ") ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_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 )))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))) <= (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT * LIT))) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))) <= IDENT) )) (compound_statement { (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ;) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })))
(function_definition "void FUN_001f4bc0(long *param_1,long param_2,long param_3,ulong param_4)\n\n{\n  void *__s;\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  uint *puVar4;\n  \n  if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }\n  uVar2 = 0x1d;\n  if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }\n  if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }\n                    \n  FUN_0017c650("../../gold/output.cc",0x848,"do_write");\n}" (primitive_type "void") (function_declarator "FUN_001f4bc0(long *param_1,long param_2,long param_3,ulong param_4)" (identifier "FUN_001f4bc0") (parameter_list "(long *param_1,long param_2,long param_3,ulong param_4)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "ulong param_4" (type_identifier "ulong") (identifier "param_4")) () ")"))) (compound_statement "{\n  void *__s;\n  uint uVar1;\n  ulong uVar2;\n  uint uVar3;\n  uint *puVar4;\n  \n  if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }\n  uVar2 = 0x1d;\n  if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }\n  if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }\n                    \n  FUN_0017c650("../../gold/output.cc",0x848,"do_write");\n}" ({ "{") (declaration "void *__s;" (primitive_type "void") (pointer_declarator "*__s" (* "*") (identifier "__s")) (; ";")) (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint *puVar4;" (type_identifier "uint") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (if_statement "if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }" (if "if") (parenthesized_expression "((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0))" (( "(") (binary_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" (( "(") (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" (( "(") (binary_expression "PTR_DAT_0043e6b0 + 0x10" (identifier "PTR_DAT_0043e6b0") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)" (( "(") (binary_expression "(PTR_DAT_0043e6b0[0x24] & 0x10) != 0" (parenthesized_expression "(PTR_DAT_0043e6b0[0x24] & 0x10)" (( "(") (binary_expression "PTR_DAT_0043e6b0[0x24] & 0x10" (subscript_expression "PTR_DAT_0043e6b0[0x24]" (identifier "PTR_DAT_0043e6b0") ([ "[") (number_literal "0x24") (] "]")) (& "&") (number_literal "0x10")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");\n  }" ({ "{") (expression_statement "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");" (call_expression "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)")" (identifier "FUN_00178100") (argument_list "(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)")" (( "(") (pointer_expression "*(undefined8 *)PTR_DAT_0043e6b0" (* "*") (cast_expression "(undefined8 *)PTR_DAT_0043e6b0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_DAT_0043e6b0"))) (, ",") (string_literal ""fill_debug_line(%08lx, %08lx)"" (" """) (string_content "fill_debug_line(%08lx, %08lx)") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar2 = 0x1d;" (assignment_expression "uVar2 = 0x1d" (identifier "uVar2") (= "=") (number_literal "0x1d")) (; ";")) (if_statement "if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }" (if "if") (parenthesized_expression "(*(code **)(*param_1 + 0x10) != FUN_001f44c0)" (( "(") (binary_expression "*(code **)(*param_1 + 0x10) != FUN_001f44c0" (pointer_expression "*(code **)(*param_1 + 0x10)" (* "*") (cast_expression "(code **)(*param_1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (identifier "FUN_001f44c0")) () ")")) (compound_statement "{\n    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);\n  }" ({ "{") (expression_statement "uVar2 = (**(code **)(*param_1 + 0x10))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x10))(param_1)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(*param_1 + 0x10))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x10)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x10)" (* "*") (cast_expression "(code **)(*param_1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (} "}"))) (if_statement "if (uVar2 <= param_4) {\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }" (if "if") (parenthesized_expression "(uVar2 <= param_4)" (( "(") (binary_expression "uVar2 <= param_4" (identifier "uVar2") (<= "<=") (identifier "param_4")) () ")")) (compound_statement "{\n    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }\n    FUN_001f4570();\n  }" ({ "{") (if_statement "if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }" (if "if") (parenthesized_expression "((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10)))" (( "(") (binary_expression "(-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))" (parenthesized_expression "(-1 < param_3)" (( "(") (binary_expression "-1 < param_3" (number_literal "-1") (< "<") (identifier "param_3")) () ")")) (&& "&&") (parenthesized_expression "((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))" (( "(") (binary_expression "(long)(param_4 + param_3) <= *(long *)(param_2 + 0x10)" (cast_expression "(long)(param_4 + param_3)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(param_4 + param_3)" (( "(") (binary_expression "param_4 + param_3" (identifier "param_4") (+ "+") (identifier "param_3")) () ")"))) (<= "<=") (pointer_expression "*(long *)(param_2 + 0x10)" (* "*") (cast_expression "(long *)(param_2 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));\n      uVar3 = (int)param_4 - 4;\n      uVar1 = (int)param_4 - 10;\n      if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }\n      __s = (void *)((long)puVar4 + 0x1d);\n      *(undefined1 *)(puVar4 + 7) = 0;\n      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;\n      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;\n      *(undefined2 *)((long)puVar4 + 0x1a) = 1;\n      if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }\n      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);\n      return;\n    }" ({ "{") (expression_statement "puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));" (assignment_expression "puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18))" (identifier "puVar4") (= "=") (cast_expression "(uint *)(param_3 + *(long *)(param_2 + 0x18))" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + *(long *)(param_2 + 0x18))" (( "(") (binary_expression "param_3 + *(long *)(param_2 + 0x18)" (identifier "param_3") (+ "+") (pointer_expression "*(long *)(param_2 + 0x18)" (* "*") (cast_expression "(long *)(param_2 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")"))))) () ")")))) (; ";")) (expression_statement "uVar3 = (int)param_4 - 4;" (assignment_expression "uVar3 = (int)param_4 - 4" (identifier "uVar3") (= "=") (binary_expression "(int)param_4 - 4" (cast_expression "(int)param_4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_4")) (- "-") (number_literal "4"))) (; ";")) (expression_statement "uVar1 = (int)param_4 - 10;" (assignment_expression "uVar1 = (int)param_4 - 10" (identifier "uVar1") (= "=") (binary_expression "(int)param_4 - 10" (cast_expression "(int)param_4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_4")) (- "-") (number_literal "10"))) (; ";")) (if_statement "if ((char)param_1[1] == '\0') {\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }\n      else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" (if "if") (parenthesized_expression "((char)param_1[1] == '\0')" (( "(") (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        *puVar4 = uVar3;\n        *(undefined2 *)(puVar4 + 1) = 3;\n        *(uint *)((long)puVar4 + 6) = uVar1;\n      }" ({ "{") (expression_statement "*puVar4 = uVar3;" (assignment_expression "*puVar4 = uVar3" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "*(undefined2 *)(puVar4 + 1) = 3;" (assignment_expression "*(undefined2 *)(puVar4 + 1) = 3" (pointer_expression "*(undefined2 *)(puVar4 + 1)" (* "*") (cast_expression "(undefined2 *)(puVar4 + 1)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 1)" (( "(") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "3")) (; ";")) (expression_statement "*(uint *)((long)puVar4 + 6) = uVar1;" (assignment_expression "*(uint *)((long)puVar4 + 6) = uVar1" (pointer_expression "*(uint *)((long)puVar4 + 6)" (* "*") (cast_expression "(uint *)((long)puVar4 + 6)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 6)" (( "(") (binary_expression "(long)puVar4 + 6" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "6")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (} "}")) (else_clause "else {\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" (else "else") (compound_statement "{\n        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;\n        *(undefined2 *)(puVar4 + 1) = 0x300;\n        *(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;\n      }" ({ "{") (expression_statement "*puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000;" (assignment_expression "*puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n                  uVar3 * 0x1000000" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" (identifier "uVar3") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" (( "(") (binary_expression "uVar3 & 0xff0000" (identifier "uVar3") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" (( "(") (binary_expression "uVar3 & 0xff00" (identifier "uVar3") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar3 * 0x1000000" (identifier "uVar3") (* "*") (number_literal "0x1000000")))) (; ";")) (expression_statement "*(undefined2 *)(puVar4 + 1) = 0x300;" (assignment_expression "*(undefined2 *)(puVar4 + 1) = 0x300" (pointer_expression "*(undefined2 *)(puVar4 + 1)" (* "*") (cast_expression "(undefined2 *)(puVar4 + 1)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 1)" (( "(") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "0x300")) (; ";")) (expression_statement "*(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;" (assignment_expression "*(uint *)((long)puVar4 + 6) =\n             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000" (pointer_expression "*(uint *)((long)puVar4 + 6)" (* "*") (cast_expression "(uint *)((long)puVar4 + 6)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 6)" (( "(") (binary_expression "(long)puVar4 + 6" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "6")) () ")")))) (= "=") (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8" (binary_expression "uVar1 >> 0x18" (identifier "uVar1") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar1 & 0xff0000) >> 8" (parenthesized_expression "(uVar1 & 0xff0000)" (( "(") (binary_expression "uVar1 & 0xff0000" (identifier "uVar1") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar1 & 0xff00) << 8" (parenthesized_expression "(uVar1 & 0xff00)" (( "(") (binary_expression "uVar1 & 0xff00" (identifier "uVar1") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar1 * 0x1000000" (identifier "uVar1") (* "*") (number_literal "0x1000000")))) (; ";")) (} "}")))) (expression_statement "__s = (void *)((long)puVar4 + 0x1d);" (assignment_expression "__s = (void *)((long)puVar4 + 0x1d)" (identifier "__s") (= "=") (cast_expression "(void *)((long)puVar4 + 0x1d)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 0x1d)" (( "(") (binary_expression "(long)puVar4 + 0x1d" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "0x1d")) () ")")))) (; ";")) (expression_statement "*(undefined1 *)(puVar4 + 7) = 0;" (assignment_expression "*(undefined1 *)(puVar4 + 7) = 0" (pointer_expression "*(undefined1 *)(puVar4 + 7)" (* "*") (cast_expression "(undefined1 *)(puVar4 + 7)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 7)" (( "(") (binary_expression "puVar4 + 7" (identifier "puVar4") (+ "+") (number_literal "7")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;" (assignment_expression "*(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001" (pointer_expression "*(undefined8 *)((long)puVar4 + 10)" (* "*") (cast_expression "(undefined8 *)((long)puVar4 + 10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 10)" (( "(") (binary_expression "(long)puVar4 + 10" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "10")) () ")")))) (= "=") (number_literal "0x101000d05000001")) (; ";")) (expression_statement "*(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;" (assignment_expression "*(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101" (pointer_expression "*(undefined8 *)((long)puVar4 + 0x12)" (* "*") (cast_expression "(undefined8 *)((long)puVar4 + 0x12)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 0x12)" (( "(") (binary_expression "(long)puVar4 + 0x12" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "0x12")) () ")")))) (= "=") (number_literal "0x10000000101")) (; ";")) (expression_statement "*(undefined2 *)((long)puVar4 + 0x1a) = 1;" (assignment_expression "*(undefined2 *)((long)puVar4 + 0x1a) = 1" (pointer_expression "*(undefined2 *)((long)puVar4 + 0x1a)" (* "*") (cast_expression "(undefined2 *)((long)puVar4 + 0x1a)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 0x1a)" (( "(") (binary_expression "(long)puVar4 + 0x1a" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "0x1a")) () ")")))) (= "=") (number_literal "1")) (; ";")) (if_statement "if ((void *)((long)puVar4 + param_4) <= __s) {\n        return;\n      }" (if "if") (parenthesized_expression "((void *)((long)puVar4 + param_4) <= __s)" (( "(") (binary_expression "(void *)((long)puVar4 + param_4) <= __s" (cast_expression "(void *)((long)puVar4 + param_4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + param_4)" (( "(") (binary_expression "(long)puVar4 + param_4" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (identifier "param_4")) () ")"))) (<= "<=") (identifier "__s")) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);" (call_expression "memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s)" (identifier "memset") (argument_list "(__s,7,(long)((long)puVar4 + param_4) - (long)__s)" (( "(") (identifier "__s") (, ",") (number_literal "7") (, ",") (binary_expression "(long)((long)puVar4 + param_4) - (long)__s" (cast_expression "(long)((long)puVar4 + param_4)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((long)puVar4 + param_4)" (( "(") (binary_expression "(long)puVar4 + param_4" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (identifier "param_4")) () ")"))) (- "-") (cast_expression "(long)__s" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__s"))) () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_001f4570();" (call_expression "FUN_001f4570()" (identifier "FUN_001f4570") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_0017c650("../../gold/output.cc",0x848,"do_write");" (call_expression "FUN_0017c650("../../gold/output.cc",0x848,"do_write")" (identifier "FUN_0017c650") (argument_list "("../../gold/output.cc",0x848,"do_write")" (( "(") (string_literal ""../../gold/output.cc"" (" """) (string_content "../../gold/output.cc") (" """)) (, ",") (number_literal "0x848") (, ",") (string_literal ""do_write"" (" """) (string_content "do_write") (" """)) () ")"))) (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void do_write(Output_fill_debug_line * this, Output_file * of, off_t
   off, size_t len) */

void __thiscall
gold::type_1::function_1
          (type_1 *this,type_2 *of,type_3 var_7,size_t var_6)

{
  void *var_11;
  type_4 var_10;
  int iVar2;
  type_5 var_5;
  type_6 extraout_var;
  type_4 var_9;
  type_7 *this_1;
  type_8 *var_2;
  type_8 *extraout_RDX;
  type_4 *var_8;
  char *start;
  type_9 *this_00;
  
  start = (char *)of;
  this_00 = (type_9 *)this;
  if ((parameters->options_ != (type_10 *)0x0) && ((parameters->debug_ & 0x10) != 0)) {
    this_00 = parameters->errors_;
    start = "fill_debug_line(%08lx, %08lx)";
    Errors::var_1(this_00,"fill_debug_line(%08lx, %08lx)");
  }
  this_1 = var_3;
  var_2 = (this->super_Output_fill)._vptr_Output_fill[2];
  var_5 = 0x1d;
  if (var_2 != var_3) {
    this_00 = (type_9 *)this;
    iVar2 = (*var_2)();
    var_5 = var_4(extraout_var,iVar2);
    var_2 = extraout_RDX;
  }
  if (var_5 <= var_6) {
    if ((-1 < var_7) && ((long)(var_6 + var_7) <= of->file_size_)) {
      var_8 = (type_4 *)(of->base_ + var_7);
      var_9 = (int)var_6 - 4;
      var_10 = (int)var_6 - 10;
      if ((this->super_Output_fill).is_big_endian_ == false) {
        *var_8 = var_9;
        *(type_11 *)(var_8 + 1) = 3;
        *(type_4 *)((long)var_8 + 6) = var_10;
      }
      else {
        *var_8 = var_9 >> 0x18 | (var_9 & 0xff0000) >> 8 | (var_9 & 0xff00) << 8 |
                  var_9 * 0x1000000;
        *(type_11 *)(var_8 + 1) = 0x300;
        *(type_4 *)((long)var_8 + 6) =
             var_10 >> 0x18 | (var_10 & 0xff0000) >> 8 | (var_10 & 0xff00) << 8 | var_10 * 0x1000000;
      }
      var_11 = (void *)((long)var_8 + 0x1d);
      *(type_12 *)(var_8 + 7) = 0;
      *(type_13 *)((long)var_8 + 10) = 0x101000d05000001;
      *(type_13 *)((long)var_8 + 0x12) = 0x10000000101;
      *(type_11 *)((long)var_8 + 0x1a) = 1;
      if ((void *)((long)var_8 + var_6) <= var_11) {
        return;
      }
      var_12(var_11,7,(long)((long)var_8 + var_6) - (long)var_11);
      return;
    }
    Output_file::var_13
              ((type_2 *)this_00,(type_3)start,(size_t)var_2,(type_2 *)this_1);
  }
                    /* WARNING: Subroutine does not return */
  var_14("../../gold/output.cc",0x848,"do_write");
}


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

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

{
  void *__s;
  uint uVar1;
  ulong uVar2;
  uint uVar3;
  uint *puVar4;
  
  if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 0x10) != 0)) {
    FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"fill_debug_line(%08lx, %08lx)");
  }
  uVar2 = 0x1d;
  if (*(code **)(*param_1 + 0x10) != FUN_001f44c0) {
    uVar2 = (**(code **)(*param_1 + 0x10))(param_1);
  }
  if (uVar2 <= param_4) {
    if ((-1 < param_3) && ((long)(param_4 + param_3) <= *(long *)(param_2 + 0x10))) {
      puVar4 = (uint *)(param_3 + *(long *)(param_2 + 0x18));
      uVar3 = (int)param_4 - 4;
      uVar1 = (int)param_4 - 10;
      if ((char)param_1[1] == '\0') {
        *puVar4 = uVar3;
        *(undefined2 *)(puVar4 + 1) = 3;
        *(uint *)((long)puVar4 + 6) = uVar1;
      }
      else {
        *puVar4 = uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |
                  uVar3 * 0x1000000;
        *(undefined2 *)(puVar4 + 1) = 0x300;
        *(uint *)((long)puVar4 + 6) =
             uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 | uVar1 * 0x1000000;
      }
      __s = (void *)((long)puVar4 + 0x1d);
      *(undefined1 *)(puVar4 + 7) = 0;
      *(undefined8 *)((long)puVar4 + 10) = 0x101000d05000001;
      *(undefined8 *)((long)puVar4 + 0x12) = 0x10000000101;
      *(undefined2 *)((long)puVar4 + 0x1a) = 1;
      if ((void *)((long)puVar4 + param_4) <= __s) {
        return;
      }
      memset(__s,7,(long)((long)puVar4 + param_4) - (long)__s);
      return;
    }
    FUN_001f4570();
  }
                    /* WARNING: Subroutine does not return */
  FUN_0017c650("../../gold/output.cc",0x848,"do_write");
}

