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

void __thiscall
gold::Output_compressed_section::do_write(Output_compressed_section *this,Output_file *of)

{
  byte bVar1;
  long lVar2;
  size_t __n;
  uchar *__src;
  
  bVar1 = (this->super_Output_section).super_Output_data.field_0x20;
  if ((bVar1 & 4) == 0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/output.h",0xe3,"offset");
  }
  lVar2 = (this->super_Output_section).super_Output_data.offset_;
  if ((bVar1 & 2) == 0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/output.h",0xcf,"data_size");
  }
  __n = (this->super_Output_section).super_Output_data.data_size_;
  if ((lVar2 < 0) || (of->file_size_ < (long)(__n + lVar2))) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");
  }
  __src = this->data_;
  if ((__src == (uchar *)0x0) &&
     (__src = (this->super_Output_section).postprocessing_buffer_, __src == (uchar *)0x0)) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/output.h",0xe34,"postprocessing_buffer");
  }
  memcpy(of->base_ + lVar2,__src,__n);
  return;
}



void FUN_00296d10(long param_1,long param_2)

{
  long lVar1;
  void *__src;
  
  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/output.h",0xe3,"offset");
  }
  lVar1 = *(long *)(param_1 + 0x18);
  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/output.h",0xcf,"data_size");
  }
  if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");
  }
  __src = *(void **)(param_1 + 0x150);
  if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");
  }
  memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));
  return;
}


SUB RSP,0x8
MOVZX EDX,byte ptr [RDI + 0x20]
TEST DL,0x4
JZ 0x00296db4
AND EDX,0x2
MOV RAX,qword ptr [RDI + 0x18]
JZ 0x00296d9c
MOV RDX,qword ptr [RDI + 0x10]
TEST RAX,RAX
JS 0x00296d84
LEA RCX,[RDX + RAX*0x1]
CMP RCX,qword ptr [RSI + 0x10]
JG 0x00296d84
ADD RAX,qword ptr [RSI + 0x18]
MOV RSI,qword ptr [RDI + 0x150]
TEST RSI,RSI
JZ 0x00296d60
MOV RDI,RAX
ADD RSP,0x8
JMP 0x00147aa0
MOV RSI,qword ptr [RDI + 0xc0]
TEST RSI,RSI
JNZ 0x00296d4d
LEA RDX,[0x38af40]
MOV ESI,0xe34
LEA RDI,[0x373454]
CALL 0x0017c650
LEA RDX,[0x38aef0]
MOV ESI,0x6f
LEA RDI,[0x373454]
CALL 0x0017c650
LEA RDX,[0x38af00]
MOV ESI,0xcf
LEA RDI,[0x373454]
CALL 0x0017c650
LEA RDX,[0x38af0a]
MOV ESI,0xe3
LEA RDI,[0x373454]
CALL 0x0017c650
(translation_unit "void FUN_00296d10(long param_1,long param_2)\n\n{\n  long lVar1;\n  void *__src;\n  \n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }\n  if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = *(void **)(param_1 + 0x150);\n  if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));\n  return;\n}\n\n" (function_definition "void FUN_00296d10(long param_1,long param_2)\n\n{\n  long lVar1;\n  void *__src;\n  \n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }\n  if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = *(void **)(param_1 + 0x150);\n  if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));\n  return;\n}" primitive_type (function_declarator "FUN_00296d10(long param_1,long param_2)" identifier (parameter_list "(long param_1,long param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  void *__src;\n  \n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }\n  if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = *(void **)(param_1 + 0x150);\n  if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "void *__src;" primitive_type (pointer_declarator "*__src" * identifier) ;) (if_statement "if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 4) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 4) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 4)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 4" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }" { comment (expression_statement "FUN_0017c650("../../gold/output.h",0xe3,"offset");" (call_expression "FUN_0017c650("../../gold/output.h",0xe3,"offset")" identifier (argument_list "("../../gold/output.h",0xe3,"offset")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""offset"" " string_content ") ))) ;) })) (expression_statement "lVar1 = *(long *)(param_1 + 0x18);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x18)" identifier = (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 2) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 2) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 2)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 2" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }" { comment (expression_statement "FUN_0017c650("../../gold/output.h",0xcf,"data_size");" (call_expression "FUN_0017c650("../../gold/output.h",0xcf,"data_size")" identifier (argument_list "("../../gold/output.h",0xcf,"data_size")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""data_size"" " string_content ") ))) ;) })) (if_statement "if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }" if (parenthesized_expression "((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1)))" ( (binary_expression "(lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))" (parenthesized_expression "(lVar1 < 0)" ( (binary_expression "lVar1 < 0" identifier < number_literal) )) || (parenthesized_expression "(*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))" ( (binary_expression "*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1)" (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) )))) < (cast_expression "(long)(*(size_t *)(param_1 + 0x10) + lVar1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(*(size_t *)(param_1 + 0x10) + lVar1)" ( (binary_expression "*(size_t *)(param_1 + 0x10) + lVar1" (pointer_expression "*(size_t *)(param_1 + 0x10)" * (cast_expression "(size_t *)(param_1 + 0x10)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + identifier) )))) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }" { comment (expression_statement "FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");" (call_expression "FUN_0017c650("../../gold/output.h",0x6f,"get_output_view")" identifier (argument_list "("../../gold/output.h",0x6f,"get_output_view")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""get_output_view"" " string_content ") ))) ;) })) (expression_statement "__src = *(void **)(param_1 + 0x150);" (assignment_expression "__src = *(void **)(param_1 + 0x150)" identifier = (pointer_expression "*(void **)(param_1 + 0x150)" * (cast_expression "(void **)(param_1 + 0x150)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x150)" ( (binary_expression "param_1 + 0x150" identifier + number_literal) ))))) ;) (if_statement "if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }" if (parenthesized_expression "((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0))" ( (binary_expression "(__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)" (parenthesized_expression "(__src == (void *)0x0)" ( (binary_expression "__src == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)" ( (comma_expression "__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0" (assignment_expression "__src = *(void **)(param_1 + 0xc0)" identifier = (pointer_expression "*(void **)(param_1 + 0xc0)" * (cast_expression "(void **)(param_1 + 0xc0)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc0)" ( (binary_expression "param_1 + 0xc0" identifier + number_literal) ))))) , (binary_expression "__src == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }" { comment (expression_statement "FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");" (call_expression "FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer")" identifier (argument_list "("../../gold/output.h",0xe34,"postprocessing_buffer")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""postprocessing_buffer"" " string_content ") ))) ;) })) (expression_statement "memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));" (call_expression "memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10))" identifier (argument_list "((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10))" ( (cast_expression "(void *)(lVar1 + *(long *)(param_2 + 0x18))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + *(long *)(param_2 + 0x18))" ( (binary_expression "lVar1 + *(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) ))))) ))) , identifier , (pointer_expression "*(size_t *)(param_1 + 0x10)" * (cast_expression "(size_t *)(param_1 + 0x10)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: void do_write(Output_compressed_section * this, Output_file * of) */\n\nvoid __thiscall\ngold::Output_compressed_section::do_write(Output_compressed_section *this,Output_file *of)\n\n{\n  byte bVar1;\n  long lVar2;\n  size_t __n;\n  uchar *__src;\n  \n  bVar1 = (this->super_Output_section).super_Output_data.field_0x20;\n  if ((bVar1 & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xe3,"offset");\n  }\n  lVar2 = (this->super_Output_section).super_Output_data.offset_;\n  if ((bVar1 & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xcf,"data_size");\n  }\n  __n = (this->super_Output_section).super_Output_data.data_size_;\n  if ((lVar2 < 0) || (of->file_size_ < (long)(__n + lVar2))) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = this->data_;\n  if ((__src == (uchar *)0x0) &&\n     (__src = (this->super_Output_section).postprocessing_buffer_, __src == (uchar *)0x0)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy(of->base_ + lVar2,__src,__n);\n  return;\n}\n\n" comment comment (function_definition "void __thiscall\ngold::Output_compressed_section::do_write(Output_compressed_section *this,Output_file *of)\n\n{\n  byte bVar1;\n  long lVar2;\n  size_t __n;\n  uchar *__src;\n  \n  bVar1 = (this->super_Output_section).super_Output_data.field_0x20;\n  if ((bVar1 & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xe3,"offset");\n  }\n  lVar2 = (this->super_Output_section).super_Output_data.offset_;\n  if ((bVar1 & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xcf,"data_size");\n  }\n  __n = (this->super_Output_section).super_Output_data.data_size_;\n  if ((lVar2 < 0) || (of->file_size_ < (long)(__n + lVar2))) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = this->data_;\n  if ((__src == (uchar *)0x0) &&\n     (__src = (this->super_Output_section).postprocessing_buffer_, __src == (uchar *)0x0)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy(of->base_ + lVar2,__src,__n);\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Output_compressed_section::" identifier : : identifier : :) (function_declarator "do_write(Output_compressed_section *this,Output_file *of)" identifier (parameter_list "(Output_compressed_section *this,Output_file *of)" ( (parameter_declaration "Output_compressed_section *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Output_file *of" type_identifier (pointer_declarator "*of" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  long lVar2;\n  size_t __n;\n  uchar *__src;\n  \n  bVar1 = (this->super_Output_section).super_Output_data.field_0x20;\n  if ((bVar1 & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xe3,"offset");\n  }\n  lVar2 = (this->super_Output_section).super_Output_data.offset_;\n  if ((bVar1 & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xcf,"data_size");\n  }\n  __n = (this->super_Output_section).super_Output_data.data_size_;\n  if ((lVar2 < 0) || (of->file_size_ < (long)(__n + lVar2))) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = this->data_;\n  if ((__src == (uchar *)0x0) &&\n     (__src = (this->super_Output_section).postprocessing_buffer_, __src == (uchar *)0x0)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy(of->base_ + lVar2,__src,__n);\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "uchar *__src;" type_identifier (pointer_declarator "*__src" * identifier) ;) (expression_statement "bVar1 = (this->super_Output_section).super_Output_data.field_0x20;" (assignment_expression "bVar1 = (this->super_Output_section).super_Output_data.field_0x20" identifier = (field_expression "(this->super_Output_section).super_Output_data.field_0x20" (field_expression "(this->super_Output_section).super_Output_data" (parenthesized_expression "(this->super_Output_section)" ( (field_expression "this->super_Output_section" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if ((bVar1 & 4) == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xe3,"offset");\n  }" if (parenthesized_expression "((bVar1 & 4) == 0)" ( (binary_expression "(bVar1 & 4) == 0" (parenthesized_expression "(bVar1 & 4)" ( (binary_expression "bVar1 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xe3,"offset");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/output.h",0xe3,"offset");" (call_expression "do_gold_unreachable("../../gold/output.h",0xe3,"offset")" identifier (argument_list "("../../gold/output.h",0xe3,"offset")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""offset"" " string_content ") ))) ;) })) (expression_statement "lVar2 = (this->super_Output_section).super_Output_data.offset_;" (assignment_expression "lVar2 = (this->super_Output_section).super_Output_data.offset_" identifier = (field_expression "(this->super_Output_section).super_Output_data.offset_" (field_expression "(this->super_Output_section).super_Output_data" (parenthesized_expression "(this->super_Output_section)" ( (field_expression "this->super_Output_section" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if ((bVar1 & 2) == 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xcf,"data_size");\n  }" if (parenthesized_expression "((bVar1 & 2) == 0)" ( (binary_expression "(bVar1 & 2) == 0" (parenthesized_expression "(bVar1 & 2)" ( (binary_expression "bVar1 & 2" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xcf,"data_size");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/output.h",0xcf,"data_size");" (call_expression "do_gold_unreachable("../../gold/output.h",0xcf,"data_size")" identifier (argument_list "("../../gold/output.h",0xcf,"data_size")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""data_size"" " string_content ") ))) ;) })) (expression_statement "__n = (this->super_Output_section).super_Output_data.data_size_;" (assignment_expression "__n = (this->super_Output_section).super_Output_data.data_size_" identifier = (field_expression "(this->super_Output_section).super_Output_data.data_size_" (field_expression "(this->super_Output_section).super_Output_data" (parenthesized_expression "(this->super_Output_section)" ( (field_expression "this->super_Output_section" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if ((lVar2 < 0) || (of->file_size_ < (long)(__n + lVar2))) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");\n  }" if (parenthesized_expression "((lVar2 < 0) || (of->file_size_ < (long)(__n + lVar2)))" ( (binary_expression "(lVar2 < 0) || (of->file_size_ < (long)(__n + lVar2))" (parenthesized_expression "(lVar2 < 0)" ( (binary_expression "lVar2 < 0" identifier < number_literal) )) || (parenthesized_expression "(of->file_size_ < (long)(__n + lVar2))" ( (binary_expression "of->file_size_ < (long)(__n + lVar2)" (field_expression "of->file_size_" identifier -> field_identifier) < (cast_expression "(long)(__n + lVar2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(__n + lVar2)" ( (binary_expression "__n + lVar2" identifier + identifier) )))) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view");" (call_expression "do_gold_unreachable("../../gold/output.h",0x6f,"get_output_view")" identifier (argument_list "("../../gold/output.h",0x6f,"get_output_view")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""get_output_view"" " string_content ") ))) ;) })) (expression_statement "__src = this->data_;" (assignment_expression "__src = this->data_" identifier = (field_expression "this->data_" identifier -> field_identifier)) ;) (if_statement "if ((__src == (uchar *)0x0) &&\n     (__src = (this->super_Output_section).postprocessing_buffer_, __src == (uchar *)0x0)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }" if (parenthesized_expression "((__src == (uchar *)0x0) &&\n     (__src = (this->super_Output_section).postprocessing_buffer_, __src == (uchar *)0x0))" ( (binary_expression "(__src == (uchar *)0x0) &&\n     (__src = (this->super_Output_section).postprocessing_buffer_, __src == (uchar *)0x0)" (parenthesized_expression "(__src == (uchar *)0x0)" ( (binary_expression "__src == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(__src = (this->super_Output_section).postprocessing_buffer_, __src == (uchar *)0x0)" ( (comma_expression "__src = (this->super_Output_section).postprocessing_buffer_, __src == (uchar *)0x0" (assignment_expression "__src = (this->super_Output_section).postprocessing_buffer_" identifier = (field_expression "(this->super_Output_section).postprocessing_buffer_" (parenthesized_expression "(this->super_Output_section)" ( (field_expression "this->super_Output_section" identifier -> field_identifier) )) . field_identifier)) , (binary_expression "__src == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/output.h",0xe34,"postprocessing_buffer");" (call_expression "do_gold_unreachable("../../gold/output.h",0xe34,"postprocessing_buffer")" identifier (argument_list "("../../gold/output.h",0xe34,"postprocessing_buffer")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""postprocessing_buffer"" " string_content ") ))) ;) })) (expression_statement "memcpy(of->base_ + lVar2,__src,__n);" (call_expression "memcpy(of->base_ + lVar2,__src,__n)" identifier (argument_list "(of->base_ + lVar2,__src,__n)" ( (binary_expression "of->base_ + lVar2" (field_expression "of->base_" identifier -> field_identifier) + identifier) , identifier , identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00296d10(long param_1,long param_2)\n\n{\n  long lVar1;\n  void *__src;\n  \n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }\n  if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    \n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = *(void **)(param_1 + 0x150);\n  if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));\n  return;\n}\n\n" (function_definition "void FUN_00296d10(long param_1,long param_2)\n\n{\n  long lVar1;\n  void *__src;\n  \n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }\n  if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    \n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = *(void **)(param_1 + 0x150);\n  if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));\n  return;\n}" primitive_type (function_declarator "FUN_00296d10(long param_1,long param_2)" identifier (parameter_list "(long param_1,long param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  void *__src;\n  \n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }\n  if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    \n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = *(void **)(param_1 + 0x150);\n  if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "void *__src;" primitive_type (pointer_declarator "*__src" * identifier) ;) (if_statement "if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 4) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 4) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 4)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 4" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }" { (expression_statement "FUN_0017c650("../../gold/output.h",0xe3,"offset");" (call_expression "FUN_0017c650("../../gold/output.h",0xe3,"offset")" identifier (argument_list "("../../gold/output.h",0xe3,"offset")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""offset"" " string_content ") ))) ;) })) (expression_statement "lVar1 = *(long *)(param_1 + 0x18);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x18)" identifier = (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 2) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 2) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 2)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 2" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }" { (expression_statement "FUN_0017c650("../../gold/output.h",0xcf,"data_size");" (call_expression "FUN_0017c650("../../gold/output.h",0xcf,"data_size")" identifier (argument_list "("../../gold/output.h",0xcf,"data_size")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""data_size"" " string_content ") ))) ;) })) (if_statement "if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    \n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }" if (parenthesized_expression "((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1)))" ( (binary_expression "(lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))" (parenthesized_expression "(lVar1 < 0)" ( (binary_expression "lVar1 < 0" identifier < number_literal) )) || (parenthesized_expression "(*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))" ( (binary_expression "*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1)" (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) )))) < (cast_expression "(long)(*(size_t *)(param_1 + 0x10) + lVar1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(*(size_t *)(param_1 + 0x10) + lVar1)" ( (binary_expression "*(size_t *)(param_1 + 0x10) + lVar1" (pointer_expression "*(size_t *)(param_1 + 0x10)" * (cast_expression "(size_t *)(param_1 + 0x10)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + identifier) )))) ))) )) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }" { (expression_statement "FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");" (call_expression "FUN_0017c650("../../gold/output.h",0x6f,"get_output_view")" identifier (argument_list "("../../gold/output.h",0x6f,"get_output_view")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""get_output_view"" " string_content ") ))) ;) })) (expression_statement "__src = *(void **)(param_1 + 0x150);" (assignment_expression "__src = *(void **)(param_1 + 0x150)" identifier = (pointer_expression "*(void **)(param_1 + 0x150)" * (cast_expression "(void **)(param_1 + 0x150)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x150)" ( (binary_expression "param_1 + 0x150" identifier + number_literal) ))))) ;) (if_statement "if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }" if (parenthesized_expression "((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0))" ( (binary_expression "(__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)" (parenthesized_expression "(__src == (void *)0x0)" ( (binary_expression "__src == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)" ( (comma_expression "__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0" (assignment_expression "__src = *(void **)(param_1 + 0xc0)" identifier = (pointer_expression "*(void **)(param_1 + 0xc0)" * (cast_expression "(void **)(param_1 + 0xc0)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc0)" ( (binary_expression "param_1 + 0xc0" identifier + number_literal) ))))) , (binary_expression "__src == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }" { (expression_statement "FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");" (call_expression "FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer")" identifier (argument_list "("../../gold/output.h",0xe34,"postprocessing_buffer")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""postprocessing_buffer"" " string_content ") ))) ;) })) (expression_statement "memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));" (call_expression "memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10))" identifier (argument_list "((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10))" ( (cast_expression "(void *)(lVar1 + *(long *)(param_2 + 0x18))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + *(long *)(param_2 + 0x18))" ( (binary_expression "lVar1 + *(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) ))))) ))) , identifier , (pointer_expression "*(size_t *)(param_1 + 0x10)" * (cast_expression "(size_t *)(param_1 + 0x10)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < LIT) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) , (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (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) ))))) ))) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (return_statement return ;) })))
(function_definition "void FUN_00296d10(long param_1,long param_2)\n\n{\n  long lVar1;\n  void *__src;\n  \n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }\n  if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    \n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = *(void **)(param_1 + 0x150);\n  if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00296d10(long param_1,long param_2)" (identifier "FUN_00296d10") (parameter_list "(long param_1,long param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  long lVar1;\n  void *__src;\n  \n  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }\n  lVar1 = *(long *)(param_1 + 0x18);\n  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }\n  if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    \n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }\n  __src = *(void **)(param_1 + 0x150);\n  if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }\n  memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "void *__src;" (primitive_type "void") (pointer_declarator "*__src" (* "*") (identifier "__src")) (; ";")) (if_statement "if ((*(byte *)(param_1 + 0x20) & 4) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 4) == 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x20) & 4) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 4)" (( "(") (binary_expression "*(byte *)(param_1 + 0x20) & 4" (pointer_expression "*(byte *)(param_1 + 0x20)" (* "*") (cast_expression "(byte *)(param_1 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/output.h",0xe3,"offset");\n  }" ({ "{") (expression_statement "FUN_0017c650("../../gold/output.h",0xe3,"offset");" (call_expression "FUN_0017c650("../../gold/output.h",0xe3,"offset")" (identifier "FUN_0017c650") (argument_list "("../../gold/output.h",0xe3,"offset")" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0xe3") (, ",") (string_literal ""offset"" (" """) (string_content "offset") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "lVar1 = *(long *)(param_1 + 0x18);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x18)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(param_1 + 0x18)" (* "*") (cast_expression "(long *)(param_1 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if ((*(byte *)(param_1 + 0x20) & 2) == 0) {\n                    \n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 2) == 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x20) & 2) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 2)" (( "(") (binary_expression "*(byte *)(param_1 + 0x20) & 2" (pointer_expression "*(byte *)(param_1 + 0x20)" (* "*") (cast_expression "(byte *)(param_1 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (& "&") (number_literal "2")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/output.h",0xcf,"data_size");\n  }" ({ "{") (expression_statement "FUN_0017c650("../../gold/output.h",0xcf,"data_size");" (call_expression "FUN_0017c650("../../gold/output.h",0xcf,"data_size")" (identifier "FUN_0017c650") (argument_list "("../../gold/output.h",0xcf,"data_size")" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0xcf") (, ",") (string_literal ""data_size"" (" """) (string_content "data_size") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {\n                    \n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }" (if "if") (parenthesized_expression "((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1)))" (( "(") (binary_expression "(lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))" (parenthesized_expression "(lVar1 < 0)" (( "(") (binary_expression "lVar1 < 0" (identifier "lVar1") (< "<") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))" (( "(") (binary_expression "*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1)" (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")) () ")")))) (< "<") (cast_expression "(long)(*(size_t *)(param_1 + 0x10) + lVar1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(*(size_t *)(param_1 + 0x10) + lVar1)" (( "(") (binary_expression "*(size_t *)(param_1 + 0x10) + lVar1" (pointer_expression "*(size_t *)(param_1 + 0x10)" (* "*") (cast_expression "(size_t *)(param_1 + 0x10)" (( "(") (type_descriptor "size_t *" (primitive_type "size_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (identifier "lVar1")) () ")")))) () ")"))) () ")")) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");\n  }" ({ "{") (expression_statement "FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");" (call_expression "FUN_0017c650("../../gold/output.h",0x6f,"get_output_view")" (identifier "FUN_0017c650") (argument_list "("../../gold/output.h",0x6f,"get_output_view")" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0x6f") (, ",") (string_literal ""get_output_view"" (" """) (string_content "get_output_view") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "__src = *(void **)(param_1 + 0x150);" (assignment_expression "__src = *(void **)(param_1 + 0x150)" (identifier "__src") (= "=") (pointer_expression "*(void **)(param_1 + 0x150)" (* "*") (cast_expression "(void **)(param_1 + 0x150)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x150)" (( "(") (binary_expression "param_1 + 0x150" (identifier "param_1") (+ "+") (number_literal "0x150")) () ")"))))) (; ";")) (if_statement "if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {\n                    \n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }" (if "if") (parenthesized_expression "((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0))" (( "(") (binary_expression "(__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)" (parenthesized_expression "(__src == (void *)0x0)" (( "(") (binary_expression "__src == (void *)0x0" (identifier "__src") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)" (( "(") (comma_expression "__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0" (assignment_expression "__src = *(void **)(param_1 + 0xc0)" (identifier "__src") (= "=") (pointer_expression "*(void **)(param_1 + 0xc0)" (* "*") (cast_expression "(void **)(param_1 + 0xc0)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc0)" (( "(") (binary_expression "param_1 + 0xc0" (identifier "param_1") (+ "+") (number_literal "0xc0")) () ")"))))) (, ",") (binary_expression "__src == (void *)0x0" (identifier "__src") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) () ")"))) () ")")) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");\n  }" ({ "{") (expression_statement "FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");" (call_expression "FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer")" (identifier "FUN_0017c650") (argument_list "("../../gold/output.h",0xe34,"postprocessing_buffer")" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0xe34") (, ",") (string_literal ""postprocessing_buffer"" (" """) (string_content "postprocessing_buffer") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));" (call_expression "memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10))" (identifier "memcpy") (argument_list "((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10))" (( "(") (cast_expression "(void *)(lVar1 + *(long *)(param_2 + 0x18))" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + *(long *)(param_2 + 0x18))" (( "(") (binary_expression "lVar1 + *(long *)(param_2 + 0x18)" (identifier "lVar1") (+ "+") (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")) () ")"))))) () ")"))) (, ",") (identifier "__src") (, ",") (pointer_expression "*(size_t *)(param_1 + 0x10)" (* "*") (cast_expression "(size_t *)(param_1 + 0x10)" (( "(") (type_descriptor "size_t *" (primitive_type "size_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

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

void __thiscall
gold::type_1::function_1(type_1 *this,type_2 *of)

{
  type_3 var_1;
  long var_3;
  size_t var_4;
  type_4 *var_5;
  
  var_1 = (this->super_Output_section).super_Output_data.field_0x20;
  if ((var_1 & 4) == 0) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/output.h",0xe3,"offset");
  }
  var_3 = (this->super_Output_section).super_Output_data.offset_;
  if ((var_1 & 2) == 0) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/output.h",0xcf,"data_size");
  }
  var_4 = (this->super_Output_section).super_Output_data.data_size_;
  if ((var_3 < 0) || (of->file_size_ < (long)(var_4 + var_3))) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/output.h",0x6f,"get_output_view");
  }
  var_5 = this->data_;
  if ((var_5 == (type_4 *)0x0) &&
     (var_5 = (this->super_Output_section).postprocessing_buffer_, var_5 == (type_4 *)0x0)) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/output.h",0xe34,"postprocessing_buffer");
  }
  var_6(of->base_ + var_3,var_5,var_4);
  return;
}


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

void MASKED(long param_1,long param_2)

{
  long lVar1;
  void *__src;
  
  if ((*(byte *)(param_1 + 0x20) & 4) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/output.h",0xe3,"offset");
  }
  lVar1 = *(long *)(param_1 + 0x18);
  if ((*(byte *)(param_1 + 0x20) & 2) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/output.h",0xcf,"data_size");
  }
  if ((lVar1 < 0) || (*(long *)(param_2 + 0x10) < (long)(*(size_t *)(param_1 + 0x10) + lVar1))) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/output.h",0x6f,"get_output_view");
  }
  __src = *(void **)(param_1 + 0x150);
  if ((__src == (void *)0x0) && (__src = *(void **)(param_1 + 0xc0), __src == (void *)0x0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/output.h",0xe34,"postprocessing_buffer");
  }
  memcpy((void *)(lVar1 + *(long *)(param_2 + 0x18)),__src,*(size_t *)(param_1 + 0x10));
  return;
}

