__attribute__((visibility ("hidden")))
mono_dl_open (const char * name, int flags, char * * error_msg)
{
  gchar * D.5315;
  struct MonoDl * D.5316;
  _Bool D.5317;
  int D.5318;
  void * (*<T467>) (const char *, int, char * *, void *) D.5323;
  void * D.5324;
  char * D.5327;
  int D.5340;
  char * D.5349;
  gchar * D.5350;
  struct MonoDl * module;
  void * lib;
  struct MonoDlFallbackHandler * dl_fallback;
  int lflags;

  dl_fallback = 0B;
  lflags = convert_flags (flags);
  if (error_msg != 0B) goto <D.5309>; else goto <D.5310>;
  <D.5309>:
  *error_msg = 0B;
  <D.5310>:
  module = malloc (24);
  if (module == 0B) goto <D.5311>; else goto <D.5312>;
  <D.5311>:
  if (error_msg != 0B) goto <D.5313>; else goto <D.5314>;
  <D.5313>:
  D.5315 = monoeg_strdup ("Out of memory");
  *error_msg = D.5315;
  <D.5314>:
  D.5316 = 0B;
  return D.5316;
  <D.5312>:
  D.5317 = name == 0B;
  D.5318 = (int) D.5317;
  module->main_module = D.5318;
  lib = dlopen (name, lflags);
  if (lib == 0B) goto <D.5319>; else goto <D.5320>;
  <D.5319>:
  {
    struct GSList * node;

    node = fallback_handlers;
    goto <D.5269>;
    <D.5268>:
    {
      struct MonoDlFallbackHandler * handler;

      handler = node->data;
      if (error_msg != 0B) goto <D.5321>; else goto <D.5322>;
      <D.5321>:
      *error_msg = 0B;
      <D.5322>:
      D.5323 = handler->load_func;
      D.5324 = handler->user_data;
      lib = D.5323 (name, lflags, error_msg, D.5324);
      if (error_msg != 0B) goto <D.5325>; else goto <D.5326>;
      <D.5325>:
      D.5327 = *error_msg;
      if (D.5327 != 0B) goto <D.5328>; else goto <D.5329>;
      <D.5328>:
      D.5327 = *error_msg;
      monoeg_g_free (D.5327);
      <D.5329>:
      <D.5326>:
      if (lib != 0B) goto <D.5330>; else goto <D.5331>;
      <D.5330>:
      dl_fallback = handler;
      goto <D.5267>;
      <D.5331>:
    }
    node = node->next;
    <D.5269>:
    if (node != 0B) goto <D.5268>; else goto <D.5267>;
    <D.5267>:
  }
  <D.5320>:
  if (lib == 0B) goto <D.5332>; else goto <D.5333>;
  <D.5332>:
  if (dl_fallback == 0B) goto <D.5334>; else goto <D.5335>;
  <D.5334>:
  {
    char * lname;
    char * llname;
    const char * suff;
    const char * ext;

    if (name == 0B) goto <D.5336>; else goto <D.5337>;
    <D.5336>:
    free (module);
    D.5316 = 0B;
    return D.5316;
    <D.5337>:
    suff = ".la";
    ext = strrchr (name, 46);
    if (ext != 0B) goto <D.5338>; else goto <D.5339>;
    <D.5338>:
    D.5340 = strcmp (ext, ".la");
    if (D.5340 == 0) goto <D.5341>; else goto <D.5342>;
    <D.5341>:
    suff = "";
    <D.5342>:
    <D.5339>:
    lname = monoeg_g_strconcat (name, suff, 0B);
    llname = get_dl_name_from_libtool (lname);
    monoeg_g_free (lname);
    if (llname != 0B) goto <D.5343>; else goto <D.5344>;
    <D.5343>:
    lib = dlopen (llname, lflags);
    monoeg_g_free (llname);
    <D.5344>:
    if (lib == 0B) goto <D.5345>; else goto <D.5346>;
    <D.5345>:
    if (error_msg != 0B) goto <D.5347>; else goto <D.5348>;
    <D.5347>:
    D.5349 = dlerror ();
    D.5350 = monoeg_strdup (D.5349);
    *error_msg = D.5350;
    <D.5348>:
    free (module);
    D.5316 = 0B;
    return D.5316;
    <D.5346>:
  }
  <D.5335>:
  <D.5333>:
  module->handle = lib;
  module->dl_fallback = dl_fallback;
  D.5316 = module;
  return D.5316;
}


convert_flags (int flags)
{
  int iftmp.0;
  int D.5353;
  int D.5357;
  int D.5361;
  int lflags;

  D.5353 = flags & 2;
  if (D.5353 != 0) goto <D.5354>; else goto <D.5355>;
  <D.5354>:
  iftmp.0 = 0;
  goto <D.5356>;
  <D.5355>:
  iftmp.0 = 256;
  <D.5356>:
  lflags = iftmp.0;
  D.5357 = flags & 1;
  if (D.5357 != 0) goto <D.5358>; else goto <D.5359>;
  <D.5358>:
  lflags = lflags | 1;
  goto <D.5360>;
  <D.5359>:
  lflags = lflags | 2;
  <D.5360>:
  D.5361 = lflags;
  return D.5361;
}


__attribute__((__gnu_inline__, nothrow, leaf, pure))
strcmp (const char * __s1, const char * __s2)
{
  int iftmp.1;
  int iftmp.2;
  int D.5371;
  char * __p1;
  char * __p2;
  int __ret;

  __p1 = __s1;
  __p2 = __s2;
  __asm__ __volatile__("   slr   0,0
0: clst  %1,%2
   jo    0b
   ipm   %0
   srl   %0,28" : "=d" __ret, "=&a" __p1, "=&a" __p2 : "1" __p1, "2" __p2 : "0", "memory", "cc");
  if (__ret != 0) goto <D.5364>; else goto <D.5365>;
  <D.5364>:
  if (__ret == 1) goto <D.5367>; else goto <D.5368>;
  <D.5367>:
  iftmp.2 = -1;
  goto <D.5369>;
  <D.5368>:
  iftmp.2 = 1;
  <D.5369>:
  iftmp.1 = iftmp.2;
  goto <D.5370>;
  <D.5365>:
  iftmp.1 = 0;
  <D.5370>:
  __ret = iftmp.1;
  D.5371 = __ret;
  return D.5371;
}


get_dl_name_from_libtool (const char * libtool_file)
{
  char * D.5375;
  char D.5376;
  const short unsigned int * * D.5378;
  const short unsigned int * D.5379;
  long unsigned int D.5380;
  long unsigned int D.5381;
  const short unsigned int * D.5382;
  short unsigned int D.5383;
  int D.5384;
  int D.5385;
  _Bool iftmp.3;
  long unsigned int D.5393;
  int D.5395;
  int D.5396;
  char * D.5399;
  _Bool iftmp.4;
  long unsigned int D.5405;
  int D.5407;
  int D.5408;
  _Bool iftmp.5;
  long unsigned int D.5416;
  int D.5418;
  int D.5419;
  char * D.5422;
  int D.5426;
  struct FILE * file;
  char buf[512];
  char * line;
  char * dlname;
  char * libdir;
  char * installed;

  try
    {
      dlname = 0B;
      libdir = 0B;
      installed = 0B;
      file = fopen (libtool_file, "r");
      if (file == 0B) goto <D.5373>; else goto <D.5374>;
      <D.5373>:
      D.5375 = 0B;
      return D.5375;
      <D.5374>:
      goto <D.5252>;
      <D.5253>:
      goto <D.5250>;
      <D.5249>:
      line = line + 1;
      <D.5250>:
      D.5376 = *line;
      if (D.5376 != 0) goto <D.5377>; else goto <D.5251>;
      <D.5377>:
      D.5378 = __ctype_b_loc ();
      D.5379 = *D.5378;
      D.5376 = *line;
      D.5380 = (long unsigned int) D.5376;
      D.5381 = D.5380 * 2;
      D.5382 = D.5379 + D.5381;
      D.5383 = *D.5382;
      D.5384 = (int) D.5383;
      D.5385 = D.5384 & 32;
      if (D.5385 != 0) goto <D.5249>; else goto <D.5251>;
      <D.5251>:
      D.5376 = *line;
      if (D.5376 == 35) goto <D.5386>; else goto <D.5388>;
      <D.5388>:
      D.5376 = *line;
      if (D.5376 == 0) goto <D.5386>; else goto <D.5387>;
      <D.5386>:
      // predicted unlikely by continue predictor.
      goto <D.5252>;
      <D.5387>:
      D.5393 = __strlen_g ("dlname");
      if (D.5393 <= 5) goto <D.5390>; else goto <D.5394>;
      <D.5394>:
      if (0 != 0) goto <D.5390>; else goto <D.5391>;
      <D.5390>:
      D.5395 = strcmp ("dlname", line);
      iftmp.3 = D.5395 == 0;
      goto <D.5392>;
      <D.5391>:
      D.5396 = strncmp ("dlname", line, 6);
      iftmp.3 = D.5396 == 0;
      <D.5392>:
      if (iftmp.3 != 0) goto <D.5397>; else goto <D.5398>;
      <D.5397>:
      monoeg_g_free (dlname);
      D.5399 = line + 6;
      dlname = read_string (D.5399, file);
      goto <D.5400>;
      <D.5398>:
      D.5405 = __strlen_g ("libdir");
      if (D.5405 <= 5) goto <D.5402>; else goto <D.5406>;
      <D.5406>:
      if (0 != 0) goto <D.5402>; else goto <D.5403>;
      <D.5402>:
      D.5407 = strcmp ("libdir", line);
      iftmp.4 = D.5407 == 0;
      goto <D.5404>;
      <D.5403>:
      D.5408 = strncmp ("libdir", line, 6);
      iftmp.4 = D.5408 == 0;
      <D.5404>:
      if (iftmp.4 != 0) goto <D.5409>; else goto <D.5410>;
      <D.5409>:
      monoeg_g_free (libdir);
      D.5399 = line + 6;
      libdir = read_string (D.5399, file);
      goto <D.5411>;
      <D.5410>:
      D.5416 = __strlen_g ("installed");
      if (D.5416 <= 8) goto <D.5413>; else goto <D.5417>;
      <D.5417>:
      if (0 != 0) goto <D.5413>; else goto <D.5414>;
      <D.5413>:
      D.5418 = strcmp ("installed", line);
      iftmp.5 = D.5418 == 0;
      goto <D.5415>;
      <D.5414>:
      D.5419 = strncmp ("installed", line, 9);
      iftmp.5 = D.5419 == 0;
      <D.5415>:
      if (iftmp.5 != 0) goto <D.5420>; else goto <D.5421>;
      <D.5420>:
      monoeg_g_free (installed);
      D.5422 = line + 9;
      installed = read_string (D.5422, file);
      <D.5421>:
      <D.5411>:
      <D.5400>:
      <D.5252>:
      line = fgets (&buf, 512, file);
      if (line != 0B) goto <D.5253>; else goto <D.5254>;
      <D.5254>:
      fclose (file);
      line = 0B;
      if (installed != 0B) goto <D.5425>; else goto <D.5423>;
      <D.5425>:
      D.5426 = strcmp (installed, "no");
      if (D.5426 == 0) goto <D.5427>; else goto <D.5423>;
      <D.5427>:
      {
        char * dir;

        dir = monoeg_g_path_get_dirname (libtool_file);
        if (dlname != 0B) goto <D.5428>; else goto <D.5429>;
        <D.5428>:
        line = monoeg_g_strconcat (dir, "/.libs/", dlname, 0B);
        <D.5429>:
        monoeg_g_free (dir);
      }
      goto <D.5424>;
      <D.5423>:
      if (libdir != 0B) goto <D.5430>; else goto <D.5431>;
      <D.5430>:
      if (dlname != 0B) goto <D.5432>; else goto <D.5433>;
      <D.5432>:
      line = monoeg_g_strconcat (libdir, "/", dlname, 0B);
      <D.5433>:
      <D.5431>:
      <D.5424>:
      monoeg_g_free (dlname);
      monoeg_g_free (libdir);
      monoeg_g_free (installed);
      D.5375 = line;
      return D.5375;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


__attribute__((__gnu_inline__))
__strlen_g (const char * __str)
{
  size_t D.5436;
  long int __ptr.6;
  long int __str.7;
  long int D.5439;
  char * __ptr;
  char * __tmp;

  __ptr = 0B;
  __tmp = __str;
  __asm__ __volatile__("   la    0,0
0: srst  %0,%1
   jo    0b
" : "=&a" __ptr, "=&a" __tmp : "0" __ptr, "1" __tmp : "0", "memory", "cc");
  __ptr.6 = (long int) __ptr;
  __str.7 = (long int) __str;
  D.5439 = __ptr.6 - __str.7;
  D.5436 = (size_t) D.5439;
  return D.5436;
}


read_string (char * p, struct FILE * file)
{
  char D.5441;
  const short unsigned int * * D.5443;
  const short unsigned int * D.5444;
  long unsigned int D.5445;
  long unsigned int D.5446;
  const short unsigned int * D.5447;
  short unsigned int D.5448;
  int D.5449;
  int D.5450;
  char * D.5453;
  char * iftmp.8;
  int D.5463;
  int D.5464;
  long int endp.9;
  long int startp.10;
  long int D.5471;
  unsigned int D.5472;
  unsigned int D.5473;
  long int p.11;
  long int D.5478;
  unsigned int D.5479;
  unsigned int D.5480;
  char * endp;
  char * startp;

  goto <D.5231>;
  <D.5230>:
  p = p + 1;
  <D.5231>:
  D.5441 = *p;
  if (D.5441 != 0) goto <D.5442>; else goto <D.5232>;
  <D.5442>:
  D.5443 = __ctype_b_loc ();
  D.5444 = *D.5443;
  D.5441 = *p;
  D.5445 = (long unsigned int) D.5441;
  D.5446 = D.5445 * 2;
  D.5447 = D.5444 + D.5446;
  D.5448 = *D.5447;
  D.5449 = (int) D.5448;
  D.5450 = D.5449 & 32;
  if (D.5450 != 0) goto <D.5230>; else goto <D.5232>;
  <D.5232>:
  D.5441 = *p;
  if (D.5441 == 0) goto <D.5451>; else goto <D.5452>;
  <D.5451>:
  D.5453 = 0B;
  return D.5453;
  <D.5452>:
  D.5441 = *p;
  if (D.5441 == 61) goto <D.5454>; else goto <D.5455>;
  <D.5454>:
  p = p + 1;
  <D.5455>:
  goto <D.5234>;
  <D.5233>:
  p = p + 1;
  <D.5234>:
  D.5441 = *p;
  if (D.5441 != 0) goto <D.5456>; else goto <D.5235>;
  <D.5456>:
  D.5443 = __ctype_b_loc ();
  D.5444 = *D.5443;
  D.5441 = *p;
  D.5445 = (long unsigned int) D.5441;
  D.5446 = D.5445 * 2;
  D.5447 = D.5444 + D.5446;
  D.5448 = *D.5447;
  D.5449 = (int) D.5448;
  D.5450 = D.5449 & 32;
  if (D.5450 != 0) goto <D.5233>; else goto <D.5235>;
  <D.5235>:
  D.5441 = *p;
  if (D.5441 == 39) goto <D.5457>; else goto <D.5459>;
  <D.5459>:
  D.5441 = *p;
  if (D.5441 == 34) goto <D.5457>; else goto <D.5458>;
  <D.5457>:
  {
    char t;

    t = *p;
    p = p + 1;
    startp = p;
    D.5463 = (int) t;
    D.5464 = __builtin_constant_p (D.5463);
    if (D.5464 != 0) goto <D.5465>; else goto <D.5461>;
    <D.5465>:
    if (t == 0) goto <D.5466>; else goto <D.5461>;
    <D.5466>:
    D.5463 = (int) t;
    iftmp.8 = __rawmemchr (p, D.5463);
    goto <D.5462>;
    <D.5461>:
    D.5463 = (int) t;
    iftmp.8 = __builtin_strchr (p, D.5463);
    <D.5462>:
    endp = iftmp.8;
    if (endp == 0B) goto <D.5467>; else goto <D.5468>;
    <D.5467>:
    D.5453 = 0B;
    return D.5453;
    <D.5468>:
    *endp = 0;
    endp.9 = (long int) endp;
    startp.10 = (long int) startp;
    D.5471 = endp.9 - startp.10;
    D.5472 = (unsigned int) D.5471;
    D.5473 = D.5472 + 1;
    D.5453 = monoeg_g_memdup (startp, D.5473);
    return D.5453;
  }
  <D.5458>:
  D.5441 = *p;
  if (D.5441 == 0) goto <D.5474>; else goto <D.5475>;
  <D.5474>:
  D.5453 = 0B;
  return D.5453;
  <D.5475>:
  startp = p;
  goto <D.5238>;
  <D.5237>:
  p = p + 1;
  <D.5238>:
  D.5441 = *p;
  if (D.5441 != 0) goto <D.5476>; else goto <D.5239>;
  <D.5476>:
  D.5443 = __ctype_b_loc ();
  D.5444 = *D.5443;
  D.5441 = *p;
  D.5445 = (long unsigned int) D.5441;
  D.5446 = D.5445 * 2;
  D.5447 = D.5444 + D.5446;
  D.5448 = *D.5447;
  D.5449 = (int) D.5448;
  D.5450 = D.5449 & 32;
  if (D.5450 == 0) goto <D.5237>; else goto <D.5239>;
  <D.5239>:
  *p = 0;
  p.11 = (long int) p;
  startp.10 = (long int) startp;
  D.5478 = p.11 - startp.10;
  D.5479 = (unsigned int) D.5478;
  D.5480 = D.5479 + 1;
  D.5453 = monoeg_g_memdup (startp, D.5480);
  return D.5453;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__))
fgets (char * restrict __s, int __n, struct FILE * restrict __stream)
{
  long unsigned int D.5482;
  int D.5487;
  char * D.5489;
  long unsigned int D.5490;
  long unsigned int D.5491;
  long unsigned int D.5492;
  long unsigned int D.5495;

  D.5482 = __builtin_object_size (__s, 1);
  if (D.5482 != 18446744073709551615) goto <D.5483>; else goto <D.5484>;
  <D.5483>:
  D.5487 = __builtin_constant_p (__n);
  if (D.5487 == 0) goto <D.5485>; else goto <D.5488>;
  <D.5488>:
  if (__n <= 0) goto <D.5485>; else goto <D.5486>;
  <D.5485>:
  D.5490 = __builtin_object_size (__s, 1);
  D.5489 = __fgets_chk (__s, D.5490, __n, __stream);
  return D.5489;
  <D.5486>:
  D.5491 = (long unsigned int) __n;
  D.5492 = __builtin_object_size (__s, 1);
  if (D.5491 > D.5492) goto <D.5493>; else goto <D.5494>;
  <D.5493>:
  D.5495 = __builtin_object_size (__s, 1);
  D.5489 = __fgets_chk_warn (__s, D.5495, __n, __stream);
  return D.5489;
  <D.5494>:
  <D.5484>:
  D.5489 = __fgets_alias (__s, __n, __stream);
  return D.5489;
}


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

  if (str != 0B) goto <D.5497>; else goto <D.5498>;
  <D.5497>:
  D.5499 = __strdup (str);
  return D.5499;
  <D.5498>:
  D.5499 = 0B;
  return D.5499;
}


__attribute__((visibility ("hidden")))
mono_dl_symbol (struct MonoDl * module, const char * name, void * * symbol)
{
  struct MonoDlFallbackHandler * D.5501;
  void * (*<T46a>) (void *, const char *, char * *, void *) D.5504;
  void * D.5505;
  void * D.5506;
  char * D.5512;
  char * iftmp.12;
  char * D.5518;
  void * sym;
  char * err;

  try
    {
      err = 0B;
      D.5501 = module->dl_fallback;
      if (D.5501 != 0B) goto <D.5502>; else goto <D.5503>;
      <D.5502>:
      D.5501 = module->dl_fallback;
      D.5504 = D.5501->symbol_func;
      D.5505 = module->handle;
      D.5501 = module->dl_fallback;
      D.5506 = D.5501->user_data;
      sym = D.5504 (D.5505, name, &err, D.5506);
      goto <D.5507>;
      <D.5503>:
      D.5505 = module->handle;
      sym = dlsym (D.5505, name);
      <D.5507>:
      if (sym != 0B) goto <D.5508>; else goto <D.5509>;
      <D.5508>:
      if (symbol != 0B) goto <D.5510>; else goto <D.5511>;
      <D.5510>:
      *symbol = sym;
      <D.5511>:
      D.5512 = 0B;
      return D.5512;
      <D.5509>:
      if (symbol != 0B) goto <D.5513>; else goto <D.5514>;
      <D.5513>:
      *symbol = 0B;
      <D.5514>:
      D.5501 = module->dl_fallback;
      if (D.5501 == 0B) goto <D.5516>; else goto <D.5517>;
      <D.5516>:
      D.5518 = dlerror ();
      iftmp.12 = monoeg_strdup (D.5518);
      goto <D.5519>;
      <D.5517>:
      iftmp.12 = err;
      <D.5519>:
      D.5512 = iftmp.12;
      return D.5512;
    }
  finally
    {
      err = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_dl_close (struct MonoDl * module)
{
  void * (*<T46d>) (void *, void *) D.5524;
  void * D.5527;
  void * D.5528;
  struct MonoDlFallbackHandler * dl_fallback;

  dl_fallback = module->dl_fallback;
  if (dl_fallback != 0B) goto <D.5522>; else goto <D.5523>;
  <D.5522>:
  D.5524 = dl_fallback->close_func;
  if (D.5524 != 0B) goto <D.5525>; else goto <D.5526>;
  <D.5525>:
  D.5524 = dl_fallback->close_func;
  D.5527 = module->handle;
  D.5528 = dl_fallback->user_data;
  D.5524 (D.5527, D.5528);
  <D.5526>:
  goto <D.5529>;
  <D.5523>:
  D.5527 = module->handle;
  dlclose (D.5527);
  <D.5529>:
  free (module);
}


__attribute__((visibility ("hidden")))
mono_dl_build_path (const char * directory, const char * name, void * * iter)
{
  char * D.5532;
  void * D.5533;
  long int D.5534;
  long unsigned int D.5540;
  long unsigned int D.5541;
  int D.5547;
  long unsigned int D.5549;
  long unsigned int D.5550;
  int D.5552;
  long unsigned int D.5554;
  int D.5555;
  char * D.5561;
  long unsigned int D.5562;
  sizetype D.5563;
  sizetype D.5564;
  const char * D.5565;
  char D.5569;
  long unsigned int D.5573;
  void * D.5574;
  int idx;
  const char * prefix;
  const char * suffix;
  gboolean first_call;
  int prlen;
  int suffixlen;
  char * res;

  if (iter == 0B) goto <D.5530>; else goto <D.5531>;
  <D.5530>:
  D.5532 = 0B;
  return D.5532;
  <D.5531>:
  D.5533 = *iter;
  D.5534 = (long int) D.5533;
  idx = (int) D.5534;
  if (idx == 0) goto <D.5535>; else goto <D.5536>;
  <D.5535>:
  first_call = 1;
  suffix = "";
  suffixlen = 0;
  goto <D.5537>;
  <D.5536>:
  idx = idx + -1;
  if (idx != 0) goto <D.5538>; else goto <D.5539>;
  <D.5538>:
  D.5532 = 0B;
  return D.5532;
  <D.5539>:
  first_call = 0;
  suffix = &suffixes[idx];
  D.5540 = __strlen_g (suffix);
  suffixlen = (int) D.5540;
  <D.5537>:
  D.5541 = __strlen_g ("lib");
  prlen = (int) D.5541;
  if (prlen != 0) goto <D.5544>; else goto <D.5542>;
  <D.5544>:
  D.5547 = __builtin_constant_p (prlen);
  if (D.5547 != 0) goto <D.5548>; else goto <D.5545>;
  <D.5548>:
  D.5549 = __strlen_g ("lib");
  D.5550 = (long unsigned int) prlen;
  if (D.5549 < D.5550) goto <D.5551>; else goto <D.5545>;
  <D.5551>:
  D.5552 = strcmp (name, "lib");
  if (D.5552 != 0) goto <D.5553>; else goto <D.5542>;
  <D.5553>:
  goto <D.5546>;
  <D.5545>:
  D.5554 = (long unsigned int) prlen;
  D.5555 = strncmp (name, "lib", D.5554);
  if (D.5555 != 0) goto <D.5556>; else goto <D.5542>;
  <D.5556>:
  <D.5546>:
  prefix = "lib";
  goto <D.5543>;
  <D.5542>:
  prefix = "";
  <D.5543>:
  if (first_call != 0) goto <D.5557>; else goto <D.5559>;
  <D.5559>:
  if (suffixlen != 0) goto <D.5560>; else goto <D.5558>;
  <D.5560>:
  D.5561 = strstr (name, suffix);
  D.5562 = __strlen_g (name);
  D.5563 = (sizetype) suffixlen;
  D.5564 = D.5562 - D.5563;
  D.5565 = name + D.5564;
  if (D.5561 == D.5565) goto <D.5557>; else goto <D.5558>;
  <D.5557>:
  suffix = "";
  <D.5558>:
  if (directory != 0B) goto <D.5568>; else goto <D.5566>;
  <D.5568>:
  D.5569 = *directory;
  if (D.5569 != 0) goto <D.5570>; else goto <D.5566>;
  <D.5570>:
  res = monoeg_g_strconcat (directory, "/", prefix, name, suffix, 0B);
  goto <D.5567>;
  <D.5566>:
  res = monoeg_g_strconcat (prefix, name, suffix, 0B);
  <D.5567>:
  idx = idx + 1;
  if (first_call == 0) goto <D.5571>; else goto <D.5572>;
  <D.5571>:
  idx = idx + 1;
  <D.5572>:
  D.5573 = (long unsigned int) idx;
  D.5574 = (void *) D.5573;
  *iter = D.5574;
  D.5532 = res;
  return D.5532;
}


mono_dl_fallback_register (void * (*MonoDlFallbackLoad) (const char *, int, char * *, void *) load_func, void * (*MonoDlFallbackSymbol) (void *, const char *, char * *, void *) symbol_func, void * (*MonoDlFallbackClose) (void *, void *) close_func, void * user_data)
{
  struct MonoDlFallbackHandler * D.5578;
  struct GSList * fallback_handlers.13;
  struct GSList * D.5582;
  struct MonoDlFallbackHandler * handler;

  if (load_func == 0B) goto <D.5576>; else goto <D.5577>;
  <D.5576>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "mono-dl.c", 528, "load_func != NULL");
  D.5578 = 0B;
  return D.5578;
  <D.5577>:
  if (symbol_func == 0B) goto <D.5579>; else goto <D.5580>;
  <D.5579>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "mono-dl.c", 529, "symbol_func != NULL");
  D.5578 = 0B;
  return D.5578;
  <D.5580>:
  handler = monoeg_malloc (32);
  handler->load_func = load_func;
  handler->symbol_func = symbol_func;
  handler->close_func = close_func;
  handler->user_data = user_data;
  fallback_handlers.13 = fallback_handlers;
  D.5582 = monoeg_g_slist_prepend (fallback_handlers.13, handler);
  fallback_handlers = D.5582;
  D.5578 = handler;
  return D.5578;
}


mono_dl_fallback_unregister (struct MonoDlFallbackHandler * handler)
{
  struct GSList * fallback_handlers.14;
  struct GSList * found;

  fallback_handlers.14 = fallback_handlers;
  found = monoeg_g_slist_find (fallback_handlers.14, handler);
  if (found == 0B) goto <D.5585>; else goto <D.5586>;
  <D.5585>:
  return;
  <D.5586>:
  fallback_handlers.14 = fallback_handlers;
  monoeg_g_slist_remove (fallback_handlers.14, handler);
  monoeg_g_free (handler);
}


