123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /* Kernel-side additional module for the VxWorks threading support
- logic for GCC. Written 2002 by Zack Weinberg.
- This file is distributed with GCC, but it is not part of GCC.
- The contents of this file are in the public domain. */
- /* If you are using the Tornado IDE, copy this file to
- $WIND_BASE/target/config/comps/src/gthread_supp.c. Then create a
- file named 10comp_gthread_supp.cdf in target/config/comps/vxWorks
- with the following contents:
- Component INCLUDE_GCC_GTHREAD {
- NAME GCC 3.x gthread support (required by C++)
- CONFIGLETTES gthread_supp.c
- REQUIRES INCLUDE_CPLUS
- INCLUDE_WHEN INCLUDE_CPLUS
- _FOLDER FOLDER_CPLUS
- }
- If you are using command line builds, instead copy this file to
- $WIND_BASE/target/src/config/gthread_supp.c, and add the following
- block to target/src/config/usrExtra.c:
- #ifdef INCLUDE_CPLUS
- #include "../../src/config/gthread_supp.c"
- #endif
- You should now be able to rebuild your application using GCC 3.x. */
- #include <vxWorks.h>
- #include <taskLib.h>
- /* This file provides these routines: */
- extern void *__gthread_get_tsd_data (WIND_TCB *tcb);
- extern void __gthread_set_tsd_data (WIND_TCB *tcb, void *data);
- extern void __gthread_enter_tsd_dtor_context (WIND_TCB *tcb);
- extern void __gthread_leave_tsd_dtor_context (WIND_TCB *tcb);
- /* Set and retrieve the TSD data block for the task TCB.
- Possible choices for TSD_SLOT are:
- reserved1
- reserved2
- spare1
- spare2
- spare3
- spare4
- (these are all fields of the TCB structure; all have type 'int').
- If you find that the slot chosen by default is already used for
- something else, simply change the #define below and recompile this
- file. No other file should reference TSD_SLOT directly. */
- /* WARNING: This code is not 64-bit clean (it assumes that a pointer
- can be held in an 'int' without truncation). As much of the rest
- of VxWorks also makes this assumption, we can't really avoid it. */
- #define TSD_SLOT reserved1
- void *
- __gthread_get_tsd_data (WIND_TCB *tcb)
- {
- return (void *) (tcb->TSD_SLOT);
- }
- void
- __gthread_set_tsd_data (WIND_TCB *tcb, void *data)
- {
- tcb->TSD_SLOT = (int) data;
- }
- /* Enter and leave "TSD destructor context". This is defined as a
- state in which it is safe to call free() from a task delete hook
- on a memory block allocated by the task being deleted.
- For VxWorks 5.x, nothing needs to be done. */
- #if __GNUC__ >= 2
- #define UNUSED __attribute__((unused))
- #else
- #define UNUSED
- #endif
- void
- __gthread_enter_tsd_dtor_context (WIND_TCB *tcb UNUSED)
- {
- }
- void
- __gthread_leave_tsd_dtor_context (WIND_TCB *tcb UNUSED)
- {
- }
|