Changeset c6eead1 in rtems for cpukit/libdl/rtl.c


Ignore:
Timestamp:
Dec 7, 2016, 6:20:38 AM (5 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
5, master
Children:
3417070d
Parents:
fe7012a0
git-author:
Chris Johns <chrisj@…> (12/07/16 06:20:38)
git-committer:
Chris Johns <chrisj@…> (12/13/16 22:07:16)
Message:

libdl: Add C++ exception support to loaded modules.

This has been tested on SPARC, i386, PowerPC and ARM.

Closes #2767.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libdl/rtl.c

    rfe7012a0 rc6eead1  
    6363 */
    6464static rtems_rtl_data_t* rtl;
     65static bool              rtl_data_init;
    6566
    6667/**
     
    9495      rtems_status_code sc;
    9596      rtems_id          lock;
     97
     98      /*
     99       * We cannot set an error in this code because there is no RTL data to
     100       * hold it.
     101       */
     102
     103      if (rtl_data_init)
     104      {
     105        rtems_libio_unlock ();
     106        return false;
     107      }
     108
     109      rtl_data_init = true;
    96110
    97111      /*
     
    101115      if (!rtl)
    102116      {
     117        rtems_libio_unlock ();
    103118        errno = ENOMEM;
    104119        return false;
     
    121136      {
    122137        free (rtl);
     138        rtems_libio_unlock ();
    123139        return false;
    124140      }
     
    129145        rtems_semaphore_delete (lock);
    130146        free (rtl);
     147        rtems_libio_unlock ();
    131148        return false;
    132149      }
     
    144161        rtems_semaphore_delete (lock);
    145162        free (rtl);
     163        rtems_libio_unlock ();
    146164        return false;
    147165      }
     
    153171        rtems_semaphore_delete (lock);
    154172        free (rtl);
     173        rtems_libio_unlock ();
    155174        return false;
    156175      }
     
    163182        rtems_semaphore_delete (lock);
    164183        free (rtl);
     184        rtems_libio_unlock ();
    165185        return false;
    166186      }
     
    174194        rtems_semaphore_delete (lock);
    175195        free (rtl);
     196        rtems_libio_unlock ();
    176197        return false;
    177198      }
     
    186207        rtems_semaphore_delete (lock);
    187208        free (rtl);
     209        rtems_libio_unlock ();
    188210        return false;
    189211      }
     
    199221        rtems_semaphore_delete (lock);
    200222        free (rtl);
     223        rtems_libio_unlock ();
    201224        return false;
    202225      }
     
    213236        rtems_semaphore_delete (lock);
    214237        free (rtl);
     238        rtems_libio_unlock ();
    215239        return false;
    216240      }
     
    289313
    290314void
    291 rtems_rtl_obj_caches_flush ()
     315rtems_rtl_obj_caches_flush (void)
    292316{
    293317  if (rtl)
     
    439463    {
    440464      rtems_rtl_obj_free (obj);
     465      rtems_rtl_obj_caches_flush ();
    441466      return NULL;
    442467    }
     
    447472    {
    448473      rtems_rtl_obj_free (obj);
     474      rtems_rtl_obj_caches_flush ();
    449475      return NULL;
    450476    }
     477
     478    rtems_rtl_obj_caches_flush ();
    451479
    452480    rtems_rtl_unresolved_resolve ();
     
    515543
    516544    ok = rtems_rtl_obj_unload (obj);
     545
     546    rtems_rtl_obj_free (obj);
     547    rtems_rtl_obj_caches_flush ();
    517548  }
    518549
Note: See TracChangeset for help on using the changeset viewer.