Mercurial > hg > CbC > CbC_gcc
comparison contrib/gthr_supp_vxw_5x.c @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /* Kernel-side additional module for the VxWorks threading support | |
2 logic for GCC. Written 2002 by Zack Weinberg. | |
3 | |
4 This file is distributed with GCC, but it is not part of GCC. | |
5 The contents of this file are in the public domain. */ | |
6 | |
7 /* If you are using the Tornado IDE, copy this file to | |
8 $WIND_BASE/target/config/comps/src/gthread_supp.c. Then create a | |
9 file named 10comp_gthread_supp.cdf in target/config/comps/vxWorks | |
10 with the following contents: | |
11 | |
12 Component INCLUDE_GCC_GTHREAD { | |
13 NAME GCC 3.x gthread support (required by C++) | |
14 CONFIGLETTES gthread_supp.c | |
15 REQUIRES INCLUDE_CPLUS | |
16 INCLUDE_WHEN INCLUDE_CPLUS | |
17 _FOLDER FOLDER_CPLUS | |
18 } | |
19 | |
20 If you are using command line builds, instead copy this file to | |
21 $WIND_BASE/target/src/config/gthread_supp.c, and add the following | |
22 block to target/src/config/usrExtra.c: | |
23 | |
24 #ifdef INCLUDE_CPLUS | |
25 #include "../../src/config/gthread_supp.c" | |
26 #endif | |
27 | |
28 You should now be able to rebuild your application using GCC 3.x. */ | |
29 | |
30 #include <vxWorks.h> | |
31 #include <taskLib.h> | |
32 | |
33 /* This file provides these routines: */ | |
34 extern void *__gthread_get_tsd_data (WIND_TCB *tcb); | |
35 extern void __gthread_set_tsd_data (WIND_TCB *tcb, void *data); | |
36 | |
37 extern void __gthread_enter_tsd_dtor_context (WIND_TCB *tcb); | |
38 extern void __gthread_leave_tsd_dtor_context (WIND_TCB *tcb); | |
39 | |
40 /* Set and retrieve the TSD data block for the task TCB. | |
41 | |
42 Possible choices for TSD_SLOT are: | |
43 reserved1 | |
44 reserved2 | |
45 spare1 | |
46 spare2 | |
47 spare3 | |
48 spare4 | |
49 (these are all fields of the TCB structure; all have type 'int'). | |
50 | |
51 If you find that the slot chosen by default is already used for | |
52 something else, simply change the #define below and recompile this | |
53 file. No other file should reference TSD_SLOT directly. */ | |
54 | |
55 /* WARNING: This code is not 64-bit clean (it assumes that a pointer | |
56 can be held in an 'int' without truncation). As much of the rest | |
57 of VxWorks also makes this assumption, we can't really avoid it. */ | |
58 | |
59 #define TSD_SLOT reserved1 | |
60 | |
61 void * | |
62 __gthread_get_tsd_data (WIND_TCB *tcb) | |
63 { | |
64 return (void *) (tcb->TSD_SLOT); | |
65 } | |
66 | |
67 void | |
68 __gthread_set_tsd_data (WIND_TCB *tcb, void *data) | |
69 { | |
70 tcb->TSD_SLOT = (int) data; | |
71 } | |
72 | |
73 /* Enter and leave "TSD destructor context". This is defined as a | |
74 state in which it is safe to call free() from a task delete hook | |
75 on a memory block allocated by the task being deleted. | |
76 For VxWorks 5.x, nothing needs to be done. */ | |
77 | |
78 #if __GNUC__ >= 2 | |
79 #define UNUSED __attribute__((unused)) | |
80 #else | |
81 #define UNUSED | |
82 #endif | |
83 | |
84 void | |
85 __gthread_enter_tsd_dtor_context (WIND_TCB *tcb UNUSED) | |
86 { | |
87 } | |
88 | |
89 void | |
90 __gthread_leave_tsd_dtor_context (WIND_TCB *tcb UNUSED) | |
91 { | |
92 } |