cplusLibDoc.c
上传用户:baixin
上传日期:2008-03-13
资源大小:4795k
文件大小:13k
开发平台:

MultiPlatform

  1. /* cplusLib/cplusLibDoc.c - basic run-time support for C++ */
  2. /* Copyright 1993-2002 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 02e,13mar02,fmk  change comments for cplusCtors and cplusDtors
  8. 02d,07dec01,sn   added cplusDemanglerStyleSet
  9. 02c,29oct01,cyr  doc: fix SPR 62767 cplusXtorSet
  10. 02b,30mar99,jdi  doc: removed troff special chars causing refgen trouble.
  11. 02a,14mar99,jdi  added modhist section; switched TUG xref to VPG;
  12.  doc: removed refs to config.h and/or configAll.h (SPR 25663).
  13. 01a,16oct98,fle  created.
  14. */
  15. /*
  16. DESCRIPTION
  17. This library provides run-time support and shell utilities that support
  18. the development of VxWorks applications in C++.  The run-time support can
  19. be broken into three categories:
  20. .IP - 4
  21. Support for C++ new and delete operators.
  22. .IP -
  23. Support for initialization and cleanup of static objects.
  24. .LP
  25. Shell utilities are provided for:
  26. .IP - 4
  27. Resolving overloaded C++ function names.
  28. .IP -
  29. Hiding C++ name mangling, with support for terse or complete
  30. name demangling.
  31. .IP -
  32. Manual or automatic invocation of static constructors and destructors.
  33. .LP
  34. The usage of cplusLib is more fully described in the
  35. .I "VxWorks Programmer's Guide: C++ Development."
  36. .SH "SEE ALSO"
  37. .pG "C++ Development"
  38. */
  39. /*******************************************************************************
  40. *
  41. * cplusCallNewHandler - call the allocation failure handler (C++)
  42. *
  43. * This function provides a procedural-interface to the new-handler.  It
  44. * can be used by user-defined new operators to call the current
  45. * new-handler.  This function is specific to VxWorks and may not be
  46. * available in other C++ environments.
  47. *
  48. * RETURNS: N/A
  49. *
  50. */
  51. extern void cplusCallNewHandler ()
  52.     {
  53.     ...
  54.     }
  55. /*******************************************************************************
  56. *
  57. * cplusCtors - call static constructors (C++)
  58. *
  59. * This function is used to call static constructors under the manual
  60. * strategy (see cplusXtorSet()).  <moduleName> is the name of an
  61. * object module that was "munched" before loading.  If <moduleName> is 0,
  62. * then all static constructors, in all modules loaded by the VxWorks
  63. * module loader, are called.
  64. *
  65. * EXAMPLES
  66. * The following example shows how to initialize the static objects in
  67. * modules called "applx.out" and "apply.out".
  68. *
  69. * .CS
  70. *     -> cplusCtors "applx.out"
  71. *     value = 0 = 0x0
  72. *     -> cplusCtors "apply.out"
  73. *     value = 0 = 0x0
  74. * .CE
  75. * The following example shows how to initialize all the static objects that are
  76. * currently loaded, with a single invocation of cplusCtors():
  77. * .CS
  78. *     -> cplusCtors
  79. *     value = 0 = 0x0
  80. * .CE
  81. *
  82. * WARNING
  83. * cplusCtors() should only be called once per module otherwise unpredictable
  84. * behavior may result.
  85. *
  86. * RETURNS: N/A
  87. *
  88. * SEE ALSO
  89. * cplusXtorSet()
  90. */
  91. extern "C" void cplusCtors
  92.     (                         
  93.     const char *  moduleName  /* name of loaded module */
  94.     )                         
  95.     {
  96.     ...
  97.     }
  98. /*******************************************************************************
  99. *
  100. * cplusCtorsLink - call all linked static constructors (C++)
  101. *
  102. * This function calls constructors for all of the static objects linked
  103. * with a VxWorks bootable image.  When creating bootable applications,
  104. * this function should be called from usrRoot() to initialize all static
  105. * objects.  Correct operation depends on correctly munching the C++
  106. * modules that are linked with VxWorks.
  107. *
  108. * RETURNS: N/A
  109. */
  110. extern "C" void cplusCtorsLink ()
  111.     {
  112.     ...
  113.     }
  114. /*******************************************************************************
  115. *
  116. * cplusDemanglerSet - change C++ demangling mode (C++)
  117. *
  118. * This command sets the C++ demangling mode to <mode>.
  119. * The default mode is 2.
  120. *
  121. * There are three demangling modes, <complete>, <terse>, and <off>.
  122. * These modes are represented by numeric codes:
  123. *
  124. * .TS
  125. * center,tab(|);
  126. * lf3 lf3
  127. * l l.
  128. * Mode     | Code
  129. * _
  130. * off      | 0
  131. * terse    | 1
  132. * complete | 2
  133. * .TE
  134. *
  135. * In complete mode, when C++ function names are printed, the class
  136. * name (if any) is prefixed and the function's parameter type list
  137. * is appended.
  138. *
  139. * In terse mode, only the function name is printed. The class name
  140. * and parameter type list are omitted.
  141. *
  142. * In off mode, the function name is not demangled.
  143. * .SH "EXAMPLES"
  144. * The following example shows how one function name would be printed
  145. * under each demangling mode:
  146. *
  147. * .TS
  148. * center,tab(|);
  149. * lf3 lf3
  150. * l l.
  151. * Mode     | Printed symbol
  152. *_
  153. * off      | _member__5classFPFl_PvPFPv_v
  154. * terse    | _member
  155. * complete | foo::_member(void* (*)(long),void (*)(void*))
  156. * .TE
  157. *
  158. * RETURNS: N/A
  159. */
  160. extern "C" void cplusDemanglerSet
  161.     (          
  162.     int  mode  
  163.     )          
  164.     {
  165.     ...
  166.     }
  167. /*******************************************************************************
  168. *
  169. * cplusDemanglerStyleSet - change C++ demangling style (C++)
  170. *
  171. * This command sets the C++ demangling mode to <style>.
  172. * The available demangler styles are enumerated in demangler.h.
  173. * The default demangling style depends on the toolchain used 
  174. * to build the kernel. For example if the Diab toolchain is 
  175. * used to build the kernel then the default demangler style 
  176. * is DMGL_STYLE_DIAB. 
  177. *
  178. * RETURNS: N/A
  179. */
  180. extern "C" void cplusDemanglerStyleSet
  181.     (          
  182.     DEMANGLER_STYLE style
  183.     )          
  184.     {
  185.     ...
  186.     }
  187. /*******************************************************************************
  188. *
  189. * cplusDtors - call static destructors (C++)
  190. *
  191. * This function is used to call static destructors under the manual
  192. * strategy (see cplusXtorSet()).  <moduleName> is the name of an
  193. * object module that was "munched" before loading.  If <moduleName> is 0,
  194. * then all static destructors, in all modules loaded by the VxWorks
  195. * module loader, are called.
  196. *
  197. * EXAMPLES
  198. * The following example shows how to destroy the static objects in
  199. * modules called "applx.out" and "apply.out":
  200. *
  201. * .CS
  202. *     -> cplusDtors "applx.out"
  203. *     value = 0 = 0x0
  204. *     -> cplusDtors "apply.out"
  205. *     value = 0 = 0x0
  206. * .CE
  207. *
  208. * The following example shows how to destroy all the static objects that are
  209. * currently loaded, with a single invocation of cplusDtors():
  210. *
  211. * .CS
  212. *     -> cplusDtors
  213. *     value = 0 = 0x0
  214. * .CE
  215. *
  216. * WARNING
  217. * cplusDtors() should only be called once per module otherwise unpredictable
  218. * behavior may result.
  219. *
  220. * RETURNS: N/A
  221. *
  222. * SEE ALSO
  223. * cplusXtorSet()
  224. */
  225. extern "C" void cplusDtors
  226.     (                         
  227.     const char *  moduleName  
  228.     )                         
  229.     {
  230.     ...
  231.     }
  232. /*******************************************************************************
  233. *
  234. * cplusDtorsLink - call all linked static destructors (C++)
  235. *
  236. * This function calls destructors for all of the static objects linked
  237. * with a VxWorks bootable image.  When creating bootable applications,
  238. * this function should be called during system shutdown to decommission
  239. * all static objects.  Correct operation depends on correctly munching
  240. * the C++ modules that are linked with VxWorks.
  241. *
  242. * RETURNS: N/A
  243. */
  244. extern "C" void cplusDtorsLink ()
  245.     {
  246.     ...
  247.     }
  248. /*******************************************************************************
  249. *
  250. * cplusLibInit - initialize the C++ library (C++)
  251. *
  252. * This routine initializes the C++ library and forces all C++ run-time support
  253. * to be linked with the bootable VxWorks image.  If the configuration
  254. * macro INCLUDE_CPLUS is defined,
  255. * cplusLibInit() is called automatically from the root task,
  256. * usrRoot(), in usrConfig.c.
  257. *
  258. * RETURNS: OK or ERROR.
  259. */
  260. extern "C" STATUS cplusLibInit (void)
  261.     {
  262.     ...
  263.     }
  264. /*******************************************************************************
  265. *
  266. * cplusXtorSet - change C++ static constructor calling strategy (C++)
  267. * This command sets the C++ static constructor calling strategy
  268. * to <strategy>.  The default strategy is 1.
  269. *
  270. * There are two static constructor calling strategies: <automatic>
  271. * and <manual>.  These modes are represented by numeric codes:
  272. *
  273. * .TS
  274. * center,tab(|);
  275. * lf3 lf3
  276. * l l.
  277. * Strategy   | Code
  278. * _
  279. * manual     | 0
  280. * automatic  | 1
  281. * .TE
  282. *
  283. * Under the manual strategy, a module's static constructors and
  284. * destructors are called by cplusCtors() and cplusDtors(), which are
  285. * themselves invoked manually.
  286. *
  287. * Under the automatic strategy, a module's static constructors are
  288. * called as a side-effect of loading the module using the VxWorks module
  289. * loader.  A module's static destructors are called as a side-effect of
  290. * unloading the module.
  291. * NOTE
  292. * The manual strategy is applicable only to modules that are
  293. * loaded by the VxWorks module loader.  Static constructors and
  294. * destructors contained by modules linked with the VxWorks image
  295. * are called using cplusCtorsLink() and cplusDtorsLink().
  296. * RETURNS: N/A
  297. */
  298. extern "C" void cplusXtorSet
  299.     (              
  300.     int  strategy  
  301.     )              
  302.     {
  303.     ...
  304.     }
  305. /*******************************************************************************
  306. *
  307. * operator;delete - default run-time support for memory deallocation (C++)
  308. *
  309. * This function provides the default implementation of operator delete.
  310. * It returns the memory, previously allocated by operator new, to the
  311. * VxWorks system memory partition.
  312. *
  313. * RETURNS: N/A
  314. */
  315. extern void operator delete
  316.     (            
  317.     void  *pMem  /* pointer to dynamically-allocated object */
  318.     )            
  319.     {
  320.     ...
  321.     }
  322. /*******************************************************************************
  323. *
  324. * operator;new - default run-time support for operator new (C++)
  325. * This function provides the default implementation of operator new.
  326. * It allocates memory from the system memory partition for the
  327. * requested object.  The value, when evaluated, is a pointer of the
  328. * type `pointer-to-'<T> where <T> is the type of the new object.
  329. * If allocation fails a new-handler, if one is defined, is called.
  330. * If the new-handler returns, presumably after attempting to recover
  331. * from the memory allocation failure, allocation is retried.
  332. * If there is no new-handler an exception of type "bad_alloc" is
  333. * thrown.
  334. *
  335. * RETURNS:
  336. * Pointer to new object.
  337. *
  338. * THROWS:
  339. * std::bad_alloc if allocation failed.
  340. */
  341. extern void * operator new 
  342.     (
  343.     size_t n  /* size of object to allocate */
  344.     ) throw (std::bad_alloc)
  345.     {
  346.     ...
  347.     }
  348. /*******************************************************************************
  349. *
  350. * operator;new - default run-time support for operator new (nothrow) (C++)
  351. * This function provides the default implementation of operator new (nothrow).
  352. * It allocates memory from the system memory partition for the
  353. * requested object.  The value, when evaluated, is a pointer of the
  354. * type `pointer-to-'<T> where <T> is the type of the new object.
  355. * If allocation fails, a new-handler, if one is defined, is called.
  356. * If the new-handler returns, presumably after attempting to recover
  357. * from the memory allocation failure, allocation is retried.
  358. * If the new_handler throws a bad_alloc exception, the exception
  359. * is caught and 0 is returned. 
  360. * If allocation fails and there is no new_handler 0 is returned.
  361. *
  362. * RETURNS:
  363. * Pointer to new object or 0 if allocation fails.
  364. *
  365. * INCLUDE FILES: `new'
  366. *
  367. */
  368. extern void * operator new 
  369.     (
  370.     size_t n,             /* size of object to allocate */
  371. const nothrow_t &      /* supply argument of "nothrow" here */
  372.     ) throw ()
  373.     {
  374.     ...
  375.     }
  376. /*******************************************************************************
  377. *
  378. * operator;new - run-time support for operator new with placement (C++)
  379. *
  380. * This function provides the default implementation of the global
  381. * new operator, with support for the placement syntax.
  382. * New-with-placement is used to initialize objects for which memory has
  383. * already been allocated. <pMem> points to the previously allocated memory.
  384. * memory.
  385. *
  386. * RETURNS:
  387. * <pMem>
  388. *
  389. * INCLUDE FILES: `new'
  390. *
  391. */
  392. extern void * operator new
  393.     (               
  394.     size_t n, /* size of object to allocate (unused) */
  395.     void * pMem /* pointer to allocated memory         */
  396.     )               
  397.     {
  398.     ...
  399.     }
  400. /*******************************************************************************
  401. *
  402. * set_new_handler - set new_handler to user-defined function (C++)
  403. *
  404. * This function is used to define the function that will be called
  405. * when operator new cannot allocate memory.
  406. *
  407. * The new_handler acts for all threads in the system;
  408. * you cannot set a different handler for different tasks.
  409. *
  410. * RETURNS: A pointer to the previous value of new_handler.
  411. *
  412. * INCLUDE FILES: `new'
  413. *
  414. */
  415. extern void (*set_new_handler (void(* pNewNewHandler)())) ()
  416.     {
  417.     ...
  418.     }
  419. /*******************************************************************************
  420. *
  421. * set_terminate - set terminate to user-defined function (C++)
  422. *
  423. * This function is used to define the terminate_handler
  424. * which will be called when an uncaught exception is raised.
  425. *
  426. * The terminate_handler acts for all threads in the system;
  427. * you cannot set a different handler for different tasks.
  428. *
  429. * RETURNS: The previous terminate_handler.
  430. *
  431. * INCLUDE FILES: `exception'
  432. */
  433. extern void (*set_terminate (void(* terminate_handler)())) ()
  434.     {
  435.     ...
  436.     }