cplusLib.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* cplusLib.c - core library initialization and runtime support */
  2. /* Copyright 1993 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 02c,21jan02,sn   remove call to cplusCtorsLink; static initializers are now 
  8.                  run as a side-effect of including INCLUDE_CTORS_DTORS
  9. 02b,17sep98,ms   removed call to cplusDemanglerInit (so LOADER not forced in)
  10. 02a,10apr98,sn   added call to cplusDemanglerInit
  11. 01l,02apr96,srh  reactivate call to cplusCtorsLink.
  12. 01k,30nov95,srh  remove call to cplusCtorsLink (have developers call
  13.    it themselves).
  14. 01j,19jun95,srh  rename op new/delete intf for g++.
  15. 01i,31oct93,srh  initialized cplusNewHdlMutex
  16. 01h,18jun93,jdi  more doc cleanup.
  17. 01g,03jun93,srh  doc cleanup
  18. 01f,24apr93,srh  undid filename change in 01c; there is no longer
  19.  a monolithic object file.
  20. 01e,23apr93,srh  implemented new force-link/initialization scheme
  21. 01d,21apr93,srh  split out loader functions, putting them in cplusLoad.C
  22. 01c,04feb93,srh  changed name from cplusLib.C so that cplusLib.o could
  23.                  be used for name of monolithic object file.
  24. 01b,02feb93,srh  change nit in modhist.
  25.                  cloned to product cplusLibDoc.C for documentation purposes.
  26. 01a,31jan93,srh  written.
  27. */
  28. /*
  29. DESCRIPTION
  30. This library provides run-time support and shell utilities that support
  31. the development of VxWorks applications in C++.  The run-time support can
  32. be broken into three categories:
  33. .IP - 4
  34. Support for C++ new and delete operators.
  35. .IP -
  36. Support for arrays of C++ objects.
  37. .IP -
  38. Support for initialization and cleanup of static objects.
  39. .LP
  40. Shell utilities are provided for:
  41. .IP - 4
  42. Resolving overloaded C++ function names.
  43. .IP -
  44. Hiding C++ name mangling, with support for terse or complete
  45. name demangling.
  46. .IP -
  47. Manual or automatic invocation of static constructors and destructors.
  48. .LP
  49. The usage of cplusLib is more fully described in the
  50. .I "WindC++ Gateway User's Guide."
  51. */
  52. /* Includes */
  53. #include "vxWorks.h"
  54. #include "cplusLib.h"
  55. #include "semLib.h"
  56. #include "taskLib.h"
  57. /* Defines */
  58. /* Globals */
  59. /* Locals */
  60. LOCAL BOOL   cplusLibInitialized = FALSE;
  61. /* Forward declarations */
  62. /*******************************************************************************
  63. *
  64. * cplusLibMinInit - initialize the minimal C++ library (C++)
  65. *
  66. * This routine initializes the C++ library without forcing unused C++ run-time
  67. * support to be linked with the bootable VxWorks image.  If INCLUDE_CPLUS_MIN
  68. * is defined in configAll.h, cplusLibMinInit() is called automatically from
  69. * the root task, usrRoot(), in usrConfig.c.
  70. *
  71. * RETURNS: OK or ERROR.
  72. */
  73. STATUS cplusLibMinInit (void)
  74.     {
  75.     if (!cplusLibInitialized)
  76. {
  77. cplusLibInitialized = TRUE;
  78. cplusNewHdlMutex = semMCreate (SEM_Q_PRIORITY
  79.        | SEM_DELETE_SAFE
  80.        | SEM_INVERSION_SAFE);
  81. cplusArraysInit ();
  82.         /* 
  83.          * notice that static initializers are run when
  84.          * the INCLUDE_CTORS_DTORS component is initialized
  85.          * rather than here.
  86.          */
  87.   }  
  88.     return OK;
  89.     }
  90. /****************************************************************
  91.  *
  92.  * __pure_virtual_called - oops, no definition for some pure virtual function
  93.  *
  94.  * This function is called when an inheritance chain fails to provide a
  95.  * definition for a pure virtual function. It logs an error message and
  96.  * suspends the calling task.
  97.  *
  98.  * NOMANUAL
  99.  */
  100. void __pure_virtual_called ()
  101.     {
  102.     extern FUNCPTR _func_logMsg;
  103.     if (_func_logMsg != 0)
  104. {
  105. (* _func_logMsg)
  106. ("Task called pure virtual function for which there is no definitionn",
  107.  0, 0, 0, 0, 0, 0);
  108. }
  109.     taskSuspend (0);
  110.     }
  111. void __pure_virtual ()
  112.     {
  113.     __pure_virtual_called ();
  114.     }