I guess the CPU Supplement must be updated too.
On Wed, Jan 25, 2017 at 8:35 AM, Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > Since the FP area pointer is passed by reference in > _CPU_Context_Initialize_fp() the optional FP area adjustment via > _CPU_Context_Fp_start() is superfluous. It is also wrong with respect > to memory management, e.g. pointer passed to _Workspace_Free() may be > not the one returned by _Workspace_Allocate(). > > Close #1400. > --- > cpukit/score/cpu/arm/rtems/score/cpu.h | 3 --- > cpukit/score/cpu/bfin/rtems/score/cpu.h | 25 ------------------------- > cpukit/score/cpu/epiphany/rtems/score/cpu.h | 18 ------------------ > cpukit/score/cpu/i386/rtems/score/cpu.h | 3 --- > cpukit/score/cpu/lm32/rtems/score/cpu.h | 27 --------------------------- > cpukit/score/cpu/m32c/rtems/score/cpu.h | 26 -------------------------- > cpukit/score/cpu/m68k/rtems/score/cpu.h | 20 ++------------------ > cpukit/score/cpu/mips/rtems/score/cpu.h | 17 ----------------- > cpukit/score/cpu/moxie/rtems/score/cpu.h | 20 -------------------- > cpukit/score/cpu/no_cpu/rtems/score/cpu.h | 26 -------------------------- > cpukit/score/cpu/or1k/rtems/score/cpu.h | 18 +++++++----------- > cpukit/score/cpu/powerpc/rtems/score/cpu.h | 17 ----------------- > cpukit/score/cpu/sh/rtems/score/cpu.h | 17 ----------------- > cpukit/score/cpu/sparc/rtems/score/cpu.h | 7 ------- > cpukit/score/cpu/sparc64/rtems/score/cpu.h | 8 -------- > cpukit/score/cpu/v850/rtems/score/cpu.h | 28 ---------------------------- > cpukit/score/include/rtems/score/context.h | 16 ---------------- > cpukit/score/src/threadinitialize.c | 1 - > 18 files changed, 9 insertions(+), 288 deletions(-) > > diff --git a/cpukit/score/cpu/arm/rtems/score/cpu.h > b/cpukit/score/cpu/arm/rtems/score/cpu.h > index cdffc9c..9f321ac 100644 > --- a/cpukit/score/cpu/arm/rtems/score/cpu.h > +++ b/cpukit/score/cpu/arm/rtems/score/cpu.h > @@ -458,9 +458,6 @@ void _CPU_Context_Initialize( > #define _CPU_Context_Restart_self( _the_context ) \ > _CPU_Context_restore( (_the_context) ); > > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > #define _CPU_Context_Initialize_fp( _destination ) \ > do { \ > *(*(_destination)) = _CPU_Null_fp_context; \ > diff --git a/cpukit/score/cpu/bfin/rtems/score/cpu.h > b/cpukit/score/cpu/bfin/rtems/score/cpu.h > index cdefedf..7c90fc6 100644 > --- a/cpukit/score/cpu/bfin/rtems/score/cpu.h > +++ b/cpukit/score/cpu/bfin/rtems/score/cpu.h > @@ -734,31 +734,6 @@ void _CPU_Context_Initialize( > #define _CPU_Context_Restart_self( _the_context ) \ > _CPU_Context_restore( (_the_context) ); > > -/** > - * @ingroup CPUContext > - * The purpose of this macro is to allow the initial pointer into > - * a floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - * context area. > - * > - * This is necessary because some FP units are designed to have > - * their context saved as a stack which grows into lower addresses. > - * Other FP units can be saved by simply moving registers into offsets > - * from the base of the context area. Finally some FP units provide > - * a "dump context" instruction which could fill in from high to low > - * or low to high based on the whim of the CPU designers. > - * > - * @param[in] _base is the lowest physical address of the floating point > - * context area > - * @param[in] _offset is the offset into the floating point area > - * > - * Port Specific Information: > - * > - * XXX document implementation including references if appropriate > - */ > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > #define _CPU_Context_Initialize_fp( _destination ) \ > memset( *( _destination ), 0, CPU_CONTEXT_FP_SIZE ); > > diff --git a/cpukit/score/cpu/epiphany/rtems/score/cpu.h > b/cpukit/score/cpu/epiphany/rtems/score/cpu.h > index 55faefa..020d949 100644 > --- a/cpukit/score/cpu/epiphany/rtems/score/cpu.h > +++ b/cpukit/score/cpu/epiphany/rtems/score/cpu.h > @@ -624,24 +624,6 @@ void _CPU_Context_Initialize( > #define _CPU_Context_Restart_self( _the_context ) \ > _CPU_Context_restore( (_the_context) ) > > -/* > - * The purpose of this macro is to allow the initial pointer into > - * a floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - * context area. > - * > - * This is necessary because some FP units are designed to have > - * their context saved as a stack which grows into lower addresses. > - * Other FP units can be saved by simply moving registers into offsets > - * from the base of the context area. Finally some FP units provide > - * a "dump context" instruction which could fill in from high to low > - * or low to high based on the whim of the CPU designers. > - * > - */ > - > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > #define _CPU_Context_Initialize_fp( _destination ) \ > memset( *( _destination ), 0, CPU_CONTEXT_FP_SIZE ); > > diff --git a/cpukit/score/cpu/i386/rtems/score/cpu.h > b/cpukit/score/cpu/i386/rtems/score/cpu.h > index 052e53f..ace26f3 100644 > --- a/cpukit/score/cpu/i386/rtems/score/cpu.h > +++ b/cpukit/score/cpu/i386/rtems/score/cpu.h > @@ -508,9 +508,6 @@ uint32_t _CPU_ISR_Get_level( void ); > } > #endif > > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > #define _CPU_Context_Initialize_fp( _fp_area ) \ > { \ > memcpy( *_fp_area, &_CPU_Null_fp_context, CPU_CONTEXT_FP_SIZE ); \ > diff --git a/cpukit/score/cpu/lm32/rtems/score/cpu.h > b/cpukit/score/cpu/lm32/rtems/score/cpu.h > index 87cfd9e..9d22994 100644 > --- a/cpukit/score/cpu/lm32/rtems/score/cpu.h > +++ b/cpukit/score/cpu/lm32/rtems/score/cpu.h > @@ -749,33 +749,6 @@ extern char _gp[]; > _CPU_Context_restore( (_the_context) ); > > /** > - * @ingroup CPUContext > - * The purpose of this macro is to allow the initial pointer into > - * a floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - * context area. > - * > - * This is necessary because some FP units are designed to have > - * their context saved as a stack which grows into lower addresses. > - * Other FP units can be saved by simply moving registers into offsets > - * from the base of the context area. Finally some FP units provide > - * a "dump context" instruction which could fill in from high to low > - * or low to high based on the whim of the CPU designers. > - * > - * @param[in] _base is the lowest physical address of the floating point > - * context area > - * @param[in] _offset is the offset into the floating point area > - * > - * Port Specific Information: > - * > - * XXX document implementation including references if appropriate > - */ > -#define _CPU_Context_Fp_start( _base, _offset ) > -#if 0 > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > -#endif > - > -/** > * This routine initializes the FP context area passed to it to. > * There are a few standard ways in which to initialize the > * floating point context. The code included for this macro assumes > diff --git a/cpukit/score/cpu/m32c/rtems/score/cpu.h > b/cpukit/score/cpu/m32c/rtems/score/cpu.h > index 8dd8c41..af1c341 100644 > --- a/cpukit/score/cpu/m32c/rtems/score/cpu.h > +++ b/cpukit/score/cpu/m32c/rtems/score/cpu.h > @@ -740,32 +740,6 @@ void _CPU_Context_Restart_self( > ) RTEMS_NO_RETURN; > > /** > - * @ingroup CPUContext > - * > - * The purpose of this macro is to allow the initial pointer into > - * a floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - * context area. > - * > - * This is necessary because some FP units are designed to have > - * their context saved as a stack which grows into lower addresses. > - * Other FP units can be saved by simply moving registers into offsets > - * from the base of the context area. Finally some FP units provide > - * a "dump context" instruction which could fill in from high to low > - * or low to high based on the whim of the CPU designers. > - * > - * @param[in] _base is the lowest physical address of the floating point > - * context area > - * @param[in] _offset is the offset into the floating point area > - * > - * Port Specific Information: > - * > - * XXX document implementation including references if appropriate > - */ > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > -/** > * This routine initializes the FP context area passed to it to. > * There are a few standard ways in which to initialize the > * floating point context. The code included for this macro assumes > diff --git a/cpukit/score/cpu/m68k/rtems/score/cpu.h > b/cpukit/score/cpu/m68k/rtems/score/cpu.h > index 0b9aa2d..ec6fd2e 100644 > --- a/cpukit/score/cpu/m68k/rtems/score/cpu.h > +++ b/cpukit/score/cpu/m68k/rtems/score/cpu.h > @@ -172,12 +172,6 @@ typedef struct { > } _operand2; > } Context_Control_fp; > > - /* > - * This software FP implementation is only for GCC. > - */ > - #define _CPU_Context_Fp_start( _base, _offset ) \ > - ((void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > #define _CPU_Context_Initialize_fp( _fp_area ) \ > { \ > Context_Control_fp *_fp; \ > @@ -234,9 +228,6 @@ typedef struct { > #endif > } Context_Control_fp; > > - #define _CPU_Context_Fp_start( _base, _offset ) \ > - ((void *) _Addresses_Add_offset( (_base), (_offset) )) > - > /* > * The reset value for all context relevant registers except the FP data > * registers is zero. The reset value of the FP data register is NAN. > The > @@ -260,17 +251,10 @@ typedef struct { > uint8_t fp_save_area [M68K_FP_STATE_SIZE + 112]; > } Context_Control_fp; > > - #define _CPU_Context_Fp_start( _base, _offset ) \ > - ( \ > - (void *) _Addresses_Add_offset( \ > - (_base), \ > - (_offset) + CPU_CONTEXT_FP_SIZE - 4 \ > - ) \ > - ) > - > #define _CPU_Context_Initialize_fp( _fp_area ) \ > { \ > - uint32_t *_fp_context = (uint32_t *)*(_fp_area); \ > + uint32_t *_fp_context = _Addresses_Add_offset( \ > + *(_fp_area), CPU_CONTEXT_FP_SIZE - 4); \ > *(--(_fp_context)) = 0; \ > *(_fp_area) = (void *)(_fp_context); \ > } > diff --git a/cpukit/score/cpu/mips/rtems/score/cpu.h > b/cpukit/score/cpu/mips/rtems/score/cpu.h > index 9a45d0b..74afc80 100644 > --- a/cpukit/score/cpu/mips/rtems/score/cpu.h > +++ b/cpukit/score/cpu/mips/rtems/score/cpu.h > @@ -792,23 +792,6 @@ void _CPU_Context_Initialize( > _CPU_Context_restore( (_the_context) ); > > /* > - * The purpose of this macro is to allow the initial pointer into > - * A floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - * context area. > - * > - * This is necessary because some FP units are designed to have > - * their context saved as a stack which grows into lower addresses. > - * Other FP units can be saved by simply moving registers into offsets > - * from the base of the context area. Finally some FP units provide > - * a "dump context" instruction which could fill in from high to low > - * or low to high based on the whim of the CPU designers. > - */ > - > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > -/* > * This routine initializes the FP context area passed to it to. > * There are a few standard ways in which to initialize the > * floating point context. The code included for this macro assumes > diff --git a/cpukit/score/cpu/moxie/rtems/score/cpu.h > b/cpukit/score/cpu/moxie/rtems/score/cpu.h > index b77083d..a8b2263 100644 > --- a/cpukit/score/cpu/moxie/rtems/score/cpu.h > +++ b/cpukit/score/cpu/moxie/rtems/score/cpu.h > @@ -608,26 +608,6 @@ uint32_t _CPU_ISR_Get_level( void ); > #define _CPU_Context_Restart_self( _the_context ) \ > _CPU_Context_restore( (_the_context) ); > > -/* > - * The purpose of this macro is to allow the initial pointer into > - * a floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - * context area. > - * > - * This is necessary because some FP units are designed to have > - * their context saved as a stack which grows into lower addresses. > - * Other FP units can be saved by simply moving registers into offsets > - * from the base of the context area. Finally some FP units provide > - * a "dump context" instruction which could fill in from high to low > - * or low to high based on the whim of the CPU designers. > - * > - * MOXIE Specific Information: > - * > - * XXX > - */ > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) (_base) + (_offset) ) > - > #define _CPU_Context_Initialize_fp( _destination ) \ > memset( *( _destination ), 0, CPU_CONTEXT_FP_SIZE ); > > diff --git a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h > b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h > index 372b01f..62e1a91 100644 > --- a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h > +++ b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h > @@ -876,32 +876,6 @@ uint32_t _CPU_ISR_Get_level( void ); > _CPU_Context_restore( (_the_context) ); > > /** > - * @ingroup CPUContext > - * > - * The purpose of this macro is to allow the initial pointer into > - * a floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - *context area. > - * > - * This is necessary because some FP units are designed to have > - * their context saved as a stack which grows into lower addresses. > - * Other FP units can be saved by simply moving registers into offsets > - * from the base of the context area. Finally some FP units provide > - * a "dump context" instruction which could fill in from high to low > - * or low to high based on the whim of the CPU designers. > - * > - * @param[in] _base is the lowest physical address of the floating point > - * context area > - * @param[in] _offset is the offset into the floating point area > - * > - * Port Specific Information: > - * > - * XXX document implementation including references if appropriate > - */ > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > -/** > * This routine initializes the FP context area passed to it to. > * There are a few standard ways in which to initialize the > * floating point context. The code included for this macro assumes > diff --git a/cpukit/score/cpu/or1k/rtems/score/cpu.h > b/cpukit/score/cpu/or1k/rtems/score/cpu.h > index 4a643c7..3d4a6e0 100644 > --- a/cpukit/score/cpu/or1k/rtems/score/cpu.h > +++ b/cpukit/score/cpu/or1k/rtems/score/cpu.h > @@ -620,10 +620,11 @@ void _CPU_Context_Initialize( > _CPU_Context_restore( (_the_context) ); > > /* > - * The purpose of this macro is to allow the initial pointer into > - * a floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - * context area. > + * This routine is responsible to initialize the FP context. > + * > + * The FP area pointer is passed by reference to allow the initial pointer > + * into a floating point context area (used to save the floating point > + * context) to be at an arbitrary place in the floating point context area. > * > * This is necessary because some FP units are designed to have > * their context saved as a stack which grows into lower addresses. > @@ -631,14 +632,9 @@ void _CPU_Context_Initialize( > * from the base of the context area. Finally some FP units provide > * a "dump context" instruction which could fill in from high to low > * or low to high based on the whim of the CPU designers. > - * > */ > - > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > -#define _CPU_Context_Initialize_fp( _destination ) \ > - memset( *( _destination ), 0, CPU_CONTEXT_FP_SIZE ); > +#define _CPU_Context_Initialize_fp( _fp_area_p ) \ > + memset( *( _fp_area_p ), 0, CPU_CONTEXT_FP_SIZE ) > > /* end of Context handler macros */ > > diff --git a/cpukit/score/cpu/powerpc/rtems/score/cpu.h > b/cpukit/score/cpu/powerpc/rtems/score/cpu.h > index 93d620e..a847667 100644 > --- a/cpukit/score/cpu/powerpc/rtems/score/cpu.h > +++ b/cpukit/score/cpu/powerpc/rtems/score/cpu.h > @@ -831,23 +831,6 @@ void _CPU_Context_Initialize( > _CPU_Context_restore( (_the_context) ); > > /* > - * The purpose of this macro is to allow the initial pointer into > - * a floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - * context area. > - * > - * This is necessary because some FP units are designed to have > - * their context saved as a stack which grows into lower addresses. > - * Other FP units can be saved by simply moving registers into offsets > - * from the base of the context area. Finally some FP units provide > - * a "dump context" instruction which could fill in from high to low > - * or low to high based on the whim of the CPU designers. > - */ > - > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > -/* > * This routine initializes the FP context area passed to it to. > * There are a few standard ways in which to initialize the > * floating point context. The code included for this macro assumes > diff --git a/cpukit/score/cpu/sh/rtems/score/cpu.h > b/cpukit/score/cpu/sh/rtems/score/cpu.h > index 0ad3829..c2b7081 100644 > --- a/cpukit/score/cpu/sh/rtems/score/cpu.h > +++ b/cpukit/score/cpu/sh/rtems/score/cpu.h > @@ -550,23 +550,6 @@ void _CPU_Context_Initialize( > _CPU_Context_restore( (_the_context) ); > > /* > - * The purpose of this macro is to allow the initial pointer into > - * a floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - * context area. > - * > - * This is necessary because some FP units are designed to have > - * their context saved as a stack which grows into lower addresses. > - * Other FP units can be saved by simply moving registers into offsets > - * from the base of the context area. Finally some FP units provide > - * a "dump context" instruction which could fill in from high to low > - * or low to high based on the whim of the CPU designers. > - */ > - > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > -/* > * This routine initializes the FP context area passed to it to. > * There are a few standard ways in which to initialize the > * floating point context. The code included for this macro assumes > diff --git a/cpukit/score/cpu/sparc/rtems/score/cpu.h > b/cpukit/score/cpu/sparc/rtems/score/cpu.h > index a59fc36..7c81f07 100644 > --- a/cpukit/score/cpu/sparc/rtems/score/cpu.h > +++ b/cpukit/score/cpu/sparc/rtems/score/cpu.h > @@ -956,13 +956,6 @@ void _CPU_Context_Initialize( > _CPU_Context_restore( (_the_context) ); > > /** > - * The FP context area for the SPARC is a simple structure and nothing > - * special is required to find the "starting load point" > - */ > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > -/** > * This routine initializes the FP context area passed to it to. > * > * The SPARC allows us to use the simple initialization model > diff --git a/cpukit/score/cpu/sparc64/rtems/score/cpu.h > b/cpukit/score/cpu/sparc64/rtems/score/cpu.h > index 9926ebb..47041e7 100644 > --- a/cpukit/score/cpu/sparc64/rtems/score/cpu.h > +++ b/cpukit/score/cpu/sparc64/rtems/score/cpu.h > @@ -824,14 +824,6 @@ void _CPU_Context_Initialize( > _CPU_Context_restore( (_the_context) ); > > /* > - * The FP context area for the SPARC is a simple structure and nothing > - * special is required to find the "starting load point" > - */ > - > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > - > -/* > * This routine initializes the FP context area passed to it to. > * > * The SPARC allows us to use the simple initialization model > diff --git a/cpukit/score/cpu/v850/rtems/score/cpu.h > b/cpukit/score/cpu/v850/rtems/score/cpu.h > index 6c77f51..d3cdf05 100644 > --- a/cpukit/score/cpu/v850/rtems/score/cpu.h > +++ b/cpukit/score/cpu/v850/rtems/score/cpu.h > @@ -699,34 +699,6 @@ void _CPU_Context_Initialize( > /* XXX this should be possible to remove */ > #if 0 > /** > - * @ingroup CPUContext > - * The purpose of this macro is to allow the initial pointer into > - * a floating point context area (used to save the floating point > - * context) to be at an arbitrary place in the floating point > - * context area. > - * > - * This is necessary because some FP units are designed to have > - * their context saved as a stack which grows into lower addresses. > - * Other FP units can be saved by simply moving registers into offsets > - * from the base of the context area. Finally some FP units provide > - * a "dump context" instruction which could fill in from high to low > - * or low to high based on the whim of the CPU designers. > - * > - * @param[in] _base is the lowest physical address of the floating point > - * context area > - * @param[in] _offset is the offset into the floating point area > - * > - * Port Specific Information: > - * > - * XXX document implementation including references if appropriate > - */ > -#define _CPU_Context_Fp_start( _base, _offset ) \ > - ( (void *) _Addresses_Add_offset( (_base), (_offset) ) ) > -#endif > - > -/* XXX this should be possible to remove */ > -#if 0 > -/** > * This routine initializes the FP context area passed to it to. > * There are a few standard ways in which to initialize the > * floating point context. The code included for this macro assumes > diff --git a/cpukit/score/include/rtems/score/context.h > b/cpukit/score/include/rtems/score/context.h > index 7e59f05..46cb460 100644 > --- a/cpukit/score/include/rtems/score/context.h > +++ b/cpukit/score/include/rtems/score/context.h > @@ -111,22 +111,6 @@ extern "C" { > _CPU_Context_Restart_self( _the_context ) > > /** > - * @brief Return starting address of floating point context. > - * > - * This function returns the starting address of the floating > - * point context save area. It is assumed that the are reserved > - * for the floating point save area is large enough. > - * > - * @param[in] _base is lowest physical address of the floating point > - * context save area. > - * @param[in] _offset is the offset into the floating point area > - * > - * @retval the initial FP context pointer > - */ > -#define _Context_Fp_start( _base, _offset ) \ > - _CPU_Context_Fp_start( (_base), (_offset) ) > - > -/** > * @brief Initialize floating point context area. > * > * This routine initializes the floating point context save > diff --git a/cpukit/score/src/threadinitialize.c > b/cpukit/score/src/threadinitialize.c > index 9ae2acb..5725c6e 100644 > --- a/cpukit/score/src/threadinitialize.c > +++ b/cpukit/score/src/threadinitialize.c > @@ -137,7 +137,6 @@ bool _Thread_Initialize( > fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE ); > if ( !fp_area ) > goto failed; > - fp_area = _Context_Fp_start( fp_area, 0 ); > } > the_thread->fp_context = fp_area; > the_thread->Start.fp_context = fp_area; > -- > 1.8.4.5 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel