diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-01-05 20:26:01 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-01-05 20:26:01 +0000 |
commit | 3507c6df7041f19ec33c6056076520849dd59ac3 (patch) | |
tree | 894513e5249272ca6b59e48b0bae503bb410000b /cpukit | |
parent | 2009-01-05 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-3507c6df7041f19ec33c6056076520849dd59ac3.tar.bz2 |
2009-01-05 Joel Sherrill <joel.sherrill@oarcorp.com>
* libcsupport/src/gxx_wrappers.c, posix/include/mqueue.h,
posix/include/rtems/posix/semaphore.h,
posix/inline/rtems/posix/barrier.inl,
posix/inline/rtems/posix/key.inl,
posix/inline/rtems/posix/mqueue.inl,
posix/inline/rtems/posix/rwlock.inl,
posix/inline/rtems/posix/semaphore.inl,
posix/inline/rtems/posix/spinlock.inl,
posix/inline/rtems/posix/timer.inl, posix/src/condget.c,
posix/src/mqueuenametoid.c, posix/src/mutexget.c,
posix/src/semaphorenametoid.c, posix/src/semopen.c,
sapi/src/itronapi.c, sapi/src/posixapi.c: Make changes necessary for
all tests to run on SPARC with 16-bit Ids. This required ensuring
that all POSIX and compilering binding code makes a distinction
between the public Id type (e.g. pthread_t, etc.) and the RTEMS
Object_Id type. All POSIX Object Get routines should not take the
POSIX Id type as the argument. Sixteen bit RTEMS Ids should be placed
into the 32-bits reserved by the POSIX API type in a uniform manner
now. This removed all assumptions that the external Id types in POSIX
and ITRON are the same as the internal Object Id type.
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/ChangeLog | 23 | ||||
-rw-r--r-- | cpukit/libcsupport/src/gxx_wrappers.c | 9 | ||||
-rw-r--r-- | cpukit/posix/include/mqueue.h | 6 | ||||
-rw-r--r-- | cpukit/posix/include/rtems/posix/semaphore.h | 8 | ||||
-rw-r--r-- | cpukit/posix/inline/rtems/posix/barrier.inl | 2 | ||||
-rw-r--r-- | cpukit/posix/inline/rtems/posix/key.inl | 43 | ||||
-rw-r--r-- | cpukit/posix/inline/rtems/posix/mqueue.inl | 9 | ||||
-rw-r--r-- | cpukit/posix/inline/rtems/posix/rwlock.inl | 2 | ||||
-rw-r--r-- | cpukit/posix/inline/rtems/posix/semaphore.inl | 3 | ||||
-rw-r--r-- | cpukit/posix/inline/rtems/posix/spinlock.inl | 2 | ||||
-rw-r--r-- | cpukit/posix/inline/rtems/posix/timer.inl | 4 | ||||
-rw-r--r-- | cpukit/posix/src/condget.c | 15 | ||||
-rw-r--r-- | cpukit/posix/src/mqueuenametoid.c | 7 | ||||
-rw-r--r-- | cpukit/posix/src/mutexget.c | 18 | ||||
-rw-r--r-- | cpukit/posix/src/semaphorenametoid.c | 9 | ||||
-rw-r--r-- | cpukit/posix/src/semopen.c | 16 | ||||
-rw-r--r-- | cpukit/sapi/src/itronapi.c | 9 | ||||
-rw-r--r-- | cpukit/sapi/src/posixapi.c | 13 |
18 files changed, 130 insertions, 68 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 200788d65a..81f4276000 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,5 +1,28 @@ 2009-01-05 Joel Sherrill <joel.sherrill@oarcorp.com> + * libcsupport/src/gxx_wrappers.c, posix/include/mqueue.h, + posix/include/rtems/posix/semaphore.h, + posix/inline/rtems/posix/barrier.inl, + posix/inline/rtems/posix/key.inl, + posix/inline/rtems/posix/mqueue.inl, + posix/inline/rtems/posix/rwlock.inl, + posix/inline/rtems/posix/semaphore.inl, + posix/inline/rtems/posix/spinlock.inl, + posix/inline/rtems/posix/timer.inl, posix/src/condget.c, + posix/src/mqueuenametoid.c, posix/src/mutexget.c, + posix/src/semaphorenametoid.c, posix/src/semopen.c, + sapi/src/itronapi.c, sapi/src/posixapi.c: Make changes necessary for + all tests to run on SPARC with 16-bit Ids. This required ensuring + that all POSIX and compilering binding code makes a distinction + between the public Id type (e.g. pthread_t, etc.) and the RTEMS + Object_Id type. All POSIX Object Get routines should not take the + POSIX Id type as the argument. Sixteen bit RTEMS Ids should be placed + into the 32-bits reserved by the POSIX API type in a uniform manner + now. This removed all assumptions that the external Id types in POSIX + and ITRON are the same as the internal Object Id type. + +2009-01-05 Joel Sherrill <joel.sherrill@oarcorp.com> + * itron/inline/rtems/itron/semaphore.inl: THREAD_STATUS_PROXY_BLOCKING should only be defined in multiprocessing configurations. diff --git a/cpukit/libcsupport/src/gxx_wrappers.c b/cpukit/libcsupport/src/gxx_wrappers.c index ed772eb9d9..81a162fa2f 100644 --- a/cpukit/libcsupport/src/gxx_wrappers.c +++ b/cpukit/libcsupport/src/gxx_wrappers.c @@ -209,7 +209,7 @@ int rtems_gxx_mutex_lock (__gthread_mutex_t *mutex) #ifdef DEBUG_GXX_WRAPPERS printk( "gxx_wrappers: lock mutex=%X\n", *mutex ); #endif - return ( rtems_semaphore_obtain( (rtems_id)*mutex, + return ( rtems_semaphore_obtain( *(rtems_id *)mutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT ) == RTEMS_SUCCESSFUL) ? 0 : -1; } @@ -218,7 +218,7 @@ int rtems_gxx_mutex_destroy (__gthread_mutex_t *mutex) #ifdef DEBUG_GXX_WRAPPERS printk( "gxx_wrappers: destroy mutex=%X\n", *mutex ); #endif - return ( rtems_semaphore_delete((rtems_id)*mutex) + return ( rtems_semaphore_delete(*(rtems_id *)mutex) == RTEMS_SUCCESSFUL) ? 0 : -1; } @@ -227,7 +227,7 @@ int rtems_gxx_mutex_trylock (__gthread_mutex_t *mutex) #ifdef DEBUG_GXX_WRAPPERS printk( "gxx_wrappers: trylock mutex=%X\n", *mutex ); #endif - return (rtems_semaphore_obtain ((rtems_id)*mutex, + return (rtems_semaphore_obtain (*(rtems_id *)mutex, RTEMS_NO_WAIT, 0) == RTEMS_SUCCESSFUL) ? 0 : -1; } @@ -236,7 +236,8 @@ int rtems_gxx_mutex_unlock (__gthread_mutex_t *mutex) #ifdef DEBUG_GXX_WRAPPERS printk( "gxx_wrappers: unlock mutex=%X\n", *mutex ); #endif - return (rtems_semaphore_release( (rtems_id)*mutex ) == RTEMS_SUCCESSFUL) ? 0 :-1; + return (rtems_semaphore_release( *(rtems_id *)mutex ) + == RTEMS_SUCCESSFUL) ? 0 :-1; } void rtems_gxx_recursive_mutex_init(__gthread_recursive_mutex_t *mutex) diff --git a/cpukit/posix/include/mqueue.h b/cpukit/posix/include/mqueue.h index c317d0c7bf..11c1dceafb 100644 --- a/cpukit/posix/include/mqueue.h +++ b/cpukit/posix/include/mqueue.h @@ -34,9 +34,11 @@ extern "C" { */ /** - * Message queue id type + * Message queue id type. + * + * @note Use uint32_t since all POSIX Ids are 32-bit currently. */ -typedef Objects_Id mqd_t; +typedef uint32_t mqd_t; /** * This is the message queue attributes structure. diff --git a/cpukit/posix/include/rtems/posix/semaphore.h b/cpukit/posix/include/rtems/posix/semaphore.h index b57ade41bf..fbd4d7c91c 100644 --- a/cpukit/posix/include/rtems/posix/semaphore.h +++ b/cpukit/posix/include/rtems/posix/semaphore.h @@ -40,6 +40,14 @@ typedef struct { bool linked; uint32_t open_count; CORE_semaphore_Control Semaphore; + /* + * sem_t is 32-bit. If Object_Id is 16-bit, then they are not + * interchangeable. We have to be able to return a pointer to + * a 32-bit form of the 16-bit Id. + */ + #if defined(RTEMS_USE_16_BIT_OBJECT) + sem_t Semaphore_id; + #endif } POSIX_Semaphore_Control; /* diff --git a/cpukit/posix/inline/rtems/posix/barrier.inl b/cpukit/posix/inline/rtems/posix/barrier.inl index 7995f13786..2557f33cd8 100644 --- a/cpukit/posix/inline/rtems/posix/barrier.inl +++ b/cpukit/posix/inline/rtems/posix/barrier.inl @@ -68,7 +68,7 @@ RTEMS_INLINE_ROUTINE POSIX_Barrier_Control *_POSIX_Barrier_Get ( { return (POSIX_Barrier_Control *) _Objects_Get( &_POSIX_Barrier_Information, - *((Objects_Id *)barrier), + (Objects_Id) *barrier, location ); } diff --git a/cpukit/posix/inline/rtems/posix/key.inl b/cpukit/posix/inline/rtems/posix/key.inl index 6fbce5a7ee..c5c6324d06 100644 --- a/cpukit/posix/inline/rtems/posix/key.inl +++ b/cpukit/posix/inline/rtems/posix/key.inl @@ -1,12 +1,11 @@ /** - * @file rtems/posix/key.inl - */ - -/* rtems/posix/key.inl + * @file rtems/posix/key.inl * * This include file contains the static inline implementation of the private * inlined routines for POSIX key's. - * + */ + +/* * COPYRIGHT (c) 1989-1999. * On-Line Applications Research Corporation (OAR). * @@ -24,9 +23,11 @@ #ifndef _RTEMS_POSIX_KEY_INL #define _RTEMS_POSIX_KEY_INL -/*PAGE +/** + * @brief _POSIX_Keys_Allocate * - * _POSIX_Keys_Allocate + * This function allocates a keys control block from + * the inactive chain of free keys control blocks. */ RTEMS_INLINE_ROUTINE POSIX_Keys_Control *_POSIX_Keys_Allocate( void ) @@ -34,11 +35,12 @@ RTEMS_INLINE_ROUTINE POSIX_Keys_Control *_POSIX_Keys_Allocate( void ) return (POSIX_Keys_Control *) _Objects_Allocate( &_POSIX_Keys_Information ); } -/*PAGE +/** + * @brief _POSIX_Keys_Free * - * _POSIX_Keys_Free + * This routine frees a keys control block to the + * inactive chain of free keys control blocks. */ - RTEMS_INLINE_ROUTINE void _POSIX_Keys_Free ( POSIX_Keys_Control *the_key ) @@ -46,25 +48,32 @@ RTEMS_INLINE_ROUTINE void _POSIX_Keys_Free ( _Objects_Free( &_POSIX_Keys_Information, &the_key->Object ); } -/*PAGE +/** + * @brief _POSIX_Keys_Get * - * _POSIX_Keys_Get + * This function maps key IDs to key control blocks. + * If ID corresponds to a local keys, then it returns + * the_key control pointer which maps to ID and location + * is set to OBJECTS_LOCAL. if the keys ID is global and + * resides on a remote node, then location is set to OBJECTS_REMOTE, + * and the_key is undefined. Otherwise, location is set + * to OBJECTS_ERROR and the_key is undefined. */ RTEMS_INLINE_ROUTINE POSIX_Keys_Control *_POSIX_Keys_Get ( - Objects_Id id, + pthread_key_t id, Objects_Locations *location ) { return (POSIX_Keys_Control *) - _Objects_Get( &_POSIX_Keys_Information, id, location ); + _Objects_Get( &_POSIX_Keys_Information, (Objects_Id) id, location ); } -/*PAGE +/** + * @brief _POSIX_Keys_Is_null * - * _POSIX_Keys_Is_null + * This function returns TRUE if the_key is NULL and FALSE otherwise. */ - RTEMS_INLINE_ROUTINE bool _POSIX_Keys_Is_null ( POSIX_Keys_Control *the_key ) diff --git a/cpukit/posix/inline/rtems/posix/mqueue.inl b/cpukit/posix/inline/rtems/posix/mqueue.inl index 22862edf0c..62bc3ce327 100644 --- a/cpukit/posix/inline/rtems/posix/mqueue.inl +++ b/cpukit/posix/inline/rtems/posix/mqueue.inl @@ -105,12 +105,15 @@ RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control *_POSIX_Message_queue_Get ( */ RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control_fd *_POSIX_Message_queue_Get_fd ( - Objects_Id id, + mqd_t id, Objects_Locations *location ) { - return (POSIX_Message_queue_Control_fd *) - _Objects_Get( &_POSIX_Message_queue_Information_fds, id, location ); + return (POSIX_Message_queue_Control_fd *) _Objects_Get( + &_POSIX_Message_queue_Information_fds, + (Objects_Id)id, + location + ); } /*PAGE diff --git a/cpukit/posix/inline/rtems/posix/rwlock.inl b/cpukit/posix/inline/rtems/posix/rwlock.inl index b0410fa104..ac11d35d3c 100644 --- a/cpukit/posix/inline/rtems/posix/rwlock.inl +++ b/cpukit/posix/inline/rtems/posix/rwlock.inl @@ -68,7 +68,7 @@ RTEMS_INLINE_ROUTINE POSIX_RWLock_Control *_POSIX_RWLock_Get ( { return (POSIX_RWLock_Control *) _Objects_Get( &_POSIX_RWLock_Information, - *((Objects_Id *)RWLock), + (Objects_Id) *RWLock, location ); } diff --git a/cpukit/posix/inline/rtems/posix/semaphore.inl b/cpukit/posix/inline/rtems/posix/semaphore.inl index 59917bb081..eb885f1aa0 100644 --- a/cpukit/posix/inline/rtems/posix/semaphore.inl +++ b/cpukit/posix/inline/rtems/posix/semaphore.inl @@ -66,14 +66,13 @@ RTEMS_INLINE_ROUTINE void _POSIX_Semaphore_Namespace_remove ( * * _POSIX_Semaphore_Get */ - RTEMS_INLINE_ROUTINE POSIX_Semaphore_Control *_POSIX_Semaphore_Get ( sem_t *id, Objects_Locations *location ) { return (POSIX_Semaphore_Control *) - _Objects_Get( &_POSIX_Semaphore_Information, *id, location ); + _Objects_Get( &_POSIX_Semaphore_Information, (Objects_Id)*id, location ); } /*PAGE diff --git a/cpukit/posix/inline/rtems/posix/spinlock.inl b/cpukit/posix/inline/rtems/posix/spinlock.inl index 97cdeb97bb..6007258e01 100644 --- a/cpukit/posix/inline/rtems/posix/spinlock.inl +++ b/cpukit/posix/inline/rtems/posix/spinlock.inl @@ -68,7 +68,7 @@ RTEMS_INLINE_ROUTINE POSIX_Spinlock_Control *_POSIX_Spinlock_Get ( { return (POSIX_Spinlock_Control *) _Objects_Get( &_POSIX_Spinlock_Information, - *((Objects_Id *)spinlock), + (Objects_Id) *spinlock, location ); } diff --git a/cpukit/posix/inline/rtems/posix/timer.inl b/cpukit/posix/inline/rtems/posix/timer.inl index 383e65102f..63db10c8ab 100644 --- a/cpukit/posix/inline/rtems/posix/timer.inl +++ b/cpukit/posix/inline/rtems/posix/timer.inl @@ -70,12 +70,12 @@ RTEMS_INLINE_ROUTINE void _POSIX_Timer_Free ( */ RTEMS_INLINE_ROUTINE POSIX_Timer_Control *_POSIX_Timer_Get ( - Objects_Id id, + timer_t id, Objects_Locations *location ) { return (POSIX_Timer_Control *) - _Objects_Get( &_POSIX_Timer_Information, id, location ); + _Objects_Get( &_POSIX_Timer_Information, (Objects_Id) id, location ); } /*PAGE diff --git a/cpukit/posix/src/condget.c b/cpukit/posix/src/condget.c index 03ffebbd09..7a0a8bed85 100644 --- a/cpukit/posix/src/condget.c +++ b/cpukit/posix/src/condget.c @@ -29,20 +29,19 @@ POSIX_Condition_variables_Control *_POSIX_Condition_variables_Get ( Objects_Locations *location ) { - Objects_Id *id = (Objects_Id *)cond; int status; - if ( !id ) { + if ( !cond ) { *location = OBJECTS_ERROR; return (POSIX_Condition_variables_Control *) 0; } - if ( *id == PTHREAD_COND_INITIALIZER ) { + if ( *cond == PTHREAD_COND_INITIALIZER ) { /* * Do an "auto-create" here. */ - status = pthread_cond_init( (pthread_cond_t *)id, 0 ); + status = pthread_cond_init( cond, 0 ); if ( status ) { *location = OBJECTS_ERROR; return (POSIX_Condition_variables_Control *) 0; @@ -52,8 +51,10 @@ POSIX_Condition_variables_Control *_POSIX_Condition_variables_Get ( /* * Now call Objects_Get() */ - - return (POSIX_Condition_variables_Control *) - _Objects_Get( &_POSIX_Condition_variables_Information, *id, location ); + return (POSIX_Condition_variables_Control *)_Objects_Get( + &_POSIX_Condition_variables_Information, + (Objects_Id) *cond, + location + ); } diff --git a/cpukit/posix/src/mqueuenametoid.c b/cpukit/posix/src/mqueuenametoid.c index 06b3964683..fc99638594 100644 --- a/cpukit/posix/src/mqueuenametoid.c +++ b/cpukit/posix/src/mqueuenametoid.c @@ -53,6 +53,7 @@ int _POSIX_Message_queue_Name_to_id( ) { Objects_Name_or_id_lookup_errors status; + Objects_Id the_id; if ( !name ) return EINVAL; @@ -64,7 +65,11 @@ int _POSIX_Message_queue_Name_to_id( return ENAMETOOLONG; status = _Objects_Name_to_id_string( - &_POSIX_Message_queue_Information, name, id ); + &_POSIX_Message_queue_Information, + name, + &the_id + ); + *id = the_id; if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL ) return 0; diff --git a/cpukit/posix/src/mutexget.c b/cpukit/posix/src/mutexget.c index 4a05ddd9a2..5ad33b8c7a 100644 --- a/cpukit/posix/src/mutexget.c +++ b/cpukit/posix/src/mutexget.c @@ -61,12 +61,10 @@ POSIX_Mutex_Control *_POSIX_Mutex_Get ( Objects_Locations *location ) { - Objects_Id *id = (Objects_Id *)mutex; - - ___POSIX_Mutex_Get_support( id, location ); + ___POSIX_Mutex_Get_support( mutex, location ); return (POSIX_Mutex_Control *) - _Objects_Get( &_POSIX_Mutex_Information, *id, location ); + _Objects_Get( &_POSIX_Mutex_Information, (Objects_Id) *mutex, location ); } POSIX_Mutex_Control *_POSIX_Mutex_Get_interrupt_disable ( @@ -75,10 +73,12 @@ POSIX_Mutex_Control *_POSIX_Mutex_Get_interrupt_disable ( ISR_Level *level ) { - Objects_Id *id = (Objects_Id *)mutex; - - ___POSIX_Mutex_Get_support( id, location ); + ___POSIX_Mutex_Get_support( mutex, location ); - return (POSIX_Mutex_Control *) - _Objects_Get_isr_disable( &_POSIX_Mutex_Information, *id, location, level ); + return (POSIX_Mutex_Control *) _Objects_Get_isr_disable( + &_POSIX_Mutex_Information, + (Objects_Id) *mutex, + location, + level + ); } diff --git a/cpukit/posix/src/semaphorenametoid.c b/cpukit/posix/src/semaphorenametoid.c index 4acee37ce6..e550910653 100644 --- a/cpukit/posix/src/semaphorenametoid.c +++ b/cpukit/posix/src/semaphorenametoid.c @@ -36,11 +36,12 @@ */ int _POSIX_Semaphore_Name_to_id( - const char *name, + const char *name, sem_t *id ) { Objects_Name_or_id_lookup_errors status; + Objects_Id the_id; if ( !name ) return EINVAL; @@ -49,7 +50,11 @@ int _POSIX_Semaphore_Name_to_id( return EINVAL; status = _Objects_Name_to_id_string( - &_POSIX_Semaphore_Information, name, (Objects_Id*)id ); + &_POSIX_Semaphore_Information, + name, + &the_id + ); + *id = the_id; if ( status == OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL ) return 0; diff --git a/cpukit/posix/src/semopen.c b/cpukit/posix/src/semopen.c index 02b518f588..f3e857e37a 100644 --- a/cpukit/posix/src/semopen.c +++ b/cpukit/posix/src/semopen.c @@ -53,7 +53,7 @@ sem_t *sem_open( unsigned int value = 0; int status; sem_t the_semaphore_id; - Objects_Id *id; + sem_t *id; POSIX_Semaphore_Control *the_semaphore; Objects_Locations location; @@ -101,9 +101,7 @@ sem_t *sem_open( the_semaphore->open_count += 1; _Thread_Enable_dispatch(); _Thread_Enable_dispatch(); - id = &the_semaphore->Object.id; - return (sem_t *)id; - + goto return_id; } /* @@ -127,6 +125,12 @@ sem_t *sem_open( if ( status == -1 ) return SEM_FAILED; - id = &the_semaphore->Object.id; - return (sem_t *)id; +return_id: + #if defined(RTEMS_USE_16_BIT_OBJECT) + the_semaphore->Semaphore_id = the_semaphore->Object.id; + id = &the_semaphore->Semaphore_id; + #else + id = &the_semaphore->Object.id; + #endif + return id; } diff --git a/cpukit/sapi/src/itronapi.c b/cpukit/sapi/src/itronapi.c index 2e2046fa3b..038c6b14d1 100644 --- a/cpukit/sapi/src/itronapi.c +++ b/cpukit/sapi/src/itronapi.c @@ -56,9 +56,12 @@ Objects_Information *_ITRON_Objects[ OBJECTS_ITRON_CLASSES_LAST + 1 ]; void _ITRON_API_Initialize(void) { - /* XXX need to assert here based on size assumptions */ - - assert( sizeof(ID) == sizeof(Objects_Id) ); + /* + * If there are any type size assumptions in the ITRON API, this is + * the appropriate place to place them. + * + * Currently, there are no none type size assumptions. + */ /* * Install our API Object Management Table and initialize the diff --git a/cpukit/sapi/src/posixapi.c b/cpukit/sapi/src/posixapi.c index bf4728a74b..d1d1e6d0a5 100644 --- a/cpukit/sapi/src/posixapi.c +++ b/cpukit/sapi/src/posixapi.c @@ -60,18 +60,17 @@ Objects_Information *_POSIX_Objects[ OBJECTS_POSIX_CLASSES_LAST + 1 ]; void _POSIX_API_Initialize(void) { - const posix_api_configuration_table *api; - - /* XXX need to assert here based on size assumptions */ - - assert( sizeof(pthread_t) == sizeof(Objects_Id) ); + /* + * If there are any type size assumptions in the POSIX API, this is + * the appropriate place to place them. + * + * Currently, there are no none type size assumptions. + */ /* * Install our API Object Management Table and initialize the * various managers. */ - api = &Configuration_POSIX_API; - _Objects_Information_table[OBJECTS_POSIX_API] = _POSIX_Objects; _POSIX_signals_Manager_Initialization(); |