From 4977bab6ed59f01c73f9c8b9e92298706df9b6d5 Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Mon, 16 Dec 2002 18:23:00 +0000 Subject: Merge basic-improvements-branch to trunk From-SVN: r60174 --- contrib/ChangeLog | 10 +++-- contrib/gthr_supp_vxw_5x.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 contrib/gthr_supp_vxw_5x.c (limited to 'contrib') diff --git a/contrib/ChangeLog b/contrib/ChangeLog index a8adeb3439a..c5f7da03029 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,7 @@ +2002-11-09 Zack Weinberg + + * gthr_supp_vxw_5x.c: New file. + 2002-10-21 Richard Henderson * paranoia.cc (real_c_float::image): Accomodate size of @@ -181,7 +185,7 @@ Mon Jul 23 15:47:19 CEST 2001 Jan Hubicka 2001-06-14 Albert Chin-A-Young - * contrib/gcc_update: Fix timestamp on gcc/f/intdoc.texi. + * contrib/gcc_update: Fix timestamp on gcc/f/intdoc.texi. 2001-06-13 Mark Mitchell @@ -513,7 +517,7 @@ Sun Nov 28 00:41:44 1999 William Bader (william@nscs.fast.net) * test_summary: Replace egcs with gcc. Update e-mail address. 1999-07-05 Gerald Pfeifer - Jerry Quinn + Jerry Quinn * egcs_update (touch_files, apply_patch): New functions. Use them. New command-line option --patch. Split test of local @@ -668,7 +672,7 @@ Wed Aug 12 19:59:36 1998 Gerald Pfeifer * egcs_update: Assigned copyright to FSF. Tue Aug 11 17:55:53 1998 Gerald Pfeifer - Alexandre Oliva + Alexandre Oliva * egcs_update: New switch --nostdflags and documentation enhancements. diff --git a/contrib/gthr_supp_vxw_5x.c b/contrib/gthr_supp_vxw_5x.c new file mode 100644 index 00000000000..6ce288f3eb3 --- /dev/null +++ b/contrib/gthr_supp_vxw_5x.c @@ -0,0 +1,92 @@ +/* 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 +#include + +/* 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) +{ +} -- cgit v1.2.1