mono_dwarf_writer_create (struct MonoImageWriter * writer, struct FILE * il_file, int il_file_start_line, gboolean appending, gboolean emit_line_numbers)
{
  struct MonoImageWriter * D.23519;
  int D.23520;
  _Bool D.23521;
  long int D.23522;
  long int D.23523;
  int D.23528;
  struct FILE * D.23534;
  const char * D.23535;
  struct GHashTable * D.23536;
  struct GHashTable * D.23537;
  struct GHashTable * D.23538;
  struct GHashTable * D.23539;
  struct MonoDwarfWriter * D.23540;
  struct MonoDwarfWriter * w;

  w = monoeg_malloc0 (152);
  w->w = writer;
  w->il_file = il_file;
  w->il_file_line_index = il_file_start_line;
  w->appending = appending;
  if (appending != 0) goto <D.23517>; else goto <D.23518>;
  <D.23517>:
  D.23519 = w->w;
  D.23520 = img_writer_subsections_supported (D.23519);
  D.23521 = D.23520 == 0;
  D.23522 = (long int) D.23521;
  D.23523 = __builtin_expect (D.23522, 0);
  if (D.23523 != 0) goto <D.23524>; else goto <D.23525>;
  <D.23524>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "dwarfwriter.c", 94, "img_writer_subsections_supported (w->w)");
  <D.23525>:
  <D.23518>:
  w->emit_line = 1;
  if (appending != 0) goto <D.23526>; else goto <D.23527>;
  <D.23526>:
  D.23519 = w->w;
  D.23528 = img_writer_subsections_supported (D.23519);
  if (D.23528 == 0) goto <D.23529>; else goto <D.23530>;
  <D.23529>:
  w->emit_line = 0;
  <D.23530>:
  goto <D.23531>;
  <D.23527>:
  w->collect_line_info = 1;
  <D.23531>:
  if (emit_line_numbers == 0) goto <D.23532>; else goto <D.23533>;
  <D.23532>:
  w->emit_line = 0;
  w->collect_line_info = 0;
  <D.23533>:
  D.23519 = w->w;
  D.23534 = img_writer_get_fp (D.23519);
  w->fp = D.23534;
  D.23519 = w->w;
  D.23535 = img_writer_get_temp_label_prefix (D.23519);
  w->temp_prefix = D.23535;
  D.23536 = monoeg_g_hash_table_new (0B, 0B);
  w->class_to_die = D.23536;
  D.23537 = monoeg_g_hash_table_new (0B, 0B);
  w->class_to_vtype_die = D.23537;
  D.23538 = monoeg_g_hash_table_new (0B, 0B);
  w->class_to_pointer_die = D.23538;
  D.23539 = monoeg_g_hash_table_new (0B, 0B);
  w->class_to_reference_die = D.23539;
  w->cur_file_index = -1;
  D.23540 = w;
  return D.23540;
}


mono_dwarf_writer_destroy (struct MonoDwarfWriter * w)
{
  monoeg_g_free (w);
}


mono_dwarf_writer_get_il_file_line_index (struct MonoDwarfWriter * w)
{
  int D.23542;

  D.23542 = w->il_file_line_index;
  return D.23542;
}


mono_dwarf_escape_path (const char * name)
{
  char * D.23544;
  long unsigned int D.23547;
  int D.23548;
  int D.23549;
  long unsigned int D.23550;
  sizetype D.23551;
  const char * D.23552;
  char D.23553;
  int j.0;
  sizetype D.23557;
  char * D.23558;
  int j.1;
  sizetype D.23560;
  char * D.23561;
  int j.2;
  sizetype D.23564;
  char * D.23565;
  char * D.23566;

  D.23544 = __builtin_strchr (name, 92);
  if (D.23544 != 0B) goto <D.23545>; else goto <D.23546>;
  <D.23545>:
  {
    char * s;
    int len;
    int i;
    int j;

    D.23547 = strlen (name);
    len = (int) D.23547;
    D.23548 = len + 1;
    D.23549 = D.23548 * 2;
    D.23550 = (long unsigned int) D.23549;
    s = monoeg_malloc0 (D.23550);
    j = 0;
    i = 0;
    goto <D.23120>;
    <D.23119>:
    D.23551 = (sizetype) i;
    D.23552 = name + D.23551;
    D.23553 = *D.23552;
    if (D.23553 == 92) goto <D.23554>; else goto <D.23555>;
    <D.23554>:
    j.0 = j;
    j = j.0 + 1;
    D.23557 = (sizetype) j.0;
    D.23558 = s + D.23557;
    *D.23558 = 92;
    j.1 = j;
    j = j.1 + 1;
    D.23560 = (sizetype) j.1;
    D.23561 = s + D.23560;
    *D.23561 = 92;
    goto <D.23562>;
    <D.23555>:
    j.2 = j;
    j = j.2 + 1;
    D.23564 = (sizetype) j.2;
    D.23565 = s + D.23564;
    D.23551 = (sizetype) i;
    D.23552 = name + D.23551;
    D.23553 = *D.23552;
    *D.23565 = D.23553;
    <D.23562>:
    i = i + 1;
    <D.23120>:
    if (i < len) goto <D.23119>; else goto <D.23121>;
    <D.23121>:
    D.23566 = s;
    return D.23566;
  }
  <D.23546>:
  D.23566 = monoeg_strdup (name);
  return D.23566;
}


monoeg_strdup (const gchar * str)
{
  gchar * D.23570;

  if (str != 0B) goto <D.23568>; else goto <D.23569>;
  <D.23568>:
  D.23570 = __strdup (str);
  return D.23570;
  <D.23569>:
  D.23570 = 0B;
  return D.23570;
}


mono_dwarf_writer_emit_base_info (struct MonoDwarfWriter * w, const char * cu_name, struct GSList * base_unwind_program)
{
  struct MonoImageWriter * D.23572;
  int D.23573;
  int D.23576;
  int D.23579;
  const char * D.23583;
  int D.23584;
  unsigned char D.23585;
  int D.23586;
  int D.23587;
  unsigned char D.23588;
  int D.23589;
  const char * D.23590;
  unsigned int i.3;
  char * s;
  char * build_info;
  int i;

  w->cie_program = base_unwind_program;
  emit_section_change (w, ".debug_abbrev", 0);
  emit_dwarf_abbrev (w, 1, 17, 1, &compile_unit_attr, 14);
  emit_dwarf_abbrev (w, 2, 46, 1, &subprogram_attr, 10);
  emit_dwarf_abbrev (w, 3, 5, 0, &param_attr, 6);
  emit_dwarf_abbrev (w, 15, 5, 0, &param_loclist_attr, 6);
  emit_dwarf_abbrev (w, 4, 36, 0, &base_type_attr, 6);
  emit_dwarf_abbrev (w, 5, 2, 1, &struct_type_attr, 4);
  emit_dwarf_abbrev (w, 17, 2, 0, &struct_type_attr, 4);
  emit_dwarf_abbrev (w, 6, 13, 0, &data_member_attr, 6);
  emit_dwarf_abbrev (w, 7, 22, 0, &typedef_attr, 4);
  emit_dwarf_abbrev (w, 8, 4, 1, &enum_type_attr, 6);
  emit_dwarf_abbrev (w, 9, 40, 0, &enumerator_attr, 4);
  emit_dwarf_abbrev (w, 10, 57, 1, &namespace_attr, 2);
  emit_dwarf_abbrev (w, 11, 52, 0, &variable_attr, 6);
  emit_dwarf_abbrev (w, 12, 52, 0, &variable_loclist_attr, 6);
  emit_dwarf_abbrev (w, 13, 15, 0, &pointer_type_attr, 2);
  emit_dwarf_abbrev (w, 14, 16, 0, &reference_type_attr, 2);
  emit_dwarf_abbrev (w, 16, 28, 0, &inheritance_attr, 4);
  emit_dwarf_abbrev (w, 18, 46, 0, &tramp_subprogram_attr, 6);
  emit_byte (w, 0);
  emit_section_change (w, ".debug_info", 0);
  emit_label (w, ".Ldebug_info_start");
  emit_symbol_diff (w, ".Ldebug_info_end", ".Ldebug_info_begin", 0);
  emit_label (w, ".Ldebug_info_begin");
  emit_int16 (w, 2);
  emit_int32 (w, 0);
  emit_byte (w, 8);
  D.23572 = w->w;
  D.23573 = img_writer_subsections_supported (D.23572);
  if (D.23573 != 0) goto <D.23574>; else goto <D.23575>;
  <D.23574>:
  D.23576 = w->appending;
  if (D.23576 != 0) goto <D.23577>; else goto <D.23578>;
  <D.23577>:
  emit_section_change (w, ".debug_info", 1);
  emit_byte (w, 0);
  emit_label (w, ".Ldebug_info_end");
  emit_section_change (w, ".debug_info", 0);
  <D.23578>:
  <D.23575>:
  emit_uleb128 (w, 1);
  build_info = mono_get_runtime_build_info ();
  s = monoeg_g_strdup_printf ("Mono AOT Compiler %s", build_info);
  emit_string (w, s);
  monoeg_g_free (build_info);
  monoeg_g_free (s);
  emit_string (w, cu_name);
  emit_string (w, "");
  emit_byte (w, 2);
  emit_pointer_value (w, 0B);
  emit_pointer_value (w, 0B);
  D.23579 = w->emit_line;
  if (D.23579 != 0) goto <D.23580>; else goto <D.23581>;
  <D.23580>:
  emit_symbol_diff (w, ".Ldebug_line_start", ".Ldebug_line_section_start", 0);
  goto <D.23582>;
  <D.23581>:
  emit_pointer_value (w, 0B);
  <D.23582>:
  i = 0;
  goto <D.23177>;
  <D.23176>:
  D.23583 = basic_types[i].die_name;
  emit_label (w, D.23583);
  emit_uleb128 (w, 4);
  D.23584 = basic_types[i].size;
  D.23585 = (unsigned char) D.23584;
  D.23586 = (int) D.23585;
  emit_byte (w, D.23586);
  D.23587 = basic_types[i].encoding;
  D.23588 = (unsigned char) D.23587;
  D.23589 = (int) D.23588;
  emit_byte (w, D.23589);
  D.23590 = basic_types[i].name;
  emit_string (w, D.23590);
  i = i + 1;
  <D.23177>:
  i.3 = (unsigned int) i;
  if (i.3 <= 16) goto <D.23176>; else goto <D.23178>;
  <D.23178>:
  emit_debug_info_end (w);
  emit_section_change (w, ".debug_loc", 0);
  emit_label (w, ".Ldebug_loc_start");
  emit_cie (w);
}


emit_dwarf_abbrev (struct MonoDwarfWriter * w, int code, int tag, gboolean has_child, int * attrs, int attrs_len)
{
  unsigned int code.4;
  unsigned int tag.5;
  unsigned char D.23594;
  int D.23595;
  long unsigned int D.23596;
  long unsigned int D.23597;
  int * D.23598;
  int D.23599;
  unsigned int D.23600;
  int i;

  code.4 = (unsigned int) code;
  emit_uleb128 (w, code.4);
  tag.5 = (unsigned int) tag;
  emit_uleb128 (w, tag.5);
  D.23594 = (unsigned char) has_child;
  D.23595 = (int) D.23594;
  emit_byte (w, D.23595);
  i = 0;
  goto <D.23033>;
  <D.23032>:
  D.23596 = (long unsigned int) i;
  D.23597 = D.23596 * 4;
  D.23598 = attrs + D.23597;
  D.23599 = *D.23598;
  D.23600 = (unsigned int) D.23599;
  emit_uleb128 (w, D.23600);
  i = i + 1;
  <D.23033>:
  if (i < attrs_len) goto <D.23032>; else goto <D.23034>;
  <D.23034>:
  emit_uleb128 (w, 0);
  emit_uleb128 (w, 0);
}


emit_int16 (struct MonoDwarfWriter * w, int value)
{
  struct MonoImageWriter * D.23601;

  D.23601 = w->w;
  img_writer_emit_int16 (D.23601, value);
}


emit_int32 (struct MonoDwarfWriter * w, int value)
{
  struct MonoImageWriter * D.23602;

  D.23602 = w->w;
  img_writer_emit_int32 (D.23602, value);
}


emit_symbol_diff (struct MonoDwarfWriter * w, const char * end, const char * start, int offset)
{
  struct MonoImageWriter * D.23603;

  D.23603 = w->w;
  img_writer_emit_symbol_diff (D.23603, end, start, offset);
}


emit_pointer_value (struct MonoDwarfWriter * w, void * ptr)
{
  long int ptr.6;
  gssize val;

  try
    {
      ptr.6 = (long int) ptr;
      val = ptr.6;
      emit_bytes (w, &val, 8);
    }
  finally
    {
      val = {CLOBBER};
    }
}


emit_bytes (struct MonoDwarfWriter * w, const guint8 * buf, int size)
{
  struct MonoImageWriter * D.23605;

  D.23605 = w->w;
  img_writer_emit_bytes (D.23605, buf, size);
}


emit_uleb128 (struct MonoDwarfWriter * w, guint32 value)
{
  unsigned char D.23606;
  int D.23609;

  <D.22988>:
  {
    guint8 b;

    D.23606 = (unsigned char) value;
    b = D.23606 & 127;
    value = value >> 7;
    if (value != 0) goto <D.23607>; else goto <D.23608>;
    <D.23607>:
    b = b | 128;
    <D.23608>:
    D.23609 = (int) b;
    emit_byte (w, D.23609);
  }
  if (value != 0) goto <D.22988>; else goto <D.22989>;
  <D.22989>:
}


emit_byte (struct MonoDwarfWriter * w, guint8 val)
{
  int D.23610;
  struct MonoImageWriter * D.23611;

  D.23610 = (int) val;
  D.23611 = w->w;
  img_writer_emit_byte (D.23611, D.23610);
}


emit_string (struct MonoDwarfWriter * w, const char * value)
{
  struct MonoImageWriter * D.23612;

  D.23612 = w->w;
  img_writer_emit_string (D.23612, value);
}


emit_debug_info_end (struct MonoDwarfWriter * w)
{

}


emit_section_change (struct MonoDwarfWriter * w, const char * section_name, int subsection_index)
{
  struct MonoImageWriter * D.23613;

  D.23613 = w->w;
  img_writer_emit_section_change (D.23613, section_name, subsection_index);
}


emit_label (struct MonoDwarfWriter * w, const char * name)
{
  struct MonoImageWriter * D.23614;

  D.23614 = w->w;
  img_writer_emit_label (D.23614, name);
}


emit_cie (struct MonoDwarfWriter * w)
{
  int D.23615;
  long int D.23616;
  int D.23617;
  unsigned int D.23618;
  struct GSList * D.23619;
  unsigned int uw_info_len.7;
  int uw_info_len.8;

  emit_section_change (w, ".debug_frame", 0);
  emit_alignment (w, 8);
  emit_symbol_diff (w, ".Lcie0_end", ".Lcie0_start", 0);
  emit_label (w, ".Lcie0_start");
  emit_int32 (w, -1);
  emit_byte (w, 3);
  emit_string (w, "");
  emit_sleb128 (w, 1);
  D.23615 = mono_unwind_get_dwarf_data_align ();
  D.23616 = (long int) D.23615;
  emit_sleb128 (w, D.23616);
  D.23617 = mono_unwind_get_dwarf_pc_reg ();
  D.23618 = (unsigned int) D.23617;
  emit_uleb128 (w, D.23618);
  D.23619 = w->cie_program;
  w->cie_program = D.23619;
  D.23619 = w->cie_program;
  if (D.23619 != 0B) goto <D.23620>; else goto <D.23621>;
  <D.23620>:
  {
    guint32 uw_info_len;
    guint8 * uw_info;

    try
      {
        D.23619 = w->cie_program;
        uw_info = mono_unwind_ops_encode (D.23619, &uw_info_len);
        uw_info_len.7 = uw_info_len;
        uw_info_len.8 = (int) uw_info_len.7;
        emit_bytes (w, uw_info, uw_info_len.8);
        monoeg_g_free (uw_info);
      }
    finally
      {
        uw_info_len = {CLOBBER};
      }
  }
  <D.23621>:
  emit_alignment (w, 8);
  emit_label (w, ".Lcie0_end");
}


emit_sleb128 (struct MonoDwarfWriter * w, gint64 value)
{
  _Bool D.23624;
  unsigned char D.23625;
  unsigned int D.23628;
  int D.23629;
  long int D.23630;
  long int D.23631;
  int D.23637;
  int D.23638;
  gboolean more;
  gboolean negative;
  guint32 size;
  guint8 byte;

  more = 1;
  D.23624 = value < 0;
  negative = (gboolean) D.23624;
  size = 64;
  goto <D.22999>;
  <D.22998>:
  D.23625 = (unsigned char) value;
  byte = D.23625 & 127;
  value = value >> 7;
  if (negative != 0) goto <D.23626>; else goto <D.23627>;
  <D.23626>:
  D.23628 = size + 4294967289;
  D.23629 = (int) D.23628;
  D.23630 = 1 << D.23629;
  D.23631 = -D.23630;
  value = D.23631 | value;
  <D.23627>:
  if (value == 0) goto <D.23636>; else goto <D.23632>;
  <D.23636>:
  D.23637 = (int) byte;
  D.23638 = D.23637 & 64;
  if (D.23638 == 0) goto <D.23633>; else goto <D.23632>;
  <D.23632>:
  if (value == -1) goto <D.23639>; else goto <D.23634>;
  <D.23639>:
  D.23637 = (int) byte;
  D.23638 = D.23637 & 64;
  if (D.23638 != 0) goto <D.23633>; else goto <D.23634>;
  <D.23633>:
  more = 0;
  goto <D.23635>;
  <D.23634>:
  byte = byte | 128;
  <D.23635>:
  D.23637 = (int) byte;
  emit_byte (w, D.23637);
  <D.22999>:
  if (more != 0) goto <D.22998>; else goto <D.23000>;
  <D.23000>:
}


emit_alignment (struct MonoDwarfWriter * w, int size)
{
  struct MonoImageWriter * D.23640;

  D.23640 = w->w;
  img_writer_emit_alignment (D.23640, size);
}


mono_dwarf_writer_close (struct MonoDwarfWriter * w)
{
  int D.23641;
  int D.23644;

  D.23641 = w->appending;
  if (D.23641 == 0) goto <D.23642>; else goto <D.23643>;
  <D.23642>:
  emit_section_change (w, ".debug_info", 0);
  emit_byte (w, 0);
  emit_label (w, ".Ldebug_info_end");
  <D.23643>:
  D.23644 = w->collect_line_info;
  if (D.23644 != 0) goto <D.23645>; else goto <D.23646>;
  <D.23645>:
  emit_all_line_number_info (w);
  <D.23646>:
}


emit_all_line_number_info (struct MonoDwarfWriter * w)
{
  int D.23647;
  _Bool D.23648;
  long int D.23649;
  long int D.23650;
  struct GSList * D.23653;
  struct MonoMethod * D.23654;
  struct GPtrArray * source_file_list.9;
  void * * D.23658;
  long unsigned int D.23659;
  long unsigned int D.23660;
  void * * D.23661;
  char * D.23662;
  unsigned int i.10;
  unsigned int D.23664;
  int D.23665;
  long unsigned int D.23666;
  const void * D.23667;
  struct GHashTable * D.23668;
  int D.23669;
  void * D.23672;
  long int D.23673;
  int D.23676;
  int D.23677;
  int D.23678;
  long unsigned int D.23679;
  void * D.23680;
  int D.23682;
  char * D.23683;
  int D.23684;
  void * D.23687;
  long int D.23688;
  char * D.23692;
  unsigned int dir_index.11;
  struct MonoDomain * D.23694;
  struct MonoMethod * D.23695;
  unsigned int D.23696;
  guint8 * D.23697;
  char * D.23698;
  char * D.23699;
  int i;
  struct GHashTable * dir_to_index;
  struct GHashTable * index_to_dir;
  struct GSList * l;
  struct GSList * info_list;

  D.23647 = w->collect_line_info;
  D.23648 = D.23647 == 0;
  D.23649 = (long int) D.23648;
  D.23650 = __builtin_expect (D.23649, 0);
  if (D.23650 != 0) goto <D.23651>; else goto <D.23652>;
  <D.23651>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "dwarfwriter.c", 709, "w->collect_line_info");
  <D.23652>:
  add_line_number_file_name (w, "<unknown>", 0, 0);
  D.23653 = w->line_info;
  info_list = monoeg_g_slist_reverse (D.23653);
  l = info_list;
  goto <D.23140>;
  <D.23139>:
  {
    struct MethodLineNumberInfo * info;
    struct MonoDebugMethodInfo * minfo;
    char * source_file;
    struct GPtrArray * source_file_list;

    try
      {
        info = l->data;
        D.23654 = info->method;
        minfo = mono_debug_lookup_method (D.23654);
        if (minfo == 0B) goto <D.23655>; else goto <D.23656>;
        <D.23655>:
        // predicted unlikely by continue predictor.
        goto <D.23134>;
        <D.23656>:
        mono_debug_symfile_get_line_numbers_full (minfo, &source_file, &source_file_list, 0B, 0B, 0B, 0B, 0B);
        i = 0;
        goto <D.23137>;
        <D.23136>:
        {
          struct MonoDebugSourceInfo * sinfo;

          source_file_list.9 = source_file_list;
          D.23658 = source_file_list.9->pdata;
          D.23659 = (long unsigned int) i;
          D.23660 = D.23659 * 8;
          D.23661 = D.23658 + D.23660;
          sinfo = *D.23661;
          D.23662 = sinfo->source_file;
          add_line_number_file_name (w, D.23662, 0, 0);
        }
        i = i + 1;
        <D.23137>:
        i.10 = (unsigned int) i;
        source_file_list.9 = source_file_list;
        D.23664 = source_file_list.9->len;
        if (i.10 < D.23664) goto <D.23136>; else goto <D.23138>;
        <D.23138>:
      }
    finally
      {
        source_file = {CLOBBER};
        source_file_list = {CLOBBER};
      }
  }
  <D.23134>:
  l = l->next;
  <D.23140>:
  if (l != 0B) goto <D.23139>; else goto <D.23141>;
  <D.23141>:
  dir_to_index = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  index_to_dir = monoeg_g_hash_table_new (0B, 0B);
  i = 0;
  goto <D.23147>;
  <D.23146>:
  {
    char * name;
    char * copy;
    int dir_index;

    D.23665 = i + 1;
    D.23666 = (long unsigned int) D.23665;
    D.23667 = (const void *) D.23666;
    D.23668 = w->index_to_file;
    name = monoeg_g_hash_table_lookup (D.23668, D.23667);
    dir_index = 0;
    D.23669 = monoeg_g_path_is_absolute (name);
    if (D.23669 != 0) goto <D.23670>; else goto <D.23671>;
    <D.23670>:
    {
      char * dir;

      dir = monoeg_g_path_get_dirname (name);
      D.23672 = monoeg_g_hash_table_lookup (dir_to_index, dir);
      D.23673 = (long int) D.23672;
      dir_index = (int) D.23673;
      if (dir_index == 0) goto <D.23674>; else goto <D.23675>;
      <D.23674>:
      dir_index = w->line_number_dir_index;
      D.23676 = w->line_number_dir_index;
      D.23677 = D.23676 + 1;
      w->line_number_dir_index = D.23677;
      copy = monoeg_strdup (dir);
      D.23678 = dir_index + 1;
      D.23679 = (long unsigned int) D.23678;
      D.23680 = (void *) D.23679;
      monoeg_g_hash_table_insert_replace (dir_to_index, copy, D.23680, 0);
      D.23678 = dir_index + 1;
      D.23679 = (long unsigned int) D.23678;
      D.23680 = (void *) D.23679;
      monoeg_g_hash_table_insert_replace (index_to_dir, D.23680, copy, 0);
      goto <D.23681>;
      <D.23675>:
      dir_index = dir_index + -1;
      <D.23681>:
      monoeg_g_free (dir);
    }
    <D.23671>:
  }
  i = i + 1;
  <D.23147>:
  D.23682 = w->line_number_file_index;
  if (D.23682 > i) goto <D.23146>; else goto <D.23148>;
  <D.23148>:
  emit_section_change (w, ".debug_line", 0);
  emit_label (w, ".Ldebug_line_section_start");
  emit_label (w, ".Ldebug_line_start");
  emit_symbol_diff (w, ".Ldebug_line_end", ".", -4);
  emit_int16 (w, 2);
  emit_symbol_diff (w, ".Ldebug_line_header_end", ".", -4);
  emit_byte (w, 1);
  emit_byte (w, 1);
  emit_byte (w, 251);
  emit_byte (w, 14);
  emit_byte (w, 13);
  emit_byte (w, 0);
  emit_byte (w, 1);
  emit_byte (w, 1);
  emit_byte (w, 1);
  emit_byte (w, 1);
  emit_byte (w, 0);
  emit_byte (w, 0);
  emit_byte (w, 0);
  emit_byte (w, 1);
  emit_byte (w, 0);
  emit_byte (w, 0);
  emit_byte (w, 1);
  emit_section_change (w, ".debug_line", 0);
  i = 0;
  goto <D.23151>;
  <D.23150>:
  {
    char * dir;

    D.23665 = i + 1;
    D.23666 = (long unsigned int) D.23665;
    D.23667 = (const void *) D.23666;
    dir = monoeg_g_hash_table_lookup (index_to_dir, D.23667);
    D.23683 = mono_dwarf_escape_path (dir);
    emit_string (w, D.23683);
  }
  i = i + 1;
  <D.23151>:
  D.23676 = w->line_number_dir_index;
  if (D.23676 > i) goto <D.23150>; else goto <D.23152>;
  <D.23152>:
  emit_byte (w, 0);
  i = 0;
  goto <D.23158>;
  <D.23157>:
  {
    char * name;
    char * basename;
    char * dir;
    int dir_index;

    D.23665 = i + 1;
    D.23666 = (long unsigned int) D.23665;
    D.23667 = (const void *) D.23666;
    D.23668 = w->index_to_file;
    name = monoeg_g_hash_table_lookup (D.23668, D.23667);
    basename = 0B;
    dir_index = 0;
    D.23684 = monoeg_g_path_is_absolute (name);
    if (D.23684 != 0) goto <D.23685>; else goto <D.23686>;
    <D.23685>:
    dir = monoeg_g_path_get_dirname (name);
    D.23687 = monoeg_g_hash_table_lookup (dir_to_index, dir);
    D.23688 = (long int) D.23687;
    dir_index = (int) D.23688;
    basename = monoeg_g_path_get_basename (name);
    <D.23686>:
    if (basename != 0B) goto <D.23689>; else goto <D.23690>;
    <D.23689>:
    emit_string (w, basename);
    goto <D.23691>;
    <D.23690>:
    D.23692 = mono_dwarf_escape_path (name);
    emit_string (w, D.23692);
    <D.23691>:
    dir_index.11 = (unsigned int) dir_index;
    emit_uleb128 (w, dir_index.11);
    emit_byte (w, 0);
    emit_byte (w, 0);
  }
  i = i + 1;
  <D.23158>:
  D.23682 = w->line_number_file_index;
  if (D.23682 > i) goto <D.23157>; else goto <D.23159>;
  <D.23159>:
  emit_byte (w, 0);
  emit_label (w, ".Ldebug_line_header_end");
  l = info_list;
  goto <D.23163>;
  <D.23162>:
  {
    struct MethodLineNumberInfo * info;
    struct MonoDebugMethodJitInfo * dmji;

    info = l->data;
    D.23694 = mono_domain_get ();
    D.23695 = info->method;
    dmji = mono_debug_find_method (D.23695, D.23694);
    D.23696 = info->code_size;
    D.23697 = info->code;
    D.23698 = info->end_symbol;
    D.23699 = info->start_symbol;
    D.23695 = info->method;
    emit_line_number_info (w, D.23695, D.23699, D.23698, D.23697, D.23696, dmji);
    mono_debug_free_method_jit_info (dmji);
  }
  l = l->next;
  <D.23163>:
  if (l != 0B) goto <D.23162>; else goto <D.23164>;
  <D.23164>:
  monoeg_g_slist_free (info_list);
  emit_byte (w, 0);
  emit_byte (w, 1);
  emit_byte (w, 1);
  emit_label (w, ".Ldebug_line_end");
}


add_line_number_file_name (struct MonoDwarfWriter * w, const char * name, gint64 last_mod_time, gint64 file_size)
{
  struct GHashTable * D.23702;
  struct GHashTable * D.23705;
  struct GHashTable * D.23706;
  void * D.23707;
  long int D.23708;
  int D.23711;
  int D.23712;
  int D.23713;
  int D.23714;
  long unsigned int D.23715;
  void * D.23716;
  struct GHashTable * D.23717;
  int index;
  char * copy;

  D.23702 = w->file_to_index;
  if (D.23702 == 0B) goto <D.23703>; else goto <D.23704>;
  <D.23703>:
  D.23705 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  w->file_to_index = D.23705;
  D.23706 = monoeg_g_hash_table_new (0B, 0B);
  w->index_to_file = D.23706;
  <D.23704>:
  D.23702 = w->file_to_index;
  D.23707 = monoeg_g_hash_table_lookup (D.23702, name);
  D.23708 = (long int) D.23707;
  index = (int) D.23708;
  if (index > 0) goto <D.23709>; else goto <D.23710>;
  <D.23709>:
  D.23711 = index + -1;
  return D.23711;
  <D.23710>:
  index = w->line_number_file_index;
  D.23712 = w->line_number_file_index;
  D.23713 = D.23712 + 1;
  w->line_number_file_index = D.23713;
  copy = monoeg_strdup (name);
  D.23714 = index + 1;
  D.23715 = (long unsigned int) D.23714;
  D.23716 = (void *) D.23715;
  D.23702 = w->file_to_index;
  monoeg_g_hash_table_insert_replace (D.23702, copy, D.23716, 0);
  D.23714 = index + 1;
  D.23715 = (long unsigned int) D.23714;
  D.23716 = (void *) D.23715;
  D.23717 = w->index_to_file;
  monoeg_g_hash_table_insert_replace (D.23717, D.23716, copy, 0);
  D.23711 = index;
  return D.23711;
}


emit_line_number_info (struct MonoDwarfWriter * w, struct MonoMethod * method, char * start_symbol, char * end_symbol, guint8 * code, guint32 code_size, struct MonoDebugMethodJitInfo * debug_info)
{
  int D.23719;
  _Bool D.23722;
  long int D.23723;
  long int D.23724;
  unsigned int D.23727;
  long unsigned int D.23728;
  long unsigned int D.23729;
  struct MonoDebugLineNumberEntry * D.23730;
  long unsigned int D.23731;
  unsigned int D.23732;
  long unsigned int D.23733;
  long unsigned int D.23734;
  long unsigned int D.23735;
  long unsigned int D.23736;
  long unsigned int D.23739;
  long unsigned int D.23740;
  int * D.23741;
  unsigned int j.12;
  unsigned int D.23743;
  unsigned int i.13;
  unsigned int D.23745;
  sizetype D.23748;
  sizetype D.23749;
  sizetype D.23750;
  unsigned int D.23751;
  int D.23752;
  unsigned int D.23753;
  unsigned int j.14;
  long unsigned int D.23762;
  int * D.23763;
  unsigned int i.15;
  unsigned int il_offset.16;
  char * D.23774;
  unsigned int D.23775;
  int D.23776;
  int prev_line.17;
  unsigned int D.23778;
  int D.23784;
  long int D.23785;
  int D.23429;
  int D.23791;
  int D.23794;
  int D.23796;
  unsigned int file_index.18;
  unsigned int D.23802;
  long int D.23803;
  const unsigned char * ip.19;
  struct FILE * D.23808;
  int D.23809;
  int D.23810;
  unsigned int D.23811;
  long unsigned int D.23812;
  long unsigned int D.23813;
  const guint8 * ip.20;
  long int ip.21;
  long int ip.22;
  long int D.23817;
  long unsigned int D.23818;
  long unsigned int D.23819;
  int * D.23820;
  sizetype D.23821;
  const unsigned char * D.23822;
  unsigned int D.23823;
  long unsigned int D.23826;
  long unsigned int D.23827;
  int * D.23828;
  unsigned int D.23833;
  int D.23834;
  int D.23835;
  int D.23836;
  unsigned int prev_native_offset.23;
  unsigned int D.23838;
  long int D.23839;
  guint32 prev_line;
  guint32 prev_native_offset;
  int i;
  int file_index;
  int il_offset;
  int prev_il_offset;
  gboolean first;
  struct MonoDebugSourceLocation * loc;
  char * prev_file_name;
  struct MonoMethodHeader * header;
  struct MonoDebugMethodInfo * minfo;
  struct MonoDebugLineNumberEntry * ln_array;
  int * native_to_il_offset;

  prev_line = 0;
  prev_native_offset = 0;
  first = 1;
  prev_file_name = 0B;
  header = mono_method_get_header (method);
  native_to_il_offset = 0B;
  D.23719 = w->emit_line;
  if (D.23719 == 0) goto <D.23720>; else goto <D.23721>;
  <D.23720>:
  mono_metadata_free_mh (header);
  return;
  <D.23721>:
  minfo = mono_debug_lookup_method (method);
  D.23722 = code_size == 0;
  D.23723 = (long int) D.23722;
  D.23724 = __builtin_expect (D.23723, 0);
  if (D.23724 != 0) goto <D.23725>; else goto <D.23726>;
  <D.23725>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "dwarfwriter.c", 1585, "code_size");
  <D.23726>:
  D.23727 = debug_info->num_line_numbers;
  D.23728 = (long unsigned int) D.23727;
  D.23729 = D.23728 * 8;
  ln_array = monoeg_malloc0 (D.23729);
  D.23727 = debug_info->num_line_numbers;
  D.23728 = (long unsigned int) D.23727;
  D.23729 = D.23728 * 8;
  D.23730 = debug_info->line_numbers;
  memcpy (ln_array, D.23730, D.23729);
  D.23727 = debug_info->num_line_numbers;
  D.23731 = (long unsigned int) D.23727;
  qsort (ln_array, D.23731, 8, compare_lne);
  D.23732 = code_size + 1;
  D.23733 = (long unsigned int) D.23732;
  D.23734 = D.23733 * 4;
  native_to_il_offset = monoeg_malloc0 (D.23734);
  i = 0;
  goto <D.23416>;
  <D.23415>:
  {
    int j;
    struct MonoDebugLineNumberEntry * lne;

    D.23735 = (long unsigned int) i;
    D.23736 = D.23735 * 8;
    lne = ln_array + D.23736;
    if (i == 0) goto <D.23737>; else goto <D.23738>;
    <D.23737>:
    j = 0;
    goto <D.23406>;
    <D.23405>:
    D.23739 = (long unsigned int) j;
    D.23740 = D.23739 * 4;
    D.23741 = native_to_il_offset + D.23740;
    *D.23741 = -1;
    j = j + 1;
    <D.23406>:
    j.12 = (unsigned int) j;
    D.23743 = lne->native_offset;
    if (j.12 < D.23743) goto <D.23405>; else goto <D.23407>;
    <D.23407>:
    <D.23738>:
    i.13 = (unsigned int) i;
    D.23727 = debug_info->num_line_numbers;
    D.23745 = D.23727 + 4294967295;
    if (i.13 < D.23745) goto <D.23746>; else goto <D.23747>;
    <D.23746>:
    {
      struct MonoDebugLineNumberEntry * lne_next;

      D.23748 = (sizetype) i;
      D.23749 = D.23748 + 1;
      D.23750 = D.23749 * 8;
      lne_next = ln_array + D.23750;
      D.23743 = lne->native_offset;
      j = (int) D.23743;
      goto <D.23410>;
      <D.23409>:
      D.23739 = (long unsigned int) j;
      D.23740 = D.23739 * 4;
      D.23741 = native_to_il_offset + D.23740;
      D.23751 = lne->il_offset;
      D.23752 = (int) D.23751;
      *D.23741 = D.23752;
      j = j + 1;
      <D.23410>:
      j.12 = (unsigned int) j;
      D.23753 = lne_next->native_offset;
      if (j.12 < D.23753) goto <D.23409>; else goto <D.23411>;
      <D.23411>:
    }
    goto <D.23754>;
    <D.23747>:
    D.23743 = lne->native_offset;
    j = (int) D.23743;
    goto <D.23413>;
    <D.23412>:
    D.23739 = (long unsigned int) j;
    D.23740 = D.23739 * 4;
    D.23741 = native_to_il_offset + D.23740;
    D.23751 = lne->il_offset;
    D.23752 = (int) D.23751;
    *D.23741 = D.23752;
    j = j + 1;
    <D.23413>:
    j.14 = (unsigned int) j;
    if (j.14 < code_size) goto <D.23412>; else goto <D.23414>;
    <D.23414>:
    <D.23754>:
  }
  i = i + 1;
  <D.23416>:
  i.13 = (unsigned int) i;
  D.23727 = debug_info->num_line_numbers;
  if (i.13 < D.23727) goto <D.23415>; else goto <D.23417>;
  <D.23417>:
  monoeg_g_free (ln_array);
  prev_line = 1;
  prev_il_offset = -1;
  i = 0;
  goto <D.23431>;
  <D.23430>:
  {
    int line_diff;
    int addr_diff;

    if (minfo == 0B) goto <D.23756>; else goto <D.23757>;
    <D.23756>:
    // predicted unlikely by continue predictor.
    goto <D.23420>;
    <D.23757>:
    D.23730 = debug_info->line_numbers;
    if (D.23730 == 0B) goto <D.23758>; else goto <D.23759>;
    <D.23758>:
    // predicted unlikely by continue predictor.
    goto <D.23420>;
    <D.23759>:
    if (native_to_il_offset != 0B) goto <D.23760>; else goto <D.23761>;
    <D.23760>:
    D.23735 = (long unsigned int) i;
    D.23762 = D.23735 * 4;
    D.23763 = native_to_il_offset + D.23762;
    il_offset = *D.23763;
    goto <D.23764>;
    <D.23761>:
    i.15 = (unsigned int) i;
    il_offset = il_offset_from_address (method, debug_info, i.15);
    <D.23764>:
    D.23735 = (long unsigned int) i;
    D.23762 = D.23735 * 4;
    D.23763 = native_to_il_offset + D.23762;
    il_offset = *D.23763;
    if (il_offset < 0) goto <D.23766>; else goto <D.23767>;
    <D.23766>:
    // predicted unlikely by continue predictor.
    goto <D.23420>;
    <D.23767>:
    if (il_offset == prev_il_offset) goto <D.23768>; else goto <D.23769>;
    <D.23768>:
    // predicted unlikely by continue predictor.
    goto <D.23420>;
    <D.23769>:
    prev_il_offset = il_offset;
    il_offset.16 = (unsigned int) il_offset;
    loc = mono_debug_symfile_lookup_location (minfo, il_offset.16);
    if (loc == 0B) goto <D.23771>; else goto <D.23773>;
    <D.23773>:
    D.23774 = loc->source_file;
    if (D.23774 == 0B) goto <D.23771>; else goto <D.23772>;
    <D.23771>:
    // predicted unlikely by continue predictor.
    goto <D.23420>;
    <D.23772>:
    D.23775 = loc->row;
    D.23776 = (int) D.23775;
    prev_line.17 = (int) prev_line;
    line_diff = D.23776 - prev_line.17;
    i.15 = (unsigned int) i;
    D.23778 = i.15 - prev_native_offset;
    addr_diff = (int) D.23778;
    if (first != 0) goto <D.23779>; else goto <D.23780>;
    <D.23779>:
    emit_section_change (w, ".debug_line", 4);
    emit_byte (w, 0);
    emit_byte (w, 9);
    emit_byte (w, 2);
    if (start_symbol != 0B) goto <D.23781>; else goto <D.23782>;
    <D.23781>:
    emit_pointer_unaligned (w, start_symbol);
    goto <D.23783>;
    <D.23782>:
    emit_pointer_value (w, code);
    <D.23783>:
    emit_byte (w, 3);
    D.23775 = loc->row;
    D.23776 = (int) D.23775;
    prev_line.17 = (int) prev_line;
    D.23784 = D.23776 - prev_line.17;
    D.23785 = (long int) D.23784;
    emit_sleb128 (w, D.23785);
    prev_line = loc->row;
    prev_native_offset = (guint32) i;
    first = 0;
    <D.23780>:
    D.23775 = loc->row;
    if (D.23775 != prev_line) goto <D.23786>; else goto <D.23787>;
    <D.23786>:
    if (prev_file_name == 0B) goto <D.23788>; else goto <D.23790>;
    <D.23790>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.23774 = loc->source_file;
      D.23429 = __builtin_strcmp (D.23774, prev_file_name);
    }
    if (D.23429 != 0) goto <D.23788>; else goto <D.23789>;
    <D.23788>:
    D.23791 = w->collect_line_info;
    if (D.23791 != 0) goto <D.23792>; else goto <D.23793>;
    <D.23792>:
    D.23774 = loc->source_file;
    D.23794 = get_line_number_file_name (w, D.23774);
    file_index = D.23794 + 1;
    goto <D.23795>;
    <D.23793>:
    D.23774 = loc->source_file;
    file_index = emit_line_number_file_name (w, D.23774, 0, 0);
    <D.23795>:
    monoeg_g_free (prev_file_name);
    D.23774 = loc->source_file;
    prev_file_name = monoeg_strdup (D.23774);
    D.23796 = w->cur_file_index;
    if (D.23796 != file_index) goto <D.23797>; else goto <D.23798>;
    <D.23797>:
    emit_byte (w, 4);
    file_index.18 = (unsigned int) file_index;
    emit_uleb128 (w, file_index.18);
    emit_byte (w, 1);
    w->cur_file_index = file_index;
    <D.23798>:
    <D.23789>:
    emit_advance_op (w, line_diff, addr_diff);
    prev_line = loc->row;
    prev_native_offset = (guint32) i;
    <D.23787>:
    mono_debug_symfile_free_location (loc);
  }
  <D.23420>:
  i = i + 1;
  <D.23431>:
  i.15 = (unsigned int) i;
  if (i.15 < code_size) goto <D.23430>; else goto <D.23432>;
  <D.23432>:
  monoeg_g_free (native_to_il_offset);
  monoeg_g_free (prev_file_name);
  if (first == 0) goto <D.23800>; else goto <D.23801>;
  <D.23800>:
  emit_byte (w, 2);
  D.23802 = code_size - prev_native_offset;
  D.23803 = (long int) D.23802;
  emit_sleb128 (w, D.23803);
  emit_byte (w, 1);
  emit_byte (w, 0);
  emit_byte (w, 1);
  emit_byte (w, 1);
  goto <D.23804>;
  <D.23801>:
  if (start_symbol == 0B) goto <D.23805>; else goto <D.23806>;
  <D.23805>:
  {
    char * name;
    char * dis;
    const guint8 * ip;
    int prev_line;
    int prev_native_offset;
    int * il_to_line;

    try
      {
        ip.19 = header->code;
        ip = ip.19;
        name = mono_method_full_name (method, 1);
        D.23808 = w->il_file;
        fprintf (D.23808, "// %s\n", name);
        D.23809 = w->il_file_line_index;
        D.23810 = D.23809 + 1;
        w->il_file_line_index = D.23810;
        monoeg_g_free (name);
        D.23811 = header->code_size;
        D.23812 = (long unsigned int) D.23811;
        D.23813 = D.23812 * 4;
        il_to_line = monoeg_malloc0 (D.23813);
        emit_section_change (w, ".debug_line", 4);
        emit_byte (w, 0);
        emit_byte (w, 9);
        emit_byte (w, 2);
        emit_pointer_value (w, code);
        goto <D.23441>;
        <D.23440>:
        {
          int il_offset;

          ip.20 = ip;
          ip.21 = (long int) ip.20;
          ip.19 = header->code;
          ip.22 = (long int) ip.19;
          D.23817 = ip.21 - ip.22;
          il_offset = (int) D.23817;
          D.23809 = w->il_file_line_index;
          D.23810 = D.23809 + 1;
          w->il_file_line_index = D.23810;
          ip.20 = ip;
          dis = disasm_ins (method, ip.20, &ip);
          D.23808 = w->il_file;
          fprintf (D.23808, "%s\n", dis);
          monoeg_g_free (dis);
          D.23818 = (long unsigned int) il_offset;
          D.23819 = D.23818 * 4;
          D.23820 = il_to_line + D.23819;
          D.23809 = w->il_file_line_index;
          *D.23820 = D.23809;
        }
        <D.23441>:
        ip.19 = header->code;
        D.23811 = header->code_size;
        D.23821 = (sizetype) D.23811;
        D.23822 = ip.19 + D.23821;
        ip.20 = ip;
        if (D.23822 > ip.20) goto <D.23440>; else goto <D.23442>;
        <D.23442>:
        prev_line = 1;
        prev_native_offset = 0;
        i = 0;
        goto <D.23447>;
        <D.23446>:
        {
          struct MonoDebugLineNumberEntry * lne;
          int line;

          D.23730 = debug_info->line_numbers;
          D.23735 = (long unsigned int) i;
          D.23736 = D.23735 * 8;
          lne = D.23730 + D.23736;
          D.23823 = lne->il_offset;
          D.23811 = header->code_size;
          if (D.23823 >= D.23811) goto <D.23824>; else goto <D.23825>;
          <D.23824>:
          // predicted unlikely by continue predictor.
          goto <D.23445>;
          <D.23825>:
          D.23823 = lne->il_offset;
          D.23826 = (long unsigned int) D.23823;
          D.23827 = D.23826 * 4;
          D.23828 = il_to_line + D.23827;
          line = *D.23828;
          if (line == 0) goto <D.23829>; else goto <D.23830>;
          <D.23829>:
          // predicted unlikely by continue predictor.
          goto <D.23445>;
          <D.23830>:
          if (line != prev_line) goto <D.23831>; else goto <D.23832>;
          <D.23831>:
          D.23833 = lne->native_offset;
          D.23834 = (int) D.23833;
          D.23835 = D.23834 - prev_native_offset;
          D.23836 = line - prev_line;
          emit_advance_op (w, D.23836, D.23835);
          prev_line = line;
          D.23833 = lne->native_offset;
          prev_native_offset = (int) D.23833;
          <D.23832>:
        }
        <D.23445>:
        i = i + 1;
        <D.23447>:
        i.13 = (unsigned int) i;
        D.23727 = debug_info->num_line_numbers;
        if (i.13 < D.23727) goto <D.23446>; else goto <D.23448>;
        <D.23448>:
        emit_byte (w, 2);
        prev_native_offset.23 = (unsigned int) prev_native_offset;
        D.23838 = code_size - prev_native_offset.23;
        D.23839 = (long int) D.23838;
        emit_sleb128 (w, D.23839);
        emit_byte (w, 1);
        emit_byte (w, 0);
        emit_byte (w, 1);
        emit_byte (w, 1);
        D.23808 = w->il_file;
        fflush (D.23808);
        monoeg_g_free (il_to_line);
      }
    finally
      {
        ip = {CLOBBER};
      }
  }
  <D.23806>:
  <D.23804>:
  mono_metadata_free_mh (header);
}


compare_lne (struct MonoDebugLineNumberEntry * a, struct MonoDebugLineNumberEntry * b)
{
  unsigned int D.23841;
  unsigned int D.23842;
  gint D.23845;
  unsigned int D.23846;
  unsigned int D.23847;
  unsigned int D.23848;
  unsigned int D.23849;

  D.23841 = a->native_offset;
  D.23842 = b->native_offset;
  if (D.23841 == D.23842) goto <D.23843>; else goto <D.23844>;
  <D.23843>:
  D.23846 = a->il_offset;
  D.23847 = b->il_offset;
  D.23848 = D.23846 - D.23847;
  D.23845 = (gint) D.23848;
  return D.23845;
  <D.23844>:
  D.23841 = a->native_offset;
  D.23842 = b->native_offset;
  D.23849 = D.23841 - D.23842;
  D.23845 = (gint) D.23849;
  return D.23845;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.23851;
  long unsigned int D.23852;

  D.23852 = __builtin_object_size (__dest, 0);
  D.23851 = __builtin___memcpy_chk (__dest, __src, __len, D.23852);
  return D.23851;
}


il_offset_from_address (struct MonoMethod * method, struct MonoDebugMethodJitInfo * jit, guint32 native_offset)
{
  struct MonoDebugLineNumberEntry * D.23854;
  gint32 D.23857;
  unsigned int D.23858;
  unsigned int D.23859;
  long unsigned int D.23860;
  long unsigned int D.23861;
  struct MonoDebugLineNumberEntry * D.23862;
  unsigned int D.23863;
  unsigned int D.23866;
  int i;

  D.23854 = jit->line_numbers;
  if (D.23854 == 0B) goto <D.23855>; else goto <D.23856>;
  <D.23855>:
  D.23857 = -1;
  return D.23857;
  <D.23856>:
  D.23858 = jit->num_line_numbers;
  D.23859 = D.23858 + 4294967295;
  i = (int) D.23859;
  goto <D.23368>;
  <D.23367>:
  {
    struct MonoDebugLineNumberEntry lne;

    try
      {
        D.23854 = jit->line_numbers;
        D.23860 = (long unsigned int) i;
        D.23861 = D.23860 * 8;
        D.23862 = D.23854 + D.23861;
        lne = *D.23862;
        D.23863 = lne.native_offset;
        if (D.23863 <= native_offset) goto <D.23864>; else goto <D.23865>;
        <D.23864>:
        D.23866 = lne.il_offset;
        D.23857 = (gint32) D.23866;
        return D.23857;
        <D.23865>:
      }
    finally
      {
        lne = {CLOBBER};
      }
  }
  i = i + -1;
  <D.23368>:
  if (i >= 0) goto <D.23367>; else goto <D.23369>;
  <D.23369>:
  D.23857 = -1;
  return D.23857;
}


emit_pointer_unaligned (struct MonoDwarfWriter * w, const char * target)
{
  struct MonoImageWriter * D.23870;

  D.23870 = w->w;
  img_writer_emit_pointer_unaligned (D.23870, target);
}


get_line_number_file_name (struct MonoDwarfWriter * w, const char * name)
{
  struct GHashTable * D.23871;
  _Bool D.23872;
  long int D.23873;
  long int D.23874;
  void * D.23877;
  long int D.23878;
  _Bool D.23879;
  long int D.23880;
  long int D.23881;
  int D.23884;
  int index;

  D.23871 = w->file_to_index;
  D.23872 = D.23871 == 0B;
  D.23873 = (long int) D.23872;
  D.23874 = __builtin_expect (D.23873, 0);
  if (D.23874 != 0) goto <D.23875>; else goto <D.23876>;
  <D.23875>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "dwarfwriter.c", 648, "w->file_to_index");
  <D.23876>:
  D.23871 = w->file_to_index;
  D.23877 = monoeg_g_hash_table_lookup (D.23871, name);
  D.23878 = (long int) D.23877;
  index = (int) D.23878;
  D.23879 = index <= 0;
  D.23880 = (long int) D.23879;
  D.23881 = __builtin_expect (D.23880, 0);
  if (D.23881 != 0) goto <D.23882>; else goto <D.23883>;
  <D.23882>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "dwarfwriter.c", 650, "index > 0");
  <D.23883>:
  D.23884 = index + -1;
  return D.23884;
}


emit_line_number_file_name (struct MonoDwarfWriter * w, const char * name, gint64 last_mod_time, gint64 file_size)
{
  struct GHashTable * D.23886;
  struct GHashTable * D.23889;
  void * D.23890;
  long int D.23891;
  int D.23894;
  int D.23895;
  struct GHashTable * D.23898;
  struct GHashTable * D.23901;
  void * D.23902;
  long int D.23903;
  int D.23906;
  int D.23907;
  long unsigned int D.23908;
  void * D.23909;
  gchar * D.23910;
  unsigned int dir_index.24;
  int D.23918;
  int D.23919;
  long unsigned int D.23920;
  void * D.23921;
  gchar * D.23922;
  int index;
  int dir_index;
  char * basename;

  basename = 0B;
  D.23886 = w->file_to_index;
  if (D.23886 == 0B) goto <D.23887>; else goto <D.23888>;
  <D.23887>:
  D.23889 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  w->file_to_index = D.23889;
  <D.23888>:
  D.23886 = w->file_to_index;
  D.23890 = monoeg_g_hash_table_lookup (D.23886, name);
  D.23891 = (long int) D.23890;
  index = (int) D.23891;
  if (index > 0) goto <D.23892>; else goto <D.23893>;
  <D.23892>:
  D.23894 = index;
  return D.23894;
  <D.23893>:
  D.23895 = monoeg_g_path_is_absolute (name);
  if (D.23895 != 0) goto <D.23896>; else goto <D.23897>;
  <D.23896>:
  {
    char * dir;

    dir = monoeg_g_path_get_dirname (name);
    D.23898 = w->dir_to_index;
    if (D.23898 == 0B) goto <D.23899>; else goto <D.23900>;
    <D.23899>:
    D.23901 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
    w->dir_to_index = D.23901;
    <D.23900>:
    D.23898 = w->dir_to_index;
    D.23902 = monoeg_g_hash_table_lookup (D.23898, dir);
    D.23903 = (long int) D.23902;
    dir_index = (int) D.23903;
    if (dir_index == 0) goto <D.23904>; else goto <D.23905>;
    <D.23904>:
    emit_section_change (w, ".debug_line", 2);
    emit_string (w, dir);
    D.23906 = w->line_number_dir_index;
    D.23907 = D.23906 + 1;
    w->line_number_dir_index = D.23907;
    dir_index = w->line_number_dir_index;
    D.23908 = (long unsigned int) dir_index;
    D.23909 = (void *) D.23908;
    D.23910 = monoeg_strdup (dir);
    D.23898 = w->dir_to_index;
    monoeg_g_hash_table_insert_replace (D.23898, D.23910, D.23909, 0);
    <D.23905>:
    monoeg_g_free (dir);
    basename = monoeg_g_path_get_basename (name);
  }
  goto <D.23911>;
  <D.23897>:
  dir_index = 0;
  <D.23911>:
  emit_section_change (w, ".debug_line", 3);
  if (basename != 0B) goto <D.23912>; else goto <D.23913>;
  <D.23912>:
  emit_string (w, basename);
  goto <D.23914>;
  <D.23913>:
  emit_string (w, name);
  <D.23914>:
  dir_index.24 = (unsigned int) dir_index;
  emit_uleb128 (w, dir_index.24);
  emit_byte (w, 0);
  emit_byte (w, 0);
  emit_section_change (w, ".debug_line", 4);
  if (basename != 0B) goto <D.23916>; else goto <D.23917>;
  <D.23916>:
  monoeg_g_free (basename);
  <D.23917>:
  D.23918 = w->line_number_file_index;
  D.23919 = D.23918 + 1;
  w->line_number_file_index = D.23919;
  index = w->line_number_file_index;
  D.23920 = (long unsigned int) index;
  D.23921 = (void *) D.23920;
  D.23922 = monoeg_strdup (name);
  D.23886 = w->file_to_index;
  monoeg_g_hash_table_insert_replace (D.23886, D.23922, D.23921, 0);
  D.23894 = index;
  return D.23894;
}


disasm_ins (struct MonoMethod * method, const guchar * ip, const guint8 * * endip)
{
  const guchar * ip.25;
  unsigned char D.23925;
  const guchar * D.23928;
  unsigned char D.23929;
  int D.23930;
  _Bool D.23931;
  long int D.23932;
  long int D.23933;
  const char * D.23936;
  long int ip.26;
  const unsigned char * D.23938;
  long int D.23939;
  long int D.23940;
  int D.23941;
  const guchar * ip.27;
  const char * D.23943;
  char * D.23945;
  char * dis;
  struct MonoDisHelper dh;
  struct MonoMethodHeader * header;

  try
    {
      header = mono_method_get_header (method);
      memset (&dh, 0, 48);
      dh.newline = "";
      dh.label_format = "IL_%04x: ";
      dh.label_target = "IL_%04x";
      dh.tokener = token_handler;
      ip.25 = ip;
      token_handler_ip = ip.25;
      ip.25 = ip;
      D.23925 = *ip.25;
      if (D.23925 == 240) goto <D.23926>; else goto <D.23927>;
      <D.23926>:
      {
        guint32 token;
        void * data;

        ip.25 = ip;
        D.23928 = ip.25 + 1;
        D.23929 = *D.23928;
        D.23930 = (int) D.23929;
        switch (D.23930) <default: <D.23359>, case 0: <D.23355>, case 11: <D.23358>>
        <D.23355>:
        {
          struct MonoJitICallInfo * info;

          ip.25 = ip;
          token = MEM[(const guint32 *)ip.25 + 2B];
          data = mono_method_get_wrapper_data (method, token);
          info = mono_find_jit_icall_by_addr (data);
          D.23931 = info == 0B;
          D.23932 = (long int) D.23931;
          D.23933 = __builtin_expect (D.23932, 0);
          if (D.23933 != 0) goto <D.23934>; else goto <D.23935>;
          <D.23934>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "dwarfwriter.c", 1470, "info");
          <D.23935>:
          D.23936 = info->name;
          ip.25 = ip;
          ip.26 = (long int) ip.25;
          D.23938 = header->code;
          D.23939 = (long int) D.23938;
          D.23940 = ip.26 - D.23939;
          D.23941 = (int) D.23940;
          dis = monoeg_g_strdup_printf ("IL_%04x: mono_icall <%s>", D.23941, D.23936);
          ip.25 = ip;
          ip.27 = ip.25 + 6;
          ip = ip.27;
          goto <D.23357>;
        }
        <D.23358>:
        ip.25 = ip;
        token = MEM[(const guint32 *)ip.25 + 2B];
        data = mono_method_get_wrapper_data (method, token);
        D.23943 = MEM[(struct MonoClass *)data].name;
        ip.25 = ip;
        ip.26 = (long int) ip.25;
        D.23938 = header->code;
        D.23939 = (long int) D.23938;
        D.23940 = ip.26 - D.23939;
        D.23941 = (int) D.23940;
        dis = monoeg_g_strdup_printf ("IL_%04x: mono_classconst <%s>", D.23941, D.23943);
        ip.25 = ip;
        ip.27 = ip.25 + 6;
        ip = ip.27;
        goto <D.23357>;
        <D.23359>:
        ip.25 = ip;
        dis = mono_disasm_code_one (&dh, method, ip.25, &ip);
        <D.23357>:
      }
      goto <D.23944>;
      <D.23927>:
      ip.25 = ip;
      dis = mono_disasm_code_one (&dh, method, ip.25, &ip);
      <D.23944>:
      token_handler_ip = 0B;
      ip.25 = ip;
      *endip = ip.25;
      mono_metadata_free_mh (header);
      D.23945 = dis;
      return D.23945;
    }
  finally
    {
      dh = {CLOBBER};
    }
}


token_handler (struct MonoDisHelper * dh, struct MonoMethod * method, guint32 token)
{
  unsigned char D.23948;
  unsigned char D.23949;
  const guint8 * token_handler_ip.28;
  unsigned char D.23953;
  int D.23954;
  struct MonoClass * D.23958;
  struct MonoImage * D.23959;
  struct MonoClass * klass.29;
  struct MonoClass * klass.30;
  const char * D.23962;
  char * D.23972;
  char * res;
  char * desc;
  struct MonoMethod * cmethod;
  struct MonoClass * klass;
  struct MonoClassField * field;
  void * data;

  try
    {
      data = 0B;
      D.23948 = BIT_FIELD_REF <*method, 8, 256>;
      D.23949 = D.23948 & 124;
      if (D.23949 != 0) goto <D.23950>; else goto <D.23951>;
      <D.23950>:
      data = mono_method_get_wrapper_data (method, token);
      <D.23951>:
      token_handler_ip.28 = token_handler_ip;
      D.23953 = *token_handler_ip.28;
      D.23954 = (int) D.23953;
      switch (D.23954) <default: <D.23344>, case 40: <D.23337>, case 41: <D.23339>, case 111: <D.23338>, case 115: <D.23336>, case 116: <D.23333>, case 117: <D.23332>, case 123: <D.23340>, case 125: <D.23342>, case 126: <D.23341>, case 128: <D.23343>, case 143: <D.23334>>
      <D.23332>:
      <D.23333>:
      <D.23334>:
      D.23948 = BIT_FIELD_REF <*method, 8, 256>;
      D.23949 = D.23948 & 124;
      if (D.23949 != 0) goto <D.23955>; else goto <D.23956>;
      <D.23955>:
      klass = data;
      goto <D.23957>;
      <D.23956>:
      D.23958 = method->klass;
      D.23959 = D.23958->image;
      klass.29 = mono_class_get_full (D.23959, token, 0B);
      klass = klass.29;
      <D.23957>:
      klass.30 = klass;
      D.23962 = klass.30->name;
      res = monoeg_g_strdup_printf ("<%s>", D.23962);
      goto <D.23335>;
      <D.23336>:
      <D.23337>:
      <D.23338>:
      D.23948 = BIT_FIELD_REF <*method, 8, 256>;
      D.23949 = D.23948 & 124;
      if (D.23949 != 0) goto <D.23963>; else goto <D.23964>;
      <D.23963>:
      cmethod = data;
      goto <D.23965>;
      <D.23964>:
      D.23958 = method->klass;
      D.23959 = D.23958->image;
      cmethod = mono_get_method_full (D.23959, token, 0B, 0B);
      <D.23965>:
      desc = mono_method_full_name (cmethod, 1);
      res = monoeg_g_strdup_printf ("<%s>", desc);
      monoeg_g_free (desc);
      goto <D.23335>;
      <D.23339>:
      D.23948 = BIT_FIELD_REF <*method, 8, 256>;
      D.23949 = D.23948 & 124;
      if (D.23949 != 0) goto <D.23966>; else goto <D.23967>;
      <D.23966>:
      desc = mono_signature_get_desc (data, 0);
      res = monoeg_g_strdup_printf ("<%s>", desc);
      monoeg_g_free (desc);
      goto <D.23968>;
      <D.23967>:
      res = monoeg_g_strdup_printf ("<0x%08x>", token);
      <D.23968>:
      goto <D.23335>;
      <D.23340>:
      <D.23341>:
      <D.23342>:
      <D.23343>:
      D.23948 = BIT_FIELD_REF <*method, 8, 256>;
      D.23949 = D.23948 & 124;
      if (D.23949 != 0) goto <D.23969>; else goto <D.23970>;
      <D.23969>:
      field = data;
      goto <D.23971>;
      <D.23970>:
      D.23958 = method->klass;
      D.23959 = D.23958->image;
      field = mono_field_from_token (D.23959, token, &klass, 0B);
      <D.23971>:
      desc = mono_field_full_name (field);
      res = monoeg_g_strdup_printf ("<%s>", desc);
      monoeg_g_free (desc);
      goto <D.23335>;
      <D.23344>:
      res = monoeg_g_strdup_printf ("<0x%08x>", token);
      goto <D.23335>;
      <D.23335>:
      D.23972 = res;
      return D.23972;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.23977;
  int D.23982;
  void * D.23984;
  long unsigned int D.23985;

  D.23977 = __builtin_constant_p (__len);
  if (D.23977 != 0) goto <D.23978>; else goto <D.23979>;
  <D.23978>:
  if (__len == 0) goto <D.23980>; else goto <D.23981>;
  <D.23980>:
  D.23982 = __builtin_constant_p (__ch);
  if (D.23982 == 0) goto <D.23975>; else goto <D.23983>;
  <D.23983>:
  if (__ch != 0) goto <D.23975>; else goto <D.23976>;
  <D.23975>:
  __warn_memset_zero_len ();
  D.23984 = __dest;
  return D.23984;
  <D.23976>:
  <D.23981>:
  <D.23979>:
  D.23985 = __builtin_object_size (__dest, 0);
  D.23984 = __builtin___memset_chk (__dest, __ch, __len, D.23985);
  return D.23984;
}


fprintf (struct FILE * restrict __stream, const char * restrict __fmt)
{
  int D.23987;

  D.23987 = __fprintf_chk (__stream, 1, __fmt, __builtin_va_arg_pack ());
  return D.23987;
}


emit_advance_op (struct MonoDwarfWriter * w, int line_diff, int addr_diff)
{
  unsigned int line_diff.31;
  unsigned int D.23990;
  int max_special_addr_diff.32;
  int D.23998;
  int D.24001;
  int D.24002;
  int D.24003;
  int D.24004;
  unsigned char D.24009;
  int D.24010;
  long int D.24012;
  long int D.24013;
  gint64 opcode;

  opcode = 0;
  line_diff.31 = (unsigned int) line_diff;
  D.23990 = line_diff.31 + 5;
  if (D.23990 <= 13) goto <D.23991>; else goto <D.23992>;
  <D.23991>:
  max_special_addr_diff.32 = max_special_addr_diff;
  if (max_special_addr_diff.32 == 0) goto <D.23994>; else goto <D.23995>;
  <D.23994>:
  max_special_addr_diff = 17;
  <D.23995>:
  max_special_addr_diff.32 = max_special_addr_diff;
  if (addr_diff > max_special_addr_diff.32) goto <D.23996>; else goto <D.23997>;
  <D.23996>:
  max_special_addr_diff.32 = max_special_addr_diff;
  D.23998 = max_special_addr_diff.32 * 2;
  if (D.23998 > addr_diff) goto <D.23999>; else goto <D.24000>;
  <D.23999>:
  emit_byte (w, 8);
  max_special_addr_diff.32 = max_special_addr_diff;
  addr_diff = addr_diff - max_special_addr_diff.32;
  <D.24000>:
  <D.23997>:
  D.24001 = line_diff + 5;
  D.24002 = addr_diff * 14;
  D.24003 = D.24001 + D.24002;
  D.24004 = D.24003 + 13;
  opcode = (gint64) D.24004;
  if (opcode > 255) goto <D.24005>; else goto <D.24006>;
  <D.24005>:
  opcode = 0;
  <D.24006>:
  <D.23992>:
  if (opcode != 0) goto <D.24007>; else goto <D.24008>;
  <D.24007>:
  D.24009 = (unsigned char) opcode;
  D.24010 = (int) D.24009;
  emit_byte (w, D.24010);
  goto <D.24011>;
  <D.24008>:
  emit_byte (w, 3);
  D.24012 = (long int) line_diff;
  emit_sleb128 (w, D.24012);
  emit_byte (w, 2);
  D.24013 = (long int) addr_diff;
  emit_sleb128 (w, D.24013);
  emit_byte (w, 1);
  <D.24011>:
}


mono_dwarf_writer_emit_method (struct MonoDwarfWriter * w, struct MonoCompile * cfg, struct MonoMethod * method, char * start_symbol, char * end_symbol, guint8 * code, guint32 code_size, struct MonoInst * * args, struct MonoInst * * locals, struct GSList * unwind_info, struct MonoDebugMethodJitInfo * debug_info)
{
  unsigned char D.24017;
  unsigned char D.24018;
  struct MonoClass * D.24020;
  unsigned char D.24021;
  unsigned char D.24022;
  <unnamed-unsigned:1> D.24026;
  int D.24027;
  int D.24028;
  short unsigned int D.24029;
  int D.24030;
  int D.24031;
  struct MonoType * D.24032;
  short unsigned int D.24033;
  int D.24034;
  long unsigned int D.24035;
  long unsigned int D.24036;
  sizetype D.24040;
  void * D.24041;
  struct MonoInst * iftmp.33;
  long unsigned int D.24045;
  long unsigned int D.24046;
  struct MonoInst * * D.24047;
  _Bool D.24051;
  _Bool D.24052;
  _Bool D.24053;
  int D.24056;
  int D.24058;
  long unsigned int D.24066;
  long unsigned int D.24067;
  char * * D.24068;
  guint32 iftmp.34;
  char D.24073;
  unsigned char D.24080;
  int D.24081;
  int D.24082;
  struct MonoClass * D.24083;
  struct MonoType * D.24084;
  guint8 * p.35;
  int code_size.36;
  long int p.37;
  long int buf.38;
  long int D.24093;
  unsigned int D.24094;
  sizetype D.24095;
  guint8 * D.24096;
  sizetype D.24097;
  guint8 * D.24098;
  unsigned char D.24100;
  int D.24101;
  int D.24102;
  struct MonoInst * * D.24103;
  _Bool D.24104;
  _Bool D.24105;
  int D.24108;
  guint32 iftmp.39;
  struct MonoDebugLocalVar * D.24117;
  long unsigned int D.24118;
  long unsigned int D.24119;
  struct MonoDebugLocalVar * D.24120;
  int D.24121;
  int D.24123;
  unsigned char D.24133;
  int D.24134;
  int D.24135;
  int D.24138;
  sizetype D.24141;
  guint8 * D.24142;
  sizetype D.24143;
  guint8 * D.24144;
  int D.24150;
  int D.24151;
  const mono_byte * D.24154;
  int D.24157;
  gchar * D.24160;
  gchar * D.24161;
  struct GSList * D.24162;
  struct GSList * D.24163;
  char * name;
  struct MonoMethodSignature * sig;
  struct MonoMethodHeader * header;
  char * * names;
  struct MonoDebugLocalsInfo * locals_info;
  int i;
  guint8 buf[128];
  guint8 * p;

  try
    {
      emit_section_change (w, ".debug_info", 0);
      sig = mono_method_signature (method);
      header = mono_method_get_header (method);
      i = 0;
      goto <D.23480>;
      <D.23479>:
      {
        struct MonoType * t;

        if (i == 0) goto <D.24016>; else goto <D.24014>;
        <D.24016>:
        D.24017 = BIT_FIELD_REF <*sig, 8, 112>;
        D.24018 = D.24017 & 64;
        if (D.24018 != 0) goto <D.24019>; else goto <D.24014>;
        <D.24019>:
        D.24020 = method->klass;
        D.24021 = BIT_FIELD_REF <*D.24020, 8, 256>;
        D.24022 = D.24021 & 8;
        if (D.24022 != 0) goto <D.24023>; else goto <D.24024>;
        <D.24023>:
        D.24020 = method->klass;
        t = &D.24020->this_arg;
        goto <D.24025>;
        <D.24024>:
        D.24020 = method->klass;
        t = &D.24020->byval_arg;
        <D.24025>:
        goto <D.24015>;
        <D.24014>:
        D.24026 = sig->hasthis;
        D.24027 = (int) D.24026;
        D.24028 = i - D.24027;
        t = sig->params[D.24028];
        <D.24015>:
        emit_type (w, t);
      }
      i = i + 1;
      <D.23480>:
      D.24029 = sig->param_count;
      D.24030 = (int) D.24029;
      D.24026 = sig->hasthis;
      D.24027 = (int) D.24026;
      D.24031 = D.24030 + D.24027;
      if (D.24031 > i) goto <D.23479>; else goto <D.23481>;
      <D.23481>:
      i = 0;
      goto <D.23483>;
      <D.23482>:
      D.24032 = header->locals[i];
      emit_type (w, D.24032);
      i = i + 1;
      <D.23483>:
      D.24033 = header->num_locals;
      D.24034 = (int) D.24033;
      if (D.24034 > i) goto <D.23482>; else goto <D.23484>;
      <D.23484>:
      D.24029 = sig->param_count;
      D.24035 = (long unsigned int) D.24029;
      D.24036 = D.24035 * 8;
      names = monoeg_malloc0 (D.24036);
      mono_method_get_param_names (method, names);
      emit_uleb128 (w, 2);
      name = mono_method_full_name (method, 0);
      emit_string (w, name);
      emit_string (w, name);
      monoeg_g_free (name);
      if (start_symbol != 0B) goto <D.24037>; else goto <D.24038>;
      <D.24037>:
      emit_pointer_unaligned (w, start_symbol);
      emit_pointer_unaligned (w, end_symbol);
      goto <D.24039>;
      <D.24038>:
      emit_pointer_value (w, code);
      D.24040 = (sizetype) code_size;
      D.24041 = code + D.24040;
      emit_pointer_value (w, D.24041);
      <D.24039>:
      emit_byte (w, 2);
      emit_byte (w, 118);
      emit_byte (w, 16);
      i = 0;
      goto <D.23492>;
      <D.23491>:
      {
        struct MonoInst * arg;
        struct MonoType * t;
        const char * pname;
        char pname_buf[128];
        struct MonoMethodVar * vmv;
        gboolean need_loclist;

        try
          {
            if (args != 0B) goto <D.24043>; else goto <D.24044>;
            <D.24043>:
            D.24045 = (long unsigned int) i;
            D.24046 = D.24045 * 8;
            D.24047 = args + D.24046;
            iftmp.33 = *D.24047;
            goto <D.24048>;
            <D.24044>:
            iftmp.33 = 0B;
            <D.24048>:
            arg = iftmp.33;
            vmv = 0B;
            need_loclist = 0;
            vmv = find_vmv (cfg, arg);
            D.24051 = code != 0B;
            D.24052 = vmv != 0B;
            D.24053 = D.24051 & D.24052;
            if (D.24053 != 0) goto <D.24054>; else goto <D.24055>;
            <D.24054>:
            D.24056 = vmv->live_range_start;
            if (D.24056 != 0) goto <D.24049>; else goto <D.24057>;
            <D.24057>:
            D.24058 = vmv->live_range_end;
            if (D.24058 != 0) goto <D.24049>; else goto <D.24050>;
            <D.24049>:
            need_loclist = 1;
            <D.24050>:
            <D.24055>:
            if (i == 0) goto <D.24061>; else goto <D.24059>;
            <D.24061>:
            D.24017 = BIT_FIELD_REF <*sig, 8, 112>;
            D.24018 = D.24017 & 64;
            if (D.24018 != 0) goto <D.24062>; else goto <D.24059>;
            <D.24062>:
            D.24020 = method->klass;
            D.24021 = BIT_FIELD_REF <*D.24020, 8, 256>;
            D.24022 = D.24021 & 8;
            if (D.24022 != 0) goto <D.24063>; else goto <D.24064>;
            <D.24063>:
            D.24020 = method->klass;
            t = &D.24020->this_arg;
            goto <D.24065>;
            <D.24064>:
            D.24020 = method->klass;
            t = &D.24020->byval_arg;
            <D.24065>:
            pname = "this";
            goto <D.24060>;
            <D.24059>:
            D.24026 = sig->hasthis;
            D.24027 = (int) D.24026;
            D.24028 = i - D.24027;
            t = sig->params[D.24028];
            D.24026 = sig->hasthis;
            D.24027 = (int) D.24026;
            D.24028 = i - D.24027;
            D.24066 = (long unsigned int) D.24028;
            D.24067 = D.24066 * 8;
            D.24068 = names + D.24067;
            pname = *D.24068;
            <D.24060>:
            if (need_loclist != 0) goto <D.24070>; else goto <D.24071>;
            <D.24070>:
            iftmp.34 = 15;
            goto <D.24072>;
            <D.24071>:
            iftmp.34 = 3;
            <D.24072>:
            emit_uleb128 (w, iftmp.34);
            D.24073 = *pname;
            if (D.24073 == 0) goto <D.24074>; else goto <D.24075>;
            <D.24074>:
            D.24026 = sig->hasthis;
            D.24027 = (int) D.24026;
            D.24028 = i - D.24027;
            sprintf (&pname_buf, "param%d", D.24028);
            pname = &pname_buf;
            <D.24075>:
            emit_string (w, pname);
            if (arg == 0B) goto <D.24076>; else goto <D.24079>;
            <D.24079>:
            D.24080 = arg->flags;
            D.24081 = (int) D.24080;
            D.24082 = D.24081 & 2;
            if (D.24082 != 0) goto <D.24076>; else goto <D.24077>;
            <D.24076>:
            D.24083 = mono_defaults.int32_class;
            D.24084 = &D.24083->byval_arg;
            emit_var_type (w, D.24084);
            goto <D.24078>;
            <D.24077>:
            emit_var_type (w, t);
            <D.24078>:
            p = &buf;
            p.35 = p;
            encode_var_location (w, arg, p.35, &p);
            if (need_loclist != 0) goto <D.24086>; else goto <D.24087>;
            <D.24086>:
            vmv->live_range_start = 0;
            D.24058 = vmv->live_range_end;
            if (D.24058 == 0) goto <D.24088>; else goto <D.24089>;
            <D.24088>:
            code_size.36 = (int) code_size;
            vmv->live_range_end = code_size.36;
            <D.24089>:
            p.35 = p;
            p.37 = (long int) p.35;
            buf.38 = (long int) &buf;
            D.24093 = p.37 - buf.38;
            D.24094 = (unsigned int) D.24093;
            D.24058 = vmv->live_range_end;
            D.24095 = (sizetype) D.24058;
            D.24096 = code + D.24095;
            D.24056 = vmv->live_range_start;
            D.24097 = (sizetype) D.24056;
            D.24098 = code + D.24097;
            emit_loclist (w, arg, D.24098, D.24096, &buf, D.24094);
            goto <D.24099>;
            <D.24087>:
            p.35 = p;
            p.37 = (long int) p.35;
            buf.38 = (long int) &buf;
            D.24093 = p.37 - buf.38;
            D.24100 = (unsigned char) D.24093;
            D.24101 = (int) D.24100;
            emit_byte (w, D.24101);
            p.35 = p;
            p.37 = (long int) p.35;
            buf.38 = (long int) &buf;
            D.24093 = p.37 - buf.38;
            D.24102 = (int) D.24093;
            emit_bytes (w, &buf, D.24102);
            <D.24099>:
          }
        finally
          {
            pname_buf = {CLOBBER};
          }
      }
      i = i + 1;
      <D.23492>:
      D.24029 = sig->param_count;
      D.24030 = (int) D.24029;
      D.24026 = sig->hasthis;
      D.24027 = (int) D.24026;
      D.24031 = D.24030 + D.24027;
      if (D.24031 > i) goto <D.23491>; else goto <D.23493>;
      <D.23493>:
      monoeg_g_free (names);
      locals_info = mono_debug_lookup_locals (method);
      i = 0;
      goto <D.23504>;
      <D.23503>:
      {
        struct MonoInst * ins;
        char name_buf[128];
        int j;
        struct MonoMethodVar * vmv;
        gboolean need_loclist;
        char * lname;

        try
          {
            D.24045 = (long unsigned int) i;
            D.24046 = D.24045 * 8;
            D.24103 = locals + D.24046;
            ins = *D.24103;
            vmv = 0B;
            need_loclist = 0;
            vmv = find_vmv (cfg, ins);
            D.24051 = code != 0B;
            D.24104 = vmv != 0B;
            D.24105 = D.24051 & D.24104;
            if (D.24105 != 0) goto <D.24106>; else goto <D.24107>;
            <D.24106>:
            D.24108 = vmv->live_range_start;
            if (D.24108 != 0) goto <D.24109>; else goto <D.24110>;
            <D.24109>:
            need_loclist = 1;
            <D.24110>:
            <D.24107>:
            if (need_loclist != 0) goto <D.24112>; else goto <D.24113>;
            <D.24112>:
            iftmp.39 = 12;
            goto <D.24114>;
            <D.24113>:
            iftmp.39 = 11;
            <D.24114>:
            emit_uleb128 (w, iftmp.39);
            lname = 0B;
            if (locals_info != 0B) goto <D.24115>; else goto <D.24116>;
            <D.24115>:
            j = 0;
            goto <D.23502>;
            <D.23501>:
            D.24117 = locals_info->locals;
            D.24118 = (long unsigned int) j;
            D.24119 = D.24118 * 24;
            D.24120 = D.24117 + D.24119;
            D.24121 = D.24120->index;
            if (D.24121 == i) goto <D.23500>; else goto <D.24122>;
            <D.24122>:
            j = j + 1;
            <D.23502>:
            D.24123 = locals_info->num_locals;
            if (D.24123 > j) goto <D.23501>; else goto <D.23500>;
            <D.23500>:
            D.24123 = locals_info->num_locals;
            if (D.24123 > j) goto <D.24124>; else goto <D.24125>;
            <D.24124>:
            D.24117 = locals_info->locals;
            D.24118 = (long unsigned int) j;
            D.24119 = D.24118 * 24;
            D.24120 = D.24117 + D.24119;
            lname = D.24120->name;
            <D.24125>:
            <D.24116>:
            if (lname != 0B) goto <D.24126>; else goto <D.24127>;
            <D.24126>:
            emit_string (w, lname);
            goto <D.24128>;
            <D.24127>:
            sprintf (&name_buf, "V_%d", i);
            emit_string (w, &name_buf);
            <D.24128>:
            if (ins == 0B) goto <D.24129>; else goto <D.24132>;
            <D.24132>:
            D.24133 = ins->flags;
            D.24134 = (int) D.24133;
            D.24135 = D.24134 & 2;
            if (D.24135 != 0) goto <D.24129>; else goto <D.24130>;
            <D.24129>:
            D.24083 = mono_defaults.int32_class;
            D.24084 = &D.24083->byval_arg;
            emit_var_type (w, D.24084);
            goto <D.24131>;
            <D.24130>:
            D.24032 = header->locals[i];
            emit_var_type (w, D.24032);
            <D.24131>:
            p = &buf;
            p.35 = p;
            encode_var_location (w, ins, p.35, &p);
            if (need_loclist != 0) goto <D.24136>; else goto <D.24137>;
            <D.24136>:
            D.24138 = vmv->live_range_end;
            if (D.24138 == 0) goto <D.24139>; else goto <D.24140>;
            <D.24139>:
            code_size.36 = (int) code_size;
            vmv->live_range_end = code_size.36;
            <D.24140>:
            p.35 = p;
            p.37 = (long int) p.35;
            buf.38 = (long int) &buf;
            D.24093 = p.37 - buf.38;
            D.24094 = (unsigned int) D.24093;
            D.24138 = vmv->live_range_end;
            D.24141 = (sizetype) D.24138;
            D.24142 = code + D.24141;
            D.24108 = vmv->live_range_start;
            D.24143 = (sizetype) D.24108;
            D.24144 = code + D.24143;
            emit_loclist (w, ins, D.24144, D.24142, &buf, D.24094);
            goto <D.24145>;
            <D.24137>:
            p.35 = p;
            p.37 = (long int) p.35;
            buf.38 = (long int) &buf;
            D.24093 = p.37 - buf.38;
            D.24100 = (unsigned char) D.24093;
            D.24101 = (int) D.24100;
            emit_byte (w, D.24101);
            p.35 = p;
            p.37 = (long int) p.35;
            buf.38 = (long int) &buf;
            D.24093 = p.37 - buf.38;
            D.24102 = (int) D.24093;
            emit_bytes (w, &buf, D.24102);
            <D.24145>:
          }
        finally
          {
            name_buf = {CLOBBER};
          }
      }
      i = i + 1;
      <D.23504>:
      D.24033 = header->num_locals;
      D.24034 = (int) D.24033;
      if (D.24034 > i) goto <D.23503>; else goto <D.23505>;
      <D.23505>:
      if (locals_info != 0B) goto <D.24146>; else goto <D.24147>;
      <D.24146>:
      mono_debug_symfile_free_locals (locals_info);
      <D.24147>:
      emit_uleb128 (w, 0);
      emit_line (w);
      emit_debug_info_end (w);
      if (unwind_info != 0B) goto <D.24148>; else goto <D.24149>;
      <D.24148>:
      D.24150 = w->fde_index;
      emit_fde (w, D.24150, start_symbol, end_symbol, code, code_size, unwind_info, 1);
      D.24150 = w->fde_index;
      D.24151 = D.24150 + 1;
      w->fde_index = D.24151;
      <D.24149>:
      if (debug_info != 0B) goto <D.24152>; else goto <D.24153>;
      <D.24152>:
      D.24154 = debug_info->code_start;
      if (D.24154 == code) goto <D.24155>; else goto <D.24156>;
      <D.24155>:
      D.24157 = w->collect_line_info;
      if (D.24157 != 0) goto <D.24158>; else goto <D.24159>;
      <D.24158>:
      {
        struct MethodLineNumberInfo * info;

        info = monoeg_malloc0 (40);
        info->method = method;
        D.24160 = monoeg_strdup (start_symbol);
        info->start_symbol = D.24160;
        D.24161 = monoeg_strdup (end_symbol);
        info->end_symbol = D.24161;
        info->code = code;
        info->code_size = code_size;
        D.24162 = w->line_info;
        D.24163 = monoeg_g_slist_prepend (D.24162, info);
        w->line_info = D.24163;
      }
      goto <D.24164>;
      <D.24159>:
      emit_line_number_info (w, method, start_symbol, end_symbol, code, code_size, debug_info);
      <D.24164>:
      <D.24156>:
      <D.24153>:
      emit_line (w);
      mono_metadata_free_mh (header);
    }
  finally
    {
      buf = {CLOBBER};
      p = {CLOBBER};
    }
}


emit_type (struct MonoDwarfWriter * w, struct MonoType * t)
{
  unsigned char D.24165;
  unsigned char D.24166;
  unsigned char D.24169;
  struct MonoClass * D.24175;
  int D.24176;
  int D.24177;
  unsigned int j.40;
  int D.24184;
  unsigned char D.24188;
  unsigned char D.24189;
  int D.24192;
  struct MonoClass * klass;
  int j;
  const char * tdie;

  klass = mono_class_from_mono_type (t);
  D.24165 = BIT_FIELD_REF <*t, 8, 88>;
  D.24166 = D.24165 & 64;
  if (D.24166 != 0) goto <D.24167>; else goto <D.24168>;
  <D.24167>:
  D.24169 = t->type;
  if (D.24169 == 17) goto <D.24170>; else goto <D.24171>;
  <D.24170>:
  tdie = emit_class_dwarf_info (w, klass, 1);
  if (tdie != 0B) goto <D.24172>; else goto <D.24173>;
  <D.24172>:
  return;
  <D.24173>:
  goto <D.24174>;
  <D.24171>:
  emit_class_dwarf_info (w, klass, 0);
  <D.24174>:
  D.24175 = mono_defaults.int_class;
  t = &D.24175->byval_arg;
  <D.24168>:
  j = 0;
  goto <D.23292>;
  <D.23291>:
  D.24176 = basic_types[j].type;
  D.24169 = t->type;
  D.24177 = (int) D.24169;
  if (D.24176 == D.24177) goto <D.23290>; else goto <D.24178>;
  <D.24178>:
  j = j + 1;
  <D.23292>:
  j.40 = (unsigned int) j;
  if (j.40 <= 16) goto <D.23291>; else goto <D.23290>;
  <D.23290>:
  j.40 = (unsigned int) j;
  if (j.40 <= 16) goto <D.24180>; else goto <D.24181>;
  <D.24180>:
  if (j <= 63) goto <D.24182>; else goto <D.24183>;
  <D.24182>:
  D.24184 = base_types_emitted[j];
  if (D.24184 == 0) goto <D.24185>; else goto <D.24186>;
  <D.24185>:
  emit_class_dwarf_info (w, klass, 0);
  base_types_emitted[j] = 1;
  <D.24186>:
  <D.24183>:
  goto <D.24187>;
  <D.24181>:
  D.24169 = t->type;
  D.24177 = (int) D.24169;
  switch (D.24177) <default: <D.23299>, case 15: <D.23298>, case 17: <D.23296>, case 18: <D.23293>, case 20: <D.23295>, case 21: <D.23297>>
  <D.23293>:
  emit_class_dwarf_info (w, klass, 0);
  goto <D.23294>;
  <D.23295>:
  goto <D.23294>;
  <D.23296>:
  D.24188 = BIT_FIELD_REF <*klass, 8, 256>;
  D.24189 = D.24188 & 16;
  if (D.24189 != 0) goto <D.24190>; else goto <D.24191>;
  <D.24190>:
  emit_class_dwarf_info (w, klass, 0);
  <D.24191>:
  goto <D.23294>;
  <D.23297>:
  D.24192 = mono_type_is_struct (t);
  if (D.24192 == 0) goto <D.24193>; else goto <D.24194>;
  <D.24193>:
  emit_class_dwarf_info (w, klass, 0);
  <D.24194>:
  goto <D.23294>;
  <D.23298>:
  goto <D.23294>;
  <D.23299>:
  goto <D.23294>;
  <D.23294>:
  <D.24187>:
}


emit_class_dwarf_info (struct MonoDwarfWriter * w, struct MonoClass * klass, gboolean vtype)
{
  char * D.24202;
  unsigned char D.24206;
  _Bool D.24207;
  _Bool D.24208;
  _Bool D.24209;
  unsigned char D.24212;
  unsigned char D.24215;
  unsigned char D.24216;
  unsigned char D.24220;
  const char * D.24224;
  const char * D.24225;
  const char * iftmp.41;
  char D.24230;
  int D.24233;
  int D.24234;
  struct GHashTable * D.24235;
  struct GHashTable * D.24236;
  struct MonoType * D.24239;
  struct MonoClass * D.24240;
  unsigned int size.42;
  int D.24242;
  struct MonoType * D.24243;
  unsigned char D.24244;
  int D.24245;
  unsigned int k.43;
  _Bool D.24248;
  long int D.24249;
  long int D.24250;
  const char * D.24253;
  int D.23229;
  int iftmp.44;
  int D.23225;
  const char[8] * D.24257;
  unsigned char D.24258;
  int D.24259;
  unsigned char D.24260;
  int D.24261;
  _Bool D.24262;
  _Bool D.24263;
  _Bool D.24264;
  const unsigned char * D.24267;
  unsigned char D.24268;
  int D.24269;
  const unsigned char * D.24270;
  unsigned char D.24271;
  int D.24272;
  _Bool D.24273;
  _Bool D.24274;
  const unsigned char * D.24277;
  unsigned char D.24278;
  int D.24279;
  const unsigned char * D.24280;
  unsigned char D.24281;
  int D.24282;
  _Bool D.24283;
  _Bool D.24284;
  const unsigned char * D.24287;
  unsigned char D.24288;
  int D.24289;
  const unsigned char * D.24290;
  unsigned char D.24291;
  int D.24292;
  const char * D.24294;
  struct MonoType * D.24297;
  short unsigned int D.24298;
  int D.24299;
  int D.24300;
  int D.23239;
  int iftmp.45;
  int D.23238;
  const char[9] * D.24306;
  unsigned char D.24307;
  int D.24308;
  unsigned char D.24309;
  int D.24310;
  _Bool D.24311;
  _Bool D.24312;
  _Bool D.24313;
  const unsigned char * D.24316;
  unsigned char D.24317;
  int D.24318;
  const unsigned char * D.24319;
  unsigned char D.24320;
  int D.24321;
  _Bool D.24322;
  _Bool D.24323;
  const unsigned char * D.24326;
  unsigned char D.24327;
  int D.24328;
  const unsigned char * D.24329;
  unsigned char D.24330;
  int D.24331;
  _Bool D.24332;
  _Bool D.24333;
  const unsigned char * D.24336;
  unsigned char D.24337;
  int D.24338;
  const unsigned char * D.24339;
  unsigned char D.24340;
  int D.24341;
  const char * D.24343;
  const char * D.24346;
  const char * p.46;
  const char * p.47;
  unsigned int D.24349;
  struct MonoType * D.24350;
  unsigned char D.24351;
  int D.24352;
  char D.24353;
  long int D.24354;
  short unsigned int D.24355;
  long int D.24356;
  unsigned int D.24357;
  long int D.24358;
  long unsigned int D.24359;
  long int D.24360;
  struct MonoClass * D.24362;
  int D.24366;
  int iftmp.48;
  struct MonoClassField * D.24374;
  guint32 iftmp.49;
  int D.24379;
  unsigned int D.24380;
  guint8 * p.50;
  guint8 * p.51;
  guint8 * p.52;
  long int p.53;
  long int buf.54;
  long int D.24388;
  unsigned char D.24389;
  int D.24390;
  int D.24391;
  const char * D.24396;
  guint8 * p.55;
  guint8 * p.56;
  unsigned char D.24401;
  int D.24404;
  unsigned int D.24405;
  unsigned int D.24406;
  char * die;
  char * pointer_die;
  char * reference_die;
  char * full_name;
  char * p;
  void * iter;
  struct MonoClassField * field;
  const char * fdie;
  int k;
  gboolean emit_namespace;
  gboolean has_children;
  struct GHashTable * cache;

  try
    {
      emit_namespace = 0;
      if (vtype != 0) goto <D.24197>; else goto <D.24198>;
      <D.24197>:
      cache = w->class_to_vtype_die;
      goto <D.24199>;
      <D.24198>:
      cache = w->class_to_die;
      <D.24199>:
      die = monoeg_g_hash_table_lookup (cache, klass);
      if (die != 0B) goto <D.24200>; else goto <D.24201>;
      <D.24200>:
      D.24202 = die;
      return D.24202;
      <D.24201>:
      D.24206 = klass->byval_arg.type;
      D.24207 = D.24206 != 18;
      D.24208 = D.24206 != 28;
      D.24209 = D.24207 & D.24208;
      if (D.24209 != 0) goto <D.24210>; else goto <D.24211>;
      <D.24210>:
      D.24212 = klass->byval_arg.type;
      if (D.24212 != 21) goto <D.24213>; else goto <D.24214>;
      <D.24213>:
      D.24215 = BIT_FIELD_REF <*klass, 8, 256>;
      D.24216 = D.24215 & 16;
      if (D.24216 == 0) goto <D.24217>; else goto <D.24218>;
      <D.24217>:
      D.24212 = klass->byval_arg.type;
      if (D.24212 != 17) goto <D.24205>; else goto <D.24219>;
      <D.24219>:
      if (vtype == 0) goto <D.24205>; else goto <D.24204>;
      <D.24205>:
      D.24212 = klass->byval_arg.type;
      D.24220 = D.24212 + 254;
      if (D.24220 > 11) goto <D.24203>; else goto <D.24221>;
      <D.24221>:
      if (vtype != 0) goto <D.24203>; else goto <D.24204>;
      <D.24203>:
      D.24202 = 0B;
      return D.24202;
      <D.24204>:
      <D.24218>:
      <D.24214>:
      <D.24211>:
      if (emit_namespace != 0) goto <D.24222>; else goto <D.24223>;
      <D.24222>:
      emit_uleb128 (w, 10);
      D.24224 = klass->name_space;
      emit_string (w, D.24224);
      <D.24223>:
      D.24225 = klass->name;
      D.24224 = klass->name_space;
      if (D.24224 != 0B) goto <D.24227>; else goto <D.24228>;
      <D.24227>:
      iftmp.41 = ".";
      goto <D.24229>;
      <D.24228>:
      iftmp.41 = "";
      <D.24229>:
      D.24224 = klass->name_space;
      full_name = monoeg_g_strdup_printf ("%s%s%s", D.24224, iftmp.41, D.24225);
      p = full_name;
      goto <D.23212>;
      <D.23211>:
      D.24230 = *p;
      if (D.24230 == 46) goto <D.24231>; else goto <D.24232>;
      <D.24231>:
      *p = 95;
      <D.24232>:
      p = p + 1;
      <D.23212>:
      D.24230 = *p;
      if (D.24230 != 0) goto <D.23211>; else goto <D.23213>;
      <D.23213>:
      D.24233 = w->tdie_index;
      die = monoeg_g_strdup_printf (".LTDIE_%d", D.24233);
      D.24233 = w->tdie_index;
      pointer_die = monoeg_g_strdup_printf (".LTDIE_%d_POINTER", D.24233);
      D.24233 = w->tdie_index;
      reference_die = monoeg_g_strdup_printf (".LTDIE_%d_REFERENCE", D.24233);
      D.24233 = w->tdie_index;
      D.24234 = D.24233 + 1;
      w->tdie_index = D.24234;
      D.24235 = w->class_to_pointer_die;
      monoeg_g_hash_table_insert_replace (D.24235, klass, pointer_die, 0);
      D.24236 = w->class_to_reference_die;
      monoeg_g_hash_table_insert_replace (D.24236, klass, reference_die, 0);
      monoeg_g_hash_table_insert_replace (cache, klass, die, 0);
      D.24215 = BIT_FIELD_REF <*klass, 8, 256>;
      D.24216 = D.24215 & 16;
      if (D.24216 != 0) goto <D.24237>; else goto <D.24238>;
      <D.24237>:
      {
        int size;

        D.24239 = mono_class_enum_basetype (klass);
        D.24240 = mono_class_from_mono_type (D.24239);
        size = mono_class_value_size (D.24240, 0B);
        emit_label (w, die);
        emit_uleb128 (w, 8);
        emit_string (w, full_name);
        size.42 = (unsigned int) size;
        emit_uleb128 (w, size.42);
        k = 0;
        goto <D.23217>;
        <D.23216>:
        D.24242 = basic_types[k].type;
        D.24243 = mono_class_enum_basetype (klass);
        D.24244 = D.24243->type;
        D.24245 = (int) D.24244;
        if (D.24242 == D.24245) goto <D.23215>; else goto <D.24246>;
        <D.24246>:
        k = k + 1;
        <D.23217>:
        k.43 = (unsigned int) k;
        if (k.43 <= 16) goto <D.23216>; else goto <D.23215>;
        <D.23215>:
        k.43 = (unsigned int) k;
        D.24248 = k.43 > 16;
        D.24249 = (long int) D.24248;
        D.24250 = __builtin_expect (D.24249, 0);
        if (D.24250 != 0) goto <D.24251>; else goto <D.24252>;
        <D.24251>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "dwarfwriter.c", 1055, "k < G_N_ELEMENTS (basic_types)");
        <D.24252>:
        D.24253 = basic_types[k].die_name;
        emit_symbol_diff (w, D.24253, ".Ldebug_info_start", 0);
        iter = 0B;
        goto <D.23230>;
        <D.23254>:
        {
          const char * p;
          int len;
          MonoTypeEnum def_type;

          try
            {
              {
                size_t __s1_len;
                size_t __s2_len;

                __s1_len = 7;
                if (__s1_len <= 3) goto <D.24255>; else goto <D.24256>;
                <D.24255>:
                {
                  const unsigned char * __s2;
                  int __result;

                  __s2 = mono_field_get_name (field);
                  D.24257 = "value__";
                  D.24258 = MEM[(const unsigned char *)D.24257];
                  D.24259 = (int) D.24258;
                  D.24260 = *__s2;
                  D.24261 = (int) D.24260;
                  __result = D.24259 - D.24261;
                  {
                    D.24262 = __s1_len != 0;
                    D.24263 = __result == 0;
                    D.24264 = D.24262 & D.24263;
                    if (D.24264 != 0) goto <D.24265>; else goto <D.24266>;
                    <D.24265>:
                    D.24267 = &MEM[(void *)"value__" + 1B];
                    D.24268 = *D.24267;
                    D.24269 = (int) D.24268;
                    D.24270 = __s2 + 1;
                    D.24271 = *D.24270;
                    D.24272 = (int) D.24271;
                    __result = D.24269 - D.24272;
                    D.24273 = __s1_len > 1;
                    D.24263 = __result == 0;
                    D.24274 = D.24273 & D.24263;
                    if (D.24274 != 0) goto <D.24275>; else goto <D.24276>;
                    <D.24275>:
                    D.24277 = &MEM[(void *)"value__" + 2B];
                    D.24278 = *D.24277;
                    D.24279 = (int) D.24278;
                    D.24280 = __s2 + 2;
                    D.24281 = *D.24280;
                    D.24282 = (int) D.24281;
                    __result = D.24279 - D.24282;
                    D.24283 = __s1_len > 2;
                    D.24263 = __result == 0;
                    D.24284 = D.24283 & D.24263;
                    if (D.24284 != 0) goto <D.24285>; else goto <D.24286>;
                    <D.24285>:
                    D.24287 = &MEM[(void *)"value__" + 3B];
                    D.24288 = *D.24287;
                    D.24289 = (int) D.24288;
                    D.24290 = __s2 + 3;
                    D.24291 = *D.24290;
                    D.24292 = (int) D.24291;
                    __result = D.24289 - D.24292;
                    <D.24286>:
                    <D.24276>:
                    <D.24266>:
                  }
                  D.23225 = __result;
                }
                iftmp.44 = D.23225;
                goto <D.24293>;
                <D.24256>:
                D.24294 = mono_field_get_name (field);
                iftmp.44 = __builtin_strcmp ("value__", D.24294);
                <D.24293>:
                D.23229 = iftmp.44;
              }
              if (D.23229 == 0) goto <D.24295>; else goto <D.24296>;
              <D.24295>:
              // predicted unlikely by continue predictor.
              goto <D.23230>;
              <D.24296>:
              D.24297 = field->type;
              D.24298 = D.24297->attrs;
              D.24299 = (int) D.24298;
              D.24300 = D.24299 & 1536;
              if (D.24300 != 0) goto <D.24301>; else goto <D.24302>;
              <D.24301>:
              {
                size_t __s1_len;
                size_t __s2_len;

                __s2_len = 8;
                if (__s2_len <= 3) goto <D.24304>; else goto <D.24305>;
                <D.24304>:
                {
                  const unsigned char * __s2;
                  int __result;

                  __s2 = mono_field_get_name (field);
                  D.24306 = "_Deleted";
                  D.24307 = MEM[(const unsigned char *)D.24306];
                  D.24308 = (int) D.24307;
                  D.24309 = *__s2;
                  D.24310 = (int) D.24309;
                  __result = D.24308 - D.24310;
                  {
                    D.24311 = __s2_len != 0;
                    D.24312 = __result == 0;
                    D.24313 = D.24311 & D.24312;
                    if (D.24313 != 0) goto <D.24314>; else goto <D.24315>;
                    <D.24314>:
                    D.24316 = &MEM[(void *)"_Deleted" + 1B];
                    D.24317 = *D.24316;
                    D.24318 = (int) D.24317;
                    D.24319 = __s2 + 1;
                    D.24320 = *D.24319;
                    D.24321 = (int) D.24320;
                    __result = D.24318 - D.24321;
                    D.24322 = __s2_len > 1;
                    D.24312 = __result == 0;
                    D.24323 = D.24322 & D.24312;
                    if (D.24323 != 0) goto <D.24324>; else goto <D.24325>;
                    <D.24324>:
                    D.24326 = &MEM[(void *)"_Deleted" + 2B];
                    D.24327 = *D.24326;
                    D.24328 = (int) D.24327;
                    D.24329 = __s2 + 2;
                    D.24330 = *D.24329;
                    D.24331 = (int) D.24330;
                    __result = D.24328 - D.24331;
                    D.24332 = __s2_len > 2;
                    D.24312 = __result == 0;
                    D.24333 = D.24332 & D.24312;
                    if (D.24333 != 0) goto <D.24334>; else goto <D.24335>;
                    <D.24334>:
                    D.24336 = &MEM[(void *)"_Deleted" + 3B];
                    D.24337 = *D.24336;
                    D.24338 = (int) D.24337;
                    D.24339 = __s2 + 3;
                    D.24340 = *D.24339;
                    D.24341 = (int) D.24340;
                    __result = D.24338 - D.24341;
                    <D.24335>:
                    <D.24325>:
                    <D.24315>:
                  }
                  D.23238 = __result;
                }
                iftmp.45 = -D.23238;
                goto <D.24342>;
                <D.24305>:
                D.24343 = mono_field_get_name (field);
                iftmp.45 = __builtin_strcmp (D.24343, "_Deleted");
                <D.24342>:
                D.23239 = iftmp.45;
              }
              if (D.23239 == 0) goto <D.24344>; else goto <D.24345>;
              <D.24344>:
              // predicted unlikely by continue predictor.
              goto <D.23230>;
              <D.24345>:
              <D.24302>:
              emit_uleb128 (w, 9);
              D.24346 = mono_field_get_name (field);
              emit_string (w, D.24346);
              p.46 = mono_class_get_field_default_value (field, &def_type);
              p = p.46;
              p.47 = p;
              D.24349 = mono_metadata_decode_blob_size (p.47, &p);
              len = (int) D.24349;
              D.24350 = mono_class_enum_basetype (klass);
              D.24351 = D.24350->type;
              D.24352 = (int) D.24351;
              switch (D.24352) <default: <D.23253>, case 2: <D.23242>, case 3: <D.23246>, case 4: <D.23241>, case 5: <D.23240>, case 6: <D.23245>, case 7: <D.23244>, case 8: <D.23248>, case 9: <D.23247>, case 10: <D.23250>, case 11: <D.23249>, case 24: <D.23251>, case 25: <D.23252>>
              <D.23240>:
              <D.23241>:
              <D.23242>:
              p.47 = p;
              D.24353 = *p.47;
              D.24354 = (long int) D.24353;
              emit_sleb128 (w, D.24354);
              goto <D.23243>;
              <D.23244>:
              <D.23245>:
              <D.23246>:
              p.47 = p;
              D.24355 = MEM[(const guint16 *)p.47];
              D.24356 = (long int) D.24355;
              emit_sleb128 (w, D.24356);
              goto <D.23243>;
              <D.23247>:
              <D.23248>:
              p.47 = p;
              D.24357 = MEM[(const guint32 *)p.47];
              D.24358 = (long int) D.24357;
              emit_sleb128 (w, D.24358);
              goto <D.23243>;
              <D.23249>:
              <D.23250>:
              p.47 = p;
              D.24359 = MEM[(const guint64 *)p.47];
              D.24360 = (long int) D.24359;
              emit_sleb128 (w, D.24360);
              goto <D.23243>;
              <D.23251>:
              <D.23252>:
              p.47 = p;
              D.24359 = MEM[(const guint64 *)p.47];
              D.24360 = (long int) D.24359;
              emit_sleb128 (w, D.24360);
              goto <D.23243>;
              <D.23253>:
              monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "dwarfwriter.c", 1103);
              <D.23243>:
            }
          finally
            {
              p = {CLOBBER};
              def_type = {CLOBBER};
            }
        }
        <D.23230>:
        field = mono_class_get_fields (klass, &iter);
        if (field != 0B) goto <D.23254>; else goto <D.23255>;
        <D.23255>:
        has_children = 1;
      }
      goto <D.24361>;
      <D.24238>:
      {
        guint8 buf[128];
        guint8 * p;
        char * parent_die;

        try
          {
            D.24362 = klass->parent;
            if (D.24362 != 0B) goto <D.24363>; else goto <D.24364>;
            <D.24363>:
            D.24362 = klass->parent;
            parent_die = emit_class_dwarf_info (w, D.24362, 0);
            goto <D.24365>;
            <D.24364>:
            parent_die = 0B;
            <D.24365>:
            iter = 0B;
            goto <D.23259>;
            <D.23260>:
            D.24297 = field->type;
            D.24298 = D.24297->attrs;
            D.24299 = (int) D.24298;
            D.24366 = D.24299 & 16;
            if (D.24366 != 0) goto <D.24367>; else goto <D.24368>;
            <D.24367>:
            // predicted unlikely by continue predictor.
            goto <D.23259>;
            <D.24368>:
            D.24297 = field->type;
            emit_type (w, D.24297);
            <D.23259>:
            field = mono_class_get_fields (klass, &iter);
            if (field != 0B) goto <D.23260>; else goto <D.23261>;
            <D.23261>:
            iter = 0B;
            if (parent_die != 0B) goto <D.24370>; else goto <D.24373>;
            <D.24373>:
            D.24374 = mono_class_get_fields (klass, &iter);
            if (D.24374 != 0B) goto <D.24370>; else goto <D.24371>;
            <D.24370>:
            iftmp.48 = 1;
            goto <D.24372>;
            <D.24371>:
            iftmp.48 = 0;
            <D.24372>:
            has_children = iftmp.48;
            emit_label (w, die);
            if (has_children != 0) goto <D.24376>; else goto <D.24377>;
            <D.24376>:
            iftmp.49 = 5;
            goto <D.24378>;
            <D.24377>:
            iftmp.49 = 17;
            <D.24378>:
            emit_uleb128 (w, iftmp.49);
            emit_string (w, full_name);
            D.24379 = klass->instance_size;
            D.24380 = (unsigned int) D.24379;
            emit_uleb128 (w, D.24380);
            if (parent_die != 0B) goto <D.24381>; else goto <D.24382>;
            <D.24381>:
            emit_uleb128 (w, 16);
            emit_symbol_diff (w, parent_die, ".Ldebug_info_start", 0);
            p = &buf;
            p.50 = p;
            p.51 = p.50;
            p.52 = p.51 + 1;
            p = p.52;
            *p.51 = 35;
            p.50 = p;
            encode_uleb128 (0, p.50, &p);
            p.50 = p;
            p.53 = (long int) p.50;
            buf.54 = (long int) &buf;
            D.24388 = p.53 - buf.54;
            D.24389 = (unsigned char) D.24388;
            D.24390 = (int) D.24389;
            emit_byte (w, D.24390);
            p.50 = p;
            p.53 = (long int) p.50;
            buf.54 = (long int) &buf;
            D.24388 = p.53 - buf.54;
            D.24391 = (int) D.24388;
            emit_bytes (w, &buf, D.24391);
            <D.24382>:
            iter = 0B;
            goto <D.23262>;
            <D.23263>:
            D.24297 = field->type;
            D.24298 = D.24297->attrs;
            D.24299 = (int) D.24298;
            D.24366 = D.24299 & 16;
            if (D.24366 != 0) goto <D.24392>; else goto <D.24393>;
            <D.24392>:
            // predicted unlikely by continue predictor.
            goto <D.23262>;
            <D.24393>:
            D.24297 = field->type;
            fdie = get_type_die (w, D.24297);
            if (fdie != 0B) goto <D.24394>; else goto <D.24395>;
            <D.24394>:
            emit_uleb128 (w, 6);
            D.24396 = field->name;
            emit_string (w, D.24396);
            emit_symbol_diff (w, fdie, ".Ldebug_info_start", 0);
            p = &buf;
            p.50 = p;
            p.55 = p.50;
            p.56 = p.55 + 1;
            p = p.56;
            *p.55 = 35;
            D.24215 = BIT_FIELD_REF <*klass, 8, 256>;
            D.24401 = D.24215 & 8;
            if (D.24401 != 0) goto <D.24402>; else goto <D.24399>;
            <D.24402>:
            if (vtype != 0) goto <D.24403>; else goto <D.24399>;
            <D.24403>:
            p.50 = p;
            D.24404 = field->offset;
            D.24405 = (unsigned int) D.24404;
            D.24406 = D.24405 + 4294967280;
            encode_uleb128 (D.24406, p.50, &p);
            goto <D.24400>;
            <D.24399>:
            p.50 = p;
            D.24404 = field->offset;
            D.24405 = (unsigned int) D.24404;
            encode_uleb128 (D.24405, p.50, &p);
            <D.24400>:
            p.50 = p;
            p.53 = (long int) p.50;
            buf.54 = (long int) &buf;
            D.24388 = p.53 - buf.54;
            D.24389 = (unsigned char) D.24388;
            D.24390 = (int) D.24389;
            emit_byte (w, D.24390);
            p.50 = p;
            p.53 = (long int) p.50;
            buf.54 = (long int) &buf;
            D.24388 = p.53 - buf.54;
            D.24391 = (int) D.24388;
            emit_bytes (w, &buf, D.24391);
            <D.24395>:
            <D.23262>:
            field = mono_class_get_fields (klass, &iter);
            if (field != 0B) goto <D.23263>; else goto <D.23264>;
            <D.23264>:
          }
        finally
          {
            buf = {CLOBBER};
            p = {CLOBBER};
          }
      }
      <D.24361>:
      if (has_children != 0) goto <D.24407>; else goto <D.24408>;
      <D.24407>:
      emit_uleb128 (w, 0);
      <D.24408>:
      emit_uleb128 (w, 7);
      emit_string (w, full_name);
      emit_symbol_diff (w, die, ".Ldebug_info_start", 0);
      emit_label (w, pointer_die);
      emit_uleb128 (w, 13);
      emit_symbol_diff (w, die, ".Ldebug_info_start", 0);
      emit_label (w, reference_die);
      emit_uleb128 (w, 14);
      emit_symbol_diff (w, die, ".Ldebug_info_start", 0);
      monoeg_g_free (full_name);
      if (emit_namespace != 0) goto <D.24409>; else goto <D.24410>;
      <D.24409>:
      emit_uleb128 (w, 0);
      <D.24410>:
      D.24202 = die;
      return D.24202;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


get_type_die (struct MonoDwarfWriter * w, struct MonoType * t)
{
  unsigned char D.24415;
  unsigned char D.24416;
  unsigned char D.24419;
  struct GHashTable * D.24422;
  struct MonoClass * D.24424;
  int D.24425;
  int D.24426;
  unsigned int j.57;
  struct GHashTable * D.24432;
  unsigned char D.24433;
  unsigned char D.24434;
  int D.24438;
  _Bool D.24442;
  long int D.24443;
  long int D.24444;
  const char * D.24447;
  struct MonoClass * klass;
  int j;
  const char * tdie;

  klass = mono_class_from_mono_type (t);
  D.24415 = BIT_FIELD_REF <*t, 8, 88>;
  D.24416 = D.24415 & 64;
  if (D.24416 != 0) goto <D.24417>; else goto <D.24418>;
  <D.24417>:
  D.24419 = t->type;
  if (D.24419 == 17) goto <D.24420>; else goto <D.24421>;
  <D.24420>:
  D.24422 = w->class_to_pointer_die;
  tdie = monoeg_g_hash_table_lookup (D.24422, klass);
  goto <D.24423>;
  <D.24421>:
  tdie = get_class_die (w, klass, 0);
  <D.24423>:
  D.24424 = mono_defaults.int_class;
  t = &D.24424->byval_arg;
  <D.24418>:
  j = 0;
  goto <D.23275>;
  <D.23274>:
  D.24425 = basic_types[j].type;
  D.24419 = t->type;
  D.24426 = (int) D.24419;
  if (D.24425 == D.24426) goto <D.23273>; else goto <D.24427>;
  <D.24427>:
  j = j + 1;
  <D.23275>:
  j.57 = (unsigned int) j;
  if (j.57 <= 16) goto <D.23274>; else goto <D.23273>;
  <D.23273>:
  j.57 = (unsigned int) j;
  if (j.57 <= 16) goto <D.24429>; else goto <D.24430>;
  <D.24429>:
  tdie = basic_types[j].die_name;
  goto <D.24431>;
  <D.24430>:
  D.24419 = t->type;
  D.24426 = (int) D.24419;
  switch (D.24426) <default: <D.23282>, case 15: <D.23281>, case 17: <D.23279>, case 18: <D.23276>, case 20: <D.23278>, case 21: <D.23280>>
  <D.23276>:
  D.24432 = w->class_to_reference_die;
  tdie = monoeg_g_hash_table_lookup (D.24432, klass);
  goto <D.23277>;
  <D.23278>:
  tdie = ".LDIE_OBJECT";
  goto <D.23277>;
  <D.23279>:
  D.24433 = BIT_FIELD_REF <*klass, 8, 256>;
  D.24434 = D.24433 & 16;
  if (D.24434 != 0) goto <D.24435>; else goto <D.24436>;
  <D.24435>:
  tdie = get_class_die (w, klass, 0);
  goto <D.24437>;
  <D.24436>:
  tdie = ".LDIE_I4";
  <D.24437>:
  goto <D.23277>;
  <D.23280>:
  D.24438 = mono_type_is_struct (t);
  if (D.24438 == 0) goto <D.24439>; else goto <D.24440>;
  <D.24439>:
  D.24432 = w->class_to_reference_die;
  tdie = monoeg_g_hash_table_lookup (D.24432, klass);
  goto <D.24441>;
  <D.24440>:
  tdie = ".LDIE_I4";
  <D.24441>:
  goto <D.23277>;
  <D.23281>:
  tdie = ".LDIE_I";
  goto <D.23277>;
  <D.23282>:
  tdie = ".LDIE_I4";
  goto <D.23277>;
  <D.23277>:
  <D.24431>:
  D.24442 = tdie == 0B;
  D.24443 = (long int) D.24442;
  D.24444 = __builtin_expect (D.24443, 0);
  if (D.24444 != 0) goto <D.24445>; else goto <D.24446>;
  <D.24445>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "dwarfwriter.c", 1259, "tdie");
  <D.24446>:
  D.24447 = tdie;
  return D.24447;
}


get_class_die (struct MonoDwarfWriter * w, struct MonoClass * klass, gboolean vtype)
{
  const char * D.24452;
  struct GHashTable * cache;

  if (vtype != 0) goto <D.24449>; else goto <D.24450>;
  <D.24449>:
  cache = w->class_to_vtype_die;
  goto <D.24451>;
  <D.24450>:
  cache = w->class_to_die;
  <D.24451>:
  D.24452 = monoeg_g_hash_table_lookup (cache, klass);
  return D.24452;
}


encode_uleb128 (guint32 value, guint8 * buf, guint8 * * endbuf)
{
  unsigned char D.24454;
  guint8 * p.58;
  guint8 * p;

  p = buf;
  <D.23008>:
  {
    guint8 b;

    D.24454 = (unsigned char) value;
    b = D.24454 & 127;
    value = value >> 7;
    if (value != 0) goto <D.24455>; else goto <D.24456>;
    <D.24455>:
    b = b | 128;
    <D.24456>:
    p.58 = p;
    p = p.58 + 1;
    *p.58 = b;
  }
  if (value != 0) goto <D.23008>; else goto <D.23009>;
  <D.23009>:
  *endbuf = p;
}


find_vmv (struct MonoCompile * cfg, struct MonoInst * ins)
{
  struct MonoInst * * D.24458;
  long unsigned int D.24461;
  long unsigned int D.24462;
  struct MonoInst * * D.24463;
  struct MonoInst * D.24464;
  unsigned int j.59;
  unsigned int D.24467;
  struct MonoMethodVar * D.24470;
  struct MonoMethodVar * D.24471;
  long unsigned int D.24472;
  int j;

  D.24458 = cfg->varinfo;
  if (D.24458 != 0B) goto <D.24459>; else goto <D.24460>;
  <D.24459>:
  j = 0;
  goto <D.23456>;
  <D.23455>:
  D.24458 = cfg->varinfo;
  D.24461 = (long unsigned int) j;
  D.24462 = D.24461 * 8;
  D.24463 = D.24458 + D.24462;
  D.24464 = *D.24463;
  if (D.24464 == ins) goto <D.23454>; else goto <D.24465>;
  <D.24465>:
  j = j + 1;
  <D.23456>:
  j.59 = (unsigned int) j;
  D.24467 = cfg->num_varinfo;
  if (j.59 < D.24467) goto <D.23455>; else goto <D.23454>;
  <D.23454>:
  j.59 = (unsigned int) j;
  D.24467 = cfg->num_varinfo;
  if (j.59 < D.24467) goto <D.24468>; else goto <D.24469>;
  <D.24468>:
  D.24471 = cfg->vars;
  D.24461 = (long unsigned int) j;
  D.24472 = D.24461 * 80;
  D.24470 = D.24471 + D.24472;
  return D.24470;
  <D.24469>:
  <D.24460>:
  D.24470 = 0B;
  return D.24470;
}


sprintf (char * restrict __s, const char * restrict __fmt)
{
  int D.24474;
  long unsigned int D.24475;

  D.24475 = __builtin_object_size (__s, 1);
  D.24474 = __builtin___sprintf_chk (__s, 1, D.24475, __fmt, __builtin_va_arg_pack ());
  return D.24474;
}


emit_var_type (struct MonoDwarfWriter * w, struct MonoType * t)
{
  const char * tdie;

  tdie = get_type_die (w, t);
  emit_symbol_diff (w, tdie, ".Ldebug_info_start", 0);
}


encode_var_location (struct MonoDwarfWriter * w, struct MonoInst * ins, guint8 * p, guint8 * * endp)
{
  unsigned char D.24479;
  int D.24480;
  int D.24481;
  short unsigned int D.24485;
  guint8 * p.60;
  int D.24489;
  int D.24490;
  unsigned char D.24491;
  unsigned char D.24492;
  guint8 * p.61;
  guint8 * p.62;
  guint8 * p.63;
  int D.24499;
  int D.24500;
  unsigned char D.24501;
  unsigned char D.24502;
  long int D.24503;
  int D.24504;
  guint8 * p.64;
  guint8 * p.65;

  if (ins == 0B) goto <D.24477>; else goto <D.24478>;
  <D.24478>:
  D.24479 = ins->flags;
  D.24480 = (int) D.24479;
  D.24481 = D.24480 & 2;
  if (D.24481 != 0) goto <D.24482>; else goto <D.24483>;
  <D.24482>:
  goto <D.24484>;
  <D.24483>:
  D.24485 = ins->opcode;
  if (D.24485 == 366) goto <D.24486>; else goto <D.24487>;
  <D.24486>:
  p.60 = p;
  D.24489 = ins->dreg;
  D.24490 = mono_hw_reg_to_dwarf_reg (D.24489);
  D.24491 = (unsigned char) D.24490;
  D.24492 = D.24491 + 80;
  *p.60 = D.24492;
  p.60 = p;
  p.61 = p.60 + 1;
  p = p.61;
  goto <D.24494>;
  <D.24487>:
  D.24485 = ins->opcode;
  if (D.24485 == 367) goto <D.24495>; else goto <D.24496>;
  <D.24495>:
  p.60 = p;
  p.62 = p.60;
  p.63 = p.62 + 1;
  p = p.63;
  D.24499 = ins->sreg1;
  D.24500 = mono_hw_reg_to_dwarf_reg (D.24499);
  D.24501 = (unsigned char) D.24500;
  D.24502 = D.24501 + 112;
  *p.62 = D.24502;
  p.60 = p;
  D.24503 = ins->data.op[0].const_val;
  D.24504 = (int) D.24503;
  encode_sleb128 (D.24504, p.60, &p);
  goto <D.24505>;
  <D.24496>:
  p.60 = p;
  p.64 = p.60;
  p.65 = p.64 + 1;
  p = p.65;
  *p.64 = 80;
  <D.24505>:
  <D.24494>:
  <D.24484>:
  <D.24477>:
  p.60 = p;
  *endp = p.60;
}


encode_sleb128 (gint32 value, guint8 * buf, guint8 * * endbuf)
{
  _Bool D.24508;
  unsigned char D.24509;
  unsigned int D.24512;
  int D.24513;
  int D.24514;
  int D.24515;
  int D.24521;
  int D.24522;
  guint8 * p.66;
  gboolean more;
  gboolean negative;
  guint32 size;
  guint8 byte;
  guint8 * p;

  more = 1;
  D.24508 = value < 0;
  negative = (gboolean) D.24508;
  size = 32;
  p = buf;
  goto <D.23021>;
  <D.23020>:
  D.24509 = (unsigned char) value;
  byte = D.24509 & 127;
  value = value >> 7;
  if (negative != 0) goto <D.24510>; else goto <D.24511>;
  <D.24510>:
  D.24512 = size + 4294967289;
  D.24513 = (int) D.24512;
  D.24514 = 1 << D.24513;
  D.24515 = -D.24514;
  value = D.24515 | value;
  <D.24511>:
  if (value == 0) goto <D.24520>; else goto <D.24516>;
  <D.24520>:
  D.24521 = (int) byte;
  D.24522 = D.24521 & 64;
  if (D.24522 == 0) goto <D.24517>; else goto <D.24516>;
  <D.24516>:
  if (value == -1) goto <D.24523>; else goto <D.24518>;
  <D.24523>:
  D.24521 = (int) byte;
  D.24522 = D.24521 & 64;
  if (D.24522 != 0) goto <D.24517>; else goto <D.24518>;
  <D.24517>:
  more = 0;
  goto <D.24519>;
  <D.24518>:
  byte = byte | 128;
  <D.24519>:
  p.66 = p;
  p = p.66 + 1;
  *p.66 = byte;
  <D.23021>:
  if (more != 0) goto <D.23020>; else goto <D.23022>;
  <D.23022>:
  *endbuf = p;
}


emit_loclist (struct MonoDwarfWriter * w, struct MonoInst * ins, guint8 * loclist_begin_addr, guint8 * loclist_end_addr, guint8 * expr, guint32 expr_len)
{
  int D.24525;
  int D.24526;
  int D.24527;
  unsigned char D.24528;
  int D.24529;
  unsigned int D.24530;
  unsigned char D.24531;
  int D.24532;
  int expr_len.67;
  char label[128];

  try
    {
      emit_push_section (w, ".debug_loc", 0);
      D.24525 = w->loclist_index;
      D.24526 = D.24525;
      D.24527 = D.24526 + 1;
      w->loclist_index = D.24527;
      sprintf (&label, ".Lloclist_%d", D.24526);
      emit_label (w, &label);
      emit_pointer_value (w, loclist_begin_addr);
      emit_pointer_value (w, loclist_end_addr);
      D.24528 = (unsigned char) expr_len;
      D.24529 = (int) D.24528;
      emit_byte (w, D.24529);
      D.24530 = expr_len / 256;
      D.24531 = (unsigned char) D.24530;
      D.24532 = (int) D.24531;
      emit_byte (w, D.24532);
      expr_len.67 = (int) expr_len;
      emit_bytes (w, expr, expr_len.67);
      emit_pointer_value (w, 0B);
      emit_pointer_value (w, 0B);
      emit_pop_section (w);
      emit_symbol_diff (w, &label, ".Ldebug_loc_start", 0);
    }
  finally
    {
      label = {CLOBBER};
    }
}


emit_push_section (struct MonoDwarfWriter * w, const char * section_name, int subsection)
{
  struct MonoImageWriter * D.24534;

  D.24534 = w->w;
  img_writer_emit_push_section (D.24534, section_name, subsection);
}


emit_pop_section (struct MonoDwarfWriter * w)
{
  struct MonoImageWriter * D.24535;

  D.24535 = w->w;
  img_writer_emit_pop_section (D.24535);
}


emit_fde (struct MonoDwarfWriter * w, int fde_index, char * start_symbol, char * end_symbol, guint8 * code, guint32 code_size, struct GSList * unwind_ops, gboolean use_cie)
{
  _Bool D.24541;
  long int D.24542;
  long int D.24543;
  int code_size.68;
  struct GSList * D.24548;
  unsigned int i.69;
  unsigned int D.24554;
  unsigned int uw_info_len.70;
  int uw_info_len.71;
  char symbol1[128];
  char symbol2[128];
  struct GSList * l;
  guint8 * uw_info;
  guint32 uw_info_len;

  try
    {
      emit_section_change (w, ".debug_frame", 0);
      sprintf (&symbol1, ".Lfde%d_start", fde_index);
      sprintf (&symbol2, ".Lfde%d_end", fde_index);
      emit_symbol_diff (w, &symbol2, &symbol1, 0);
      emit_label (w, &symbol1);
      emit_int32 (w, 0);
      if (start_symbol != 0B) goto <D.24536>; else goto <D.24537>;
      <D.24536>:
      emit_pointer (w, start_symbol);
      if (end_symbol != 0B) goto <D.24538>; else goto <D.24539>;
      <D.24538>:
      emit_symbol_diff (w, end_symbol, start_symbol, 0);
      goto <D.24540>;
      <D.24539>:
      D.24541 = code_size == 0;
      D.24542 = (long int) D.24541;
      D.24543 = __builtin_expect (D.24542, 0);
      if (D.24543 != 0) goto <D.24544>; else goto <D.24545>;
      <D.24544>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "dwarfwriter.c", 395, "code_size");
      <D.24545>:
      code_size.68 = (int) code_size;
      emit_int32 (w, code_size.68);
      <D.24540>:
      goto <D.24547>;
      <D.24537>:
      emit_pointer_value (w, code);
      code_size.68 = (int) code_size;
      emit_int32 (w, code_size.68);
      <D.24547>:
      emit_int32 (w, 0);
      l = unwind_ops;
      D.24548 = w->cie_program;
      if (D.24548 != 0B) goto <D.24549>; else goto <D.24550>;
      <D.24549>:
      {
        int i;

        i = 0;
        goto <D.23062>;
        <D.23061>:
        if (l != 0B) goto <D.24551>; else goto <D.24552>;
        <D.24551>:
        l = l->next;
        <D.24552>:
        i = i + 1;
        <D.23062>:
        i.69 = (unsigned int) i;
        D.24548 = w->cie_program;
        D.24554 = monoeg_g_slist_length (D.24548);
        if (i.69 < D.24554) goto <D.23061>; else goto <D.23063>;
        <D.23063>:
      }
      <D.24550>:
      uw_info = mono_unwind_ops_encode (l, &uw_info_len);
      uw_info_len.70 = uw_info_len;
      uw_info_len.71 = (int) uw_info_len.70;
      emit_bytes (w, uw_info, uw_info_len.71);
      monoeg_g_free (uw_info);
      emit_alignment (w, 8);
      emit_label (w, &symbol2);
    }
  finally
    {
      symbol1 = {CLOBBER};
      symbol2 = {CLOBBER};
      uw_info_len = {CLOBBER};
    }
}


emit_pointer (struct MonoDwarfWriter * w, const char * target)
{
  struct MonoImageWriter * D.24557;

  D.24557 = w->w;
  img_writer_emit_pointer (D.24557, target);
}


emit_line (struct MonoDwarfWriter * w)
{
  struct MonoImageWriter * D.24558;

  D.24558 = w->w;
  img_writer_emit_line (D.24558);
}


mono_dwarf_writer_emit_trampoline (struct MonoDwarfWriter * w, const char * tramp_name, char * start_symbol, char * end_symbol, guint8 * code, guint32 code_size, struct GSList * unwind_info)
{
  sizetype D.24559;
  void * D.24560;
  int D.24561;
  int D.24562;

  emit_section_change (w, ".debug_info", 0);
  emit_uleb128 (w, 18);
  emit_string (w, tramp_name);
  emit_pointer_value (w, code);
  D.24559 = (sizetype) code_size;
  D.24560 = code + D.24559;
  emit_pointer_value (w, D.24560);
  emit_uleb128 (w, 0);
  emit_debug_info_end (w);
  D.24561 = w->fde_index;
  emit_fde (w, D.24561, start_symbol, end_symbol, code, code_size, unwind_info, 0);
  D.24561 = w->fde_index;
  D.24562 = D.24561 + 1;
  w->fde_index = D.24562;
}


