From f773c0122a4412a8846764a35cccb241efa034c2 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 5 Aug 2008 13:32:39 +0000 Subject: 2008-08-04 Sebastian Huber * rtems/include/rtems/rtems/sem.h, rtems/src/semobtain.c: Changed option set type to rtems_option. * score/src/objectgetinfo.c: Check return value of _Objects_API_maximum_class(). * libmisc/monitor/mon-mpci.c, libmisc/monitor/monitor.h, rtems/include/rtems/rtems/message.h, rtems/src/msgmp.c, rtems/src/msgqallocate.c, rtems/src/msgqbroadcast.c, rtems/src/msgqcreate.c, rtems/src/msgqreceive.c, rtems/src/msgqsend.c, rtems/src/msgqurgent.c, score/include/rtems/score/coremsg.h, score/include/rtems/score/mpci.h, score/include/rtems/score/thread.h, score/inline/rtems/score/coremsg.inl, score/src/coremsg.c, score/src/coremsgbroadcast.c, score/src/coremsgseize.c, score/src/coremsgsubmit.c: Removed parameters of _Message_queue_Allocate(). Changed option set type to rtems_option. Changed type of maximum message and packet size to size_t. Changed the input buffer type for message send functions to "const void *". Changed the pointer to the second return argument in the thread wait information to a union. This union can contain a pointer to an immutable or a mutable object. This is somewhat fragile. An alternative would be to add a third pointer for immutable objects, but this would increase the structure size. --- cpukit/ChangeLog | 26 ++++++++++++++++++++++++++ cpukit/libmisc/monitor/mon-mpci.c | 2 +- cpukit/libmisc/monitor/monitor.h | 4 ++-- cpukit/rtems/include/rtems/rtems/message.h | 18 ++++++++---------- cpukit/rtems/include/rtems/rtems/sem.h | 3 ++- cpukit/rtems/src/msgmp.c | 12 ++++++------ cpukit/rtems/src/msgqallocate.c | 10 +++------- cpukit/rtems/src/msgqbroadcast.c | 2 +- cpukit/rtems/src/msgqcreate.c | 4 ++-- cpukit/rtems/src/msgqreceive.c | 2 +- cpukit/rtems/src/msgqsend.c | 2 +- cpukit/rtems/src/msgqurgent.c | 2 +- cpukit/rtems/src/semobtain.c | 2 +- cpukit/score/include/rtems/score/coremsg.h | 10 +++++----- cpukit/score/include/rtems/score/mpci.h | 2 +- cpukit/score/include/rtems/score/thread.h | 22 +++++++++++++++++++--- cpukit/score/inline/rtems/score/coremsg.inl | 4 ++-- cpukit/score/src/coremsg.c | 10 +++++----- cpukit/score/src/coremsgbroadcast.c | 8 ++++---- cpukit/score/src/coremsgseize.c | 20 ++++++++++---------- cpukit/score/src/coremsgsubmit.c | 16 ++++++++-------- cpukit/score/src/objectgetinfo.c | 7 ++++++- 22 files changed, 115 insertions(+), 73 deletions(-) (limited to 'cpukit') diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 0599b8f881..2ca8d79eac 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,29 @@ +2008-08-05 Sebastian Huber + + * rtems/include/rtems/rtems/sem.h, rtems/src/semobtain.c: + Changed option set type to rtems_option. + + * score/src/objectgetinfo.c: Check return value of + _Objects_API_maximum_class(). + + * libmisc/monitor/mon-mpci.c, libmisc/monitor/monitor.h, + rtems/include/rtems/rtems/message.h, rtems/src/msgmp.c, + rtems/src/msgqallocate.c, rtems/src/msgqbroadcast.c, + rtems/src/msgqcreate.c, rtems/src/msgqreceive.c, rtems/src/msgqsend.c, + rtems/src/msgqurgent.c, score/include/rtems/score/coremsg.h, + score/include/rtems/score/mpci.h, score/include/rtems/score/thread.h, + score/inline/rtems/score/coremsg.inl, score/src/coremsg.c, + score/src/coremsgbroadcast.c, score/src/coremsgseize.c, + score/src/coremsgsubmit.c: + Removed parameters of _Message_queue_Allocate(). Changed option set + type to rtems_option. Changed type of maximum message and packet size + to size_t. Changed the input buffer type for message send functions to + "const void *". Changed the pointer to the second return argument in + the thread wait information to a union. This union can contain a + pointer to an immutable or a mutable object. This is somewhat fragile. + An alternative would be to add a third pointer for immutable objects, + but this would increase the structure size. + 2008-08-05 Xudong Guan PR 1212/cpukit diff --git a/cpukit/libmisc/monitor/mon-mpci.c b/cpukit/libmisc/monitor/mon-mpci.c index 733852ac4d..1a4b6bf8b2 100644 --- a/cpukit/libmisc/monitor/mon-mpci.c +++ b/cpukit/libmisc/monitor/mon-mpci.c @@ -131,7 +131,7 @@ rtems_monitor_mpci_dump( length += rtems_monitor_dump_decimal(monitor_mpci->default_timeout); length += rtems_monitor_pad(46, length); - length += rtems_monitor_dump_decimal(monitor_mpci->maximum_packet_size); + length += rtems_monitor_dump_decimal((uint32_t) monitor_mpci->maximum_packet_size); fprintf(stdout,"\n"); length = 0; diff --git a/cpukit/libmisc/monitor/monitor.h b/cpukit/libmisc/monitor/monitor.h index d05e35a3e1..3e23c4d01b 100644 --- a/cpukit/libmisc/monitor/monitor.h +++ b/cpukit/libmisc/monitor/monitor.h @@ -139,7 +139,7 @@ typedef struct { rtems_attribute attributes; uint32_t number_of_pending_messages; uint32_t maximum_pending_messages; - uint32_t maximum_message_size; + size_t maximum_message_size; } rtems_monitor_queue_t; /* @@ -251,7 +251,7 @@ typedef struct { uint32_t maximum_proxies; /* maximum # proxies */ uint32_t default_timeout; /* in ticks */ - uint32_t maximum_packet_size; + size_t maximum_packet_size; rtems_monitor_symbol_t initialization; rtems_monitor_symbol_t get_packet; rtems_monitor_symbol_t return_packet; diff --git a/cpukit/rtems/include/rtems/rtems/message.h b/cpukit/rtems/include/rtems/rtems/message.h index d0118f94e4..ec1a2c5104 100644 --- a/cpukit/rtems/include/rtems/rtems/message.h +++ b/cpukit/rtems/include/rtems/rtems/message.h @@ -46,6 +46,7 @@ extern "C" { #include #include +#include #include #include #include @@ -117,7 +118,7 @@ void _Message_queue_Manager_initialization( rtems_status_code rtems_message_queue_create( rtems_name name, uint32_t count, - uint32_t max_message_size, + size_t max_message_size, rtems_attribute attribute_set, Objects_Id *id ); @@ -164,7 +165,7 @@ rtems_status_code rtems_message_queue_delete( */ rtems_status_code rtems_message_queue_send( Objects_Id id, - void *buffer, + const void *buffer, size_t size ); @@ -179,7 +180,7 @@ rtems_status_code rtems_message_queue_send( */ rtems_status_code rtems_message_queue_urgent( Objects_Id id, - void *buffer, + const void *buffer, size_t size ); @@ -193,7 +194,7 @@ rtems_status_code rtems_message_queue_urgent( */ rtems_status_code rtems_message_queue_broadcast( Objects_Id id, - void *buffer, + const void *buffer, size_t size, uint32_t *count ); @@ -213,7 +214,7 @@ rtems_status_code rtems_message_queue_receive( Objects_Id id, void *buffer, size_t *size, - uint32_t option_set, + rtems_option option_set, rtems_interval timeout ); @@ -256,7 +257,7 @@ rtems_status_code rtems_message_queue_get_number_pending( */ rtems_status_code _Message_queue_Submit( Objects_Id id, - void *buffer, + const void *buffer, size_t size, Message_queue_Submit_types submit_type ); @@ -267,10 +268,7 @@ rtems_status_code _Message_queue_Submit( * This function allocates a message queue control block from * the inactive chain of free message queue control blocks. */ -Message_queue_Control *_Message_queue_Allocate ( - uint32_t count, - uint32_t max_message_size -); +Message_queue_Control *_Message_queue_Allocate (void); /** * @brief Message_queue_Translate_core_message_queue_return_code diff --git a/cpukit/rtems/include/rtems/rtems/sem.h b/cpukit/rtems/include/rtems/rtems/sem.h index f58ef5ec36..8fff8a60ab 100644 --- a/cpukit/rtems/include/rtems/rtems/sem.h +++ b/cpukit/rtems/include/rtems/rtems/sem.h @@ -43,6 +43,7 @@ extern "C" { #endif #include +#include #include #include #include @@ -168,7 +169,7 @@ rtems_status_code rtems_semaphore_delete( */ rtems_status_code rtems_semaphore_obtain( rtems_id id, - uint32_t option_set, + rtems_option option_set, rtems_interval timeout ); diff --git a/cpukit/rtems/src/msgmp.c b/cpukit/rtems/src/msgmp.c index 471296b2a7..e6a156c5f7 100644 --- a/cpukit/rtems/src/msgmp.c +++ b/cpukit/rtems/src/msgmp.c @@ -92,7 +92,7 @@ void _Message_queue_MP_Send_process_packet ( rtems_status_code _Message_queue_MP_Send_request_packet ( Message_queue_MP_Remote_operations operation, Objects_Id message_queue_id, - void *buffer, + const void *buffer, size_t *size_p, rtems_option option_set, rtems_interval timeout @@ -168,8 +168,8 @@ rtems_status_code _Message_queue_MP_Send_request_packet ( the_packet->option_set = option_set; the_packet->size = 0; /* just in case of an error */ - _Thread_Executing->Wait.return_argument = (uint32_t *)buffer; - _Thread_Executing->Wait.return_argument_1 = size_p; + _Thread_Executing->Wait.return_argument_second.immutable_object = buffer; + _Thread_Executing->Wait.return_argument = size_p; return (rtems_status_code) _MPCI_Send_request_packet( _Objects_Get_node(message_queue_id), @@ -322,12 +322,12 @@ void _Message_queue_MP_Process_packet ( the_thread = _MPCI_Process_response( the_packet_prefix ); if (the_packet->Prefix.return_code == RTEMS_SUCCESSFUL) { - *(uint32_t *)the_thread->Wait.return_argument_1 = + *(size_t *) the_thread->Wait.return_argument = the_packet->size; _CORE_message_queue_Copy_buffer( the_packet->Buffer.buffer, - the_thread->Wait.return_argument, + the_thread->Wait.return_argument_second.mutable_object, the_packet->size ); } @@ -395,7 +395,7 @@ void _Message_queue_MP_Process_packet ( the_thread = _MPCI_Process_response( the_packet_prefix ); - *(uint32_t *)the_thread->Wait.return_argument = the_packet->count; + *(uint32_t *) the_thread->Wait.return_argument = the_packet->count; _MPCI_Return_packet( the_packet_prefix ); break; diff --git a/cpukit/rtems/src/msgqallocate.c b/cpukit/rtems/src/msgqallocate.c index 78439c4f66..e5603dd9d8 100644 --- a/cpukit/rtems/src/msgqallocate.c +++ b/cpukit/rtems/src/msgqallocate.c @@ -49,12 +49,8 @@ * the_message_queue - set if successful, NULL otherwise */ -Message_queue_Control *_Message_queue_Allocate ( - uint32_t count, - uint32_t max_message_size -) +Message_queue_Control *_Message_queue_Allocate(void) { - return - (Message_queue_Control *)_Objects_Allocate(&_Message_queue_Information); - + return (Message_queue_Control *) + _Objects_Allocate(&_Message_queue_Information); } diff --git a/cpukit/rtems/src/msgqbroadcast.c b/cpukit/rtems/src/msgqbroadcast.c index 9d56cfd8db..54f27a86bd 100644 --- a/cpukit/rtems/src/msgqbroadcast.c +++ b/cpukit/rtems/src/msgqbroadcast.c @@ -55,7 +55,7 @@ rtems_status_code rtems_message_queue_broadcast( Objects_Id id, - void *buffer, + const void *buffer, size_t size, uint32_t *count ) diff --git a/cpukit/rtems/src/msgqcreate.c b/cpukit/rtems/src/msgqcreate.c index 05d748187b..bf4d2b098a 100644 --- a/cpukit/rtems/src/msgqcreate.c +++ b/cpukit/rtems/src/msgqcreate.c @@ -57,7 +57,7 @@ rtems_status_code rtems_message_queue_create( rtems_name name, uint32_t count, - uint32_t max_message_size, + size_t max_message_size, rtems_attribute attribute_set, Objects_Id *id ) @@ -101,7 +101,7 @@ rtems_status_code rtems_message_queue_create( _Thread_Disable_dispatch(); /* protects object pointer */ - the_message_queue = _Message_queue_Allocate( count, max_message_size ); + the_message_queue = _Message_queue_Allocate(); if ( !the_message_queue ) { _Thread_Enable_dispatch(); diff --git a/cpukit/rtems/src/msgqreceive.c b/cpukit/rtems/src/msgqreceive.c index 8140929081..e55122835a 100644 --- a/cpukit/rtems/src/msgqreceive.c +++ b/cpukit/rtems/src/msgqreceive.c @@ -57,7 +57,7 @@ rtems_status_code rtems_message_queue_receive( Objects_Id id, void *buffer, size_t *size, - uint32_t option_set, + rtems_option option_set, rtems_interval timeout ) { diff --git a/cpukit/rtems/src/msgqsend.c b/cpukit/rtems/src/msgqsend.c index 117666d811..b86d99341a 100644 --- a/cpukit/rtems/src/msgqsend.c +++ b/cpukit/rtems/src/msgqsend.c @@ -58,7 +58,7 @@ rtems_status_code rtems_message_queue_send( Objects_Id id, - void *buffer, + const void *buffer, size_t size ) { diff --git a/cpukit/rtems/src/msgqurgent.c b/cpukit/rtems/src/msgqurgent.c index 6a88d33ff2..60684ebf5c 100644 --- a/cpukit/rtems/src/msgqurgent.c +++ b/cpukit/rtems/src/msgqurgent.c @@ -58,7 +58,7 @@ rtems_status_code rtems_message_queue_urgent( Objects_Id id, - void *buffer, + const void *buffer, size_t size ) { diff --git a/cpukit/rtems/src/semobtain.c b/cpukit/rtems/src/semobtain.c index 8ab51bf3c8..972b12f0ee 100644 --- a/cpukit/rtems/src/semobtain.c +++ b/cpukit/rtems/src/semobtain.c @@ -67,7 +67,7 @@ rtems_status_code rtems_semaphore_obtain( rtems_id id, - uint32_t option_set, + rtems_option option_set, rtems_interval timeout ) { diff --git a/cpukit/score/include/rtems/score/coremsg.h b/cpukit/score/include/rtems/score/coremsg.h index c35574f3fc..f34eecee50 100644 --- a/cpukit/score/include/rtems/score/coremsg.h +++ b/cpukit/score/include/rtems/score/coremsg.h @@ -201,7 +201,7 @@ typedef struct { /** This is the size in bytes of the largest message which may be * sent via this queue. */ - uint32_t maximum_message_size; + size_t maximum_message_size; /** This chain is the set of pending messages. It may be ordered by * message priority or in FIFO order. */ @@ -244,7 +244,7 @@ boolean _CORE_message_queue_Initialize( CORE_message_queue_Control *the_message_queue, CORE_message_queue_Attributes *the_message_queue_attributes, uint32_t maximum_pending_messages, - uint32_t maximum_message_size + size_t maximum_message_size ); /** @@ -326,7 +326,7 @@ void _CORE_message_queue_Flush_waiting_threads( */ CORE_message_queue_Status _CORE_message_queue_Broadcast( CORE_message_queue_Control *the_message_queue, - void *buffer, + const void *buffer, size_t size, Objects_Id id, CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, @@ -360,7 +360,7 @@ CORE_message_queue_Status _CORE_message_queue_Broadcast( */ CORE_message_queue_Status _CORE_message_queue_Submit( CORE_message_queue_Control *the_message_queue, - void *buffer, + const void *buffer, size_t size, Objects_Id id, CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, @@ -396,7 +396,7 @@ void _CORE_message_queue_Seize( CORE_message_queue_Control *the_message_queue, Objects_Id id, void *buffer, - size_t *size, + size_t *size_p, boolean wait, Watchdog_Interval timeout ); diff --git a/cpukit/score/include/rtems/score/mpci.h b/cpukit/score/include/rtems/score/mpci.h index 424875fc8e..09e2aea52c 100644 --- a/cpukit/score/include/rtems/score/mpci.h +++ b/cpukit/score/include/rtems/score/mpci.h @@ -122,7 +122,7 @@ typedef struct { * MPCI layer. This size places a limit on the size of a message * which can be transmitted over this interface. **/ - uint32_t maximum_packet_size; + size_t maximum_packet_size; /** This field points to the MPCI initialization entry point. */ MPCI_initialization_entry initialization; /** This field points to the MPCI get packet entry point. */ diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h index 6057cec5c7..5539dc29e2 100644 --- a/cpukit/score/include/rtems/score/thread.h +++ b/cpukit/score/include/rtems/score/thread.h @@ -209,6 +209,21 @@ typedef struct { */ #define THREAD_STATUS_PROXY_BLOCKING 0x1111111 +/** + * @brief Union type to hold a pointer to an immutable or a mutable object. + * + * The main purpose is to enable passing of pointers to read-only send buffers + * in the message passing subsystem. This approach is somewhat fragile since + * it prevents the compiler to check if the operations on objects are valid + * with respect to the constant qualifier. An alternative would be to add a + * third pointer argument for immutable objects, but this would increase the + * structure size. + */ +typedef union { + void *mutable_object; + const void *immutable_object; +} Thread_Wait_information_Object_argument_type; + /** @brief Thread Blocking Management Information * * This contains the information required to manage a thread while it is @@ -219,10 +234,11 @@ typedef struct { Objects_Id id; /** This field is used to return an integer while when blocked. */ uint32_t count; - /** This field is the first pointer to a user return argument. */ + /** This field is for a pointer to a user return argument. */ void *return_argument; - /** This field is the second pointer to a user return argument. */ - void *return_argument_1; + /** This field is for a pointer to a second user return argument. */ + Thread_Wait_information_Object_argument_type + return_argument_second; /** This field contains any options in effect on this blocking operation. */ uint32_t option; /** This field will contain the return status from a blocking operation. diff --git a/cpukit/score/inline/rtems/score/coremsg.inl b/cpukit/score/inline/rtems/score/coremsg.inl index 3ff0ccc62a..aff4b5f06b 100644 --- a/cpukit/score/inline/rtems/score/coremsg.inl +++ b/cpukit/score/inline/rtems/score/coremsg.inl @@ -32,7 +32,7 @@ RTEMS_INLINE_ROUTINE CORE_message_queue_Status _CORE_message_queue_Send( CORE_message_queue_Control *the_message_queue, - void *buffer, + const void *buffer, size_t size, Objects_Id id, CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, @@ -62,7 +62,7 @@ RTEMS_INLINE_ROUTINE CORE_message_queue_Status _CORE_message_queue_Send( RTEMS_INLINE_ROUTINE CORE_message_queue_Status _CORE_message_queue_Urgent( CORE_message_queue_Control *the_message_queue, - void *buffer, + const void *buffer, size_t size, Objects_Id id, CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, diff --git a/cpukit/score/src/coremsg.c b/cpukit/score/src/coremsg.c index c7fbac609f..8163df96e5 100644 --- a/cpukit/score/src/coremsg.c +++ b/cpukit/score/src/coremsg.c @@ -56,11 +56,11 @@ boolean _CORE_message_queue_Initialize( CORE_message_queue_Control *the_message_queue, CORE_message_queue_Attributes *the_message_queue_attributes, uint32_t maximum_pending_messages, - uint32_t maximum_message_size + size_t maximum_message_size ) { - uint32_t message_buffering_required; - uint32_t allocated_message_size; + size_t message_buffering_required; + size_t allocated_message_size; the_message_queue->maximum_pending_messages = maximum_pending_messages; the_message_queue->number_of_pending_messages = 0; @@ -85,7 +85,7 @@ boolean _CORE_message_queue_Initialize( * Calculate how much total memory is required for message buffering and * check for overflow on the multiplication. */ - message_buffering_required = maximum_pending_messages * + message_buffering_required = (size_t) maximum_pending_messages * (allocated_message_size + sizeof(CORE_message_queue_Buffer_control)); if (message_buffering_required < allocated_message_size) @@ -107,7 +107,7 @@ boolean _CORE_message_queue_Initialize( _Chain_Initialize ( &the_message_queue->Inactive_messages, the_message_queue->message_buffers, - maximum_pending_messages, + (size_t) maximum_pending_messages, allocated_message_size + sizeof( CORE_message_queue_Buffer_control ) ); diff --git a/cpukit/score/src/coremsgbroadcast.c b/cpukit/score/src/coremsgbroadcast.c index 1710e6168e..287a17ab92 100644 --- a/cpukit/score/src/coremsgbroadcast.c +++ b/cpukit/score/src/coremsgbroadcast.c @@ -56,7 +56,7 @@ CORE_message_queue_Status _CORE_message_queue_Broadcast( CORE_message_queue_Control *the_message_queue, - void *buffer, + const void *buffer, size_t size, Objects_Id id, CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, @@ -66,7 +66,7 @@ CORE_message_queue_Status _CORE_message_queue_Broadcast( Thread_Control *the_thread; uint32_t number_broadcasted; Thread_Wait_information *waitp; - uint32_t constrained_size; + size_t constrained_size; /* * If there are pending messages, then there can't be threads @@ -98,11 +98,11 @@ CORE_message_queue_Status _CORE_message_queue_Broadcast( _CORE_message_queue_Copy_buffer( buffer, - waitp->return_argument, + waitp->return_argument_second.mutable_object, constrained_size ); - *(uint32_t *)the_thread->Wait.return_argument_1 = size; + *(size_t *) the_thread->Wait.return_argument = size; #if defined(RTEMS_MULTIPROCESSING) if ( !_Objects_Is_local_id( the_thread->Object.id ) ) diff --git a/cpukit/score/src/coremsgseize.c b/cpukit/score/src/coremsgseize.c index 010f201b78..48c4d7ecb4 100644 --- a/cpukit/score/src/coremsgseize.c +++ b/cpukit/score/src/coremsgseize.c @@ -46,7 +46,7 @@ * the_message_queue - pointer to message queue * id - id of object we are waitig on * buffer - pointer to message buffer to be filled - * size - pointer to the size of buffer to be filled + * size_p - pointer to the size of buffer to be filled * wait - TRUE if wait is allowed, FALSE otherwise * timeout - time to wait for a message * @@ -63,7 +63,7 @@ void _CORE_message_queue_Seize( CORE_message_queue_Control *the_message_queue, Objects_Id id, void *buffer, - size_t *size, + size_t *size_p, boolean wait, Watchdog_Interval timeout ) @@ -81,9 +81,9 @@ void _CORE_message_queue_Seize( the_message_queue->number_of_pending_messages -= 1; _ISR_Enable( level ); - *size = the_message->Contents.size; + *size_p = the_message->Contents.size; _Thread_Executing->Wait.count = the_message->priority; - _CORE_message_queue_Copy_buffer(the_message->Contents.buffer,buffer,*size); + _CORE_message_queue_Copy_buffer(the_message->Contents.buffer,buffer,*size_p); /* * There could be a thread waiting to send a message. If there @@ -106,9 +106,9 @@ void _CORE_message_queue_Seize( */ the_message->priority = the_thread->Wait.count; - the_message->Contents.size = (uint32_t)the_thread->Wait.option; + the_message->Contents.size = (size_t) the_thread->Wait.option; _CORE_message_queue_Copy_buffer( - the_thread->Wait.return_argument, + the_thread->Wait.return_argument_second.immutable_object, the_message->Contents.buffer, the_message->Contents.size ); @@ -128,10 +128,10 @@ void _CORE_message_queue_Seize( } _Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue ); - executing->Wait.queue = &the_message_queue->Wait_queue; - executing->Wait.id = id; - executing->Wait.return_argument = buffer; - executing->Wait.return_argument_1 = (void *)size; + executing->Wait.queue = &the_message_queue->Wait_queue; + executing->Wait.id = id; + executing->Wait.return_argument_second.mutable_object = buffer; + executing->Wait.return_argument = size_p; /* Wait.count will be filled in with the message priority */ _ISR_Enable( level ); diff --git a/cpukit/score/src/coremsgsubmit.c b/cpukit/score/src/coremsgsubmit.c index 2f1ea815ca..9882d1c811 100644 --- a/cpukit/score/src/coremsgsubmit.c +++ b/cpukit/score/src/coremsgsubmit.c @@ -59,7 +59,7 @@ CORE_message_queue_Status _CORE_message_queue_Submit( CORE_message_queue_Control *the_message_queue, - void *buffer, + const void *buffer, size_t size, Objects_Id id, CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, @@ -85,10 +85,10 @@ CORE_message_queue_Status _CORE_message_queue_Submit( if ( the_thread ) { _CORE_message_queue_Copy_buffer( buffer, - the_thread->Wait.return_argument, + the_thread->Wait.return_argument_second.mutable_object, size ); - *(size_t *)the_thread->Wait.return_argument_1 = size; + *(size_t *) the_thread->Wait.return_argument = size; the_thread->Wait.count = submit_type; #if defined(RTEMS_MULTIPROCESSING) @@ -165,11 +165,11 @@ CORE_message_queue_Status _CORE_message_queue_Submit( _ISR_Disable( level ); _Thread_queue_Enter_critical_section( &the_message_queue->Wait_queue ); - executing->Wait.queue = &the_message_queue->Wait_queue; - executing->Wait.id = id; - executing->Wait.return_argument = buffer; - executing->Wait.option = size; - executing->Wait.count = submit_type; + executing->Wait.queue = &the_message_queue->Wait_queue; + executing->Wait.id = id; + executing->Wait.return_argument_second.immutable_object = buffer; + executing->Wait.option = (uint32_t) size; + executing->Wait.count = submit_type; _ISR_Enable( level ); _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout ); diff --git a/cpukit/score/src/objectgetinfo.c b/cpukit/score/src/objectgetinfo.c index c7d7d81b06..033f827891 100644 --- a/cpukit/score/src/objectgetinfo.c +++ b/cpukit/score/src/objectgetinfo.c @@ -24,11 +24,16 @@ Objects_Information *_Objects_Get_information( ) { Objects_Information *info; + int the_class_api_maximum; if ( !_Objects_Is_api_valid( the_api ) ) return NULL; - if ( !the_class || the_class > _Objects_API_maximum_class(the_api) ) + if ( !the_class ) + return NULL; + + the_class_api_maximum = _Objects_API_maximum_class( the_api ); + if ( the_class_api_maximum < 0 || the_class > (uint32_t) the_class_api_maximum ) return NULL; if ( !_Objects_Information_table[ the_api ] ) -- cgit v1.2.3